From 9591687a80fdaca18678f71349f8fb5174f02ad6 Mon Sep 17 00:00:00 2001 From: Sam Keen Date: Wed, 20 Apr 2022 20:37:44 +0100 Subject: [PATCH] Feat/224 move token app into monorepo (#229) * moved TFE into monorepo with some remaining errors * moved TFE into monorepo with some remaining errors - further files * add tailwind config, use etherscan link from toolkit, use web3 from lib * make app compatible with react router 6 * remove vega keys from app state and use from state from lib * comment out crowdin script injection * convert all buttons to use ui toolkit buttons * remove blueprint inputs and selects and replace with ui-toolkit * remove css resets * tidy button styles in wallet replace splash-screen with version from ui-toolkit * various style fixes * tidy up proposal list * add valid key to route children * Set custom port and config for token e2e tests * added env title e2e test * started some styling fixes - nav and home route * Added 'h-auto' to button height regex check * Added 'h-auto' to regex check to allow desired TFE button height * Removed scss and used tailwind for heading component * Woff files not woof :) * Proper nav h1 font size * Wallet card headings * Vega wallet button styles * Set project to use static hosted alpha font (cors being fixed separately) * Eth wallet button styles (unfinished) * Home route styles * Staking route styles and title calculation * Rewards route styles * Vega wallet container button style * Eth wallet disconnect button * Connect dialog title colour and spacing * Splash screen layout * Fixed a bunch of linting errors * Used 'Object.entries' instead of 'Array.from' to create iterable from object in 'use-search-params' * Removed use of 'any' from 'use-search-params' * Better simplification of 'use-search-params' * Removed package.json duplication errors, set most up-to-date version from duplicate options * Elvis for possible undefined in 'use-add-asset-to-wallet' * Removed redundant files * Removed old todo * Removed package.json redundant packages * Added dark class for dialog h1 text colour (required as the current scss gives a wrong default for this element) * update useAddAsset to use new provider * Ensure Jest has required methods * tidy up package.json * remove ts-ignores and use casts for dynamic grid imports * remove unused code from token-e2e * update to latest types from react 17 * Removed vegag wallet not running component as it should be handled by wallet lib * fix typing of contract addresses * type cast network string to Network enum in reduce * remove comment, issue 270 created instead * default associated wallet amounts to zero * update comment * delete unused staking-overview component, add note about withTranslation types to comment * re add proposal dates * enable source maps for build * add rest of env files for networks * remove crowdin script tags from index.html * add testing-library/jest-dom to types in test tsconfig * setup i18n for tests so that translations are used, proposal change table test * delete unused translation files and config * set sentry release to use commit ref * delete dex liquidity pages * remove unused useVegaLPStaking hook * use found id so no non null assertion needed * remove mocked graphql provider * remove commented out breadcrumb component * add comment and link to issue for syntax highlighter changes * fix any types in token-input, add link to ui-toolkit input changes * dont default allowance to zero as it affects rendering logic * fix spacing between callouts on associate page * adjust spacing between callout for association callout * fix alignment of ethereum splash screen * use ethereum connect dialog state for connect dialog * add infura provider as default * change from infura provider to JsonRpcProvider * remove unused Ethereum config * add custom webpack config to inject sentry plugin * delete commented out code for pending stake * add comment linking input elements issue for eth-address-input * move useEagerConnect to libs/wallet, add logic for connecting state so token app can load after connection has succeeded or failed * remove unused storage files, update web3 connector to render children if not actively connected Co-authored-by: Matthew Russell --- apps/static/src/fonts.scss | 4 +- apps/token-e2e/.eslintrc.json | 10 + apps/token-e2e/cypress.json | 14 + apps/token-e2e/project.json | 28 + apps/token-e2e/src/fixtures/example.json | 4 + apps/token-e2e/src/integration/app.spec.ts | 12 + apps/token-e2e/src/support/index.ts | 1 + apps/token-e2e/tsconfig.json | 10 + apps/token/.babelrc | 11 + apps/token/.browserslistrc | 16 + apps/token/.env | 30 + apps/token/.env.devent | 6 + apps/token/.env.mainnet | 6 + apps/token/.env.stagnet1 | 6 + apps/token/.env.stagnet2 | 6 + apps/token/.env.testnet | 6 + apps/token/.eslintrc.json | 18 + apps/token/jest.config.js | 11 + apps/token/postcss.config.js | 10 + apps/token/project.json | 71 + apps/token/src/__generated__/globalTypes.ts | 120 + apps/token/src/app-loader.tsx | 153 + apps/token/src/app.scss | 14 + apps/token/src/app.tsx | 58 + apps/token/src/assets/apple-touch-icon.png | Bin 0 -> 1405 bytes apps/token/src/assets/logo.png | Bin 0 -> 547 bytes apps/token/src/assets/logo192.png | Bin 0 -> 1517 bytes apps/token/src/assets/manifest.json | 20 + apps/token/src/assets/robots.txt | 3 + .../add-locked-token/add-locked-token.scss | 22 + .../add-locked-token/add-locked-token.tsx | 48 + .../src/components/add-locked-token/index.tsx | 1 + .../add-token-button/add-token-button.tsx | 68 + .../src/components/add-token-button/index.tsx | 1 + .../src/components/app-banner/app-banner.scss | 19 + .../src/components/app-banner/app-banner.tsx | 24 + apps/token/src/components/app-banner/index.ts | 1 + .../src/components/app-footer/app-footer.scss | 12 + .../src/components/app-footer/app-footer.tsx | 24 + apps/token/src/components/app-footer/index.ts | 1 + .../balance-manager/balance-manager.tsx | 70 + .../src/components/balance-manager/index.ts | 1 + .../bullet-header/bullet-header.scss | 20 + .../bullet-header/bullet-header.tsx | 17 + .../src/components/bullet-header/index.ts | 1 + .../connected-vega-key.scss | 5 + .../components/connected-vega-key/index.tsx | 17 + .../country-selector/country-data.js | 1004 ++++++ .../country-selector/country-selector.tsx | 65 + .../src/components/country-selector/index.ts | 1 + .../epoch-countdown/epoch-countdown.scss | 50 + .../epoch-countdown/epoch-countdown.tsx | 93 + .../src/components/epoch-countdown/index.tsx | 1 + .../eth-connect-prompt/eth-connect-promp.tsx | 33 + .../components/eth-connect-prompt/index.ts | 1 + .../eth-wallet-container.scss | 10 + .../eth-wallet-container.tsx | 42 + .../components/eth-wallet-container/index.ts | 1 + .../src/components/eth-wallet/eth-wallet.scss | 25 + .../src/components/eth-wallet/eth-wallet.tsx | 244 ++ .../token/src/components/eth-wallet/index.tsx | 1 + .../graphql-provider/graphql-provider.tsx | 12 + .../src/components/graphql-provider/index.ts | 1 + apps/token/src/components/heading/heading.tsx | 15 + apps/token/src/components/heading/index.ts | 1 + apps/token/src/components/icons/error.tsx | 8 + apps/token/src/components/icons/ethereum.tsx | 16 + apps/token/src/components/icons/hand-up.tsx | 10 + apps/token/src/components/icons/icons.scss | 4 + apps/token/src/components/icons/index.ts | 6 + apps/token/src/components/icons/tick.tsx | 9 + .../src/components/key-value-table/index.tsx | 1 + .../key-value-table/key-value-table.scss | 85 + .../key-value-table/key-value-table.test.tsx | 66 + .../key-value-table/key-value-table.tsx | 58 + apps/token/src/components/loader/index.ts | 1 + apps/token/src/components/loader/loader.scss | 20 + apps/token/src/components/loader/loader.tsx | 35 + .../src/components/locked-progress/index.ts | 1 + .../locked-progress/locked-progress.scss | 59 + .../locked-progress/locked-progress.tsx | 98 + apps/token/src/components/modal/index.ts | 1 + apps/token/src/components/modal/modal.scss | 59 + apps/token/src/components/modal/modal.tsx | 15 + apps/token/src/components/nav/index.ts | 1 + apps/token/src/components/nav/nav.scss | 212 ++ apps/token/src/components/nav/nav.tsx | 219 ++ .../page-templates/template-sidebar.scss | 53 + .../page-templates/template-sidebar.tsx | 24 + .../src/components/splash-error/index.ts | 1 + .../components/splash-error/splash-error.scss | 23 + .../components/splash-error/splash-error.tsx | 16 + .../src/components/splash-loader/index.ts | 1 + .../splash-loader/splash-loader.scss | 22 + .../splash-loader/splash-loader.tsx | 32 + .../components/staking-method-radio/index.tsx | 39 + .../src/components/stateful-button/index.ts | 1 + .../stateful-button/stateful-button.scss | 12 + .../stateful-button/stateful-button.tsx | 11 + .../components/syntax-highlighter/index.tsx | 1 + .../syntax-highlighter.test.tsx | 11 + .../syntax-highlighter/syntax-highlighter.tsx | 36 + .../src/components/token-input/index.tsx | 1 + .../components/token-input/token-input.scss | 35 + .../components/token-input/token-input.tsx | 190 + .../components/transaction-button/index.ts | 1 + .../transaction-button.scss | 57 + .../transaction-button/transaction-button.tsx | 147 + .../components/transaction-callout/index.ts | 1 + .../transaction-callout.tsx | 60 + .../transaction-complete.tsx | 32 + .../transaction-callout/transaction-error.tsx | 31 + .../transaction-pending.tsx | 46 + .../transaction-requested.tsx | 13 + .../components/transactions-modal/index.ts | 1 + .../transactions-modal.scss | 24 + .../transactions-modal/transactions-modal.tsx | 107 + .../components/vega-wallet-container/index.ts | 1 + .../vega-wallet-container.tsx | 40 + .../components/vega-wallet-dialogs/index.ts | 1 + .../vega-wallet-dialogs.tsx | 34 + .../vega-wallet/__generated__/Delegations.ts | 139 + .../__generated__/PartyDelegations.ts | 52 + .../vega-wallet/download-wallet-prompt.tsx | 32 + .../token/src/components/vega-wallet/hooks.ts | 233 ++ .../token/src/components/vega-wallet/index.ts | 1 + .../components/vega-wallet/vega-wallet.scss | 43 + .../components/vega-wallet/vega-wallet.tsx | 200 ++ .../token/src/components/wallet-card/index.ts | 1 + .../components/wallet-card/wallet-card.scss | 145 + .../components/wallet-card/wallet-card.tsx | 154 + .../src/components/web3-connector/index.ts | 1 + .../web3-connector/web3-connector.tsx | 82 + apps/token/src/config/colors.ts | 24 + apps/token/src/config/ethereum.ts | 30 + apps/token/src/config/flags.ts | 11 + apps/token/src/config/index.ts | 6 + apps/token/src/config/links.ts | 15 + apps/token/src/config/network-params.ts | 21 + apps/token/src/config/vega.ts | 211 ++ .../contexts/app-state/app-state-context.ts | 210 ++ .../contexts/app-state/app-state-provider.tsx | 165 + .../contexts/contracts/contracts-context.ts | 30 + .../contexts/contracts/contracts-provider.tsx | 104 + apps/token/src/favicon.ico | Bin 0 -> 1150 bytes .../src/hooks/__generated__/Erc20Approval.ts | 48 + .../src/hooks/__generated__/NetworkParams.ts | 27 + .../src/hooks/__generated__/WithdrawalPoll.ts | 93 + .../src/hooks/__mocks__/tranches-mock.ts | 666 ++++ .../token/src/hooks/__mocks__/use-tranches.ts | 23 + apps/token/src/hooks/transaction-reducer.ts | 153 + .../src/hooks/use-add-asset-to-wallet.ts | 59 + apps/token/src/hooks/use-animate-value.ts | 57 + apps/token/src/hooks/use-copy-to-clipboard.ts | 38 + apps/token/src/hooks/use-create-withdrawal.ts | 143 + apps/token/src/hooks/use-document-title.ts | 13 + .../src/hooks/use-erc-poll20-approval.ts | 63 + apps/token/src/hooks/use-ethereum-config.ts | 37 + apps/token/src/hooks/use-fetch.ts | 95 + .../hooks/use-get-association-breakdown.ts | 40 + .../hooks/use-get-user-tranche-balances.ts | 56 + apps/token/src/hooks/use-network-param.tsx | 27 + .../src/hooks/use-pending-transactions.ts | 13 + apps/token/src/hooks/use-previous.ts | 11 + .../hooks/use-refresh-associated-balances.ts | 31 + apps/token/src/hooks/use-refresh-balances.ts | 48 + apps/token/src/hooks/use-search-params.ts | 10 + apps/token/src/hooks/use-tranches.ts | 29 + apps/token/src/hooks/use-transaction.ts | 129 + apps/token/src/i18n/index.ts | 33 + apps/token/src/i18n/translations/dev.json | 544 +++ apps/token/src/images/back.png | Bin 0 -> 161 bytes apps/token/src/images/banner.png | Bin 0 -> 612986 bytes apps/token/src/images/clouds.png | Bin 0 -> 130871 bytes apps/token/src/images/token-no-icon.png | Bin 0 -> 4950 bytes apps/token/src/images/vega_black.png | Bin 0 -> 1681 bytes apps/token/src/images/vega_vesting.png | Bin 0 -> 19040 bytes apps/token/src/images/vega_white.png | Bin 0 -> 805 bytes apps/token/src/index.html | 37 + .../src/lib/__mocks__/generate-tranche.ts | 21 + apps/token/src/lib/abbreviate-number.ts | 11 + apps/token/src/lib/apollo-client.ts | 169 + apps/token/src/lib/ascii-to-hex.ts | 17 + apps/token/src/lib/bignumber.ts | 5 + apps/token/src/lib/client.graphql | 37 + apps/token/src/lib/date-formats.ts | 2 + apps/token/src/lib/decimals.test.ts | 20 + apps/token/src/lib/decimals.ts | 11 + apps/token/src/lib/deterministic-shuffle.ts | 36 + apps/token/src/lib/format-number.ts | 7 + apps/token/src/lib/get-data-node-url.ts | 17 + apps/token/src/lib/sig-to-id.test.ts | 9 + apps/token/src/lib/sig-to-id.ts | 18 + apps/token/src/lib/truncate-middle.ts | 7 + apps/token/src/lib/type-helpers.ts | 3 + .../src/lib/type-policies/proposal.test.tsx | 64 + apps/token/src/lib/type-policies/proposal.ts | 17 + apps/token/src/lib/vega-connectors.ts | 7 + .../lib/vega-wallet/vega-wallet-service.ts | 304 ++ .../src/lib/vega-wallet/vega-wallet-types.ts | 3 + apps/token/src/lib/web3-connectors.ts | 35 + apps/token/src/lib/web3-utils.ts | 46 + apps/token/src/main.tsx | 50 + apps/token/src/polyfills.ts | 7 + apps/token/src/react-app-env.d.ts | 1 + apps/token/src/report-web-vitals.ts | 16 + apps/token/src/routes/claim/claim-error.tsx | 12 + apps/token/src/routes/claim/claim-flow.scss | 10 + apps/token/src/routes/claim/claim-flow.tsx | 213 ++ .../routes/claim/claim-form/claim-form.tsx | 82 + .../src/routes/claim/claim-form/index.ts | 1 + apps/token/src/routes/claim/claim-info.tsx | 56 + .../src/routes/claim/claim-reducer.test.ts | 27 + apps/token/src/routes/claim/claim-reducer.ts | 179 + .../src/routes/claim/claim-restricted.tsx | 11 + .../claim/claim-step-1/claim-step-1.tsx | 45 + .../src/routes/claim/claim-step-1/index.ts | 1 + .../claim/claim-step-2/claim-step-2.tsx | 48 + .../src/routes/claim/claim-step-2/index.ts | 1 + apps/token/src/routes/claim/claim.tsx | 74 + apps/token/src/routes/claim/code-used.tsx | 14 + apps/token/src/routes/claim/complete.tsx | 55 + apps/token/src/routes/claim/expired.tsx | 16 + apps/token/src/routes/claim/hooks.ts | 15 + apps/token/src/routes/claim/index.tsx | 57 + .../routes/claim/lib/is-restricted.test.ts | 29 + .../src/routes/claim/lib/is-restricted.ts | 19 + .../routes/claim/target-address-mismatch.tsx | 36 + .../src/routes/claim/targeted-claim/index.ts | 1 + .../claim/targeted-claim/targeted-claim.tsx | 84 + .../src/routes/claim/tranche-not-found.tsx | 12 + .../routes/claim/untargeted-claim/index.ts | 1 + .../untargeted-claim/untargeted-claim.tsx | 118 + apps/token/src/routes/claim/verifying.tsx | 19 + apps/token/src/routes/contracts/index.tsx | 20 + .../__generated__/ProposalFields.ts | 286 ++ .../current-proposal-state.scss | 15 + .../current-proposal-state.tsx | 27 + .../current-proposal-state/index.tsx | 1 + .../current-proposal-status.scss | 11 + .../current-proposal-status.tsx | 101 + .../current-proposal-status/index.tsx | 1 + .../proposal-change-table/index.tsx | 1 + .../proposal-change-table.test.tsx | 93 + .../proposal-change-table.tsx | 79 + .../components/proposal-terms-json/index.tsx | 1 + .../proposal-terms-json.tsx | 17 + .../components/proposal-votes-table/index.tsx | 1 + .../proposal-votes-table.tsx | 99 + .../governance/components/proposal/index.tsx | 1 + .../components/proposal/proposal.tsx | 29 + .../components/proposals-list/index.tsx | 1 + .../proposals-list/proposals-list.tsx | 82 + .../vote-details/__generated__/VoteButtons.ts | 40 + .../components/vote-details/index.tsx | 2 + .../components/vote-details/use-user-vote.tsx | 128 + .../components/vote-details/vote-buttons.scss | 16 + .../components/vote-details/vote-buttons.tsx | 185 + .../components/vote-details/vote-details.scss | 80 + .../components/vote-details/vote-details.tsx | 123 + .../vote-details/vote-progress.scss | 23 + .../components/vote-details/vote-progress.tsx | 30 + .../components/vote-details/vote-types.ts | 6 + .../src/routes/governance/hooks/index.tsx | 1 + .../governance/hooks/use-vote-information.ts | 180 + apps/token/src/routes/governance/index.tsx | 12 + .../routes/governance/proposal-fragment.ts | 84 + .../proposal/__generated__/Proposal.ts | 297 ++ .../src/routes/governance/proposal/index.tsx | 1 + .../proposal/proposal-container.tsx | 81 + .../proposals/__generated__/Proposals.ts | 293 ++ .../src/routes/governance/proposals/index.tsx | 1 + .../proposals/proposals-container.tsx | 66 + .../test-helpers/generate-proposals.ts | 119 + .../src/routes/home/__generated__/NodeData.ts | 24 + apps/token/src/routes/home/home.scss | 10 + apps/token/src/routes/home/index.tsx | 134 + .../src/routes/home/token-details/index.tsx | 1 + .../token-details-circulating.test.ts | 35 + .../token-details-circulating.tsx | 44 + .../home/token-details/token-details.scss | 5 + .../home/token-details/token-details.tsx | 62 + apps/token/src/routes/index.tsx | 77 + apps/token/src/routes/not-found/index.tsx | 19 + apps/token/src/routes/not-permitted/index.tsx | 17 + .../home/redemption-information.scss | 5 + .../home/redemption-information.tsx | 131 + .../routes/redemption/home/vesting-table.scss | 46 + .../routes/redemption/home/vesting-table.tsx | 94 + apps/token/src/routes/redemption/index.tsx | 25 + .../routes/redemption/redemption-reducer.ts | 38 + .../src/routes/redemption/redemption.tsx | 96 + .../src/routes/redemption/tranche-item.scss | 48 + .../src/routes/redemption/tranche-item.tsx | 80 + .../src/routes/redemption/tranche-table.scss | 19 + .../src/routes/redemption/tranche-table.tsx | 127 + .../src/routes/redemption/tranche/index.tsx | 140 + .../rewards/home/__generated__/Epoch.ts | 43 + .../rewards/home/__generated__/Rewards.ts | 159 + apps/token/src/routes/rewards/home/index.scss | 16 + apps/token/src/routes/rewards/home/index.tsx | 164 + .../src/routes/rewards/home/reward-info.scss | 8 + .../src/routes/rewards/home/reward-info.tsx | 149 + apps/token/src/routes/rewards/index.tsx | 11 + apps/token/src/routes/router-config.tsx | 190 + .../src/routes/staking/__generated__/Nodes.ts | 105 + .../staking/__generated__/PartyDelegations.ts | 65 + .../routes/staking/__generated__/Staking.ts | 196 + .../__generated__/PartyStakeLinkings.ts | 54 + .../staking/associate/associate-info.tsx | 18 + .../associate/associate-page-container.tsx | 44 + .../associate/associate-page-no-vega.tsx | 16 + .../staking/associate/associate-page.tsx | 133 + .../associate/associate-transaction.tsx | 112 + .../staking/associate/contract-associate.scss | 7 + .../staking/associate/contract-associate.tsx | 74 + .../src/routes/staking/associate/hooks.ts | 128 + .../staking/associate/wallet-associate.scss | 7 + .../staking/associate/wallet-associate.tsx | 110 + .../src/routes/staking/connect-to-vega.tsx | 27 + .../disassociate/contract-disassociate.tsx | 41 + .../disassociate-page-container.tsx | 17 + .../disassociate-page-no-vega.tsx | 54 + .../disassociate/disassociate-page.scss | 7 + .../disassociate/disassociate-page.tsx | 92 + .../disassociate/disassociate-transaction.tsx | 55 + .../src/routes/staking/disassociate/hooks.ts | 56 + .../disassociate/wallet-disassociate.tsx | 41 + apps/token/src/routes/staking/index.tsx | 32 + apps/token/src/routes/staking/node-list.scss | 66 + apps/token/src/routes/staking/node-list.tsx | 193 + .../src/routes/staking/pending-stake.scss | 5 + .../src/routes/staking/pending-stake.tsx | 90 + .../src/routes/staking/stake-failure.tsx | 19 + .../src/routes/staking/stake-pending.tsx | 29 + .../src/routes/staking/stake-success.tsx | 42 + .../src/routes/staking/staking-form.scss | 21 + .../token/src/routes/staking/staking-form.tsx | 318 ++ .../src/routes/staking/staking-node.scss | 9 + .../token/src/routes/staking/staking-node.tsx | 135 + .../staking/staking-nodes-container.tsx | 123 + .../staking/staking-wallets-container.tsx | 47 + apps/token/src/routes/staking/staking.scss | 5 + apps/token/src/routes/staking/staking.tsx | 200 ++ .../src/routes/staking/validator-table.scss | 3 + .../src/routes/staking/validator-table.tsx | 96 + apps/token/src/routes/staking/your-stake.tsx | 36 + apps/token/src/routes/tranches/data.json | 429 +++ apps/token/src/routes/tranches/index.tsx | 32 + .../src/routes/tranches/progress-bar.tsx | 31 + .../src/routes/tranches/tranche-dates.tsx | 32 + .../src/routes/tranches/tranche-label.scss | 13 + .../routes/tranches/tranche-label.test.tsx | 48 + .../src/routes/tranches/tranche-label.tsx | 54 + .../src/routes/tranches/tranche-progress.tsx | 52 + apps/token/src/routes/tranches/tranche.scss | 37 + apps/token/src/routes/tranches/tranche.tsx | 87 + apps/token/src/routes/tranches/tranches.scss | 101 + apps/token/src/routes/tranches/tranches.tsx | 75 + .../src/routes/tranches/vesting-chart.tsx | 144 + .../withdraw/__generated__/WithdrawPage.ts | 152 + .../src/routes/withdraw/eth-address-input.tsx | 61 + apps/token/src/routes/withdraw/index.tsx | 151 + .../src/routes/withdraw/withdraw-form.scss | 7 + .../src/routes/withdraw/withdraw-form.tsx | 155 + .../__generated__/WithdrawalsPage.ts | 105 + apps/token/src/routes/withdrawals/index.tsx | 259 ++ .../src/routes/withdrawals/withdrawals.scss | 9 + apps/token/src/setup-tests.ts | 24 + apps/token/src/styles.scss | 86 + apps/token/src/styles/AlphaLyrae-Medium.woff | Bin 0 -> 131418 bytes apps/token/src/styles/_colors.scss | 99 + apps/token/src/styles/_fonts.scss | 12 + apps/token/tailwind.config.js | 14 + apps/token/tsconfig.app.json | 22 + apps/token/tsconfig.json | 26 + apps/token/tsconfig.spec.json | 23 + apps/token/webpack.config.js | 16 + apps/trading/components/app-loader/index.tsx | 5 +- .../hooks/use-vega-wallet-eager-connect.ts | 41 - apps/trading/pages/_app.page.tsx | 1 + .../src/components/ag-grid/ag-grid-dark.tsx | 4 +- .../ag-grid/ag-grid-dynamic-themed.tsx | 17 +- .../components/ag-grid/ag-grid-dynamic.tsx | 2 +- .../src/components/ag-grid/ag-grid-light.tsx | 4 +- .../src/components/button/button.tsx | 16 +- .../src/components/callout/callout.tsx | 4 +- .../src/components/dialog/dialog.tsx | 6 +- libs/ui-toolkit/src/utils/class-names.ts | 3 + libs/wallet/src/index.ts | 1 + libs/wallet/src/use-eager-connect.ts | 55 + package.json | 17 +- workspace.json | 2 + yarn.lock | 3169 +++++++++-------- 394 files changed, 22969 insertions(+), 1611 deletions(-) create mode 100644 apps/token-e2e/.eslintrc.json create mode 100644 apps/token-e2e/cypress.json create mode 100644 apps/token-e2e/project.json create mode 100644 apps/token-e2e/src/fixtures/example.json create mode 100644 apps/token-e2e/src/integration/app.spec.ts create mode 100644 apps/token-e2e/src/support/index.ts create mode 100644 apps/token-e2e/tsconfig.json create mode 100644 apps/token/.babelrc create mode 100644 apps/token/.browserslistrc create mode 100644 apps/token/.env create mode 100644 apps/token/.env.devent create mode 100644 apps/token/.env.mainnet create mode 100644 apps/token/.env.stagnet1 create mode 100644 apps/token/.env.stagnet2 create mode 100644 apps/token/.env.testnet create mode 100644 apps/token/.eslintrc.json create mode 100644 apps/token/jest.config.js create mode 100644 apps/token/postcss.config.js create mode 100644 apps/token/project.json create mode 100644 apps/token/src/__generated__/globalTypes.ts create mode 100644 apps/token/src/app-loader.tsx create mode 100644 apps/token/src/app.scss create mode 100644 apps/token/src/app.tsx create mode 100644 apps/token/src/assets/apple-touch-icon.png create mode 100644 apps/token/src/assets/logo.png create mode 100644 apps/token/src/assets/logo192.png create mode 100644 apps/token/src/assets/manifest.json create mode 100644 apps/token/src/assets/robots.txt create mode 100644 apps/token/src/components/add-locked-token/add-locked-token.scss create mode 100644 apps/token/src/components/add-locked-token/add-locked-token.tsx create mode 100644 apps/token/src/components/add-locked-token/index.tsx create mode 100644 apps/token/src/components/add-token-button/add-token-button.tsx create mode 100644 apps/token/src/components/add-token-button/index.tsx create mode 100644 apps/token/src/components/app-banner/app-banner.scss create mode 100644 apps/token/src/components/app-banner/app-banner.tsx create mode 100644 apps/token/src/components/app-banner/index.ts create mode 100644 apps/token/src/components/app-footer/app-footer.scss create mode 100644 apps/token/src/components/app-footer/app-footer.tsx create mode 100644 apps/token/src/components/app-footer/index.ts create mode 100644 apps/token/src/components/balance-manager/balance-manager.tsx create mode 100644 apps/token/src/components/balance-manager/index.ts create mode 100644 apps/token/src/components/bullet-header/bullet-header.scss create mode 100644 apps/token/src/components/bullet-header/bullet-header.tsx create mode 100644 apps/token/src/components/bullet-header/index.ts create mode 100644 apps/token/src/components/connected-vega-key/connected-vega-key.scss create mode 100644 apps/token/src/components/connected-vega-key/index.tsx create mode 100644 apps/token/src/components/country-selector/country-data.js create mode 100644 apps/token/src/components/country-selector/country-selector.tsx create mode 100644 apps/token/src/components/country-selector/index.ts create mode 100644 apps/token/src/components/epoch-countdown/epoch-countdown.scss create mode 100644 apps/token/src/components/epoch-countdown/epoch-countdown.tsx create mode 100644 apps/token/src/components/epoch-countdown/index.tsx create mode 100644 apps/token/src/components/eth-connect-prompt/eth-connect-promp.tsx create mode 100644 apps/token/src/components/eth-connect-prompt/index.ts create mode 100644 apps/token/src/components/eth-wallet-container/eth-wallet-container.scss create mode 100644 apps/token/src/components/eth-wallet-container/eth-wallet-container.tsx create mode 100644 apps/token/src/components/eth-wallet-container/index.ts create mode 100644 apps/token/src/components/eth-wallet/eth-wallet.scss create mode 100644 apps/token/src/components/eth-wallet/eth-wallet.tsx create mode 100644 apps/token/src/components/eth-wallet/index.tsx create mode 100644 apps/token/src/components/graphql-provider/graphql-provider.tsx create mode 100644 apps/token/src/components/graphql-provider/index.ts create mode 100644 apps/token/src/components/heading/heading.tsx create mode 100644 apps/token/src/components/heading/index.ts create mode 100644 apps/token/src/components/icons/error.tsx create mode 100644 apps/token/src/components/icons/ethereum.tsx create mode 100644 apps/token/src/components/icons/hand-up.tsx create mode 100644 apps/token/src/components/icons/icons.scss create mode 100644 apps/token/src/components/icons/index.ts create mode 100644 apps/token/src/components/icons/tick.tsx create mode 100644 apps/token/src/components/key-value-table/index.tsx create mode 100644 apps/token/src/components/key-value-table/key-value-table.scss create mode 100644 apps/token/src/components/key-value-table/key-value-table.test.tsx create mode 100644 apps/token/src/components/key-value-table/key-value-table.tsx create mode 100644 apps/token/src/components/loader/index.ts create mode 100644 apps/token/src/components/loader/loader.scss create mode 100644 apps/token/src/components/loader/loader.tsx create mode 100644 apps/token/src/components/locked-progress/index.ts create mode 100644 apps/token/src/components/locked-progress/locked-progress.scss create mode 100644 apps/token/src/components/locked-progress/locked-progress.tsx create mode 100644 apps/token/src/components/modal/index.ts create mode 100644 apps/token/src/components/modal/modal.scss create mode 100644 apps/token/src/components/modal/modal.tsx create mode 100644 apps/token/src/components/nav/index.ts create mode 100644 apps/token/src/components/nav/nav.scss create mode 100644 apps/token/src/components/nav/nav.tsx create mode 100644 apps/token/src/components/page-templates/template-sidebar.scss create mode 100644 apps/token/src/components/page-templates/template-sidebar.tsx create mode 100644 apps/token/src/components/splash-error/index.ts create mode 100644 apps/token/src/components/splash-error/splash-error.scss create mode 100644 apps/token/src/components/splash-error/splash-error.tsx create mode 100644 apps/token/src/components/splash-loader/index.ts create mode 100644 apps/token/src/components/splash-loader/splash-loader.scss create mode 100644 apps/token/src/components/splash-loader/splash-loader.tsx create mode 100644 apps/token/src/components/staking-method-radio/index.tsx create mode 100644 apps/token/src/components/stateful-button/index.ts create mode 100644 apps/token/src/components/stateful-button/stateful-button.scss create mode 100644 apps/token/src/components/stateful-button/stateful-button.tsx create mode 100644 apps/token/src/components/syntax-highlighter/index.tsx create mode 100644 apps/token/src/components/syntax-highlighter/syntax-highlighter.test.tsx create mode 100644 apps/token/src/components/syntax-highlighter/syntax-highlighter.tsx create mode 100644 apps/token/src/components/token-input/index.tsx create mode 100644 apps/token/src/components/token-input/token-input.scss create mode 100644 apps/token/src/components/token-input/token-input.tsx create mode 100644 apps/token/src/components/transaction-button/index.ts create mode 100644 apps/token/src/components/transaction-button/transaction-button.scss create mode 100644 apps/token/src/components/transaction-button/transaction-button.tsx create mode 100644 apps/token/src/components/transaction-callout/index.ts create mode 100644 apps/token/src/components/transaction-callout/transaction-callout.tsx create mode 100644 apps/token/src/components/transaction-callout/transaction-complete.tsx create mode 100644 apps/token/src/components/transaction-callout/transaction-error.tsx create mode 100644 apps/token/src/components/transaction-callout/transaction-pending.tsx create mode 100644 apps/token/src/components/transaction-callout/transaction-requested.tsx create mode 100644 apps/token/src/components/transactions-modal/index.ts create mode 100644 apps/token/src/components/transactions-modal/transactions-modal.scss create mode 100644 apps/token/src/components/transactions-modal/transactions-modal.tsx create mode 100644 apps/token/src/components/vega-wallet-container/index.ts create mode 100644 apps/token/src/components/vega-wallet-container/vega-wallet-container.tsx create mode 100644 apps/token/src/components/vega-wallet-dialogs/index.ts create mode 100644 apps/token/src/components/vega-wallet-dialogs/vega-wallet-dialogs.tsx create mode 100644 apps/token/src/components/vega-wallet/__generated__/Delegations.ts create mode 100644 apps/token/src/components/vega-wallet/__generated__/PartyDelegations.ts create mode 100644 apps/token/src/components/vega-wallet/download-wallet-prompt.tsx create mode 100644 apps/token/src/components/vega-wallet/hooks.ts create mode 100644 apps/token/src/components/vega-wallet/index.ts create mode 100644 apps/token/src/components/vega-wallet/vega-wallet.scss create mode 100644 apps/token/src/components/vega-wallet/vega-wallet.tsx create mode 100644 apps/token/src/components/wallet-card/index.ts create mode 100644 apps/token/src/components/wallet-card/wallet-card.scss create mode 100644 apps/token/src/components/wallet-card/wallet-card.tsx create mode 100644 apps/token/src/components/web3-connector/index.ts create mode 100644 apps/token/src/components/web3-connector/web3-connector.tsx create mode 100644 apps/token/src/config/colors.ts create mode 100644 apps/token/src/config/ethereum.ts create mode 100644 apps/token/src/config/flags.ts create mode 100644 apps/token/src/config/index.ts create mode 100644 apps/token/src/config/links.ts create mode 100644 apps/token/src/config/network-params.ts create mode 100644 apps/token/src/config/vega.ts create mode 100644 apps/token/src/contexts/app-state/app-state-context.ts create mode 100644 apps/token/src/contexts/app-state/app-state-provider.tsx create mode 100644 apps/token/src/contexts/contracts/contracts-context.ts create mode 100644 apps/token/src/contexts/contracts/contracts-provider.tsx create mode 100644 apps/token/src/favicon.ico create mode 100644 apps/token/src/hooks/__generated__/Erc20Approval.ts create mode 100644 apps/token/src/hooks/__generated__/NetworkParams.ts create mode 100644 apps/token/src/hooks/__generated__/WithdrawalPoll.ts create mode 100644 apps/token/src/hooks/__mocks__/tranches-mock.ts create mode 100644 apps/token/src/hooks/__mocks__/use-tranches.ts create mode 100644 apps/token/src/hooks/transaction-reducer.ts create mode 100644 apps/token/src/hooks/use-add-asset-to-wallet.ts create mode 100644 apps/token/src/hooks/use-animate-value.ts create mode 100644 apps/token/src/hooks/use-copy-to-clipboard.ts create mode 100644 apps/token/src/hooks/use-create-withdrawal.ts create mode 100644 apps/token/src/hooks/use-document-title.ts create mode 100644 apps/token/src/hooks/use-erc-poll20-approval.ts create mode 100644 apps/token/src/hooks/use-ethereum-config.ts create mode 100644 apps/token/src/hooks/use-fetch.ts create mode 100644 apps/token/src/hooks/use-get-association-breakdown.ts create mode 100644 apps/token/src/hooks/use-get-user-tranche-balances.ts create mode 100644 apps/token/src/hooks/use-network-param.tsx create mode 100644 apps/token/src/hooks/use-pending-transactions.ts create mode 100644 apps/token/src/hooks/use-previous.ts create mode 100644 apps/token/src/hooks/use-refresh-associated-balances.ts create mode 100644 apps/token/src/hooks/use-refresh-balances.ts create mode 100644 apps/token/src/hooks/use-search-params.ts create mode 100644 apps/token/src/hooks/use-tranches.ts create mode 100644 apps/token/src/hooks/use-transaction.ts create mode 100644 apps/token/src/i18n/index.ts create mode 100644 apps/token/src/i18n/translations/dev.json create mode 100644 apps/token/src/images/back.png create mode 100644 apps/token/src/images/banner.png create mode 100644 apps/token/src/images/clouds.png create mode 100644 apps/token/src/images/token-no-icon.png create mode 100644 apps/token/src/images/vega_black.png create mode 100644 apps/token/src/images/vega_vesting.png create mode 100644 apps/token/src/images/vega_white.png create mode 100644 apps/token/src/index.html create mode 100644 apps/token/src/lib/__mocks__/generate-tranche.ts create mode 100644 apps/token/src/lib/abbreviate-number.ts create mode 100644 apps/token/src/lib/apollo-client.ts create mode 100644 apps/token/src/lib/ascii-to-hex.ts create mode 100644 apps/token/src/lib/bignumber.ts create mode 100644 apps/token/src/lib/client.graphql create mode 100644 apps/token/src/lib/date-formats.ts create mode 100644 apps/token/src/lib/decimals.test.ts create mode 100644 apps/token/src/lib/decimals.ts create mode 100644 apps/token/src/lib/deterministic-shuffle.ts create mode 100644 apps/token/src/lib/format-number.ts create mode 100644 apps/token/src/lib/get-data-node-url.ts create mode 100644 apps/token/src/lib/sig-to-id.test.ts create mode 100644 apps/token/src/lib/sig-to-id.ts create mode 100644 apps/token/src/lib/truncate-middle.ts create mode 100644 apps/token/src/lib/type-helpers.ts create mode 100644 apps/token/src/lib/type-policies/proposal.test.tsx create mode 100644 apps/token/src/lib/type-policies/proposal.ts create mode 100644 apps/token/src/lib/vega-connectors.ts create mode 100644 apps/token/src/lib/vega-wallet/vega-wallet-service.ts create mode 100644 apps/token/src/lib/vega-wallet/vega-wallet-types.ts create mode 100644 apps/token/src/lib/web3-connectors.ts create mode 100644 apps/token/src/lib/web3-utils.ts create mode 100644 apps/token/src/main.tsx create mode 100644 apps/token/src/polyfills.ts create mode 100644 apps/token/src/react-app-env.d.ts create mode 100644 apps/token/src/report-web-vitals.ts create mode 100644 apps/token/src/routes/claim/claim-error.tsx create mode 100644 apps/token/src/routes/claim/claim-flow.scss create mode 100644 apps/token/src/routes/claim/claim-flow.tsx create mode 100644 apps/token/src/routes/claim/claim-form/claim-form.tsx create mode 100644 apps/token/src/routes/claim/claim-form/index.ts create mode 100644 apps/token/src/routes/claim/claim-info.tsx create mode 100644 apps/token/src/routes/claim/claim-reducer.test.ts create mode 100644 apps/token/src/routes/claim/claim-reducer.ts create mode 100644 apps/token/src/routes/claim/claim-restricted.tsx create mode 100644 apps/token/src/routes/claim/claim-step-1/claim-step-1.tsx create mode 100644 apps/token/src/routes/claim/claim-step-1/index.ts create mode 100644 apps/token/src/routes/claim/claim-step-2/claim-step-2.tsx create mode 100644 apps/token/src/routes/claim/claim-step-2/index.ts create mode 100644 apps/token/src/routes/claim/claim.tsx create mode 100644 apps/token/src/routes/claim/code-used.tsx create mode 100644 apps/token/src/routes/claim/complete.tsx create mode 100644 apps/token/src/routes/claim/expired.tsx create mode 100644 apps/token/src/routes/claim/hooks.ts create mode 100644 apps/token/src/routes/claim/index.tsx create mode 100644 apps/token/src/routes/claim/lib/is-restricted.test.ts create mode 100644 apps/token/src/routes/claim/lib/is-restricted.ts create mode 100644 apps/token/src/routes/claim/target-address-mismatch.tsx create mode 100644 apps/token/src/routes/claim/targeted-claim/index.ts create mode 100644 apps/token/src/routes/claim/targeted-claim/targeted-claim.tsx create mode 100644 apps/token/src/routes/claim/tranche-not-found.tsx create mode 100644 apps/token/src/routes/claim/untargeted-claim/index.ts create mode 100644 apps/token/src/routes/claim/untargeted-claim/untargeted-claim.tsx create mode 100644 apps/token/src/routes/claim/verifying.tsx create mode 100644 apps/token/src/routes/contracts/index.tsx create mode 100644 apps/token/src/routes/governance/__generated__/ProposalFields.ts create mode 100644 apps/token/src/routes/governance/components/current-proposal-state/current-proposal-state.scss create mode 100644 apps/token/src/routes/governance/components/current-proposal-state/current-proposal-state.tsx create mode 100644 apps/token/src/routes/governance/components/current-proposal-state/index.tsx create mode 100644 apps/token/src/routes/governance/components/current-proposal-status/current-proposal-status.scss create mode 100644 apps/token/src/routes/governance/components/current-proposal-status/current-proposal-status.tsx create mode 100644 apps/token/src/routes/governance/components/current-proposal-status/index.tsx create mode 100644 apps/token/src/routes/governance/components/proposal-change-table/index.tsx create mode 100644 apps/token/src/routes/governance/components/proposal-change-table/proposal-change-table.test.tsx create mode 100644 apps/token/src/routes/governance/components/proposal-change-table/proposal-change-table.tsx create mode 100644 apps/token/src/routes/governance/components/proposal-terms-json/index.tsx create mode 100644 apps/token/src/routes/governance/components/proposal-terms-json/proposal-terms-json.tsx create mode 100644 apps/token/src/routes/governance/components/proposal-votes-table/index.tsx create mode 100644 apps/token/src/routes/governance/components/proposal-votes-table/proposal-votes-table.tsx create mode 100644 apps/token/src/routes/governance/components/proposal/index.tsx create mode 100644 apps/token/src/routes/governance/components/proposal/proposal.tsx create mode 100644 apps/token/src/routes/governance/components/proposals-list/index.tsx create mode 100644 apps/token/src/routes/governance/components/proposals-list/proposals-list.tsx create mode 100644 apps/token/src/routes/governance/components/vote-details/__generated__/VoteButtons.ts create mode 100644 apps/token/src/routes/governance/components/vote-details/index.tsx create mode 100644 apps/token/src/routes/governance/components/vote-details/use-user-vote.tsx create mode 100644 apps/token/src/routes/governance/components/vote-details/vote-buttons.scss create mode 100644 apps/token/src/routes/governance/components/vote-details/vote-buttons.tsx create mode 100644 apps/token/src/routes/governance/components/vote-details/vote-details.scss create mode 100644 apps/token/src/routes/governance/components/vote-details/vote-details.tsx create mode 100644 apps/token/src/routes/governance/components/vote-details/vote-progress.scss create mode 100644 apps/token/src/routes/governance/components/vote-details/vote-progress.tsx create mode 100644 apps/token/src/routes/governance/components/vote-details/vote-types.ts create mode 100644 apps/token/src/routes/governance/hooks/index.tsx create mode 100644 apps/token/src/routes/governance/hooks/use-vote-information.ts create mode 100644 apps/token/src/routes/governance/index.tsx create mode 100644 apps/token/src/routes/governance/proposal-fragment.ts create mode 100644 apps/token/src/routes/governance/proposal/__generated__/Proposal.ts create mode 100644 apps/token/src/routes/governance/proposal/index.tsx create mode 100644 apps/token/src/routes/governance/proposal/proposal-container.tsx create mode 100644 apps/token/src/routes/governance/proposals/__generated__/Proposals.ts create mode 100644 apps/token/src/routes/governance/proposals/index.tsx create mode 100644 apps/token/src/routes/governance/proposals/proposals-container.tsx create mode 100644 apps/token/src/routes/governance/test-helpers/generate-proposals.ts create mode 100644 apps/token/src/routes/home/__generated__/NodeData.ts create mode 100644 apps/token/src/routes/home/home.scss create mode 100644 apps/token/src/routes/home/index.tsx create mode 100644 apps/token/src/routes/home/token-details/index.tsx create mode 100644 apps/token/src/routes/home/token-details/token-details-circulating.test.ts create mode 100644 apps/token/src/routes/home/token-details/token-details-circulating.tsx create mode 100644 apps/token/src/routes/home/token-details/token-details.scss create mode 100644 apps/token/src/routes/home/token-details/token-details.tsx create mode 100644 apps/token/src/routes/index.tsx create mode 100644 apps/token/src/routes/not-found/index.tsx create mode 100644 apps/token/src/routes/not-permitted/index.tsx create mode 100644 apps/token/src/routes/redemption/home/redemption-information.scss create mode 100644 apps/token/src/routes/redemption/home/redemption-information.tsx create mode 100644 apps/token/src/routes/redemption/home/vesting-table.scss create mode 100644 apps/token/src/routes/redemption/home/vesting-table.tsx create mode 100644 apps/token/src/routes/redemption/index.tsx create mode 100644 apps/token/src/routes/redemption/redemption-reducer.ts create mode 100644 apps/token/src/routes/redemption/redemption.tsx create mode 100644 apps/token/src/routes/redemption/tranche-item.scss create mode 100644 apps/token/src/routes/redemption/tranche-item.tsx create mode 100644 apps/token/src/routes/redemption/tranche-table.scss create mode 100644 apps/token/src/routes/redemption/tranche-table.tsx create mode 100644 apps/token/src/routes/redemption/tranche/index.tsx create mode 100644 apps/token/src/routes/rewards/home/__generated__/Epoch.ts create mode 100644 apps/token/src/routes/rewards/home/__generated__/Rewards.ts create mode 100644 apps/token/src/routes/rewards/home/index.scss create mode 100644 apps/token/src/routes/rewards/home/index.tsx create mode 100644 apps/token/src/routes/rewards/home/reward-info.scss create mode 100644 apps/token/src/routes/rewards/home/reward-info.tsx create mode 100644 apps/token/src/routes/rewards/index.tsx create mode 100644 apps/token/src/routes/router-config.tsx create mode 100644 apps/token/src/routes/staking/__generated__/Nodes.ts create mode 100644 apps/token/src/routes/staking/__generated__/PartyDelegations.ts create mode 100644 apps/token/src/routes/staking/__generated__/Staking.ts create mode 100644 apps/token/src/routes/staking/associate/__generated__/PartyStakeLinkings.ts create mode 100644 apps/token/src/routes/staking/associate/associate-info.tsx create mode 100644 apps/token/src/routes/staking/associate/associate-page-container.tsx create mode 100644 apps/token/src/routes/staking/associate/associate-page-no-vega.tsx create mode 100644 apps/token/src/routes/staking/associate/associate-page.tsx create mode 100644 apps/token/src/routes/staking/associate/associate-transaction.tsx create mode 100644 apps/token/src/routes/staking/associate/contract-associate.scss create mode 100644 apps/token/src/routes/staking/associate/contract-associate.tsx create mode 100644 apps/token/src/routes/staking/associate/hooks.ts create mode 100644 apps/token/src/routes/staking/associate/wallet-associate.scss create mode 100644 apps/token/src/routes/staking/associate/wallet-associate.tsx create mode 100644 apps/token/src/routes/staking/connect-to-vega.tsx create mode 100644 apps/token/src/routes/staking/disassociate/contract-disassociate.tsx create mode 100644 apps/token/src/routes/staking/disassociate/disassociate-page-container.tsx create mode 100644 apps/token/src/routes/staking/disassociate/disassociate-page-no-vega.tsx create mode 100644 apps/token/src/routes/staking/disassociate/disassociate-page.scss create mode 100644 apps/token/src/routes/staking/disassociate/disassociate-page.tsx create mode 100644 apps/token/src/routes/staking/disassociate/disassociate-transaction.tsx create mode 100644 apps/token/src/routes/staking/disassociate/hooks.ts create mode 100644 apps/token/src/routes/staking/disassociate/wallet-disassociate.tsx create mode 100644 apps/token/src/routes/staking/index.tsx create mode 100644 apps/token/src/routes/staking/node-list.scss create mode 100644 apps/token/src/routes/staking/node-list.tsx create mode 100644 apps/token/src/routes/staking/pending-stake.scss create mode 100644 apps/token/src/routes/staking/pending-stake.tsx create mode 100644 apps/token/src/routes/staking/stake-failure.tsx create mode 100644 apps/token/src/routes/staking/stake-pending.tsx create mode 100644 apps/token/src/routes/staking/stake-success.tsx create mode 100644 apps/token/src/routes/staking/staking-form.scss create mode 100644 apps/token/src/routes/staking/staking-form.tsx create mode 100644 apps/token/src/routes/staking/staking-node.scss create mode 100644 apps/token/src/routes/staking/staking-node.tsx create mode 100644 apps/token/src/routes/staking/staking-nodes-container.tsx create mode 100644 apps/token/src/routes/staking/staking-wallets-container.tsx create mode 100644 apps/token/src/routes/staking/staking.scss create mode 100644 apps/token/src/routes/staking/staking.tsx create mode 100644 apps/token/src/routes/staking/validator-table.scss create mode 100644 apps/token/src/routes/staking/validator-table.tsx create mode 100644 apps/token/src/routes/staking/your-stake.tsx create mode 100644 apps/token/src/routes/tranches/data.json create mode 100644 apps/token/src/routes/tranches/index.tsx create mode 100644 apps/token/src/routes/tranches/progress-bar.tsx create mode 100644 apps/token/src/routes/tranches/tranche-dates.tsx create mode 100644 apps/token/src/routes/tranches/tranche-label.scss create mode 100644 apps/token/src/routes/tranches/tranche-label.test.tsx create mode 100644 apps/token/src/routes/tranches/tranche-label.tsx create mode 100644 apps/token/src/routes/tranches/tranche-progress.tsx create mode 100644 apps/token/src/routes/tranches/tranche.scss create mode 100644 apps/token/src/routes/tranches/tranche.tsx create mode 100644 apps/token/src/routes/tranches/tranches.scss create mode 100644 apps/token/src/routes/tranches/tranches.tsx create mode 100644 apps/token/src/routes/tranches/vesting-chart.tsx create mode 100644 apps/token/src/routes/withdraw/__generated__/WithdrawPage.ts create mode 100644 apps/token/src/routes/withdraw/eth-address-input.tsx create mode 100644 apps/token/src/routes/withdraw/index.tsx create mode 100644 apps/token/src/routes/withdraw/withdraw-form.scss create mode 100644 apps/token/src/routes/withdraw/withdraw-form.tsx create mode 100644 apps/token/src/routes/withdrawals/__generated__/WithdrawalsPage.ts create mode 100644 apps/token/src/routes/withdrawals/index.tsx create mode 100644 apps/token/src/routes/withdrawals/withdrawals.scss create mode 100644 apps/token/src/setup-tests.ts create mode 100644 apps/token/src/styles.scss create mode 100644 apps/token/src/styles/AlphaLyrae-Medium.woff create mode 100644 apps/token/src/styles/_colors.scss create mode 100644 apps/token/src/styles/_fonts.scss create mode 100644 apps/token/tailwind.config.js create mode 100644 apps/token/tsconfig.app.json create mode 100644 apps/token/tsconfig.json create mode 100644 apps/token/tsconfig.spec.json create mode 100644 apps/token/webpack.config.js delete mode 100644 apps/trading/hooks/use-vega-wallet-eager-connect.ts create mode 100644 libs/wallet/src/use-eager-connect.ts diff --git a/apps/static/src/fonts.scss b/apps/static/src/fonts.scss index 27259aebb..f7aab9713 100644 --- a/apps/static/src/fonts.scss +++ b/apps/static/src/fonts.scss @@ -1,7 +1,7 @@ @font-face { font-family: AlphaLyrae; - src: url('alpha-lyrae/AlphaLyrae-Medium.woff2') format('woof2'), - url('alpha-lyrae/AlphaLyrae-Medium.woff') format('woof'), + src: url('alpha-lyrae/AlphaLyrae-Medium.woff2') format('woff2'), + url('alpha-lyrae/AlphaLyrae-Medium.woff') format('woff'), url('alpha-lyrae/AlphaLyrae-Medium.ttf') format('truetype'), url('alpha-lyrae/AlphaLyrae-Medium.eot') format('embedded-opentype'), url('alpha-lyrae/AlphaLyrae-Medium.otf') format('opentype'); diff --git a/apps/token-e2e/.eslintrc.json b/apps/token-e2e/.eslintrc.json new file mode 100644 index 000000000..696cb8b12 --- /dev/null +++ b/apps/token-e2e/.eslintrc.json @@ -0,0 +1,10 @@ +{ + "extends": ["plugin:cypress/recommended", "../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + } + ] +} diff --git a/apps/token-e2e/cypress.json b/apps/token-e2e/cypress.json new file mode 100644 index 000000000..3a1c8585c --- /dev/null +++ b/apps/token-e2e/cypress.json @@ -0,0 +1,14 @@ +{ + "baseUrl": "http://localhost:4210", + "projectId": "et4snf", + "fileServerFolder": ".", + "fixturesFolder": "./src/fixtures", + "integrationFolder": "./src/integration", + "modifyObstructiveCode": false, + "supportFile": "./src/support/index.ts", + "pluginsFile": false, + "video": true, + "videosFolder": "../../dist/cypress/apps/token-e2e/videos", + "screenshotsFolder": "../../dist/cypress/apps/token-e2e/screenshots", + "chromeWebSecurity": false +} diff --git a/apps/token-e2e/project.json b/apps/token-e2e/project.json new file mode 100644 index 000000000..03fdfb16c --- /dev/null +++ b/apps/token-e2e/project.json @@ -0,0 +1,28 @@ +{ + "root": "apps/token-e2e", + "sourceRoot": "apps/token-e2e/src", + "projectType": "application", + "targets": { + "e2e": { + "executor": "@nrwl/cypress:cypress", + "options": { + "cypressConfig": "apps/token-e2e/cypress.json", + "devServerTarget": "token:serve" + }, + "configurations": { + "production": { + "devServerTarget": "token:serve:production" + } + } + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["apps/token-e2e/**/*.{js,ts}"] + } + } + }, + "tags": [], + "implicitDependencies": ["token"] +} diff --git a/apps/token-e2e/src/fixtures/example.json b/apps/token-e2e/src/fixtures/example.json new file mode 100644 index 000000000..294cbed6c --- /dev/null +++ b/apps/token-e2e/src/fixtures/example.json @@ -0,0 +1,4 @@ +{ + "name": "Using fixtures to represent data", + "email": "hello@cypress.io" +} diff --git a/apps/token-e2e/src/integration/app.spec.ts b/apps/token-e2e/src/integration/app.spec.ts new file mode 100644 index 000000000..14fa96f21 --- /dev/null +++ b/apps/token-e2e/src/integration/app.spec.ts @@ -0,0 +1,12 @@ +const fairgroundSet = Cypress.env('FAIRGROUND'); + +describe('token', () => { + beforeEach(() => cy.visit('/')); + + it('should always have an header title based on environment', () => { + cy.get('.nav h1').should( + 'have.text', + `${fairgroundSet ? 'Fairground token' : '$VEGA TOKEN'}` + ); + }); +}); diff --git a/apps/token-e2e/src/support/index.ts b/apps/token-e2e/src/support/index.ts new file mode 100644 index 000000000..4a49c7d38 --- /dev/null +++ b/apps/token-e2e/src/support/index.ts @@ -0,0 +1 @@ +import '@vegaprotocol/cypress'; diff --git a/apps/token-e2e/tsconfig.json b/apps/token-e2e/tsconfig.json new file mode 100644 index 000000000..c4f818ecd --- /dev/null +++ b/apps/token-e2e/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "sourceMap": false, + "outDir": "../../dist/out-tsc", + "allowJs": true, + "types": ["cypress", "node"] + }, + "include": ["src/**/*.ts", "src/**/*.js"] +} diff --git a/apps/token/.babelrc b/apps/token/.babelrc new file mode 100644 index 000000000..61641ec8a --- /dev/null +++ b/apps/token/.babelrc @@ -0,0 +1,11 @@ +{ + "presets": [ + [ + "@nrwl/react/babel", + { + "runtime": "automatic" + } + ] + ], + "plugins": [] +} diff --git a/apps/token/.browserslistrc b/apps/token/.browserslistrc new file mode 100644 index 000000000..f1d12df4f --- /dev/null +++ b/apps/token/.browserslistrc @@ -0,0 +1,16 @@ +# This file is used by: +# 1. autoprefixer to adjust CSS to support the below specified browsers +# 2. babel preset-env to adjust included polyfills +# +# For additional information regarding the format and rule options, please see: +# https://github.com/browserslist/browserslist#queries +# +# If you need to support different browsers in production, you may tweak the list below. + +last 1 Chrome version +last 1 Firefox version +last 2 Edge major versions +last 2 Safari major version +last 2 iOS major versions +Firefox ESR +not IE 9-11 # For IE 9-11 support, remove 'not'. \ No newline at end of file diff --git a/apps/token/.env b/apps/token/.env new file mode 100644 index 000000000..998ab3e21 --- /dev/null +++ b/apps/token/.env @@ -0,0 +1,30 @@ +# React Environment Variables +# https://facebook.github.io/create-react-app/docs/adding-custom-environment-variables#expanding-environment-variables-in-env + +# Netlify Environment Variables +# https://www.netlify.com/docs/continuous-deployment/#environment-variables +REACT_APP_VERSION=$npm_package_version +REACT_APP_REPOSITORY_URL=$REPOSITORY_URL +REACT_APP_BRANCH=$BRANCH +REACT_APP_PULL_REQUEST=$PULL_REQUEST +REACT_APP_HEAD=$HEAD +REACT_APP_COMMIT_REF=$COMMIT_REF +REACT_APP_CONTEXT=$CONTEXT +REACT_APP_REVIEW_ID=$REVIEW_ID +REACT_APP_INCOMING_HOOK_TITLE=$INCOMING_HOOK_TITLE +REACT_APP_INCOMING_HOOK_URL=$INCOMING_HOOK_URL +REACT_APP_INCOMING_HOOK_BODY=$INCOMING_HOOK_BODY +REACT_APP_URL=$URL +REACT_APP_DEPLOY_URL=$DEPLOY_URL +REACT_APP_DEPLOY_PRIME_URL=$DEPLOY_PRIME_URL + +# App configuration variables +NX_VEGA_ENV = "TESTNET" +NX_VEGA_URL = "https://lb.testnet.vega.xyz/query" +NX_ETHEREUM_CHAIN_ID = 3 +NX_ETHEREUM_PROVIDER_URL = "https://ropsten.infura.io/v3/4f846e79e13f44d1b51bbd7ed9edefb8" +NX_ETHERSCAN_URL = "https://ropsten.etherscan.io" +NX_FAIRGROUND = false + +#Test configuration variables +CYPRESS_FAIRGROUND = false diff --git a/apps/token/.env.devent b/apps/token/.env.devent new file mode 100644 index 000000000..43dfa5712 --- /dev/null +++ b/apps/token/.env.devent @@ -0,0 +1,6 @@ +# App configuration variables +NX_VEGA_ENV = "DEVNET" +NX_VEGA_URL = "https://n04.d.vega.xyz/query" +NX_ETHEREUM_CHAIN_ID = 3 +NX_ETHEREUM_PROVIDER_URL = "https://ropsten.infura.io/v3/4f846e79e13f44d1b51bbd7ed9edefb8" +NX_ETHERSCAN_URL = "https://ropsten.etherscan.io" \ No newline at end of file diff --git a/apps/token/.env.mainnet b/apps/token/.env.mainnet new file mode 100644 index 000000000..037533823 --- /dev/null +++ b/apps/token/.env.mainnet @@ -0,0 +1,6 @@ +# App configuration variables +NX_VEGA_ENV = "MAINNET" +NX_VEGA_URL = "https://api.token.vega.xyz/query" +NX_ETHEREUM_CHAIN_ID = 1 +NX_ETHEREUM_PROVIDER_URL = "https://mainnet.infura.io/v3/4f846e79e13f44d1b51bbd7ed9edefb8" +NX_ETHERSCAN_URL = "https://etherscan.io" \ No newline at end of file diff --git a/apps/token/.env.stagnet1 b/apps/token/.env.stagnet1 new file mode 100644 index 000000000..17d96f986 --- /dev/null +++ b/apps/token/.env.stagnet1 @@ -0,0 +1,6 @@ +# App configuration variables +NX_VEGA_ENV = "STAGNET" +NX_VEGA_URL = "https://n03.s.vega.xyz/query" +NX_ETHEREUM_CHAIN_ID = 3 +NX_ETHEREUM_PROVIDER_URL = "https://ropsten.infura.io/v3/4f846e79e13f44d1b51bbd7ed9edefb8" +NX_ETHERSCAN_URL = "https://ropsten.etherscan.io" \ No newline at end of file diff --git a/apps/token/.env.stagnet2 b/apps/token/.env.stagnet2 new file mode 100644 index 000000000..b7bcbb54a --- /dev/null +++ b/apps/token/.env.stagnet2 @@ -0,0 +1,6 @@ +# App configuration variables +NX_VEGA_ENV = "STAGNET2" +NX_VEGA_URL = "https://n03.stagnet2.vega.xyz/query" +NX_ETHEREUM_CHAIN_ID = 3 +NX_ETHEREUM_PROVIDER_URL = "https://ropsten.infura.io/v3/4f846e79e13f44d1b51bbd7ed9edefb8" +NX_ETHERSCAN_URL = "https://ropsten.etherscan.io" \ No newline at end of file diff --git a/apps/token/.env.testnet b/apps/token/.env.testnet new file mode 100644 index 000000000..668cc42a7 --- /dev/null +++ b/apps/token/.env.testnet @@ -0,0 +1,6 @@ +# App configuration variables +NX_VEGA_ENV = "TESTNET" +NX_VEGA_URL = "https://lb.testnet.vega.xyz/query" +NX_ETHEREUM_CHAIN_ID = 3 +NX_ETHEREUM_PROVIDER_URL = "https://ropsten.infura.io/v3/4f846e79e13f44d1b51bbd7ed9edefb8" +NX_ETHERSCAN_URL = "https://ropsten.etherscan.io" \ No newline at end of file diff --git a/apps/token/.eslintrc.json b/apps/token/.eslintrc.json new file mode 100644 index 000000000..734ddacee --- /dev/null +++ b/apps/token/.eslintrc.json @@ -0,0 +1,18 @@ +{ + "extends": ["plugin:@nrwl/nx/react", "../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + } + ] +} diff --git a/apps/token/jest.config.js b/apps/token/jest.config.js new file mode 100644 index 000000000..ce9043eab --- /dev/null +++ b/apps/token/jest.config.js @@ -0,0 +1,11 @@ +module.exports = { + displayName: 'token', + preset: '../../jest.preset.js', + transform: { + '^(?!.*\\.(js|jsx|ts|tsx|css|json)$)': '@nrwl/react/plugins/jest', + '^.+\\.[tj]sx?$': 'babel-jest', + }, + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'], + coverageDirectory: '../../coverage/apps/token', + setupFilesAfterEnv: ['./src/setup-tests.ts'], +}; diff --git a/apps/token/postcss.config.js b/apps/token/postcss.config.js new file mode 100644 index 000000000..cbdd9c22c --- /dev/null +++ b/apps/token/postcss.config.js @@ -0,0 +1,10 @@ +const { join } = require('path'); + +module.exports = { + plugins: { + tailwindcss: { + config: join(__dirname, 'tailwind.config.js'), + }, + autoprefixer: {}, + }, +}; diff --git a/apps/token/project.json b/apps/token/project.json new file mode 100644 index 000000000..2105bb207 --- /dev/null +++ b/apps/token/project.json @@ -0,0 +1,71 @@ +{ + "root": "apps/token", + "sourceRoot": "apps/token/src", + "projectType": "application", + "targets": { + "build": { + "executor": "@nrwl/web:webpack", + "outputs": ["{options.outputPath}"], + "defaultConfiguration": "production", + "options": { + "compiler": "babel", + "outputPath": "dist/apps/token", + "index": "apps/token/src/index.html", + "baseHref": "/", + "main": "apps/token/src/main.tsx", + "polyfills": "apps/token/src/polyfills.ts", + "tsConfig": "apps/token/tsconfig.app.json", + "assets": ["apps/token/src/favicon.ico", "apps/token/src/assets"], + "styles": ["apps/token/src/styles.scss"], + "scripts": [], + "webpackConfig": "apps/explorer/webpack.config.js" + }, + "configurations": { + "production": { + "fileReplacements": [ + { + "replace": "apps/token/src/environments/environment.ts", + "with": "apps/token/src/environments/environment.prod.ts" + } + ], + "optimization": true, + "outputHashing": "all", + "sourceMap": true, + "namedChunks": false, + "extractLicenses": true, + "vendorChunk": false + } + } + }, + "serve": { + "executor": "@nrwl/web:dev-server", + "options": { + "port": 4210, + "buildTarget": "token:build", + "hmr": true + }, + "configurations": { + "production": { + "buildTarget": "token:build:production", + "hmr": false + } + } + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["apps/token/**/*.{ts,tsx,js,jsx}"] + } + }, + "test": { + "executor": "@nrwl/jest:jest", + "outputs": ["coverage/apps/token"], + "options": { + "jestConfig": "apps/token/jest.config.js", + "passWithNoTests": true + } + } + }, + "tags": [] +} diff --git a/apps/token/src/__generated__/globalTypes.ts b/apps/token/src/__generated__/globalTypes.ts new file mode 100644 index 000000000..255819b46 --- /dev/null +++ b/apps/token/src/__generated__/globalTypes.ts @@ -0,0 +1,120 @@ + +/* tslint:disable */ +/* eslint-disable */ +// @generated +// This file was automatically generated and should not be edited. + +//============================================================== +// START Enums and Input Objects +//============================================================== + +/** + * The various account types we have (used by collateral) + */ +export enum AccountType { + Bond = "Bond", + External = "External", + FeeInfrastructure = "FeeInfrastructure", + FeeLiquidity = "FeeLiquidity", + FeeMaker = "FeeMaker", + General = "General", + GlobalInsurance = "GlobalInsurance", + GlobalReward = "GlobalReward", + Insurance = "Insurance", + LockWithdraw = "LockWithdraw", + Margin = "Margin", + PendingTransfers = "PendingTransfers", + RewardLpReceivedFees = "RewardLpReceivedFees", + RewardMakerReceivedFees = "RewardMakerReceivedFees", + RewardMarketProposers = "RewardMarketProposers", + RewardTakerPaidFees = "RewardTakerPaidFees", + Settlement = "Settlement", +} + +export enum NodeStatus { + NonValidator = "NonValidator", + Validator = "Validator", +} + +/** + * Reason for the proposal being rejected by the core node + */ +export enum ProposalRejectionReason { + CloseTimeTooLate = "CloseTimeTooLate", + CloseTimeTooSoon = "CloseTimeTooSoon", + CouldNotInstantiateMarket = "CouldNotInstantiateMarket", + EnactTimeTooLate = "EnactTimeTooLate", + EnactTimeTooSoon = "EnactTimeTooSoon", + IncompatibleTimestamps = "IncompatibleTimestamps", + InsufficientTokens = "InsufficientTokens", + InvalidAsset = "InvalidAsset", + InvalidAssetDetails = "InvalidAssetDetails", + InvalidFeeAmount = "InvalidFeeAmount", + InvalidFutureMaturityTimestamp = "InvalidFutureMaturityTimestamp", + InvalidFutureProduct = "InvalidFutureProduct", + InvalidInstrumentSecurity = "InvalidInstrumentSecurity", + InvalidRiskParameter = "InvalidRiskParameter", + InvalidShape = "InvalidShape", + MajorityThresholdNotReached = "MajorityThresholdNotReached", + MarketMissingLiquidityCommitment = "MarketMissingLiquidityCommitment", + MissingBuiltinAssetField = "MissingBuiltinAssetField", + MissingCommitmentAmount = "MissingCommitmentAmount", + MissingERC20ContractAddress = "MissingERC20ContractAddress", + NetworkParameterInvalidKey = "NetworkParameterInvalidKey", + NetworkParameterInvalidValue = "NetworkParameterInvalidValue", + NetworkParameterValidationFailed = "NetworkParameterValidationFailed", + NoProduct = "NoProduct", + NoRiskParameters = "NoRiskParameters", + NoTradingMode = "NoTradingMode", + NodeValidationFailed = "NodeValidationFailed", + OpeningAuctionDurationTooLarge = "OpeningAuctionDurationTooLarge", + OpeningAuctionDurationTooSmall = "OpeningAuctionDurationTooSmall", + ParticipationThresholdNotReached = "ParticipationThresholdNotReached", + ProductMaturityIsPassed = "ProductMaturityIsPassed", + UnsupportedProduct = "UnsupportedProduct", + UnsupportedTradingMode = "UnsupportedTradingMode", +} + +/** + * Various states a proposal can transition through: + * Open -> + * - Passed -> Enacted. + * - Rejected. + * Proposal can enter Failed state from any other state. + */ +export enum ProposalState { + Declined = "Declined", + Enacted = "Enacted", + Failed = "Failed", + Open = "Open", + Passed = "Passed", + Rejected = "Rejected", + WaitingForNodeVote = "WaitingForNodeVote", +} + +/** + * The status of the stake linking + */ +export enum StakeLinkingStatus { + Accepted = "Accepted", + Pending = "Pending", + Rejected = "Rejected", +} + +export enum VoteValue { + No = "No", + Yes = "Yes", +} + +/** + * The status of a withdrawal + */ +export enum WithdrawalStatus { + Finalized = "Finalized", + Open = "Open", + Rejected = "Rejected", +} + +//============================================================== +// END Enums and Input Objects +//============================================================== diff --git a/apps/token/src/app-loader.tsx b/apps/token/src/app-loader.tsx new file mode 100644 index 000000000..2c06ea95f --- /dev/null +++ b/apps/token/src/app-loader.tsx @@ -0,0 +1,153 @@ +import * as Sentry from '@sentry/react'; +import { Splash } from '@vegaprotocol/ui-toolkit'; +import { useVegaWallet, useEagerConnect } from '@vegaprotocol/wallet'; +import { useWeb3React } from '@web3-react/core'; +import React from 'react'; +import { useTranslation } from 'react-i18next'; + +import { SplashError } from './components/splash-error'; +import { SplashLoader } from './components/splash-loader'; +import { Flags } from './config'; +import { + AppStateActionType, + useAppState, +} from './contexts/app-state/app-state-context'; +import { useContracts } from './contexts/contracts/contracts-context'; +import { useRefreshAssociatedBalances } from './hooks/use-refresh-associated-balances'; +import { getDataNodeUrl } from './lib/get-data-node-url'; +import { Connectors } from './lib/vega-connectors'; + +export const AppLoader = ({ children }: { children: React.ReactElement }) => { + const { t } = useTranslation(); + const { account } = useWeb3React(); + const { keypair } = useVegaWallet(); + const { appDispatch } = useAppState(); + const { token, staking, vesting } = useContracts(); + const setAssociatedBalances = useRefreshAssociatedBalances(); + const [balancesLoaded, setBalancesLoaded] = React.useState(false); + const vegaConnecting = useEagerConnect(Connectors); + + const loaded = balancesLoaded && !vegaConnecting; + + React.useEffect(() => { + const run = async () => { + try { + const [ + supply, + totalAssociatedWallet, + totalAssociatedVesting, + decimals, + ] = await Promise.all([ + token.totalSupply(), + staking.totalStaked(), + vesting.totalStaked(), + token.decimals(), + ]); + appDispatch({ + type: AppStateActionType.SET_TOKEN, + decimals, + totalSupply: supply, + totalAssociated: totalAssociatedWallet.plus(totalAssociatedVesting), + }); + setBalancesLoaded(true); + } catch (err) { + Sentry.captureException(err); + } + }; + + if (!Flags.NETWORK_DOWN) { + run(); + } + }, [token, appDispatch, staking, vesting]); + + React.useEffect(() => { + if (account && keypair) { + setAssociatedBalances(account, keypair.pub); + } + }, [setAssociatedBalances, account, keypair]); + + React.useEffect(() => { + const { base } = getDataNodeUrl(); + const networkLimitsEndpoint = new URL('/network/limits', base).href; + const statsEndpoint = new URL('/statistics', base).href; + + // eslint-disable-next-line + let interval: any = null; + + const getNetworkLimits = async () => { + try { + const [networkLimits, stats] = await Promise.all([ + fetch(networkLimitsEndpoint).then((res) => res.json()), + fetch(statsEndpoint).then((res) => res.json()), + ]); + + const restoreBlock = Number( + networkLimits.networkLimits.bootstrapBlockCount + ); + const currentBlock = Number(stats.statistics.blockHeight); + + if (currentBlock <= restoreBlock) { + appDispatch({ + type: AppStateActionType.SET_BANNER_MESSAGE, + message: t('networkRestoring', { + bootstrapBlockCount: restoreBlock, + }), + }); + + if (!interval) { + startPoll(); + } + } else { + appDispatch({ + type: AppStateActionType.SET_BANNER_MESSAGE, + message: '', + }); + + if (interval) { + stopPoll(); + } + } + } catch (err) { + Sentry.captureException(err); + } + }; + + const stopPoll = () => { + clearInterval(interval); + interval = null; + }; + + const startPoll = () => { + interval = setInterval(() => { + getNetworkLimits(); + }, 10000); + }; + + // Only begin polling if network limits flag is set, as this is a new API not yet on mainnet 7/3/22 + if (Flags.NETWORK_LIMITS) { + getNetworkLimits(); + } + + return () => { + stopPoll(); + }; + }, [appDispatch, t]); + + if (Flags.NETWORK_DOWN) { + return ( + + + + ); + } + + if (!loaded) { + return ( + + + + ); + } + + return children; +}; diff --git a/apps/token/src/app.scss b/apps/token/src/app.scss new file mode 100644 index 000000000..ab4149e28 --- /dev/null +++ b/apps/token/src/app.scss @@ -0,0 +1,14 @@ +@import "./styles/colors"; + +.app { + max-width: 1300px; + margin: 0 auto; + display: grid; + grid-template-rows: min-content 1fr min-content; + min-height: 100%; + + @media (min-width: 960px) { + border-left: 1px solid $white; + border-right: 1px solid $white; + } +} diff --git a/apps/token/src/app.tsx b/apps/token/src/app.tsx new file mode 100644 index 000000000..78d6d686c --- /dev/null +++ b/apps/token/src/app.tsx @@ -0,0 +1,58 @@ +import './i18n'; +import './app.scss'; + +import React from 'react'; +import { BrowserRouter as Router } from 'react-router-dom'; + +import { AppLoader } from './app-loader'; +import { AppBanner } from './components/app-banner'; +import { AppFooter } from './components/app-footer'; +import { BalanceManager } from './components/balance-manager'; +import { EthWallet } from './components/eth-wallet'; +import { GraphQlProvider } from './components/graphql-provider'; +import { TemplateSidebar } from './components/page-templates/template-sidebar'; +import { TransactionModal } from './components/transactions-modal'; +import { VegaWallet } from './components/vega-wallet'; +import { Web3Connector } from './components/web3-connector'; +import { AppStateProvider } from './contexts/app-state/app-state-provider'; +import { ContractsProvider } from './contexts/contracts/contracts-provider'; +import { AppRouter } from './routes'; +import { Web3Provider } from '@vegaprotocol/web3'; +import { Connectors } from './lib/web3-connectors'; +import { VegaWalletDialogs } from './components/vega-wallet-dialogs'; +import { VegaWalletProvider } from '@vegaprotocol/wallet'; + +function App() { + const sideBar = React.useMemo(() => [, ], []); + return ( + + + + + + + + + +
+ + + + + +
+ + +
+
+
+
+
+
+
+
+
+ ); +} + +export default App; diff --git a/apps/token/src/assets/apple-touch-icon.png b/apps/token/src/assets/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..50cdf778219be9f8d123803a6a78e94f06ede5ef GIT binary patch literal 1405 zcmeAS@N?(olHy`uVBq!ia0vp^TR@ltNH9n&i+l&9SkfJR9T^xl_H+M9WCik>lDyqr z82-2SpV<%Ov6p!Iy0SlG;uK_-JAVA75d#DBHcuDFkcwMx=bXUpdfMD#CAjrCV2Y%Ytp9v#y!hm(OeO zO1W2-t!ACO{L61ky_2)g@0+V)JiE3Z>^7jy3=9wU7aSDtUY{7twA16W$D;UqnX?k- zoW2?%>lr=w;QhEF39X%msnOj!SIyfe&f8;_w$yvY$GXH1G1eZ%KmXmGb?W?Te`nA5 zDx;N4rq9!T*S#gc#waWG){IG)(;vwPZcX#{Zk1Kr>bVXO`lfu(X;XLU zyW|J$%4btTzP7q-)cb7M=xJ`ZJtuRsQC*({#u*WS|auPzMX0hzFV<-;;r^e zU#{#ZRXX&tEPVg^sIC5fD=r5$-pEzZUG>qr2#~+Jfx(%4ai9dH%mD)H(UhAzQ8KCvQzDn6vZ1veoHV?e01W z2&KK7Z?NZdO>)p(j)?CfH#p6H-wJUzsdUab9R)e?_{p4-ruzPpVy0T(%WIYc3w#D`%B#Z`m0@X z&Ya0vnK&!jR?Fewe*LK2QU|H4n>%eAAK!~wW`FmgZ-1;?y3naDzL)=>7d!S@-qmTz zKHH2J-%5VUoCZ47*~$c*at=(K^6meGu8uEv)6=(Z{n+&1=eGIP)O60L;_qj^TUWO= zi7P+n*SRglP&w_ z0QHE&^rWN~Cl_TFlw{`TF}P$F7vv;Xic3%30aPLZQ<9sQSDKcXTvA$;S_D%wQ|jeS zpc+BAn*5a19GK*fIdc?%lHpY$5hX#1KmQSvtKoG{O!Dd*vfu&nPBA|Ey4&c@k2(d}rco|k= zID{7wHxd?}L;fVBC!sRLH}jN7o|#GByl+`u>0f=--IWITnj(aVzeEW6WZK^qX$nyk z#rJ*2nD6_FqO|e8Y41o71OTvYyQ(VAc~w=mZMX5hX%7LWY36y(IWLOBvaCk{%d(21 z;GE}qZklF4Kv|Ypn)MWb4$89p1_<9R`hRax-n_@#?S?OzQra;sdI4s$89FG6!Z3_i zIv`D%qtR%;-^X!$I2?Ano#%Pm?G{N7eY5}^GG$q!_xp)Y-U zGr;}nO{dc*-bGOa09lq>0As8hFdmOjr&F4yNs=s=OT#c0i-oGHn4_wy<2dvAd@`9} zKBe?{JZ4#TyB$;!n l`#+N)2>46vo@if6KLM-Rp`fg+D69Yg002ovPDHLkV1lX(_mKbq literal 0 HcmV?d00001 diff --git a/apps/token/src/assets/logo192.png b/apps/token/src/assets/logo192.png new file mode 100644 index 0000000000000000000000000000000000000000..a229d08bab862389a65336a5227724f0e70577a2 GIT binary patch literal 1517 zcmeAS@N?(olHy`uVBq!ia0vp^2SAtuNHCOdH@*#|SkfJR9T^xl_H+M9WCik>lDyqr z82-2SpV<%Ov6p!Iy0SlG;uK_--*DjO5}jp^bRf21z({#{<|FU3C`@7}-Db17N4XhGAXW339z#kGqbG0Q)8nR}$< zdf`K-S0SYvCS~~_`JX@CZ|SPK(5rV#cLlq$0BweXI(G}_s*}-GQDwQojS*#?J5{;1 zn61+dsoe7`%_8%!`IlRZWZd5W_T=hhy1Urgx~|iS|9`bn;@|Gt_NqE{j{Q4JR%Zn) zDE{%n>VL;wDnjc@RzCG4UT!b^Tv%~9oy1t*6dE#GBE%kr>uB(>3T0Z{> ztN6SvOX5%LI~*dii<8^$wEkN586BamGljgr6wP+47iygKNiFPz!>R*k7#Xt_5_nnG zG&YzDY+z%$=5RoYBZ8R|4NWSr!>Wj(*CXu<#Zm;k1{9R)fPVg2v*u9r2fJuvn4!HWBJpQfyvJjZsg zQmM9|FYAhs#jadZTdi{6n}{vk`5t|{^F?p@YB!2bW<;=Yp~($pnB?A_a5njOlo z$Nv2E^6GBKmFw2XyRK9(T-uzSmbLxs=7~ltrWN(mH!f9fED&Jc zwIRvp$QqU`rnPC?S9D#8|DxtEv_7)n=0lm?*PiYa{vWXL>>cLxd@aVtcphkk`^qsM z-YZtTM}C3_&rz#{C;6IxQzX;GBUuhj-+M^smu@RZ=l^#a$KPl)H}tgKQxICT@J#6+ z7oW8kFU+sw3cdP;>oOO|>EG7ci{eg)W`A41YUSqJe?GCTOnLY3)fF~Lzx{dnaqh3@ z*7tqc^763pb`_3Szg2xb+Z0VIM7MZNH_QF9Sjs)$-iDif?_U8WrAasT8#fhrEA@X( zd!i+>dIn#^%pEh?C+`rBMoye7T(j&`mahDNhV{MIPQ~_PEKMBy7B)!6!Hv8|NItaOSe<*7Nz4-{}yw@vMd9` zkF`Izd}q2<Y?Yi}P+63jo>9W!3}Y!c78K;9DtP84 z>**+fY<{w3{~VwmahRTz)Z*l#%z~24{5%Gi%;JKa#7c4LsXKs5Bw$K%6Z1;b5|c|x zi&BeVYGz8kya`kz2v?Jzl9~gP{4r;a0#Gu%DkP#LD6w3jpeR2r6X=SP%7Rn{pk2uf z3>9-8f8yaN4Aam!<$wB&=hGktW@T=@WNu+)VeiQz%)$yT4JL { + const { t } = useTranslation(); + const addSupported = useAddAssetSupported(); + return ( + +
+ {addSupported ? ( + <> +

+ +

+
+
+ {t('Or')}
+
+ + ) : null} +

+ {t( + 'The token address is {{address}}. Hit the add token button in your ERC20 wallet and enter this address.', + { + address: ADDRESSES.lockedAddress, + } + )} +

+
+
+ ); +}; diff --git a/apps/token/src/components/add-locked-token/index.tsx b/apps/token/src/components/add-locked-token/index.tsx new file mode 100644 index 000000000..2a9a3251d --- /dev/null +++ b/apps/token/src/components/add-locked-token/index.tsx @@ -0,0 +1 @@ +export { AddLockedTokenAddress } from "./add-locked-token"; diff --git a/apps/token/src/components/add-token-button/add-token-button.tsx b/apps/token/src/components/add-token-button/add-token-button.tsx new file mode 100644 index 000000000..c7c2b5a8f --- /dev/null +++ b/apps/token/src/components/add-token-button/add-token-button.tsx @@ -0,0 +1,68 @@ +import { Button } from '@vegaprotocol/ui-toolkit'; +import { useTranslation } from 'react-i18next'; + +import { useAddAssetToWallet } from '../../hooks/use-add-asset-to-wallet'; + +export const AddTokenButtonLink = ({ + address, + symbol, + decimals, + image, +}: { + address: string; + symbol: string; + decimals: number; + image: string; +}) => { + const { t } = useTranslation(); + const { add, addSupported } = useAddAssetToWallet( + address, + symbol, + decimals, + image + ); + if (!addSupported) { + return null; + } + return ( + + ); +}; + +export const AddTokenButton = ({ + address, + symbol, + decimals, + image, + size = 32, + className = '', +}: { + address: string; + symbol: string; + decimals: number; + image: string; + size?: number; + className?: string; +}) => { + const { add, addSupported } = useAddAssetToWallet( + address, + symbol, + decimals, + image + ); + if (!addSupported) { + return null; + } + return ( + + ); +}; diff --git a/apps/token/src/components/add-token-button/index.tsx b/apps/token/src/components/add-token-button/index.tsx new file mode 100644 index 000000000..6af59fca9 --- /dev/null +++ b/apps/token/src/components/add-token-button/index.tsx @@ -0,0 +1 @@ +export { AddTokenButton, AddTokenButtonLink } from "./add-token-button"; diff --git a/apps/token/src/components/app-banner/app-banner.scss b/apps/token/src/components/app-banner/app-banner.scss new file mode 100644 index 000000000..711982ad5 --- /dev/null +++ b/apps/token/src/components/app-banner/app-banner.scss @@ -0,0 +1,19 @@ +@import "../../styles/colors"; + +.app-banner { + background: $white; + padding: 10px; + color: $text-color-inverse; + + p { + margin: 0; + } + + &__icon { + position: relative; + top: 1px; + color: $vega-red3; + font-size: 14px; + margin-right: 5px; + } +} diff --git a/apps/token/src/components/app-banner/app-banner.tsx b/apps/token/src/components/app-banner/app-banner.tsx new file mode 100644 index 000000000..2bc534eeb --- /dev/null +++ b/apps/token/src/components/app-banner/app-banner.tsx @@ -0,0 +1,24 @@ +import "./app-banner.scss"; + +import { useAppState } from "../../contexts/app-state/app-state-context"; +import { Error } from "../icons"; + +export const AppBanner = () => { + const { + appState: { bannerMessage }, + } = useAppState(); + + // Return empty div so that grid placement remains correct + if (!bannerMessage) return
; + + return ( +
+

+ + + + {bannerMessage} +

+
+ ); +}; diff --git a/apps/token/src/components/app-banner/index.ts b/apps/token/src/components/app-banner/index.ts new file mode 100644 index 000000000..e33d38cb4 --- /dev/null +++ b/apps/token/src/components/app-banner/index.ts @@ -0,0 +1 @@ +export * from "./app-banner"; diff --git a/apps/token/src/components/app-footer/app-footer.scss b/apps/token/src/components/app-footer/app-footer.scss new file mode 100644 index 000000000..5d32264ec --- /dev/null +++ b/apps/token/src/components/app-footer/app-footer.scss @@ -0,0 +1,12 @@ +.app-footer { + padding: 20px; + font-size: 14px; + + > p { + margin-bottom: 7px; + + &:last-child { + margin: 0; + } + } +} diff --git a/apps/token/src/components/app-footer/app-footer.tsx b/apps/token/src/components/app-footer/app-footer.tsx new file mode 100644 index 000000000..7e87e124f --- /dev/null +++ b/apps/token/src/components/app-footer/app-footer.tsx @@ -0,0 +1,24 @@ +import './app-footer.scss'; + +import { Trans } from 'react-i18next'; + +import { Links } from '../../config'; + +export const AppFooter = () => { + return ( + + ); +}; diff --git a/apps/token/src/components/app-footer/index.ts b/apps/token/src/components/app-footer/index.ts new file mode 100644 index 000000000..498d563a3 --- /dev/null +++ b/apps/token/src/components/app-footer/index.ts @@ -0,0 +1 @@ +export * from "./app-footer"; diff --git a/apps/token/src/components/balance-manager/balance-manager.tsx b/apps/token/src/components/balance-manager/balance-manager.tsx new file mode 100644 index 000000000..6f9ced1c9 --- /dev/null +++ b/apps/token/src/components/balance-manager/balance-manager.tsx @@ -0,0 +1,70 @@ +import * as Sentry from "@sentry/react"; +import { useWeb3React } from "@web3-react/core"; +import React from "react"; + +import { ADDRESSES } from "../../config"; +import { + AppStateActionType, + useAppState, +} from "../../contexts/app-state/app-state-context"; +import { useContracts } from "../../contexts/contracts/contracts-context"; +import { useGetAssociationBreakdown } from "../../hooks/use-get-association-breakdown"; +import { useGetUserTrancheBalances } from "../../hooks/use-get-user-tranche-balances"; +import { BigNumber } from "../../lib/bignumber"; + +export const BalanceManager = ({ children }: any) => { + const contracts = useContracts(); + const { account } = useWeb3React(); + const { appDispatch } = useAppState(); + + const getUserTrancheBalances = useGetUserTrancheBalances( + account || "", + contracts?.vesting + ); + const getAssociationBreakdown = useGetAssociationBreakdown( + account || "", + contracts?.staking, + contracts?.vesting + ); + + // update balances on connect to Ethereum + React.useEffect(() => { + const updateBalances = async () => { + if (!account) return; + try { + const [balance, walletBalance, lien, allowance] = await Promise.all([ + contracts.vesting.getUserBalanceAllTranches(account), + contracts.token.balanceOf(account), + contracts.vesting.getLien(account), + contracts.token.allowance(account, ADDRESSES.stakingBridge), + ]); + appDispatch({ + type: AppStateActionType.UPDATE_ACCOUNT_BALANCES, + balance: new BigNumber(balance), + walletBalance, + lien, + allowance, + }); + } catch (err) { + Sentry.captureException(err); + } + }; + + updateBalances(); + }, [appDispatch, contracts?.token, contracts?.vesting, account]); + + // This use effect hook is very expensive and is kept separate to prevent expensive reloading of data. + React.useEffect(() => { + if (account) { + getUserTrancheBalances(); + } + }, [account, getUserTrancheBalances]); + + React.useEffect(() => { + if (account) { + getAssociationBreakdown(); + } + }, [account, getAssociationBreakdown]); + + return children; +}; diff --git a/apps/token/src/components/balance-manager/index.ts b/apps/token/src/components/balance-manager/index.ts new file mode 100644 index 000000000..aa3c1d1c0 --- /dev/null +++ b/apps/token/src/components/balance-manager/index.ts @@ -0,0 +1 @@ +export * from "./balance-manager"; diff --git a/apps/token/src/components/bullet-header/bullet-header.scss b/apps/token/src/components/bullet-header/bullet-header.scss new file mode 100644 index 000000000..515302787 --- /dev/null +++ b/apps/token/src/components/bullet-header/bullet-header.scss @@ -0,0 +1,20 @@ +@import "../../styles/colors"; + +.bullet-header { + font-size: 16px; + border-top: 1px solid $white; + padding: 8px 0 25px 0; + text-transform: uppercase; + font-weight: 300; + margin: 35px 0 0 0; + width: 100%; + + &::before { + content: ""; + display: inline-block; + width: 12px; + height: 12px; + margin-right: 10px; + background-color: $white; + } +} diff --git a/apps/token/src/components/bullet-header/bullet-header.tsx b/apps/token/src/components/bullet-header/bullet-header.tsx new file mode 100644 index 000000000..ac787b45a --- /dev/null +++ b/apps/token/src/components/bullet-header/bullet-header.tsx @@ -0,0 +1,17 @@ +import "./bullet-header.scss"; + +import React from "react"; + +interface BulletHeaderProps { + tag: "h1" | "h2" | "h3" | "h4" | "h5" | "h6"; + children: React.ReactNode; + style?: React.CSSProperties; +} + +export const BulletHeader = ({ tag, children, style }: BulletHeaderProps) => { + return React.createElement( + tag, + { className: "bullet-header", style }, + children + ); +}; diff --git a/apps/token/src/components/bullet-header/index.ts b/apps/token/src/components/bullet-header/index.ts new file mode 100644 index 000000000..40cccd520 --- /dev/null +++ b/apps/token/src/components/bullet-header/index.ts @@ -0,0 +1 @@ +export * from "./bullet-header"; diff --git a/apps/token/src/components/connected-vega-key/connected-vega-key.scss b/apps/token/src/components/connected-vega-key/connected-vega-key.scss new file mode 100644 index 000000000..4bb2fc606 --- /dev/null +++ b/apps/token/src/components/connected-vega-key/connected-vega-key.scss @@ -0,0 +1,5 @@ +@import "../../styles/colors"; + +.connected-vega-key { + color: $white; +} diff --git a/apps/token/src/components/connected-vega-key/index.tsx b/apps/token/src/components/connected-vega-key/index.tsx new file mode 100644 index 000000000..d2d8c2907 --- /dev/null +++ b/apps/token/src/components/connected-vega-key/index.tsx @@ -0,0 +1,17 @@ +import "./connected-vega-key.scss"; + +import { useTranslation } from "react-i18next"; + +import { ConnectToVega } from "../../routes/staking/connect-to-vega"; + +export const ConnectedVegaKey = ({ pubKey }: { pubKey: string | null }) => { + const { t } = useTranslation(); + return ( +
+ + {pubKey ? t("Connected Vega key") : } + +

{pubKey}

+
+ ); +}; diff --git a/apps/token/src/components/country-selector/country-data.js b/apps/token/src/components/country-selector/country-data.js new file mode 100644 index 000000000..00d461fb2 --- /dev/null +++ b/apps/token/src/components/country-selector/country-data.js @@ -0,0 +1,1004 @@ +const COUNTRIES = [ + { + name: "Afghanistan", + code: "AF", + }, + { + name: "Albania", + code: "AL", + }, + { + name: "Algeria", + code: "DZ", + }, + { + name: "American Samoa", + code: "AS", + }, + { + name: "Andorra", + code: "AD", + }, + { + name: "Angola", + code: "AO", + }, + { + name: "Anguilla", + code: "AI", + }, + { + name: "Antarctica", + code: "AQ", + }, + { + name: "Antigua and Barbuda", + code: "AG", + }, + { + name: "Argentina", + code: "AR", + }, + { + name: "Armenia", + code: "AM", + }, + { + name: "Aruba", + code: "AW", + }, + { + name: "Australia", + code: "AU", + }, + { + name: "Austria", + code: "AT", + }, + { + name: "Azerbaijan", + code: "AZ", + }, + { + name: "Bahamas (the)", + code: "BS", + }, + { + name: "Bahrain", + code: "BH", + }, + { + name: "Bangladesh", + code: "BD", + }, + { + name: "Barbados", + code: "BB", + }, + { + name: "Belarus", + code: "BY", + }, + { + name: "Belgium", + code: "BE", + }, + { + name: "Belize", + code: "BZ", + }, + { + name: "Benin", + code: "BJ", + }, + { + name: "Bermuda", + code: "BM", + }, + { + name: "Bhutan", + code: "BT", + }, + { + name: "Bolivia (Plurinational State of)", + code: "BO", + }, + { + name: "Bonaire, Sint Eustatius and Saba", + code: "BQ", + }, + { + name: "Bosnia and Herzegovina", + code: "BA", + }, + { + name: "Botswana", + code: "BW", + }, + { + name: "Bouvet Island", + code: "BV", + }, + { + name: "Brazil", + code: "BR", + }, + { + name: "British Indian Ocean Territory (the)", + code: "IO", + }, + { + name: "Brunei Darussalam", + code: "BN", + }, + { + name: "Bulgaria", + code: "BG", + }, + { + name: "Burkina Faso", + code: "BF", + }, + { + name: "Burundi", + code: "BI", + }, + { + name: "Cabo Verde", + code: "CV", + }, + { + name: "Cambodia", + code: "KH", + }, + { + name: "Cameroon", + code: "CM", + }, + { + name: "Canada", + code: "CA", + }, + { + name: "Cayman Islands (the)", + code: "KY", + }, + { + name: "Central African Republic (the)", + code: "CF", + }, + { + name: "Chad", + code: "TD", + }, + { + name: "Chile", + code: "CL", + }, + { + name: "China", + code: "CN", + }, + { + name: "Christmas Island", + code: "CX", + }, + { + name: "Cocos (Keeling) Islands (the)", + code: "CC", + }, + { + name: "Colombia", + code: "CO", + }, + { + name: "Comoros (the)", + code: "KM", + }, + { + name: "Congo (the Democratic Republic of the)", + code: "CD", + }, + { + name: "Congo (the)", + code: "CG", + }, + { + name: "Cook Islands (the)", + code: "CK", + }, + { + name: "Costa Rica", + code: "CR", + }, + { + name: "Croatia", + code: "HR", + }, + { + name: "Crimea Region (the)", + code: "RC", + }, + { + name: "Cuba", + code: "CU", + }, + { + name: "Curaçao", + code: "CW", + }, + { + name: "Cyprus", + code: "CY", + }, + { + name: "Czechia", + code: "CZ", + }, + { + name: "Côte d'Ivoire", + code: "CI", + }, + { + name: "Denmark", + code: "DK", + }, + { + name: "Djibouti", + code: "DJ", + }, + { + name: "Dominica", + code: "DM", + }, + { + name: "Dominican Republic (the)", + code: "DO", + }, + { + name: "Ecuador", + code: "EC", + }, + { + name: "Egypt", + code: "EG", + }, + { + name: "El Salvador", + code: "SV", + }, + { + name: "Equatorial Guinea", + code: "GQ", + }, + { + name: "Eritrea", + code: "ER", + }, + { + name: "Estonia", + code: "EE", + }, + { + name: "Eswatini", + code: "SZ", + }, + { + name: "Ethiopia", + code: "ET", + }, + { + name: "Falkland Islands (the) [Malvinas]", + code: "FK", + }, + { + name: "Faroe Islands (the)", + code: "FO", + }, + { + name: "Fiji", + code: "FJ", + }, + { + name: "Finland", + code: "FI", + }, + { + name: "France", + code: "FR", + }, + { + name: "French Guiana", + code: "GF", + }, + { + name: "French Polynesia", + code: "PF", + }, + { + name: "French Southern Territories (the)", + code: "TF", + }, + { + name: "Gabon", + code: "GA", + }, + { + name: "Gambia (the)", + code: "GM", + }, + { + name: "Georgia", + code: "GE", + }, + { + name: "Germany", + code: "DE", + }, + { + name: "Ghana", + code: "GH", + }, + { + name: "Gibraltar", + code: "GI", + }, + { + name: "Greece", + code: "GR", + }, + { + name: "Greenland", + code: "GL", + }, + { + name: "Grenada", + code: "GD", + }, + { + name: "Guadeloupe", + code: "GP", + }, + { + name: "Guam", + code: "GU", + }, + { + name: "Guatemala", + code: "GT", + }, + { + name: "Guernsey", + code: "GG", + }, + { + name: "Guinea", + code: "GN", + }, + { + name: "Guinea-Bissau", + code: "GW", + }, + { + name: "Guyana", + code: "GY", + }, + { + name: "Haiti", + code: "HT", + }, + { + name: "Heard Island and McDonald Islands", + code: "HM", + }, + { + name: "Holy See (the)", + code: "VA", + }, + { + name: "Honduras", + code: "HN", + }, + { + name: "Hong Kong", + code: "HK", + }, + { + name: "Hungary", + code: "HU", + }, + { + name: "Iceland", + code: "IS", + }, + { + name: "India", + code: "IN", + }, + { + name: "Indonesia", + code: "ID", + }, + { + name: "Iran (Islamic Republic of)", + code: "IR", + }, + { + name: "Iraq", + code: "IQ", + }, + { + name: "Ireland", + code: "IE", + }, + { + name: "Isle of Man", + code: "IM", + }, + { + name: "Israel", + code: "IL", + }, + { + name: "Italy", + code: "IT", + }, + { + name: "Jamaica", + code: "JM", + }, + { + name: "Japan", + code: "JP", + }, + { + name: "Jersey", + code: "JE", + }, + { + name: "Jordan", + code: "JO", + }, + { + name: "Kazakhstan", + code: "KZ", + }, + { + name: "Kenya", + code: "KE", + }, + { + name: "Kiribati", + code: "KI", + }, + { + name: "Korea (the Democratic People's Republic of)", + code: "KP", + }, + { + name: "Korea (the Republic of)", + code: "KR", + }, + { + name: "Kuwait", + code: "KW", + }, + { + name: "Kyrgyzstan", + code: "KG", + }, + { + name: "Lao People's Democratic Republic (the)", + code: "LA", + }, + { + name: "Latvia", + code: "LV", + }, + { + name: "Lebanon", + code: "LB", + }, + { + name: "Lesotho", + code: "LS", + }, + { + name: "Liberia", + code: "LR", + }, + { + name: "Libya", + code: "LY", + }, + { + name: "Liechtenstein", + code: "LI", + }, + { + name: "Lithuania", + code: "LT", + }, + { + name: "Luxembourg", + code: "LU", + }, + { + name: "Macao", + code: "MO", + }, + { + name: "Madagascar", + code: "MG", + }, + { + name: "Malawi", + code: "MW", + }, + { + name: "Malaysia", + code: "MY", + }, + { + name: "Maldives", + code: "MV", + }, + { + name: "Mali", + code: "ML", + }, + { + name: "Malta", + code: "MT", + }, + { + name: "Marshall Islands (the)", + code: "MH", + }, + { + name: "Martinique", + code: "MQ", + }, + { + name: "Mauritania", + code: "MR", + }, + { + name: "Mauritius", + code: "MU", + }, + { + name: "Mayotte", + code: "YT", + }, + { + name: "Mexico", + code: "MX", + }, + { + name: "Micronesia (Federated States of)", + code: "FM", + }, + { + name: "Moldova (the Republic of)", + code: "MD", + }, + { + name: "Monaco", + code: "MC", + }, + { + name: "Mongolia", + code: "MN", + }, + { + name: "Montenegro", + code: "ME", + }, + { + name: "Montserrat", + code: "MS", + }, + { + name: "Morocco", + code: "MA", + }, + { + name: "Mozambique", + code: "MZ", + }, + { + name: "Myanmar", + code: "MM", + }, + { + name: "Namibia", + code: "NA", + }, + { + name: "Nauru", + code: "NR", + }, + { + name: "Nepal", + code: "NP", + }, + { + name: "Netherlands (the)", + code: "NL", + }, + { + name: "New Caledonia", + code: "NC", + }, + { + name: "New Zealand", + code: "NZ", + }, + { + name: "Nicaragua", + code: "NI", + }, + { + name: "Niger (the)", + code: "NE", + }, + { + name: "Nigeria", + code: "NG", + }, + { + name: "Niue", + code: "NU", + }, + { + name: "Norfolk Island", + code: "NF", + }, + { + name: "North Macedonia", + code: "MK", + }, + { + name: "Northern Mariana Islands (the)", + code: "MP", + }, + { + name: "Norway", + code: "NO", + }, + { + name: "Oman", + code: "OM", + }, + { + name: "Pakistan", + code: "PK", + }, + { + name: "Palau", + code: "PW", + }, + { + name: "Palestine, State of", + code: "PS", + }, + { + name: "Panama", + code: "PA", + }, + { + name: "Papua New Guinea", + code: "PG", + }, + { + name: "Paraguay", + code: "PY", + }, + { + name: "Peru", + code: "PE", + }, + { + name: "Philippines (the)", + code: "PH", + }, + { + name: "Pitcairn", + code: "PN", + }, + { + name: "Poland", + code: "PL", + }, + { + name: "Portugal", + code: "PT", + }, + { + name: "Puerto Rico", + code: "PR", + }, + { + name: "Qatar", + code: "QA", + }, + { + name: "Romania", + code: "RO", + }, + { + name: "Russian Federation (excluding Crimea)", + code: "RU", + }, + { + name: "Rwanda", + code: "RW", + }, + { + name: "Réunion", + code: "RE", + }, + { + name: "Saint Barthélemy", + code: "BL", + }, + { + name: "Saint Helena, Ascension and Tristan da Cunha", + code: "SH", + }, + { + name: "Saint Kitts and Nevis", + code: "KN", + }, + { + name: "Saint Lucia", + code: "LC", + }, + { + name: "Saint Martin (French part)", + code: "MF", + }, + { + name: "Saint Pierre and Miquelon", + code: "PM", + }, + { + name: "Saint Vincent and the Grenadines", + code: "VC", + }, + { + name: "Samoa", + code: "WS", + }, + { + name: "San Marino", + code: "SM", + }, + { + name: "Sao Tome and Principe", + code: "ST", + }, + { + name: "Saudi Arabia", + code: "SA", + }, + { + name: "Senegal", + code: "SN", + }, + { + name: "Serbia", + code: "RS", + }, + { + name: "Seychelles", + code: "SC", + }, + { + name: "Sierra Leone", + code: "SL", + }, + { + name: "Singapore", + code: "SG", + }, + { + name: "Sint Maarten (Dutch part)", + code: "SX", + }, + { + name: "Slovakia", + code: "SK", + }, + { + name: "Slovenia", + code: "SI", + }, + { + name: "Solomon Islands", + code: "SB", + }, + { + name: "Somalia", + code: "SO", + }, + { + name: "South Africa", + code: "ZA", + }, + { + name: "South Georgia and the South Sandwich Islands", + code: "GS", + }, + { + name: "South Sudan", + code: "SS", + }, + { + name: "Spain", + code: "ES", + }, + { + name: "Sri Lanka", + code: "LK", + }, + { + name: "Sudan (the)", + code: "SD", + }, + { + name: "Suriname", + code: "SR", + }, + { + name: "Svalbard and Jan Mayen", + code: "SJ", + }, + { + name: "Sweden", + code: "SE", + }, + { + name: "Switzerland", + code: "CH", + }, + { + name: "Syrian Arab Republic (the)", + code: "SY", + }, + { + name: "Taiwan (Province of China)", + code: "TW", + }, + { + name: "Tajikistan", + code: "TJ", + }, + { + name: "Tanzania, the United Republic of", + code: "TZ", + }, + { + name: "Thailand", + code: "TH", + }, + { + name: "Timor-Leste", + code: "TL", + }, + { + name: "Togo", + code: "TG", + }, + { + name: "Tokelau", + code: "TK", + }, + { + name: "Tonga", + code: "TO", + }, + { + name: "Trinidad and Tobago", + code: "TT", + }, + { + name: "Tunisia", + code: "TN", + }, + { + name: "Turkey", + code: "TR", + }, + { + name: "Turkmenistan", + code: "TM", + }, + { + name: "Turks and Caicos Islands (the)", + code: "TC", + }, + { + name: "Tuvalu", + code: "TV", + }, + { + name: "Uganda", + code: "UG", + }, + { + name: "Ukraine (excluding Crimea)", + code: "UA", + }, + { + name: "United Arab Emirates (the)", + code: "AE", + }, + { + name: "United Kingdom of Great Britain and Northern Ireland (the)", + code: "GB", + }, + { + name: "United States Minor Outlying Islands (the)", + code: "UM", + }, + { + name: "United States of America (the)", + code: "US", + }, + { + name: "Uruguay", + code: "UY", + }, + { + name: "Uzbekistan", + code: "UZ", + }, + { + name: "Vanuatu", + code: "VU", + }, + { + name: "Venezuela (Bolivarian Republic of)", + code: "VE", + }, + { + name: "Viet Nam", + code: "VN", + }, + { + name: "Virgin Islands (British)", + code: "VG", + }, + { + name: "Virgin Islands (U.S.)", + code: "VI", + }, + { + name: "Wallis and Futuna", + code: "WF", + }, + { + name: "Western Sahara*", + code: "EH", + }, + { + name: "Yemen", + code: "YE", + }, + { + name: "Zambia", + code: "ZM", + }, + { + name: "Zimbabwe", + code: "ZW", + }, + { + name: "Åland Islands", + code: "AX", + }, +]; + +export default COUNTRIES; diff --git a/apps/token/src/components/country-selector/country-selector.tsx b/apps/token/src/components/country-selector/country-selector.tsx new file mode 100644 index 000000000..e24c56088 --- /dev/null +++ b/apps/token/src/components/country-selector/country-selector.tsx @@ -0,0 +1,65 @@ +import { MenuItem } from '@blueprintjs/core'; +import type { ItemPredicate } from '@blueprintjs/select'; +import { Suggest } from '@blueprintjs/select'; + +import type { ICountry } from '../../routes/claim/claim-form'; +import countryData from './country-data'; + +const CountrySuggest = Suggest.ofType(); + +export const filterCountry: ItemPredicate = ( + query, + country, + _index, + exactMatch +) => { + const normalizedTitle = country.name.toLowerCase(); + const normalizedQuery = query.toLowerCase(); + + if (exactMatch) { + return normalizedTitle === normalizedQuery; + } else if (query.length === 2) { + return normalizedQuery === country.code.toLowerCase(); + } else { + return normalizedTitle.indexOf(normalizedQuery) >= 0; + } +}; + +export interface CountrySelectorProps { + onSelectCountry: (countryCode: string) => void; + code: string | null; +} + +export const CountrySelector = ({ + onSelectCountry, + code, +}: CountrySelectorProps) => { + return ( +
+ c.code === code) || countryData[0] + } + items={countryData} + itemRenderer={(item, { handleClick, modifiers }) => ( + + )} + onItemSelect={(item) => { + onSelectCountry(item.code); + }} + inputValueRenderer={(item) => item.name} + popoverProps={{ minimal: true }} + noResults={} + itemPredicate={filterCountry} + fill={true} + /> +
+ ); +}; diff --git a/apps/token/src/components/country-selector/index.ts b/apps/token/src/components/country-selector/index.ts new file mode 100644 index 000000000..f773a8340 --- /dev/null +++ b/apps/token/src/components/country-selector/index.ts @@ -0,0 +1 @@ +export { CountrySelector } from "./country-selector"; \ No newline at end of file diff --git a/apps/token/src/components/epoch-countdown/epoch-countdown.scss b/apps/token/src/components/epoch-countdown/epoch-countdown.scss new file mode 100644 index 000000000..c8b635d77 --- /dev/null +++ b/apps/token/src/components/epoch-countdown/epoch-countdown.scss @@ -0,0 +1,50 @@ +@import '../../styles/colors'; + +.epoch-countdown { + h3 { + font-size: 16px; + font-weight: normal; + margin: 0 0 5px; + } + + p { + font-size: 12px; + margin: 5px 0 0; + } + + .bp3-progress-bar { + border: 1px solid $white; + border-radius: 0; + height: 21px; + + .bp3-progress-meter { + border-radius: 0; + + .bp3-dark & { + background-color: $white; + } + } + } + + &__title { + display: flex; + h3:first-child { + flex: 1; + } + } + + &__arrow { + flex: 1; + text-align: center; + + img { + display: inline-block; + width: 5px; + transform: rotate(180deg); + } + } + + &__time-range { + display: flex; + } +} diff --git a/apps/token/src/components/epoch-countdown/epoch-countdown.tsx b/apps/token/src/components/epoch-countdown/epoch-countdown.tsx new file mode 100644 index 000000000..4ee5d5871 --- /dev/null +++ b/apps/token/src/components/epoch-countdown/epoch-countdown.tsx @@ -0,0 +1,93 @@ +import './epoch-countdown.scss'; + +import { Intent, ProgressBar } from '@blueprintjs/core'; +import { format, formatDistanceStrict } from 'date-fns'; +import * as React from 'react'; +import { useTranslation } from 'react-i18next'; + +import arrow from '../../images/back.png'; +import { DATE_FORMAT_DETAILED } from '../../lib/date-formats'; + +export interface EpochCountdownProps { + id: string; + startDate: Date; + endDate: Date; + containerClass?: string; +} + +export function EpochCountdown({ + id, + startDate, + endDate, + containerClass, +}: EpochCountdownProps) { + const { t } = useTranslation(); + const [now, setNow] = React.useState(Date.now()); + + // number between 0 and 1 for percentage progress + const progress = React.useMemo(() => { + const start = startDate.getTime(); + const end = endDate.getTime(); + + if (now > end) { + return 1; + } + + // round it to make testing easier + return Number(((now - start) / (end - start)).toFixed(2)); + }, [startDate, endDate, now]); + + // format end date into readable 'time until' text + const endsIn = React.useMemo(() => { + if (endDate.getTime() > now) { + return formatDistanceStrict(now, endDate); + } + return 0; + }, [now, endDate]); + + // start interval updating current time stamp until + // its passed the end date + React.useEffect(() => { + const interval = setInterval(() => { + const d = Date.now(); + setNow(d); + + if (d > endDate.getTime()) { + clearInterval(interval); + } + }, 1000); + + return () => clearInterval(interval); + }, [endDate]); + + return ( +
+
+

+ {t('Epoch')} {id} +

+

+ {endsIn + ? t('Next epoch in {{endText}}', { endText: endsIn }) + : t('Awaiting next epoch')} +

+
+ +
+

{format(startDate, DATE_FORMAT_DETAILED)}

+
+ arrow +
+

{format(endDate, DATE_FORMAT_DETAILED)}

+
+
+ ); +} diff --git a/apps/token/src/components/epoch-countdown/index.tsx b/apps/token/src/components/epoch-countdown/index.tsx new file mode 100644 index 000000000..271d3bcc6 --- /dev/null +++ b/apps/token/src/components/epoch-countdown/index.tsx @@ -0,0 +1 @@ +export * from "./epoch-countdown"; diff --git a/apps/token/src/components/eth-connect-prompt/eth-connect-promp.tsx b/apps/token/src/components/eth-connect-prompt/eth-connect-promp.tsx new file mode 100644 index 000000000..c7c2ac3ee --- /dev/null +++ b/apps/token/src/components/eth-connect-prompt/eth-connect-promp.tsx @@ -0,0 +1,33 @@ +import { Button } from '@vegaprotocol/ui-toolkit'; +import { useTranslation } from 'react-i18next'; + +import { + AppStateActionType, + useAppState, +} from '../../contexts/app-state/app-state-context'; + +interface EthConnectPrompProps { + children?: React.ReactNode; +} + +export const EthConnectPrompt = ({ children }: EthConnectPrompProps) => { + const { t } = useTranslation(); + const { appDispatch } = useAppState(); + return ( + <> + {children} + + + ); +}; diff --git a/apps/token/src/components/eth-connect-prompt/index.ts b/apps/token/src/components/eth-connect-prompt/index.ts new file mode 100644 index 000000000..9b1e50d96 --- /dev/null +++ b/apps/token/src/components/eth-connect-prompt/index.ts @@ -0,0 +1 @@ +export * from "./eth-connect-promp"; diff --git a/apps/token/src/components/eth-wallet-container/eth-wallet-container.scss b/apps/token/src/components/eth-wallet-container/eth-wallet-container.scss new file mode 100644 index 000000000..c7c9af876 --- /dev/null +++ b/apps/token/src/components/eth-wallet-container/eth-wallet-container.scss @@ -0,0 +1,10 @@ +.eth-wallet-container { + flex-direction: row; + display: inline-flex; + align-items: center; + justify-content: center; + + svg.icon { + width: 1.5rem; + } +} diff --git a/apps/token/src/components/eth-wallet-container/eth-wallet-container.tsx b/apps/token/src/components/eth-wallet-container/eth-wallet-container.tsx new file mode 100644 index 000000000..87943abf0 --- /dev/null +++ b/apps/token/src/components/eth-wallet-container/eth-wallet-container.tsx @@ -0,0 +1,42 @@ +import './eth-wallet-container.scss'; + +import { useWeb3React } from '@web3-react/core'; +import React from 'react'; +import { useTranslation } from 'react-i18next'; + +import { + AppStateActionType, + useAppState, +} from '../../contexts/app-state/app-state-context'; +import { Ethereum } from '../icons'; +import { Button } from '@vegaprotocol/ui-toolkit'; + +interface EthWalletContainerProps { + children: (address: string) => React.ReactElement; +} + +export const EthWalletContainer = ({ children }: EthWalletContainerProps) => { + const { t } = useTranslation(); + const { appDispatch } = useAppState(); + const { account } = useWeb3React(); + + if (!account) { + return ( + + ); + } + + return children(account); +}; diff --git a/apps/token/src/components/eth-wallet-container/index.ts b/apps/token/src/components/eth-wallet-container/index.ts new file mode 100644 index 000000000..9a437c7c2 --- /dev/null +++ b/apps/token/src/components/eth-wallet-container/index.ts @@ -0,0 +1 @@ +export * from "./eth-wallet-container"; diff --git a/apps/token/src/components/eth-wallet/eth-wallet.scss b/apps/token/src/components/eth-wallet/eth-wallet.scss new file mode 100644 index 000000000..203e7ae8f --- /dev/null +++ b/apps/token/src/components/eth-wallet/eth-wallet.scss @@ -0,0 +1,25 @@ +@import "../../styles/colors"; +@import "../../styles/fonts"; + +.eth-wallet { + &__pending-tx-button { + display: flex; + gap: 5px; + justify-content: space-between; + padding: 5px; + background: $black; + color: $white; + flex-wrap: nowrap; + white-space: nowrap; + + &:hover { + background: $black; + } + } + + &__curr-key { + font-family: $font-mono; + padding: 0 8px; + text-align: right; + } +} diff --git a/apps/token/src/components/eth-wallet/eth-wallet.tsx b/apps/token/src/components/eth-wallet/eth-wallet.tsx new file mode 100644 index 000000000..2c5c0e410 --- /dev/null +++ b/apps/token/src/components/eth-wallet/eth-wallet.tsx @@ -0,0 +1,244 @@ +import './eth-wallet.scss'; + +import { useWeb3React } from '@web3-react/core'; +import React from 'react'; +import { useTranslation } from 'react-i18next'; +import { Link } from 'react-router-dom'; + +import { Colors } from '../../config'; +import { + AppStateActionType, + useAppState, +} from '../../contexts/app-state/app-state-context'; +import { usePendingTransactions } from '../../hooks/use-pending-transactions'; +import vegaVesting from '../../images/vega_vesting.png'; +import vegaWhite from '../../images/vega_white.png'; +import { BigNumber } from '../../lib/bignumber'; +import { truncateMiddle } from '../../lib/truncate-middle'; +import { Routes } from '../../routes/router-config'; +import { LockedProgress } from '../locked-progress'; +import { + WalletCard, + WalletCardActions, + WalletCardAsset, + WalletCardContent, + WalletCardHeader, + WalletCardRow, +} from '../wallet-card'; +import { Button, Loader } from '@vegaprotocol/ui-toolkit'; + +const removeLeadingAddressSymbol = (key: string) => { + if (key && key.length > 2 && key.slice(0, 2) === '0x') { + return truncateMiddle(key.substring(2)); + } + return truncateMiddle(key); +}; + +const AssociatedAmounts = ({ + associations, + notAssociated, +}: { + associations: { [key: string]: BigNumber }; + notAssociated: BigNumber; +}) => { + const { t } = useTranslation(); + const vestingAssociationByVegaKey = React.useMemo( + () => + Object.entries(associations).filter(([, amount]) => + amount.isGreaterThan(0) + ), + [associations] + ); + const associationAmounts = React.useMemo(() => { + const totals = vestingAssociationByVegaKey.map(([, amount]) => amount); + const associated = BigNumber.sum.apply(null, [new BigNumber(0), ...totals]); + + return { + total: associated.plus(notAssociated), + associated, + notAssociated, + }; + }, [notAssociated, vestingAssociationByVegaKey]); + + return ( + <> + + {vestingAssociationByVegaKey.length ? ( + <> +
+ + {vestingAssociationByVegaKey.map(([key, amount]) => { + return ( + + ); + })} + + ) : null} + + ); +}; + +const ConnectedKey = () => { + const { t } = useTranslation(); + const { appState } = useAppState(); + const { walletBalance, totalLockedBalance, totalVestedBalance } = appState; + + const totalInVestingContract = React.useMemo(() => { + return totalLockedBalance.plus(totalVestedBalance); + }, [totalLockedBalance, totalVestedBalance]); + + const notAssociatedInContract = React.useMemo(() => { + const totals = Object.values( + appState.associationBreakdown.vestingAssociations + ); + const associated = BigNumber.sum.apply(null, [new BigNumber(0), ...totals]); + return totalInVestingContract.minus(associated); + }, [ + appState.associationBreakdown.vestingAssociations, + totalInVestingContract, + ]); + + const walletWithAssociations = React.useMemo(() => { + const totals = Object.values( + appState.associationBreakdown.stakingAssociations + ); + const associated = BigNumber.sum.apply(null, [new BigNumber(0), ...totals]); + return walletBalance.plus(associated); + }, [appState.associationBreakdown.stakingAssociations, walletBalance]); + + return ( + <> + {totalVestedBalance.plus(totalLockedBalance).isEqualTo(0) ? null : ( + <> + + + + )} + {!Object.keys(appState.associationBreakdown.vestingAssociations) + .length ? null : ( + + )} + + {!Object.keys( + appState.associationBreakdown.stakingAssociations + ) ? null : ( + + )} + + + + + + + + + + ); +}; + +export const EthWallet = () => { + const { t } = useTranslation(); + const { appDispatch } = useAppState(); + const { account, connector } = useWeb3React(); + const pendingTxs = usePendingTransactions(); + + return ( + + +

{t('ethereumKey')}

+ {account && ( +
+
{truncateMiddle(account)}
+ {pendingTxs && ( +
+ +
+ )} +
+ )} +
+ + {account ? ( + + ) : ( + + )} + {account && ( + + + + )} + +
+ ); +}; diff --git a/apps/token/src/components/eth-wallet/index.tsx b/apps/token/src/components/eth-wallet/index.tsx new file mode 100644 index 000000000..e59f68dd6 --- /dev/null +++ b/apps/token/src/components/eth-wallet/index.tsx @@ -0,0 +1 @@ +export * from "./eth-wallet"; diff --git a/apps/token/src/components/graphql-provider/graphql-provider.tsx b/apps/token/src/components/graphql-provider/graphql-provider.tsx new file mode 100644 index 000000000..1fa750690 --- /dev/null +++ b/apps/token/src/components/graphql-provider/graphql-provider.tsx @@ -0,0 +1,12 @@ +import { ApolloProvider } from "@apollo/client"; +import React from "react"; + +import { client } from "../../lib/apollo-client"; + +export const GraphQlProvider = ({ + children, +}: { + children: React.ReactNode; +}) => { + return {children}; +}; diff --git a/apps/token/src/components/graphql-provider/index.ts b/apps/token/src/components/graphql-provider/index.ts new file mode 100644 index 000000000..1949e5f16 --- /dev/null +++ b/apps/token/src/components/graphql-provider/index.ts @@ -0,0 +1 @@ +export * from "./graphql-provider"; diff --git a/apps/token/src/components/heading/heading.tsx b/apps/token/src/components/heading/heading.tsx new file mode 100644 index 000000000..31c843164 --- /dev/null +++ b/apps/token/src/components/heading/heading.tsx @@ -0,0 +1,15 @@ +export interface HeadingProps { + title?: string; +} + +export const Heading = ({ title }: HeadingProps) => { + if (!title) return null; + + return ( +
+

+ {title} +

+
+ ); +}; diff --git a/apps/token/src/components/heading/index.ts b/apps/token/src/components/heading/index.ts new file mode 100644 index 000000000..8ce959fdc --- /dev/null +++ b/apps/token/src/components/heading/index.ts @@ -0,0 +1 @@ +export { Heading } from "./heading"; diff --git a/apps/token/src/components/icons/error.tsx b/apps/token/src/components/icons/error.tsx new file mode 100644 index 000000000..50a0836d1 --- /dev/null +++ b/apps/token/src/components/icons/error.tsx @@ -0,0 +1,8 @@ +export const Error = () => ( + + + +); diff --git a/apps/token/src/components/icons/ethereum.tsx b/apps/token/src/components/icons/ethereum.tsx new file mode 100644 index 000000000..410ff1e73 --- /dev/null +++ b/apps/token/src/components/icons/ethereum.tsx @@ -0,0 +1,16 @@ +export function Ethereum() { + return ( + + + + + + + + + ); +} diff --git a/apps/token/src/components/icons/hand-up.tsx b/apps/token/src/components/icons/hand-up.tsx new file mode 100644 index 000000000..893264950 --- /dev/null +++ b/apps/token/src/components/icons/hand-up.tsx @@ -0,0 +1,10 @@ +export const HandUp = () => ( + + + +); diff --git a/apps/token/src/components/icons/icons.scss b/apps/token/src/components/icons/icons.scss new file mode 100644 index 000000000..71a858af0 --- /dev/null +++ b/apps/token/src/components/icons/icons.scss @@ -0,0 +1,4 @@ +svg.icon { + fill: currentColor; + width: 1em; +} diff --git a/apps/token/src/components/icons/index.ts b/apps/token/src/components/icons/index.ts new file mode 100644 index 000000000..101ed8ed8 --- /dev/null +++ b/apps/token/src/components/icons/index.ts @@ -0,0 +1,6 @@ +import "./icons.scss"; + +export * from "./error"; +export * from "./tick"; +export * from "./hand-up"; +export * from "./ethereum"; diff --git a/apps/token/src/components/icons/tick.tsx b/apps/token/src/components/icons/tick.tsx new file mode 100644 index 000000000..1adb05972 --- /dev/null +++ b/apps/token/src/components/icons/tick.tsx @@ -0,0 +1,9 @@ +export const Tick = () => ( + + + +); diff --git a/apps/token/src/components/key-value-table/index.tsx b/apps/token/src/components/key-value-table/index.tsx new file mode 100644 index 000000000..dd4b60a05 --- /dev/null +++ b/apps/token/src/components/key-value-table/index.tsx @@ -0,0 +1 @@ +export { KeyValueTable, KeyValueTableRow } from './key-value-table' diff --git a/apps/token/src/components/key-value-table/key-value-table.scss b/apps/token/src/components/key-value-table/key-value-table.scss new file mode 100644 index 000000000..c91ce5185 --- /dev/null +++ b/apps/token/src/components/key-value-table/key-value-table.scss @@ -0,0 +1,85 @@ +@import "../../styles/colors"; +@import "../../styles/fonts"; + +$ns: "key-value-table"; + +.#{$ns}__header, +.#{$ns}__footer { + margin: 10px 0 5px; +} + +.#{$ns}__header { + font-size: 16px; + font-weight: 500; + margin-bottom: 7px; +} + +.#{$ns}__row { + @media (max-width: 640px) { + display: flex; + flex-direction: column; + } +} + +.#{$ns} { + width: 100%; + border-collapse: collapse; + border-spacing: 0; + margin-bottom: 10px; + word-break: break-all; + + tr { + border-bottom: 1px solid $white; + + &:first-child { + border-top: 1px solid $white; + } + } + + th { + word-break: break-word; + text-align: left; + font-weight: 500; + color: $white; + text-transform: uppercase; + } + + th, + td { + vertical-align: top; + padding: 5px; + } + + td { + color: $text-color; + text-align: right; + } + + .bp3-tag { + margin: 0 5px 5px 0; + } + + &.#{$ns}--numerical { + td { + font-family: $font-mono; + + & button { + font-family: $font-main; + } + } + } + + &.#{$ns}--muted { + tr { + border-color: $gray1; + + &:first-child { + border-top: none; + } + + &:last-child { + border-bottom: none; + } + } + } +} diff --git a/apps/token/src/components/key-value-table/key-value-table.test.tsx b/apps/token/src/components/key-value-table/key-value-table.test.tsx new file mode 100644 index 000000000..cf2a3e552 --- /dev/null +++ b/apps/token/src/components/key-value-table/key-value-table.test.tsx @@ -0,0 +1,66 @@ +import { render, screen } from "@testing-library/react"; + +import { KeyValueTable, KeyValueTableRow } from "./key-value-table"; + +const props = { + title: "Title", +}; + +it("Renders the correct elements", () => { + const { container } = render( + + + My label + My value + + + My label 2 + My value 2 + + + ); + + expect(screen.getByText(props.title)).toBeInTheDocument(); + + expect(container.querySelector(".key-value-table")).toBeInTheDocument(); + expect(container.querySelectorAll(".key-value-table__row")).toHaveLength(2); + + const rows = container.querySelectorAll(".key-value-table__row"); + // Row 1 + expect(rows[0].firstChild).toHaveTextContent("My label"); + expect(rows[0].children[1]).toHaveTextContent("My value"); + + // Row 2 + expect(rows[1].firstChild).toHaveTextContent("My label 2"); + expect(rows[1].children[1]).toHaveTextContent("My value 2"); +}); + +it("Applies numeric class if prop is passed", () => { + render( + + + My label + My value + + + ); + + expect(screen.getByTestId("key-value-table")).toHaveClass( + "key-value-table--numerical" + ); +}); + +it("Applies muted class if prop is passed", () => { + render( + + + My label + My value + + + ); + + expect(screen.getByTestId("key-value-table")).toHaveClass( + "key-value-table--muted" + ); +}); diff --git a/apps/token/src/components/key-value-table/key-value-table.tsx b/apps/token/src/components/key-value-table/key-value-table.tsx new file mode 100644 index 000000000..9f9f840b8 --- /dev/null +++ b/apps/token/src/components/key-value-table/key-value-table.tsx @@ -0,0 +1,58 @@ +import "./key-value-table.scss"; + +import * as React from "react"; + +export interface KeyValueTableProps + extends React.HTMLAttributes { + title?: string; + numerical?: boolean; // makes all values monospace + children: React.ReactNode; + muted?: boolean; +} + +export const KeyValueTable = ({ + title, + numerical, + children, + muted, + className, + ...rest +}: KeyValueTableProps) => { + return ( + + {title &&

{title}

} + + {children} +
+
+ ); +}; + +export interface KeyValueTableRowProps + extends React.HTMLAttributes { + children: [React.ReactNode, React.ReactNode]; + className?: string; +} + +export const KeyValueTableRow = ({ + children, + className, + ...rest +}: KeyValueTableRowProps) => { + return ( + + {children[0]} + {children[1]} + + ); +}; diff --git a/apps/token/src/components/loader/index.ts b/apps/token/src/components/loader/index.ts new file mode 100644 index 000000000..ee5286f0f --- /dev/null +++ b/apps/token/src/components/loader/index.ts @@ -0,0 +1 @@ +export * from "./loader"; diff --git a/apps/token/src/components/loader/loader.scss b/apps/token/src/components/loader/loader.scss new file mode 100644 index 000000000..74f26fa5a --- /dev/null +++ b/apps/token/src/components/loader/loader.scss @@ -0,0 +1,20 @@ +.loader { + display: flex; + flex-flow: row wrap; + width: 15px; + height: 15px; + + span { + display: block; + width: 5px; + height: 5px; + background: white; + opacity: 0; + } + + &--dark { + span { + background: black; + } + } +} diff --git a/apps/token/src/components/loader/loader.tsx b/apps/token/src/components/loader/loader.tsx new file mode 100644 index 000000000..321a96408 --- /dev/null +++ b/apps/token/src/components/loader/loader.tsx @@ -0,0 +1,35 @@ +import "./loader.scss"; + +import React from "react"; + +interface LoaderProps { + invert?: boolean; +} + +export const Loader = ({ invert = false }: LoaderProps) => { + const [, forceRender] = React.useState(false); + const className = ["loader", invert ? "loader--dark" : ""].join(" "); + + React.useEffect(() => { + const interval = setInterval(() => { + forceRender((x) => !x); + }, 100); + + return () => clearInterval(interval); + }, []); + + return ( + + {new Array(9).fill(null).map((_, i) => { + return ( + 0.5 ? 1 : 0, + }} + /> + ); + })} + + ); +}; diff --git a/apps/token/src/components/locked-progress/index.ts b/apps/token/src/components/locked-progress/index.ts new file mode 100644 index 000000000..7f5d99f73 --- /dev/null +++ b/apps/token/src/components/locked-progress/index.ts @@ -0,0 +1 @@ +export { LockedProgress } from "./locked-progress"; diff --git a/apps/token/src/components/locked-progress/locked-progress.scss b/apps/token/src/components/locked-progress/locked-progress.scss new file mode 100644 index 000000000..5d9e2a625 --- /dev/null +++ b/apps/token/src/components/locked-progress/locked-progress.scss @@ -0,0 +1,59 @@ +@import "../../styles/colors"; +@import "../../styles/fonts"; + +.tranche-item { + &__progress { + border-left: $white; + border-left-style: solid; + border-left-width: 1px; + border-right: $white; + border-right-style: solid; + border-right-width: 1px; + + &-contents { + display: flex; + justify-content: space-between; + gap: 0 5px; + font-family: $font-mono; + padding: 2px 5px 2px 5px; + color: $text-color-deemphasise; + + &-indicator { + display: inline-block; + width: 12px; + height: 12px; + border: 1px solid $black; + + &--left { + margin-right: 8px; + } + + &--right { + margin-left: 8px; + } + } + + &--light { + gap: 0; + padding: 2px 0; + color: $black; + } + } + } + + &__progress-bar { + display: flex; + + &--light { + border: 1px solid $black; + } + + &--locked { + height: 16px; + } + + &--unlocked { + height: 16px; + } + } +} diff --git a/apps/token/src/components/locked-progress/locked-progress.tsx b/apps/token/src/components/locked-progress/locked-progress.tsx new file mode 100644 index 000000000..482bba2cc --- /dev/null +++ b/apps/token/src/components/locked-progress/locked-progress.tsx @@ -0,0 +1,98 @@ +import './locked-progress.scss'; + +import React from 'react'; + +import { Colors } from '../../config'; +import { formatNumber } from '../../lib/format-number'; +import type { BigNumber } from '../../lib/bignumber'; + +export interface LockedProgressProps { + total: BigNumber; + locked: BigNumber; + unlocked: BigNumber; + leftLabel: string; + rightLabel: string; + leftColor?: string; + rightColor?: string; + light?: boolean; +} + +export const LockedProgress = ({ + total, + locked, + unlocked, + leftLabel, + rightLabel, + leftColor = Colors.PINK, + rightColor = Colors.GREEN, + light = false, +}: LockedProgressProps) => { + const lockedPercentage = React.useMemo(() => { + return locked.div(total).times(100); + }, [total, locked]); + + const unlockedPercentage = React.useMemo(() => { + return unlocked.div(total).times(100); + }, [total, unlocked]); + + return ( +
+
+
+
+
+
+ +
+ {leftLabel} +
+ + {rightLabel} +
+
+
+
+ {formatNumber(locked, 2)} + {formatNumber(unlocked, 2)} +
+
+ ); +}; diff --git a/apps/token/src/components/modal/index.ts b/apps/token/src/components/modal/index.ts new file mode 100644 index 000000000..031608e25 --- /dev/null +++ b/apps/token/src/components/modal/index.ts @@ -0,0 +1 @@ +export * from "./modal"; diff --git a/apps/token/src/components/modal/modal.scss b/apps/token/src/components/modal/modal.scss new file mode 100644 index 000000000..f27750f27 --- /dev/null +++ b/apps/token/src/components/modal/modal.scss @@ -0,0 +1,59 @@ +@import "../../styles/colors"; + +.modal { + left: calc(50vw - 200px); + margin: 10vh 0; + top: 0; + width: 400px; + background: $white; + color: $black; + + h1, + h2, + h3, + h4, + h5, + h6, + a { + color: $black; + } + + a:hover { + color: $black; + text-decoration: underline; + } + + &__title { + text-align: center; + border-bottom: solid 1px $white; + padding-bottom: 10px; + margin-top: 10px; + } + + &__content { + padding: 0 20px 20px 20px; + > :first-child { + margin-top: 0; + } + + > :last-child { + margin-bottom: 0; + } + } + + &--dark { + background-color: $black; + color: $white; + border: 1px solid $white; + + h1, + h2, + h3, + h4, + h5, + h6, + a { + color: $white; + } + } +} diff --git a/apps/token/src/components/modal/modal.tsx b/apps/token/src/components/modal/modal.tsx new file mode 100644 index 000000000..284a02136 --- /dev/null +++ b/apps/token/src/components/modal/modal.tsx @@ -0,0 +1,15 @@ +import "./modal.scss"; + +import React from "react"; + +interface ModalProps { + children: React.ReactNode; + title: string; +} + +export const Modal = ({ children, title }: ModalProps) => ( +
+

{title}

+
{children}
+
+); diff --git a/apps/token/src/components/nav/index.ts b/apps/token/src/components/nav/index.ts new file mode 100644 index 000000000..870d3745c --- /dev/null +++ b/apps/token/src/components/nav/index.ts @@ -0,0 +1 @@ +export * from "./nav"; diff --git a/apps/token/src/components/nav/nav.scss b/apps/token/src/components/nav/nav.scss new file mode 100644 index 000000000..cda5a4dd9 --- /dev/null +++ b/apps/token/src/components/nav/nav.scss @@ -0,0 +1,212 @@ +@import "../../styles/colors"; + +.nav { + padding: 20px; + padding: 10px !important; + border-bottom: 1px solid $white; + position: sticky; + top: 0; + background-color: $black; + z-index: 15; + + h1 { + padding: 0; + padding-left: 8px; + margin: 0; + color: $white; + font-weight: 400; + display: flex; + flex-direction: column; + justify-content: center; + } + + a { + display: flex; + flex-direction: column; + justify-content: center; + } + + &--inverted { + border-bottom: none; + background: $vega-yellow3 url("../../images/clouds.png"); + background-repeat: no-repeat; + background-size: cover; + background-position: 0 -300px; + + h1 { + color: $black; + } + } + + &__inner { + margin: 4px auto 0; + display: flex; + gap: 10px; + justify-content: space-between; + align-items: flex-start; + + @media (min-width: 960px) { + justify-content: flex-start; + margin-left: 8px; + } + } + + &__actions { + display: flex; + gap: 10px; + + @media (min-width: 960px) { + flex: 1 1 auto; + } + + > button { + background: none; + padding: 0; + } + } + + &__logo { + width: 30px; + + &-container { + text-transform: uppercase; + height: 30px; + display: inline-flex; + margin-left: 8px; + + @media (min-width: 960px) { + height: 40px; + } + } + + @media (min-width: 960px) { + width: 40px; + } + } + + &__drawer { + background-image: url("../../images/banner.png"); + display: flex; + flex-flow: column nowrap; + justify-content: space-between; + height: 100%; + overflow-y: scroll; + } + + &__drawer-section { + padding: 12px; + + &:first-child { + border-top: 0; + } + } + + &__drawer-button { + display: flex; + flex-flow: column nowrap; + gap: 4px; + + &:focus, + &:hover { + background: none; + outline: none; + } + + span { + display: block; + width: 30px; + height: 4px; + background: $white; + } + + &--inverted { + span { + background: $black; + } + } + } + + &__wallets-container { + display: flex; + gap: 10px; + + > button { + padding: 3px 10px; + font-size: 14px; + } + } +} + +.nav-links { + display: flex; + + .active { + background: $vega-yellow3; + color: $black; + } + + > a.active { + &:hover { + color: $black; + } + } + + > a { + color: $white; + text-decoration: none; + font-size: 16px; + } + + &--row { + flex-direction: row; + text-transform: uppercase; + + > a { + background: transparent; + padding: 3px 10px; + color: $white; + } + } + + &--column { + border-top: 1px solid $white; + flex-direction: column; + grid-gap: 0; + gap: 0; + + .active { + background: $vega-yellow3; + color: $black; + } + + > a { + display: block; + background: $black; + color: $white; + padding: 20px; + } + + > a:not(:first-child) { + border-top: 1px solid $white; + } + } + + &--inverted { + .active { + background: $black; + color: $white; + } + + > a { + color: $black; + text-decoration: none; + font-size: 16px; + } + + > a.active { + &:hover { + color: $white; + } + } + } +} diff --git a/apps/token/src/components/nav/nav.tsx b/apps/token/src/components/nav/nav.tsx new file mode 100644 index 000000000..fd5927027 --- /dev/null +++ b/apps/token/src/components/nav/nav.tsx @@ -0,0 +1,219 @@ +import './nav.scss'; + +import { Drawer } from '@blueprintjs/core'; +import debounce from 'lodash/debounce'; +import React from 'react'; +import { useTranslation } from 'react-i18next'; +import { Link, NavLink } from 'react-router-dom'; + +import { Flags } from '../../config'; +import { + AppStateActionType, + useAppState, +} from '../../contexts/app-state/app-state-context'; +import vegaWhite from '../../images/vega_white.png'; +import { Routes } from '../../routes/router-config'; +import { EthWallet } from '../eth-wallet'; +import { VegaWallet } from '../vega-wallet'; + +export const Nav = () => { + const [windowWidth, setWindowWidth] = React.useState(window.innerWidth); + const isDesktop = windowWidth > 959; + const inverted = Flags.FAIRGROUND; + + React.useEffect(() => { + const handleResizeDebounced = debounce(() => { + setWindowWidth(window.innerWidth); + }, 300); + + window.addEventListener('resize', handleResizeDebounced); + + return () => { + window.removeEventListener('resize', handleResizeDebounced); + }; + }, []); + + return ( +
+ {isDesktop && } +
+ {!isDesktop && } +
+ {isDesktop ? ( + + ) : ( + + )} +
+
+
+ ); +}; + +const NavHeader = ({ fairground }: { fairground: boolean }) => { + const { t } = useTranslation(); + + return ( +
+ + {fairground ? ( + + + + + + + + + + + + + + + + + + + + + ) : ( + Vega + )} + +

+ {fairground ? t('fairgroundTitle') : t('title')} +

+
+ ); +}; + +const NavDrawer = ({ inverted }: { inverted: boolean }) => { + const { appState, appDispatch } = useAppState(); + return ( + <> + + + appDispatch({ + type: AppStateActionType.SET_DRAWER, + isOpen: false, + }) + } + size="80%" + style={{ maxWidth: 420, border: '1px solid white' }} + > +
+
+
+ +
+
+ +
+
+ +
+
+ + ); +}; + +const NavLinks = ({ + isDesktop, + inverted, +}: { + isDesktop: boolean; + inverted: boolean; +}) => { + const { appDispatch } = useAppState(); + const { t } = useTranslation(); + const linkProps = { + onClick: () => + appDispatch({ type: AppStateActionType.SET_DRAWER, isOpen: false }), + }; + return ( + + ); +}; diff --git a/apps/token/src/components/page-templates/template-sidebar.scss b/apps/token/src/components/page-templates/template-sidebar.scss new file mode 100644 index 000000000..64dec56c7 --- /dev/null +++ b/apps/token/src/components/page-templates/template-sidebar.scss @@ -0,0 +1,53 @@ +@import "../../styles/colors"; + +.template-sidebar { + border-bottom: 1px solid $white; + + @media (min-width: 960px) { + display: grid; + grid-template-rows: auto minmax(600px, 1fr); + grid-template-columns: 1fr 450px; + } + + main { + padding: 20px; + } + + aside { + padding: 20px; + background-image: url("../../images/banner.png"); + background-size: 100% auto; + } + + aside { + border-left: 1px solid white; + } + + header { + grid-column: 1 / 3; + grid-row: 1 / 1; + } + + main { + grid-column: 1 / 2; + grid-row: 2 / 3; + } + + aside { + display: none; + + @media (min-width: 960px) { + display: block; + grid-column: 2 / 3; + grid-row: 1 / 3; + } + + section { + margin-bottom: 20px; + + &:last-child { + margin-bottom: 0; + } + } + } +} diff --git a/apps/token/src/components/page-templates/template-sidebar.tsx b/apps/token/src/components/page-templates/template-sidebar.tsx new file mode 100644 index 000000000..d45a4f06a --- /dev/null +++ b/apps/token/src/components/page-templates/template-sidebar.tsx @@ -0,0 +1,24 @@ +import "./template-sidebar.scss"; + +import React from "react"; + +import { Nav } from "../nav"; + +export interface TemplateSidebarProps { + children: React.ReactNode; + sidebar: React.ReactNode[]; +} + +export function TemplateSidebar({ children, sidebar }: TemplateSidebarProps) { + return ( +
+
+ ); +} diff --git a/apps/token/src/components/splash-error/index.ts b/apps/token/src/components/splash-error/index.ts new file mode 100644 index 000000000..0e0346e17 --- /dev/null +++ b/apps/token/src/components/splash-error/index.ts @@ -0,0 +1 @@ +export * from "./splash-error"; diff --git a/apps/token/src/components/splash-error/splash-error.scss b/apps/token/src/components/splash-error/splash-error.scss new file mode 100644 index 000000000..2df17b385 --- /dev/null +++ b/apps/token/src/components/splash-error/splash-error.scss @@ -0,0 +1,23 @@ +@import "../../styles/colors"; + +.splash-error__icon { + display: flex; + flex-direction: column; + gap: 10px; + align-items: center; + margin-bottom: 20px; + + span { + display: block; + width: 10px; + background: $white; + + &:first-child { + height: 30px; + } + + &:last-child { + height: 10px; + } + } +} diff --git a/apps/token/src/components/splash-error/splash-error.tsx b/apps/token/src/components/splash-error/splash-error.tsx new file mode 100644 index 000000000..6c8ca2087 --- /dev/null +++ b/apps/token/src/components/splash-error/splash-error.tsx @@ -0,0 +1,16 @@ +import "./splash-error.scss"; + +import { useTranslation } from "react-i18next"; + +export const SplashError = () => { + const { t } = useTranslation(); + return ( +
+
+ + +
+ {t("networkDown")} +
+ ); +}; diff --git a/apps/token/src/components/splash-loader/index.ts b/apps/token/src/components/splash-loader/index.ts new file mode 100644 index 000000000..05799d18e --- /dev/null +++ b/apps/token/src/components/splash-loader/index.ts @@ -0,0 +1 @@ +export * from "./splash-loader"; diff --git a/apps/token/src/components/splash-loader/splash-loader.scss b/apps/token/src/components/splash-loader/splash-loader.scss new file mode 100644 index 000000000..2dbfb3c06 --- /dev/null +++ b/apps/token/src/components/splash-loader/splash-loader.scss @@ -0,0 +1,22 @@ +@import "../../styles/colors"; + +.loading { + display: flex; + flex-direction: column; + align-items: center; + + &__animation { + display: flex; + flex-wrap: wrap; + width: 50px; + height: 50px; + margin-bottom: 20px; + + div { + width: 10px; + height: 10px; + background: white; + opacity: 0; + } + } +} diff --git a/apps/token/src/components/splash-loader/splash-loader.tsx b/apps/token/src/components/splash-loader/splash-loader.tsx new file mode 100644 index 000000000..ff1f7bae1 --- /dev/null +++ b/apps/token/src/components/splash-loader/splash-loader.tsx @@ -0,0 +1,32 @@ +import "./splash-loader.scss"; + +import React from "react"; + +export const SplashLoader = ({ text = "Loading" }: { text?: string }) => { + const [, forceRender] = React.useState(false); + React.useEffect(() => { + const interval = setInterval(() => { + forceRender((x) => !x); + }, 100); + + return () => clearInterval(interval); + }, []); + + return ( +
+
+ {new Array(25).fill(null).map((_, i) => { + return ( +
0.75 ? 1 : 0, + }} + /> + ); + })} +
+
{text}
+
+ ); +}; diff --git a/apps/token/src/components/staking-method-radio/index.tsx b/apps/token/src/components/staking-method-radio/index.tsx new file mode 100644 index 000000000..acf493284 --- /dev/null +++ b/apps/token/src/components/staking-method-radio/index.tsx @@ -0,0 +1,39 @@ +import { Radio, RadioGroup } from '@blueprintjs/core'; +import React from 'react'; +import { useTranslation } from 'react-i18next'; + +export enum StakingMethod { + Contract = 'Contract', + Wallet = 'Wallet', +} + +export const StakingMethodRadio = ({ + setSelectedStakingMethod, + selectedStakingMethod, +}: { + selectedStakingMethod: string; + setSelectedStakingMethod: React.Dispatch; +}) => { + const { t } = useTranslation(); + return ( + { + // @ts-ignore can't recognise .value + setSelectedStakingMethod(e.target.value); + }} + selectedValue={selectedStakingMethod} + > + + + + ); +}; diff --git a/apps/token/src/components/stateful-button/index.ts b/apps/token/src/components/stateful-button/index.ts new file mode 100644 index 000000000..3afd91b04 --- /dev/null +++ b/apps/token/src/components/stateful-button/index.ts @@ -0,0 +1 @@ +export * from "./stateful-button"; diff --git a/apps/token/src/components/stateful-button/stateful-button.scss b/apps/token/src/components/stateful-button/stateful-button.scss new file mode 100644 index 000000000..aa4126c57 --- /dev/null +++ b/apps/token/src/components/stateful-button/stateful-button.scss @@ -0,0 +1,12 @@ +@import "../../styles/colors"; + +.stateful-button { + display: flex; + justify-content: center; + align-items: center; + gap: 10px; + + &:disabled { + cursor: default; + } +} diff --git a/apps/token/src/components/stateful-button/stateful-button.tsx b/apps/token/src/components/stateful-button/stateful-button.tsx new file mode 100644 index 000000000..e74288df8 --- /dev/null +++ b/apps/token/src/components/stateful-button/stateful-button.tsx @@ -0,0 +1,11 @@ +import './stateful-button.scss'; + +import type { ButtonHTMLAttributes } from 'react'; +import { Button } from '@vegaprotocol/ui-toolkit'; + +export const StatefulButton = ( + props: ButtonHTMLAttributes +) => { + const classProp = props.className || ''; + return + )} +
+ ); +}; + +export const TokenInput = ({ + amount, + setAmount, + perform, + submitText, + currency, + + approveText, + allowance, + approve, + requireApproval = false, + maximum = new BigNumber('0'), + minimum = new BigNumber('0'), + approveTxState, + approveTxDispatch, +}: { + amount: string; + setAmount: React.Dispatch>; + perform: () => void; + submitText: string; + currency: string; + + requireApproval?: boolean; + maximum?: BigNumber; + minimum?: BigNumber; + allowance?: BigNumber; + approve?: () => void; + approveText?: string; + approveTxState?: TransactionState; + approveTxDispatch?: React.Dispatch; +}) => { + if ( + requireApproval && + (allowance == null || + approve == null || + !approveTxState || + !approveTxDispatch) + ) { + throw new Error( + 'If requires approval is true allowance, approve, approveTxState and approveDispatch props are required!' + ); + } + const isApproved = !new BigNumber(allowance!).isEqualTo(0); + const showApproveButton = + !isApproved || new BigNumber(amount).isGreaterThan(allowance!); + + const isDisabled = React.useMemo(() => { + if (requireApproval) { + return ( + !isApproved || + !amount || + new BigNumber(amount).isLessThanOrEqualTo('0') || + new BigNumber(amount).isGreaterThan(maximum) + ); + } + + return ( + !amount || + new BigNumber(amount).isLessThanOrEqualTo('0') || + new BigNumber(amount).isGreaterThan(maximum) || + new BigNumber(amount).isLessThan(minimum) + ); + }, [amount, isApproved, maximum, requireApproval, minimum]); + let approveContent = null; + + if (showApproveButton) { + if ( + approveTxDispatch && + approveTxState && + approveTxState.txState !== TxState.Default + ) { + approveContent = ( + + approveTxDispatch({ type: TransactionActionType.TX_RESET }) + } + /> + ); + } else { + approveContent = ( + + ); + } + } else if (requireApproval) { + approveContent = ( + + ); + } + + return ( + <> + + + + {approveContent ?
{approveContent}
: null} + + + ); +}; diff --git a/apps/token/src/components/transaction-button/index.ts b/apps/token/src/components/transaction-button/index.ts new file mode 100644 index 000000000..c8ff03de7 --- /dev/null +++ b/apps/token/src/components/transaction-button/index.ts @@ -0,0 +1 @@ +export * from "./transaction-button"; diff --git a/apps/token/src/components/transaction-button/transaction-button.scss b/apps/token/src/components/transaction-button/transaction-button.scss new file mode 100644 index 000000000..84020bccb --- /dev/null +++ b/apps/token/src/components/transaction-button/transaction-button.scss @@ -0,0 +1,57 @@ +@import "../../styles/colors"; + +.transaction-button { + margin-bottom: 20px; + + &__footer { + margin: 5px 0 0 0; + } + + &__txhash, + &__message { + margin: 0; + font-size: 14px; + } + + &__txhash { + display: flex; + justify-content: space-between; + align-items: flex-start; + } + + &__message { + padding: 5px 0 5px 7px; + border-left: 3px solid $vega-orange3; + + .icon { + color: $vega-orange3; + position: relative; + top: 2px; + margin-right: 5px; + } + } + + // Complete and Error states. Button is replaced with basic text + &__text { + display: flex; + justify-content: center; + align-items: center; + gap: 10px; + margin: 0; + padding: 12px 32px; + line-height: 1.15; + border: 1px solid transparent; // to make height the same as a button + } + + &--complete { + .icon { + color: $vega-green3; + } + } + + &--error { + .icon { + color: $vega-red3; + } + } +} diff --git a/apps/token/src/components/transaction-button/transaction-button.tsx b/apps/token/src/components/transaction-button/transaction-button.tsx new file mode 100644 index 000000000..fc955c5fa --- /dev/null +++ b/apps/token/src/components/transaction-button/transaction-button.tsx @@ -0,0 +1,147 @@ +import './transaction-button.scss'; + +import { useTranslation } from 'react-i18next'; + +import type { TransactionState } from '../../hooks/transaction-reducer'; +import { TxState } from '../../hooks/transaction-reducer'; +import { truncateMiddle } from '../../lib/truncate-middle'; +import { Button, EtherscanLink } from '@vegaprotocol/ui-toolkit'; +import { Error, HandUp, Tick } from '../icons'; +import { Loader } from '../loader'; +import { StatefulButton } from '../stateful-button'; + +interface TransactionButtonProps { + text: string; + transactionState: TransactionState; + /** txHash of the transaction if already complete */ + forceTxHash: string | null; + forceTxState?: TxState; + disabled?: boolean; + start: () => void; + reset: () => void; +} + +export const TransactionButton = ({ + text, + transactionState, + forceTxHash, + forceTxState, + disabled = false, + start, + reset, +}: TransactionButtonProps) => { + const { t } = useTranslation(); + const { txState, txData } = transactionState; + const root = 'transaction-button'; + const wrapperClassName = `${root} transaction-button--${txState.toLowerCase()}`; + const buttonClassName = `${root}__button fill`; + const textClassName = `${root}__text`; + const txHash = forceTxHash || txData.hash; + const state = forceTxState || txState; + + if (state === TxState.Complete) { + const className = `transaction-button transaction-button--${TxState.Complete.toLowerCase()}`; + return ( +
+

+ + {t('txButtonComplete')} +

+ +
+ ); + } + + // User as started transaction and we are awaiting confirmation from the users wallet + if (state === TxState.Requested) { + return ( +
+ + + {t('txButtonActionRequired')} + + +
+ ); + } + + if (state === TxState.Pending) { + return ( +
+ + + {t('txButtonAwaiting')} + + +
+ ); + } + + if (state === TxState.Error) { + return ( +
+

+ + {t('txButtonFailure')} + +

+ +
+ ); + } + + // Idle + return ( +
+ + {text} + + +
+ ); +}; + +interface TransactionButtonFooterProps { + txHash: string | null; + message?: string; +} + +export const TransactionButtonFooter = ({ + txHash, + message, +}: TransactionButtonFooterProps) => { + const { t } = useTranslation(); + + if (message) { + return ( +
+

+ + {message} +

+
+ ); + } + + if (txHash) { + return ( +
+

+ {t('transaction')} + +

+
+ ); + } + + return null; +}; diff --git a/apps/token/src/components/transaction-callout/index.ts b/apps/token/src/components/transaction-callout/index.ts new file mode 100644 index 000000000..26fbb77c2 --- /dev/null +++ b/apps/token/src/components/transaction-callout/index.ts @@ -0,0 +1 @@ +export { TransactionCallout } from "./transaction-callout"; diff --git a/apps/token/src/components/transaction-callout/transaction-callout.tsx b/apps/token/src/components/transaction-callout/transaction-callout.tsx new file mode 100644 index 000000000..07b85c0e5 --- /dev/null +++ b/apps/token/src/components/transaction-callout/transaction-callout.tsx @@ -0,0 +1,60 @@ +import type { TransactionState } from '../../hooks/transaction-reducer'; +import { TxState } from '../../hooks/transaction-reducer'; +import { TransactionComplete } from './transaction-complete'; +import { TransactionError } from './transaction-error'; +import { TransactionPending } from './transaction-pending'; +import { TransactionRequested } from './transaction-requested'; + +export const TransactionCallout = ({ + state, + reset, + completeHeading, + completeBody, + completeFooter, + pendingHeading, + pendingFooter, + pendingBody, +}: { + state: TransactionState; + reset: () => void; + completeHeading?: React.ReactElement | string; + completeBody?: React.ReactElement | string; + completeFooter?: React.ReactElement | string; + pendingHeading?: React.ReactElement | string; + pendingBody?: React.ReactElement | string; + pendingFooter?: React.ReactElement | string; +}) => { + // TODO use switch to kill dead code branches + if (state.txState === TxState.Error) { + return ( + + ); + } else if (state.txState === TxState.Pending) { + return ( + + ); + } else if (state.txState === TxState.Requested) { + return ; + } else if (state.txState === TxState.Complete) { + return ( + + ); + } + return null; +}; diff --git a/apps/token/src/components/transaction-callout/transaction-complete.tsx b/apps/token/src/components/transaction-callout/transaction-complete.tsx new file mode 100644 index 000000000..037e59a14 --- /dev/null +++ b/apps/token/src/components/transaction-callout/transaction-complete.tsx @@ -0,0 +1,32 @@ +import { Callout, Intent } from '@vegaprotocol/ui-toolkit'; +import { useTranslation } from 'react-i18next'; +import { EtherscanLink } from '@vegaprotocol/ui-toolkit'; +import type { ReactElement } from 'react'; + +export const TransactionComplete = ({ + hash, + heading, + footer, + body, +}: { + hash: string; + heading?: ReactElement | string; + footer?: ReactElement | string; + body?: ReactElement | string; +}) => { + const { t } = useTranslation(); + return ( + + {body &&

{body}

} +

+ +

+ LINK + {footer &&

{footer}

} +
+ ); +}; diff --git a/apps/token/src/components/transaction-callout/transaction-error.tsx b/apps/token/src/components/transaction-callout/transaction-error.tsx new file mode 100644 index 000000000..4ddf9b584 --- /dev/null +++ b/apps/token/src/components/transaction-callout/transaction-error.tsx @@ -0,0 +1,31 @@ +import { Button, Callout, Intent } from '@vegaprotocol/ui-toolkit'; +import { useTranslation } from 'react-i18next'; + +import { EtherscanLink } from '@vegaprotocol/ui-toolkit'; +import type { Error } from '../icons'; + +export interface TransactionErrorProps { + error: Error | null; + hash: string | null; + onActionClick: () => void; +} + +export const TransactionError = ({ + error, + hash, + onActionClick, +}: TransactionErrorProps) => { + const { t } = useTranslation(); + + return ( + +

{error ? error.message : t('Something went wrong')}

+ {hash ? ( +

+ +

+ ) : null} + +
+ ); +}; diff --git a/apps/token/src/components/transaction-callout/transaction-pending.tsx b/apps/token/src/components/transaction-callout/transaction-pending.tsx new file mode 100644 index 000000000..f9e3cf1cd --- /dev/null +++ b/apps/token/src/components/transaction-callout/transaction-pending.tsx @@ -0,0 +1,46 @@ +import React from 'react'; +import { Callout } from '@vegaprotocol/ui-toolkit'; +import { useTranslation } from 'react-i18next'; +import { EtherscanLink } from '@vegaprotocol/ui-toolkit'; + +export const TransactionPending = ({ + hash, + heading, + footer, + body, + confirmations, + requiredConfirmations, +}: { + hash: string; + confirmations: number | null; + requiredConfirmations: number | null; + heading?: React.ReactElement | string; + footer?: React.ReactElement | string; + body?: React.ReactElement | string; +}) => { + const { t } = useTranslation(); + const remainingConfirmations = React.useMemo(() => { + if (requiredConfirmations) { + return Math.max(0, requiredConfirmations - (confirmations || 0)); + } + return 0; + }, [confirmations, requiredConfirmations]); + const title = React.useMemo(() => { + const defaultTitle = heading || t('Transaction in progress'); + if (remainingConfirmations > 0) { + return `${defaultTitle}. ${t('blockCountdown', { + amount: remainingConfirmations, + })}`; + } + return defaultTitle; + }, [heading, remainingConfirmations, t]); + return ( + + {body &&

{body}

} +

+ +

+ {footer &&

{footer}

} +
+ ); +}; diff --git a/apps/token/src/components/transaction-callout/transaction-requested.tsx b/apps/token/src/components/transaction-callout/transaction-requested.tsx new file mode 100644 index 000000000..300b65705 --- /dev/null +++ b/apps/token/src/components/transaction-callout/transaction-requested.tsx @@ -0,0 +1,13 @@ +import { Callout, Intent } from '@vegaprotocol/ui-toolkit'; +import { useTranslation } from 'react-i18next'; + +export const TransactionRequested = () => { + const { t } = useTranslation(); + return ( + + ); +}; diff --git a/apps/token/src/components/transactions-modal/index.ts b/apps/token/src/components/transactions-modal/index.ts new file mode 100644 index 000000000..e40ee751e --- /dev/null +++ b/apps/token/src/components/transactions-modal/index.ts @@ -0,0 +1 @@ +export * from "./transactions-modal"; diff --git a/apps/token/src/components/transactions-modal/transactions-modal.scss b/apps/token/src/components/transactions-modal/transactions-modal.scss new file mode 100644 index 000000000..24f4e74be --- /dev/null +++ b/apps/token/src/components/transactions-modal/transactions-modal.scss @@ -0,0 +1,24 @@ +@import "../../styles/colors"; + +.transactions-modal { + &__table { + width: 100%; + + th, + td { + text-align: left; + font-weight: normal; + } + + th { + color: $text-color-deemphasise; + border-bottom: 1px solid $gray5; + } + } + + &__status { + display: flex; + gap: 5px; + align-items: center; + } +} diff --git a/apps/token/src/components/transactions-modal/transactions-modal.tsx b/apps/token/src/components/transactions-modal/transactions-modal.tsx new file mode 100644 index 000000000..3b111b4fd --- /dev/null +++ b/apps/token/src/components/transactions-modal/transactions-modal.tsx @@ -0,0 +1,107 @@ +import './transactions-modal.scss'; + +import { Overlay } from '@blueprintjs/core'; +import type { TxData } from '@vegaprotocol/smart-contracts-sdk'; +import { EtherscanLink } from '@vegaprotocol/ui-toolkit'; +import React from 'react'; +import { useTranslation } from 'react-i18next'; + +import { + AppStateActionType, + useAppState, +} from '../../contexts/app-state/app-state-context'; +import { useContracts } from '../../contexts/contracts/contracts-context'; +import { truncateMiddle } from '../../lib/truncate-middle'; +import { Tick } from '../icons'; +import { Loader } from '../loader'; +import { Modal } from '../modal'; + +export const TransactionModal = () => { + const { t } = useTranslation(); + const { transactions } = useContracts(); + const { appState, appDispatch } = useAppState(); + + const close = React.useCallback( + () => + appDispatch({ + type: AppStateActionType.SET_TRANSACTION_OVERLAY, + isOpen: false, + }), + [appDispatch] + ); + + const renderStatus = (txObj: TxData) => { + const className = 'transactions-modal__status'; + + if (!txObj.receipt) { + return ( + + + {t('pending')} + + ); + } + + if (txObj.receipt.confirmations >= txObj.requiredConfirmations) { + return ( + + + {t('confirmed')} + + ); + } + + return ( + + + + {t('confirmationsRemaining', { + confirmations: txObj.receipt.confirmations, + required: txObj.requiredConfirmations, + })} + + + ); + }; + + return ( + +
+ + {transactions.length ? ( + + + + + + + + + {transactions.map((t) => { + return ( + + + + + ); + })} + +
{t('transaction')}{t('status')}
+ + {renderStatus(t)}
+ ) : ( +

{t('noTransactions')}

+ )} +
+
+
+ ); +}; diff --git a/apps/token/src/components/vega-wallet-container/index.ts b/apps/token/src/components/vega-wallet-container/index.ts new file mode 100644 index 000000000..9566cdba4 --- /dev/null +++ b/apps/token/src/components/vega-wallet-container/index.ts @@ -0,0 +1 @@ +export * from "./vega-wallet-container"; diff --git a/apps/token/src/components/vega-wallet-container/vega-wallet-container.tsx b/apps/token/src/components/vega-wallet-container/vega-wallet-container.tsx new file mode 100644 index 000000000..c52ba2b68 --- /dev/null +++ b/apps/token/src/components/vega-wallet-container/vega-wallet-container.tsx @@ -0,0 +1,40 @@ +import { Button } from '@vegaprotocol/ui-toolkit'; +import type { VegaKeyExtended } from '@vegaprotocol/wallet'; +import { useVegaWallet } from '@vegaprotocol/wallet'; +import React from 'react'; +import { useTranslation } from 'react-i18next'; + +import { + AppStateActionType, + useAppState, +} from '../../contexts/app-state/app-state-context'; + +interface VegaWalletContainerProps { + children: (key: VegaKeyExtended) => React.ReactElement; +} + +export const VegaWalletContainer = ({ children }: VegaWalletContainerProps) => { + const { t } = useTranslation(); + const { keypair } = useVegaWallet(); + const { appDispatch } = useAppState(); + + if (!keypair) { + return ( +

+ +

+ ); + } + + return children(keypair); +}; diff --git a/apps/token/src/components/vega-wallet-dialogs/index.ts b/apps/token/src/components/vega-wallet-dialogs/index.ts new file mode 100644 index 000000000..4be71f379 --- /dev/null +++ b/apps/token/src/components/vega-wallet-dialogs/index.ts @@ -0,0 +1 @@ +export * from './vega-wallet-dialogs'; diff --git a/apps/token/src/components/vega-wallet-dialogs/vega-wallet-dialogs.tsx b/apps/token/src/components/vega-wallet-dialogs/vega-wallet-dialogs.tsx new file mode 100644 index 000000000..007f3f597 --- /dev/null +++ b/apps/token/src/components/vega-wallet-dialogs/vega-wallet-dialogs.tsx @@ -0,0 +1,34 @@ +import { VegaConnectDialog, VegaManageDialog } from '@vegaprotocol/wallet'; +import { + AppStateActionType, + useAppState, +} from '../../contexts/app-state/app-state-context'; +import { Connectors } from '../../lib/vega-connectors'; + +export const VegaWalletDialogs = () => { + const { appState, appDispatch } = useAppState(); + return ( + <> + + appDispatch({ + type: AppStateActionType.SET_VEGA_WALLET_OVERLAY, + isOpen: open, + }) + } + /> + + + appDispatch({ + type: AppStateActionType.SET_VEGA_WALLET_MANAGE_OVERLAY, + isOpen: open, + }) + } + /> + + ); +}; diff --git a/apps/token/src/components/vega-wallet/__generated__/Delegations.ts b/apps/token/src/components/vega-wallet/__generated__/Delegations.ts new file mode 100644 index 000000000..09a814f40 --- /dev/null +++ b/apps/token/src/components/vega-wallet/__generated__/Delegations.ts @@ -0,0 +1,139 @@ +/* tslint:disable */ +/* eslint-disable */ +// @generated +// This file was automatically generated and should not be edited. + +import { AccountType } from "./../../../__generated__/globalTypes"; + +// ==================================================== +// GraphQL query operation: Delegations +// ==================================================== + +export interface Delegations_epoch { + __typename: "Epoch"; + /** + * Presumably this is an integer or something. If there's no such thing, disregard + */ + id: string; +} + +export interface Delegations_party_delegations_node { + __typename: "Node"; + /** + * The node url eg n01.vega.xyz + */ + id: string; + name: string; +} + +export interface Delegations_party_delegations { + __typename: "Delegation"; + amountFormatted: string; + /** + * Amount delegated + */ + amount: string; + /** + * URL of node you are delegating to + */ + node: Delegations_party_delegations_node; + /** + * Epoch of delegation + */ + epoch: number; +} + +export interface Delegations_party_stake { + __typename: "PartyStake"; + /** + * The stake currently available for the party + */ + currentStakeAvailable: string; + currentStakeAvailableFormatted: string; +} + +export interface Delegations_party_accounts_asset_source_BuiltinAsset { + __typename: "BuiltinAsset"; +} + +export interface Delegations_party_accounts_asset_source_ERC20 { + __typename: "ERC20"; + /** + * The address of the erc20 contract + */ + contractAddress: string; +} + +export type Delegations_party_accounts_asset_source = Delegations_party_accounts_asset_source_BuiltinAsset | Delegations_party_accounts_asset_source_ERC20; + +export interface Delegations_party_accounts_asset { + __typename: "Asset"; + /** + * The full name of the asset (e.g: Great British Pound) + */ + name: string; + /** + * The id of the asset + */ + id: string; + /** + * The precision of the asset + */ + decimals: number; + /** + * The symbol of the asset (e.g: GBP) + */ + symbol: string; + /** + * The origin source of the asset (e.g: an erc20 asset) + */ + source: Delegations_party_accounts_asset_source; +} + +export interface Delegations_party_accounts { + __typename: "Account"; + /** + * Asset, the 'currency' + */ + asset: Delegations_party_accounts_asset; + /** + * Account type (General, Margin, etc) + */ + type: AccountType; + /** + * Balance as string - current account balance (approx. as balances can be updated several times per second) + */ + balance: string; +} + +export interface Delegations_party { + __typename: "Party"; + /** + * Party identifier + */ + id: string; + delegations: Delegations_party_delegations[] | null; + /** + * The staking information for this Party + */ + stake: Delegations_party_stake; + /** + * Collateral accounts relating to a party + */ + accounts: Delegations_party_accounts[] | null; +} + +export interface Delegations { + /** + * get data for a specific epoch, if id omitted it gets the current epoch. If the string is 'next', fetch the next epoch + */ + epoch: Delegations_epoch; + /** + * An entity that is trading on the VEGA network + */ + party: Delegations_party | null; +} + +export interface DelegationsVariables { + partyId: string; +} diff --git a/apps/token/src/components/vega-wallet/__generated__/PartyDelegations.ts b/apps/token/src/components/vega-wallet/__generated__/PartyDelegations.ts new file mode 100644 index 000000000..dfcb618d6 --- /dev/null +++ b/apps/token/src/components/vega-wallet/__generated__/PartyDelegations.ts @@ -0,0 +1,52 @@ +/* tslint:disable */ +/* eslint-disable */ +// @generated +// This file was automatically generated and should not be edited. + +// ==================================================== +// GraphQL query operation: PartyDelegations +// ==================================================== + +export interface PartyDelegations_epoch { + __typename: "Epoch"; + /** + * Presumably this is an integer or something. If there's no such thing, disregard + */ + id: string; +} + +export interface PartyDelegations_party_delegations { + __typename: "Delegation"; + /** + * Amount delegated + */ + amount: string; + /** + * URL of node you are delegating to + */ + node: string; + /** + * Epoch of delegation + */ + epoch: number; +} + +export interface PartyDelegations_party { + __typename: "Party"; + delegations: PartyDelegations_party_delegations[] | null; +} + +export interface PartyDelegations { + /** + * get data for a specific epoch, if id omitted it gets the current epoch + */ + epoch: PartyDelegations_epoch; + /** + * An entity that is trading on the VEGA network + */ + party: PartyDelegations_party | null; +} + +export interface PartyDelegationsVariables { + partyId: string; +} diff --git a/apps/token/src/components/vega-wallet/download-wallet-prompt.tsx b/apps/token/src/components/vega-wallet/download-wallet-prompt.tsx new file mode 100644 index 000000000..90045d921 --- /dev/null +++ b/apps/token/src/components/vega-wallet/download-wallet-prompt.tsx @@ -0,0 +1,32 @@ +import { useTranslation } from "react-i18next"; + +import { Colors, Links } from "../../config"; + +export const DownloadWalletPrompt = () => { + const { t } = useTranslation(); + return ( + <> +

{t("getWallet")}

+

+ + {t("readGuide")} + +

+

+ + {t("downloadWallet")} + +

+ + ); +}; diff --git a/apps/token/src/components/vega-wallet/hooks.ts b/apps/token/src/components/vega-wallet/hooks.ts new file mode 100644 index 000000000..16dbedefa --- /dev/null +++ b/apps/token/src/components/vega-wallet/hooks.ts @@ -0,0 +1,233 @@ +import { gql, useApolloClient } from '@apollo/client'; +import * as Sentry from '@sentry/react'; +import keyBy from 'lodash/keyBy'; +import uniq from 'lodash/uniq'; +import React from 'react'; +import { useTranslation } from 'react-i18next'; + +import { AccountType } from '../../__generated__/globalTypes'; +import { ADDRESSES } from '../../config'; +import noIcon from '../../images/token-no-icon.png'; +import vegaBlack from '../../images/vega_black.png'; +import { BigNumber } from '../../lib/bignumber'; +import { addDecimal } from '../../lib/decimals'; +import type { WalletCardAssetProps } from '../wallet-card'; +import type { + Delegations, + Delegations_party_delegations, + DelegationsVariables, +} from './__generated__/Delegations'; +import { useVegaWallet } from '@vegaprotocol/wallet'; + +const DELEGATIONS_QUERY = gql` + query Delegations($partyId: ID!) { + epoch { + id + } + party(id: $partyId) { + id + delegations { + amountFormatted @client + amount + node { + id + name + } + epoch + } + stake { + currentStakeAvailable + currentStakeAvailableFormatted @client + } + accounts { + asset { + name + id + decimals + symbol + source { + __typename + ... on ERC20 { + contractAddress + } + } + } + type + balance + } + } + } +`; + +export const usePollForDelegations = () => { + const { t } = useTranslation(); + const { keypair } = useVegaWallet(); + const client = useApolloClient(); + const [delegations, setDelegations] = React.useState< + Delegations_party_delegations[] + >([]); + const [delegatedNodes, setDelegatedNodes] = React.useState< + { + nodeId: string; + name: string; + hasStakePending: boolean; + currentEpochStake?: BigNumber; + nextEpochStake?: BigNumber; + }[] + >([]); + const [accounts, setAccounts] = React.useState([]); + const [currentStakeAvailable, setCurrentStakeAvailable] = + React.useState(new BigNumber(0)); + + React.useEffect(() => { + // eslint-disable-next-line + let interval: any; + let mounted = true; + + if (keypair?.pub) { + // start polling for delegation + interval = setInterval(() => { + client + .query({ + query: DELEGATIONS_QUERY, + variables: { partyId: keypair.pub }, + fetchPolicy: 'network-only', + }) + .then((res) => { + if (!mounted) return; + const filter = + res.data.party?.delegations?.filter((d) => { + return d.epoch.toString() === res.data.epoch.id; + }) || []; + const sortedDelegations = [...filter].sort((a, b) => { + return new BigNumber(b.amountFormatted) + .minus(a.amountFormatted) + .toNumber(); + }); + setDelegations(sortedDelegations); + setCurrentStakeAvailable( + new BigNumber( + res.data.party?.stake.currentStakeAvailableFormatted || 0 + ) + ); + const accounts = res.data.party?.accounts || []; + setAccounts( + accounts + .filter((a) => a.type === AccountType.General) + .map((a) => { + const isVega = + a.asset.source.__typename === 'ERC20' && + a.asset.source.contractAddress === + ADDRESSES.vegaTokenAddress; + + return { + isVega, + name: a.asset.name, + subheading: isVega ? t('collateral') : a.asset.symbol, + symbol: a.asset.symbol, + decimals: a.asset.decimals, + balance: new BigNumber( + addDecimal(new BigNumber(a.balance), a.asset.decimals) + ), + image: isVega ? vegaBlack : noIcon, + border: isVega, + address: + a.asset.source.__typename === 'ERC20' + ? a.asset.source.contractAddress + : undefined, + }; + }) + .sort((a, b) => { + // Put VEGA at the top of the list + if (a.isVega) { + return -1; + } + if (b.isVega) { + return 1; + } + // Secondary sort by name + if (a.name < b.name) { + return -1; + } + if (a.name > b.name) { + return 1; + } + return 0; + }) + ); + const delegatedNextEpoch = keyBy( + res.data.party?.delegations?.filter((d) => { + return d.epoch === Number(res.data.epoch.id) + 1; + }) || [], + 'node.id' + ); + const delegatedThisEpoch = keyBy( + res.data.party?.delegations?.filter((d) => { + return d.epoch === Number(res.data.epoch.id); + }) || [], + 'node.id' + ); + const nodesDelegated = uniq([ + ...Object.keys(delegatedNextEpoch), + ...Object.keys(delegatedThisEpoch), + ]); + + const delegatedAmounts = nodesDelegated + .map((d) => ({ + nodeId: d, + name: + delegatedThisEpoch[d]?.node?.name || + delegatedNextEpoch[d]?.node?.name, + hasStakePending: !!( + (delegatedThisEpoch[d]?.amountFormatted || + delegatedNextEpoch[d]?.amountFormatted) && + delegatedThisEpoch[d]?.amountFormatted !== + delegatedNextEpoch[d]?.amountFormatted && + delegatedNextEpoch[d] !== undefined + ), + currentEpochStake: + delegatedThisEpoch[d] && + new BigNumber(delegatedThisEpoch[d].amountFormatted), + nextEpochStake: + delegatedNextEpoch[d] && + new BigNumber(delegatedNextEpoch[d].amountFormatted), + })) + .sort((a, b) => { + if ( + new BigNumber(a.currentEpochStake || 0).isLessThan( + b.currentEpochStake || 0 + ) + ) + return 1; + if ( + new BigNumber(a.currentEpochStake || 0).isGreaterThan( + b.currentEpochStake || 0 + ) + ) + return -1; + if ((!a.name && b.name) || a.name < b.name) return 1; + if ((!b.name && a.name) || a.name > b.name) return -1; + if (a.nodeId > b.nodeId) return 1; + if (a.nodeId < b.nodeId) return -1; + return 0; + }); + + setDelegatedNodes(delegatedAmounts); + }) + .catch((err: Error) => { + Sentry.captureException(err); + // If query fails stop interval. Its almost certain that the query + // will just continue to fail + clearInterval(interval); + }); + }, 1000); + } + + return () => { + clearInterval(interval); + mounted = false; + }; + }, [client, keypair?.pub, t]); + + return { delegations, currentStakeAvailable, delegatedNodes, accounts }; +}; diff --git a/apps/token/src/components/vega-wallet/index.ts b/apps/token/src/components/vega-wallet/index.ts new file mode 100644 index 000000000..b481b6340 --- /dev/null +++ b/apps/token/src/components/vega-wallet/index.ts @@ -0,0 +1 @@ +export * from "./vega-wallet"; diff --git a/apps/token/src/components/vega-wallet/vega-wallet.scss b/apps/token/src/components/vega-wallet/vega-wallet.scss new file mode 100644 index 000000000..e7a5b1567 --- /dev/null +++ b/apps/token/src/components/vega-wallet/vega-wallet.scss @@ -0,0 +1,43 @@ +@import "../../styles/colors"; +@import "../../styles/fonts"; + +.vega-wallet { + &__connect { + appearance: none; + padding: 0; + background-color: transparent; + text-decoration: underline; + + &:hover { + background-color: transparent; + } + } + + &__curr-key { + font-family: $font-mono; + padding: 0 8px; + } + + &__key-list { + list-style: none; + margin: 10px 0 5px 0; + padding: 0; + + > li { + text-align: right; + font-family: $font-mono; + cursor: pointer; + text-decoration: underline; + color: $text-color-deemphasise; + font-size: 14px; + + &:hover { + color: $white; + } + } + } + + &__version { + flex: 1; + } +} diff --git a/apps/token/src/components/vega-wallet/vega-wallet.tsx b/apps/token/src/components/vega-wallet/vega-wallet.tsx new file mode 100644 index 000000000..9f6b6f1a7 --- /dev/null +++ b/apps/token/src/components/vega-wallet/vega-wallet.tsx @@ -0,0 +1,200 @@ +import './vega-wallet.scss'; + +import React from 'react'; +import { useTranslation } from 'react-i18next'; +import { Link } from 'react-router-dom'; + +import { + AppStateActionType, + useAppState, +} from '../../contexts/app-state/app-state-context'; +import vegaWhite from '../../images/vega_white.png'; +import { BigNumber } from '../../lib/bignumber'; +import { truncateMiddle } from '../../lib/truncate-middle'; +import { Routes } from '../../routes/router-config'; +import { BulletHeader } from '../bullet-header'; +import type { WalletCardAssetProps } from '../wallet-card'; +import { + WalletCard, + WalletCardActions, + WalletCardAsset, + WalletCardContent, + WalletCardHeader, + WalletCardRow, +} from '../wallet-card'; +import { DownloadWalletPrompt } from './download-wallet-prompt'; +import { usePollForDelegations } from './hooks'; +import type { VegaKeyExtended } from '@vegaprotocol/wallet'; +import { useVegaWallet } from '@vegaprotocol/wallet'; +import { Button } from '@vegaprotocol/ui-toolkit'; + +export const VegaWallet = () => { + const { t } = useTranslation(); + const { keypair, keypairs } = useVegaWallet(); + + const child = !keypairs ? ( + + ) : ( + + ); + + return ( +
+ + +
+

{t('vegaWallet')}

+ + {keypair && `(${keypair.name})`} + +
+ {keypair && ( + + {truncateMiddle(keypair.pub)} + + )} +
+ {child} +
+
+ ); +}; + +const VegaWalletNotConnected = () => { + const { t } = useTranslation(); + const { appDispatch } = useAppState(); + + return ( + <> + + + + ); +}; + +interface VegaWalletAssetsListProps { + accounts: WalletCardAssetProps[]; +} + +const VegaWalletAssetList = ({ accounts }: VegaWalletAssetsListProps) => { + const { t } = useTranslation(); + if (!accounts.length) { + return null; + } + return ( + <> + + + {t('assets')} + + + {accounts.map((a, i) => ( + + ))} + + ); +}; + +interface VegaWalletConnectedProps { + vegaKeys: VegaKeyExtended[]; +} + +const VegaWalletConnected = ({ vegaKeys }: VegaWalletConnectedProps) => { + const { t } = useTranslation(); + const { + appDispatch, + appState: { decimals }, + } = useAppState(); + const { delegations, currentStakeAvailable, delegatedNodes, accounts } = + usePollForDelegations(); + + const unstaked = React.useMemo(() => { + const totalDelegated = delegations.reduce( + (acc, cur) => acc.plus(cur.amountFormatted), + new BigNumber(0) + ); + return BigNumber.max(currentStakeAvailable.minus(totalDelegated), 0); + }, [currentStakeAvailable, delegations]); + + const footer = ( + + + + ); + + return vegaKeys.length ? ( + <> + + + {delegatedNodes.length ? ( + + ) : null} + {delegatedNodes.map((d) => ( +
+ {d.currentEpochStake && d.currentEpochStake.isGreaterThan(0) && ( + + )} + {d.hasStakePending && ( + + )} +
+ ))} + + + + + + + + + + {footer} + + ) : ( + {t('noKeys')} + ); +}; diff --git a/apps/token/src/components/wallet-card/index.ts b/apps/token/src/components/wallet-card/index.ts new file mode 100644 index 000000000..55aab3fb2 --- /dev/null +++ b/apps/token/src/components/wallet-card/index.ts @@ -0,0 +1 @@ +export * from "./wallet-card"; diff --git a/apps/token/src/components/wallet-card/wallet-card.scss b/apps/token/src/components/wallet-card/wallet-card.scss new file mode 100644 index 000000000..99a218f44 --- /dev/null +++ b/apps/token/src/components/wallet-card/wallet-card.scss @@ -0,0 +1,145 @@ +@import '../../styles/colors'; +@import '../../styles/fonts'; + +.wallet-card { + background-color: $white; + color: $black; + font-size: 14px; + border: 1px solid $white; // adding this white border on the white background makes both wallets the same size + + &--inverted { + background-color: $black; + color: $white; + border: 1px solid $white; + } + + &__price { + &--decimal { + color: $text-color-deemphasise; + } + } + + &__header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 8px 0; + + &:last-child { + border-bottom: 0; + padding-bottom: 0; + margin-bottom: 0; + } + + > span { + &:first-child { + text-transform: uppercase; + } + + &:last-child { + font-family: $font-mono; + } + } + + h1 { + color: $black; + padding: 0 8px; + margin: 0; + text-transform: uppercase; + } + + h2 { + margin: 0; + padding: 8px 0; + } + + &--inverted { + h1 { + color: $white; + } + } + } + + &__content { + margin: 4px 8px; + } + + &__row { + display: flex; + justify-content: space-between; + gap: 0 5px; + color: $black; + font-size: 14px; + padding: 2px; + margin: 4px 0; + + span:first-child { + max-width: 200px; + } + + span:last-child:not(:first-child) { + font-family: $font-mono; + flex: 1 1 0; + text-align: right; + } + + &--dark { + color: $text-color-emphasise; + } + + &--bold { + font-weight: bold; + } + } + + &__asset { + display: flex; + flex-wrap: nowrap; + margin-bottom: 16px; + margin-top: 8px; + + &-image { + display: inline-block; + height: 30px; + border-radius: 50%; + border: 1px solid $black; + } + + &-image--border { + border: 1px solid white; + } + + h1 { + color: $black; + margin: 0; + padding: 0 8px; + text-transform: uppercase; + } + + h2 { + margin: 0; + color: $text-color-deemphasise; + text-transform: uppercase; + } + + &--dark { + h1 { + color: $white; + } + } + + &-heading { + display: flex; + } + + &-balance { + padding: 0 8px; + font-size: 20px; + flex-basis: 100%; + + &--decimal { + color: $text-color-deemphasise; + } + } + } +} diff --git a/apps/token/src/components/wallet-card/wallet-card.tsx b/apps/token/src/components/wallet-card/wallet-card.tsx new file mode 100644 index 000000000..0c5299b47 --- /dev/null +++ b/apps/token/src/components/wallet-card/wallet-card.tsx @@ -0,0 +1,154 @@ +import './wallet-card.scss'; + +import React from 'react'; +import { Link } from 'react-router-dom'; + +import { useAnimateValue } from '../../hooks/use-animate-value'; +import { BigNumber } from '../../lib/bignumber'; +import { formatNumber } from '../../lib/format-number'; + +const useNumberParts = ( + value: BigNumber | null | undefined, + decimals: number +) => { + return React.useMemo(() => { + if (!value) { + return ['0', '0'.repeat(decimals)]; + } + // @ts-ignore confident not undefined + const separator = BigNumber.config().FORMAT.decimalSeparator as string; + const [integers, decimalsPlaces] = formatNumber(value, 18) + .toString() + .split(separator); + return [integers, decimalsPlaces]; + }, [decimals, value]); +}; + +interface WalletCardProps { + children: React.ReactNode; + dark?: boolean; +} + +export const WalletCard = ({ dark, children }: WalletCardProps) => ( +
+ {children} +
+); + +interface WalletCardHeaderProps { + children: React.ReactNode; + dark?: boolean; +} + +export const WalletCardHeader = ({ children, dark }: WalletCardHeaderProps) => { + return ( +
+ {children} +
+ ); +}; + +interface WalletCardContentProps { + children: React.ReactNode; +} + +export const WalletCardContent = ({ children }: WalletCardContentProps) => { + return
{children}
; +}; + +export const WalletCardRow = ({ + label, + link, + value, + dark = false, + decimals = 18, + bold = false, +}: { + label: string; + link?: string; + decimals?: number; + value?: BigNumber | null; + dark?: boolean; + bold?: boolean; +}) => { + const ref = React.useRef(null); + useAnimateValue(ref, value); + const [integers, decimalsPlaces] = useNumberParts(value, decimals); + + return ( +
+ {link ? {label} : {label}} + {value && ( + + {integers}. + {decimalsPlaces} + + )} +
+ ); +}; + +export const WalletCardActions = ({ + children, +}: { + children: React.ReactNode; +}) => { + return
{children}
; +}; + +export interface WalletCardAssetProps { + image: string; + name: string; + symbol: string; + balance: BigNumber; + decimals: number; + border?: boolean; + dark?: boolean; + subheading?: string; +} + +export const WalletCardAsset = ({ + image, + name, + symbol, + balance, + decimals, + border, + dark, + subheading, +}: WalletCardAssetProps) => { + const [integers, decimalsPlaces] = useNumberParts(balance, decimals); + + return ( +
+ Vega +
+
+

{name}

+

{subheading || symbol}

+
+
+ {integers}. + {decimalsPlaces} +
+
+
+ ); +}; diff --git a/apps/token/src/components/web3-connector/index.ts b/apps/token/src/components/web3-connector/index.ts new file mode 100644 index 000000000..4abc5a133 --- /dev/null +++ b/apps/token/src/components/web3-connector/index.ts @@ -0,0 +1 @@ +export * from "./web3-connector"; diff --git a/apps/token/src/components/web3-connector/web3-connector.tsx b/apps/token/src/components/web3-connector/web3-connector.tsx new file mode 100644 index 000000000..e99e579e7 --- /dev/null +++ b/apps/token/src/components/web3-connector/web3-connector.tsx @@ -0,0 +1,82 @@ +import { Button, Splash } from '@vegaprotocol/ui-toolkit'; +import { Web3ConnectDialog } from '@vegaprotocol/web3'; +import { useWeb3React } from '@web3-react/core'; +import type { ReactElement } from 'react'; +import { useCallback, useEffect } from 'react'; +import { + AppStateActionType, + useAppState, +} from '../../contexts/app-state/app-state-context'; +import { Connectors } from '../../lib/web3-connectors'; + +interface Web3ConnectorProps { + children: ReactElement; +} + +export function Web3Connector({ children }: Web3ConnectorProps) { + const { appState, appDispatch } = useAppState(); + const setDialogOpen = useCallback( + (isOpen: boolean) => { + appDispatch({ type: AppStateActionType.SET_ETH_WALLET_OVERLAY, isOpen }); + }, + [appDispatch] + ); + const appChainId = Number(process.env['NX_ETHEREUM_CHAIN_ID']); + return ( + <> + + {children} + + + + ); +} + +interface Web3ContentProps { + children: ReactElement; + appChainId: number; + setDialogOpen: (isOpen: boolean) => void; +} + +export const Web3Content = ({ + children, + appChainId, + setDialogOpen, +}: Web3ContentProps) => { + const { isActive, error, connector, chainId } = useWeb3React(); + + useEffect(() => { + if (connector?.connectEagerly) { + connector.connectEagerly(); + } + }, [connector]); + + if (error) { + return ( + +
+

Something went wrong: {error.message}

+ +
+
+ ); + } + + if (chainId !== undefined && chainId !== appChainId) { + return ( + +
+

This app only works on chain ID: {appChainId}

+ +
+
+ ); + } + + return children; +}; diff --git a/apps/token/src/config/colors.ts b/apps/token/src/config/colors.ts new file mode 100644 index 000000000..820096197 --- /dev/null +++ b/apps/token/src/config/colors.ts @@ -0,0 +1,24 @@ +export const Colors = { + WHITE: "#FFF", + RED: "#ED1515", + PINK: "#ff2d5e", + GREEN: "#26ff8a", + TEXT: "#c7c7c7", + + BLACK: "#000", + DEEMPHASISE: "#8a9ba8", + GRAY_DARK_1: "#292929", + GRAY_DARK_2: "#333", + GRAY: "#494949", + GRAY_LIGHT: "#ccc", + GRAY_LIGHT_1: "#6e6e6e", + GREEN_DARK: "#246340", // Same as GREEN_TRANSPARENT given a background of #1f1f1f + GREEN_TRANSPARENT: "rgba(38, 255, 138, 0.3)", + RED_TRANSPARENT: "rgba(255, 38, 65, 0.3)", + TRANSPARENT: "rgba(0,0,0,0)", + + VEGA_RED: "#ff261a", + VEGA_ORANGE: "#d9822b", + VEGA_GREEN: "#26ff8a", + VEGA_YELLOW: "#daff0d", +}; diff --git a/apps/token/src/config/ethereum.ts b/apps/token/src/config/ethereum.ts new file mode 100644 index 000000000..62d603843 --- /dev/null +++ b/apps/token/src/config/ethereum.ts @@ -0,0 +1,30 @@ +import type { EthereumChainId } from '@vegaprotocol/smart-contracts-sdk'; +import { + EnvironmentConfig, + EthereumChainIds, +} from '@vegaprotocol/smart-contracts-sdk'; + +import type { Networks } from './vega'; + +type VegaContracts = typeof EnvironmentConfig[Networks]; + +const appChainId = Number(process.env['NX_ETHEREUM_CHAIN_ID'] || 3); + +export const APP_ENV = process.env['NX_VEGA_ENV'] as Networks; + +const Addresses: Record = { + 1: EnvironmentConfig.MAINNET, + 3: EnvironmentConfig[APP_ENV], +}; + +export type { EthereumChainId }; +export { EthereumChainIds }; + +/** Contract addresses for the different contracts in the VEGA ecosystem */ +export const ADDRESSES = Addresses[appChainId]; + +/** + * The Chain ID the environment is configured for. + * Normally this is 0x3 (Ropsten) for dev and 0x1 (Mainnet) for prod + */ +export const APP_CHAIN_ID = appChainId; diff --git a/apps/token/src/config/flags.ts b/apps/token/src/config/flags.ts new file mode 100644 index 000000000..646729600 --- /dev/null +++ b/apps/token/src/config/flags.ts @@ -0,0 +1,11 @@ +const TRUTHY = ['1', 'true']; + +export const Flags = { + NETWORK_DOWN: TRUTHY.includes(process.env['NX_NETWORK_DOWN']!), + HOSTED_WALLET_ENABLED: TRUTHY.includes( + process.env['NX_HOSTED_WALLET_ENABLED']! + ), + MOCK: TRUTHY.includes(process.env['NX_MOCKED']!), + FAIRGROUND: TRUTHY.includes(process.env['NX_FAIRGROUND']!), + NETWORK_LIMITS: TRUTHY.includes(process.env['NX_NETWORK_LIMITS']!), +}; diff --git a/apps/token/src/config/index.ts b/apps/token/src/config/index.ts new file mode 100644 index 000000000..acf44a9bd --- /dev/null +++ b/apps/token/src/config/index.ts @@ -0,0 +1,6 @@ +export * from "./colors"; +export * from "./flags"; +export * from "./ethereum"; +export * from "./links"; +export * from "./network-params"; +export * from "./vega"; diff --git a/apps/token/src/config/links.ts b/apps/token/src/config/links.ts new file mode 100644 index 000000000..0fe63ead2 --- /dev/null +++ b/apps/token/src/config/links.ts @@ -0,0 +1,15 @@ +export const Links = { + WALLET_RELEASES: "https://github.com/vegaprotocol/vegawallet-desktop/releases", + WALLET_GUIDE: + "https://docs.vega.xyz/docs/tools/vega-wallet", + SUSHI_PAIRS: "https://analytics.sushi.com/pairs/", + SUSHI_ONSEN_MENU: "https://app.sushi.com/farm", + SUSHI_ONSEN_WHAT_IS: + "https://docs.sushi.com/products/yield-farming/what-is-onsen", + SUSHI_ONSEN_FAQ: "https://docs.sushi.com/faq-1/onsen-faq", + FEEDBACK: "https://github.com/vegaprotocol/feedback/discussions", + GITHUB: "https://github.com/vegaprotocol/token-frontend", + DISCORD: "https://vega.xyz/discord", + STAKING_GUIDE: + "https://docs.vega.xyz/docs/concepts/vega-chain/#staking-on-vega", +}; diff --git a/apps/token/src/config/network-params.ts b/apps/token/src/config/network-params.ts new file mode 100644 index 000000000..664949948 --- /dev/null +++ b/apps/token/src/config/network-params.ts @@ -0,0 +1,21 @@ +export const NetworkParams = { + ETHEREUM_CONFIG: "blockchains.ethereumConfig", + REWARD_ASSET: "reward.asset", + REWARD_PAYOUT_DURATION: "reward.staking.delegation.payoutDelay", + GOV_UPDATE_MARKET_REQUIRED_MAJORITY: + "governance.proposal.updateMarket.requiredMajority", + GOV_UPDATE_MARKET_REQUIRED_PARTICIPATION: + "governance.proposal.updateMarket.requiredParticipation", + GOV_NEW_MARKET_REQUIRED_MAJORITY: + "governance.proposal.market.requiredMajority", + GOV_NEW_MARKET_REQUIRED_PARTICIPATION: + "governance.proposal.market.requiredParticipation", + GOV_ASSET_REQUIRED_MAJORITY: "governance.proposal.asset.requiredMajority", + GOV_ASSET_REQUIRED_PARTICIPATION: + "governance.proposal.asset.requiredParticipation", + GOV_UPDATE_NET_PARAM_REQUIRED_MAJORITY: + "governance.proposal.updateNetParam.requiredMajority", + GOV_UPDATE_NET_PARAM_REQUIRED_PARTICIPATION: + "governance.proposal.updateNetParam.requiredParticipation", + VALIDATOR_DELEGATION_MIN_AMOUNT: "validators.delegation.minAmount", +}; diff --git a/apps/token/src/config/vega.ts b/apps/token/src/config/vega.ts new file mode 100644 index 000000000..636af4612 --- /dev/null +++ b/apps/token/src/config/vega.ts @@ -0,0 +1,211 @@ +export enum Networks { + CUSTOM = 'CUSTOM', + TESTNET = 'TESTNET', + STAGNET = 'STAGNET', + STAGNET2 = 'STAGNET2', + DEVNET = 'DEVNET', + MAINNET = 'MAINNET', +} + +interface VegaNode { + url: string; + api: { + GraphQL: boolean; + }; +} + +type VegaNets = { + [N in Networks]: { + nodes: VegaNode[]; + }; +}; + +export type NetworkConfig = { + [N in Networks]: string[]; +}; + +const splitFilter = (a: string) => a.split(',').filter((a) => a.length > 0); +const getCustomNodesFromOptionalEnvironmentVariables = () => { + const validatorUrls = process.env['CUSTOM_URLS'] || ''; + const validatorUrlsWithGraphQL = + process.env['CUSTOM_URLS_WITH_GRAPHQL'] || ''; + + const validatorUrlsList: string[] = splitFilter(validatorUrls); + const validatorUrlsWithGraphQLList: string[] = splitFilter( + validatorUrlsWithGraphQL + ); + + const customNodes: VegaNode[] = validatorUrlsList + .map((a) => ({ url: a, api: { GraphQL: false } })) + .concat( + validatorUrlsWithGraphQLList.map((a) => ({ + url: a, + api: { GraphQL: true }, + })) + ); + + return customNodes; +}; + +const customNodes = getCustomNodesFromOptionalEnvironmentVariables(); + +export const VegaNetworks: VegaNets = { + [Networks.DEVNET]: { + nodes: [ + { + url: 'https://n01.d.vega.xyz', + api: { + GraphQL: false, + }, + }, + { + url: 'https://n02.d.vega.xyz', + api: { + GraphQL: false, + }, + }, + { + url: 'https://n03.d.vega.xyz', + api: { + GraphQL: false, + }, + }, + { + url: 'https://n04.d.vega.xyz', + api: { + GraphQL: true, + }, + }, + ], + }, + [Networks.STAGNET]: { + nodes: [ + { + url: 'https://n01.s.vega.xyz', + api: { + GraphQL: false, + }, + }, + { + url: 'https://n02.s.vega.xyz', + api: { + GraphQL: false, + }, + }, + { + url: 'https://n03.s.vega.xyz', + api: { + GraphQL: true, + }, + }, + { + url: 'https://n04.s.vega.xyz', + api: { + GraphQL: false, + }, + }, + { + url: 'https://n05.s.vega.xyz', + api: { + GraphQL: false, + }, + }, + ], + }, + [Networks.STAGNET2]: { + nodes: [ + { + url: 'https://n03.stagnet2.vega.xyz', + api: { + GraphQL: true, + }, + }, + ], + }, + [Networks.TESTNET]: { + nodes: [ + { + url: 'https://lb.testnet.vega.xyz', + api: { + GraphQL: true, + }, + }, + { + url: 'https://n01.testnet.vega.xyz', + api: { + GraphQL: false, + }, + }, + { + url: 'https://n02.testnet.vega.xyz', + api: { + GraphQL: false, + }, + }, + { + url: 'https://n03.testnet.vega.xyz', + api: { + GraphQL: false, + }, + }, + { + url: 'https://n04.testnet.vega.xyz', + api: { + GraphQL: false, + }, + }, + { + url: 'https://n05.testnet.vega.xyz', + api: { + GraphQL: false, + }, + }, + { + url: 'https://n06.testnet.vega.xyz', + api: { + GraphQL: true, + }, + }, + { + url: 'https://n07.testnet.vega.xyz', + api: { + GraphQL: true, + }, + }, + { + url: 'https://n08.testnet.vega.xyz', + api: { + GraphQL: true, + }, + }, + { + url: 'https://n09.testnet.vega.xyz', + api: { + GraphQL: true, + }, + }, + ], + }, + [Networks.CUSTOM]: { + nodes: customNodes, + }, + [Networks.MAINNET]: { + nodes: [], + }, +}; + +export const GraphQLNodes = Object.keys(VegaNetworks).reduce( + (obj: Record, network) => { + const rawNodes: VegaNode[] = VegaNetworks[network as Networks].nodes; + const nodesWithGraphQL = rawNodes + .filter((n) => n.api.GraphQL) + .map((n) => n.url); + obj[network] = nodesWithGraphQL; + return obj; + }, + {} +); + +export const EnvironmentNodes = GraphQLNodes[ + process.env['NX_VEGA_ENV'] as Networks +] as string[]; diff --git a/apps/token/src/contexts/app-state/app-state-context.ts b/apps/token/src/contexts/app-state/app-state-context.ts new file mode 100644 index 000000000..f0fa92853 --- /dev/null +++ b/apps/token/src/contexts/app-state/app-state-context.ts @@ -0,0 +1,210 @@ +import type { Tranche } from '@vegaprotocol/smart-contracts-sdk'; +import React from 'react'; + +import type { BigNumber } from '../../lib/bignumber'; + +export enum VegaWalletStatus { + /** Detecting if Vega wallet service is running */ + Pending, + /** Vega wallet service is running */ + Ready, + /** No Vega wallet not running */ + None, +} + +export interface VegaKey { + pub: string; + algo: string; + tainted: boolean; + meta: Array<{ key: string; value: string }> | null; +} + +export interface UserTrancheBalance { + /** ID of tranche */ + id: number; + + /** Users vesting tokens on tranche */ + locked: BigNumber; + + /** Users vested tokens on tranche */ + vested: BigNumber; +} + +export interface AppState { + /** Users vesting balance across all tranches */ + balanceFormatted: BigNumber; + + /** Users balance of VEGA in Metamask */ + walletBalance: BigNumber; + + /** Amount of tokens associated for a given eth address */ + lien: BigNumber; + + /** Array of tranche objects */ + tranches: Tranche[] | null; + + /** Number of decimal places of the VEGA token (18 on Mainnet, 5 on Ropsten) */ + decimals: number; + + /** Total supply of VEGA tokens */ + totalSupply: BigNumber; + + /** Total number of VEGA Tokens, both vesting and unlocked, associated for staking */ + totalAssociated: BigNumber; + + /** Users total unlocked tokens */ + totalVestedBalance: BigNumber; + + /** Users total locked (vesting) tokens */ + totalLockedBalance: BigNumber; + + /** Breakdown of users vesting/vested balances across tranches */ + trancheBalances: UserTrancheBalance[]; + + /** Approved amount of VEGA to be associated for staking */ + allowance: BigNumber; + + /** Whether or not the connect to VEGA wallet overlay is open */ + vegaWalletOverlay: boolean; + + /** Whether or not the manage VEGA wallet overlay is open */ + vegaWalletManageOverlay: boolean; + + /** Whether or not the connect to Ethereum wallet overlay is open */ + ethConnectOverlay: boolean; + + /** Amount of tokens associated with the current Vega key from wallet*/ + walletAssociatedBalance: BigNumber | null; + + /** Amount of tokens associated with the current Vega key from vesting contract*/ + vestingAssociatedBalance: BigNumber | null; + + /** The error if one was thrown during retrieval of tranche data */ + trancheError: Error | null; + + /** Whether or not the mobile drawer is open. Only relevant on screens smaller than 960 */ + drawerOpen: boolean; + + /** + * A breakdown of associations by Vega key. An object where each key is the vega key and + * the value is the total amount associated (staking and vesting combined) to that key. + */ + associationBreakdown: { + stakingAssociations: { [vegaKey: string]: BigNumber }; + vestingAssociations: { [vegaKey: string]: BigNumber }; + }; + + /** Whether or not the transaction modal is open */ + transactionOverlay: boolean; + /** + * Message to display in a banner at the top of the screen, currently always shown as a warning/error + */ + bannerMessage: string; +} + +export enum AppStateActionType { + UPDATE_ACCOUNT_BALANCES, + SET_TOKEN, + SET_ALLOWANCE, + REFRESH_BALANCES, + SET_TRANCHE_DATA, + SET_VEGA_WALLET_OVERLAY, + SET_VEGA_WALLET_MANAGE_OVERLAY, + SET_ETH_WALLET_OVERLAY, + SET_DRAWER, + SET_TRANCHE_ERROR, + REFRESH_ASSOCIATED_BALANCES, + SET_ASSOCIATION_BREAKDOWN, + SET_TRANSACTION_OVERLAY, + SET_BANNER_MESSAGE, +} + +export type AppStateAction = + | { + type: AppStateActionType.UPDATE_ACCOUNT_BALANCES; + balance: BigNumber; + walletBalance: BigNumber; + lien: BigNumber; + allowance: BigNumber; + } + | { + type: AppStateActionType.SET_TOKEN; + decimals: number; + totalSupply: BigNumber; + totalAssociated: BigNumber; + } + | { + type: AppStateActionType.SET_ALLOWANCE; + allowance: BigNumber; + } + | { + type: AppStateActionType.REFRESH_BALANCES; + balance: BigNumber; + walletBalance: BigNumber; + lien: BigNumber; + allowance: BigNumber; + walletAssociatedBalance: BigNumber | null; + vestingAssociatedBalance: BigNumber | null; + } + | { + type: AppStateActionType.SET_TRANCHE_DATA; + trancheBalances: UserTrancheBalance[]; + tranches: Tranche[]; + } + | { + type: AppStateActionType.SET_TRANCHE_ERROR; + error: Error | null; + } + | { + type: AppStateActionType.SET_VEGA_WALLET_OVERLAY; + isOpen: boolean; + } + | { + type: AppStateActionType.SET_VEGA_WALLET_MANAGE_OVERLAY; + isOpen: boolean; + } + | { + type: AppStateActionType.SET_ETH_WALLET_OVERLAY; + isOpen: boolean; + } + | { + type: AppStateActionType.SET_DRAWER; + isOpen: boolean; + } + | { + type: AppStateActionType.REFRESH_ASSOCIATED_BALANCES; + walletAssociatedBalance: BigNumber; + vestingAssociatedBalance: BigNumber; + } + | { + type: AppStateActionType.SET_ASSOCIATION_BREAKDOWN; + breakdown: { + stakingAssociations: { [vegaKey: string]: BigNumber }; + vestingAssociations: { [vegaKey: string]: BigNumber }; + }; + } + | { + type: AppStateActionType.SET_TRANSACTION_OVERLAY; + isOpen: boolean; + } + | { + type: AppStateActionType.SET_BANNER_MESSAGE; + message: string; + }; + +type AppStateContextShape = { + appState: AppState; + appDispatch: React.Dispatch; +}; + +export const AppStateContext = React.createContext< + AppStateContextShape | undefined +>(undefined); + +export function useAppState() { + const context = React.useContext(AppStateContext); + if (context === undefined) { + throw new Error('useAppState must be used within AppStateProvider'); + } + return context; +} diff --git a/apps/token/src/contexts/app-state/app-state-provider.tsx b/apps/token/src/contexts/app-state/app-state-provider.tsx new file mode 100644 index 000000000..f63921e73 --- /dev/null +++ b/apps/token/src/contexts/app-state/app-state-provider.tsx @@ -0,0 +1,165 @@ +import React from 'react'; + +import { BigNumber } from '../../lib/bignumber'; +import { AppStateActionType, AppStateContext } from './app-state-context'; +import type { AppState, AppStateAction } from './app-state-context'; + +interface AppStateProviderProps { + children: React.ReactNode; +} + +const initialAppState: AppState = { + // set in app-loader TODO: update when user stakes/unstakes/associates/disassociates + totalAssociated: new BigNumber(0), + decimals: 0, + totalSupply: new BigNumber(0), + balanceFormatted: new BigNumber(0), + walletBalance: new BigNumber(0), + lien: new BigNumber(0), + allowance: new BigNumber(0), + tranches: null, + vegaWalletOverlay: false, + vegaWalletManageOverlay: false, + ethConnectOverlay: false, + walletAssociatedBalance: null, + vestingAssociatedBalance: null, + trancheBalances: [], + totalLockedBalance: new BigNumber(0), + totalVestedBalance: new BigNumber(0), + trancheError: null, + drawerOpen: false, + associationBreakdown: { + vestingAssociations: {}, + stakingAssociations: {}, + }, + transactionOverlay: false, + bannerMessage: '', +}; + +function appStateReducer(state: AppState, action: AppStateAction): AppState { + switch (action.type) { + case AppStateActionType.UPDATE_ACCOUNT_BALANCES: { + return { + ...state, + balanceFormatted: action.balance, + walletBalance: action.walletBalance, + allowance: action.allowance, + lien: action.lien, + }; + } + case AppStateActionType.REFRESH_BALANCES: { + return { + ...state, + balanceFormatted: action.balance, + walletBalance: action.walletBalance, + allowance: action.allowance, + lien: action.lien, + walletAssociatedBalance: action.walletAssociatedBalance, + vestingAssociatedBalance: action.vestingAssociatedBalance, + }; + } + case AppStateActionType.SET_TOKEN: { + return { + ...state, + decimals: action.decimals, + totalSupply: action.totalSupply, + totalAssociated: action.totalAssociated, + }; + } + case AppStateActionType.SET_ALLOWANCE: { + return { + ...state, + allowance: action.allowance, + }; + } + case AppStateActionType.SET_TRANCHE_DATA: + return { + ...state, + tranches: action.tranches, + totalVestedBalance: BigNumber.sum.apply(null, [ + new BigNumber(0), + ...action.trancheBalances.map((b) => b.vested), + ]), + totalLockedBalance: BigNumber.sum.apply(null, [ + new BigNumber(0), + ...action.trancheBalances.map((b) => b.locked), + ]), + trancheBalances: action.trancheBalances, + }; + case AppStateActionType.SET_TRANCHE_ERROR: { + return { + ...state, + trancheError: action.error, + }; + } + case AppStateActionType.SET_VEGA_WALLET_OVERLAY: { + return { + ...state, + vegaWalletOverlay: action.isOpen, + drawerOpen: action.isOpen ? false : state.drawerOpen, + }; + } + case AppStateActionType.SET_VEGA_WALLET_MANAGE_OVERLAY: { + return { + ...state, + vegaWalletManageOverlay: action.isOpen, + vegaWalletOverlay: action.isOpen ? false : state.vegaWalletOverlay, + drawerOpen: action.isOpen ? false : state.drawerOpen, + }; + } + case AppStateActionType.SET_ETH_WALLET_OVERLAY: { + return { + ...state, + ethConnectOverlay: action.isOpen, + drawerOpen: action.isOpen ? false : state.drawerOpen, + }; + } + case AppStateActionType.SET_DRAWER: { + return { + ...state, + drawerOpen: action.isOpen, + vegaWalletOverlay: false, + }; + } + case AppStateActionType.REFRESH_ASSOCIATED_BALANCES: { + return { + ...state, + walletAssociatedBalance: action.walletAssociatedBalance, + vestingAssociatedBalance: action.vestingAssociatedBalance, + }; + } + case AppStateActionType.SET_ASSOCIATION_BREAKDOWN: { + return { + ...state, + associationBreakdown: { ...action.breakdown }, + }; + } + case AppStateActionType.SET_TRANSACTION_OVERLAY: { + return { + ...state, + transactionOverlay: action.isOpen, + }; + } + case AppStateActionType.SET_BANNER_MESSAGE: { + return { + ...state, + bannerMessage: action.message, + }; + } + } +} + +export function AppStateProvider({ children }: AppStateProviderProps) { + const [state, dispatch] = React.useReducer(appStateReducer, initialAppState); + + return ( + + {children} + + ); +} diff --git a/apps/token/src/contexts/contracts/contracts-context.ts b/apps/token/src/contexts/contracts/contracts-context.ts new file mode 100644 index 000000000..81751498c --- /dev/null +++ b/apps/token/src/contexts/contracts/contracts-context.ts @@ -0,0 +1,30 @@ +import type { + TxData, + VegaClaim, + VegaErc20Bridge, + VegaStaking, + ERC20Token, + VegaVesting, +} from '@vegaprotocol/smart-contracts-sdk'; +import React from 'react'; + +export interface ContractsContextShape { + token: ERC20Token; + staking: VegaStaking; + vesting: VegaVesting; + claim: VegaClaim; + erc20Bridge: VegaErc20Bridge; + transactions: TxData[]; +} + +export const ContractsContext = React.createContext< + ContractsContextShape | undefined +>(undefined); + +export function useContracts() { + const context = React.useContext(ContractsContext); + if (context === undefined) { + throw new Error('useContracts must be used within ContractsProvider'); + } + return context; +} diff --git a/apps/token/src/contexts/contracts/contracts-provider.tsx b/apps/token/src/contexts/contracts/contracts-provider.tsx new file mode 100644 index 000000000..2904056fd --- /dev/null +++ b/apps/token/src/contexts/contracts/contracts-provider.tsx @@ -0,0 +1,104 @@ +import type { TxData } from '@vegaprotocol/smart-contracts-sdk'; +import { + VegaClaim, + VegaErc20Bridge, + VegaStaking, + ERC20Token, + VegaVesting, +} from '@vegaprotocol/smart-contracts-sdk'; +import { Splash } from '@vegaprotocol/ui-toolkit'; +import { useWeb3React } from '@web3-react/core'; +import uniqBy from 'lodash/uniqBy'; +import React from 'react'; + +import { SplashLoader } from '../../components/splash-loader'; +import { ADDRESSES, APP_ENV } from '../../config'; +import type { ContractsContextShape } from './contracts-context'; +import { ContractsContext } from './contracts-context'; +import { defaultProvider } from '../../lib/web3-connectors'; + +/** + * Provides Vega Ethereum contract instances to its children. + */ +export const ContractsProvider = ({ children }: { children: JSX.Element }) => { + const { provider: activeProvider, account } = useWeb3React(); + const [txs, setTxs] = React.useState([]); + const [contracts, setContracts] = React.useState | null>(null); + + // Create instances of contract classes. If we have an account use a signer for the + // contracts so that we can sign transactions, otherwise use the provider for just + // reading data + React.useEffect(() => { + let signer = null; + + const provider = activeProvider ? activeProvider : defaultProvider; + + if ( + account && + activeProvider && + typeof activeProvider.getSigner === 'function' + ) { + signer = provider.getSigner(); + } + + if (provider) { + setContracts({ + token: new ERC20Token( + ADDRESSES.vegaTokenAddress, + // @ts-ignore Cant accept JsonRpcProvider provider + provider, + signer + ), + // @ts-ignore Cant accept JsonRpcProvider provider + staking: new VegaStaking(APP_ENV, provider, signer), + // @ts-ignore Cant accept JsonRpcProvider provider + vesting: new VegaVesting(APP_ENV, provider, signer), + // @ts-ignore Cant accept JsonRpcProvider provider + claim: new VegaClaim(APP_ENV, provider, signer), + erc20Bridge: new VegaErc20Bridge( + APP_ENV, + // @ts-ignore Cant accept JsonRpcProvider provider + provider, + signer + ), + }); + } + }, [activeProvider, account]); + + React.useEffect(() => { + if (!contracts) return; + + const mergeTxs = (existing: TxData[], incoming: TxData[]) => { + return uniqBy([...incoming, ...existing], 'tx.hash'); + }; + + contracts.staking.listen((txs) => { + setTxs((curr) => mergeTxs(curr, txs)); + }); + + contracts.vesting.listen((txs) => { + setTxs((curr) => mergeTxs(curr, txs)); + }); + }, [contracts]); + + React.useEffect(() => { + setTxs([]); + }, [account]); + + if (!contracts) { + return ( + + + + ); + } + + return ( + + {children} + + ); +}; diff --git a/apps/token/src/favicon.ico b/apps/token/src/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..645294ca83ed735ba26e921260995cc3923dc60b GIT binary patch literal 1150 zcmdT^J!*wO5S~B|@T%0YOOXRuiP%`=0v48{wsu}YZ{Z!h!Yk}7Y(xaH)Jjkg{Q0u8 zj~58!@nWi%Z~1m+zuB2#8Caqxu}&uv`z!g+L@z}2CMYDKTy$ZGMC{}JLU|S&9u)h& zqiGsR_K#v&7Fd=g$^H?PWeLyo5XUj1D1z&{VC^@k>l#UtK-YDg&u2-)Fp%dt`o2e& zWf;ftW+}&UplKSquEV;nl6-&LHd$9u6cj~qGvBstsH*y{$2`vn!w^9bAWc&Y!*D2{ z`*TgMeGfnN|4;e8@53}rOw;uBRQ6fp*gdpui>j*Rysme7cC2yi(Qy3-{%St~Goq_$ literal 0 HcmV?d00001 diff --git a/apps/token/src/hooks/__generated__/Erc20Approval.ts b/apps/token/src/hooks/__generated__/Erc20Approval.ts new file mode 100644 index 000000000..bb0c69bfb --- /dev/null +++ b/apps/token/src/hooks/__generated__/Erc20Approval.ts @@ -0,0 +1,48 @@ +/* tslint:disable */ +/* eslint-disable */ +// @generated +// This file was automatically generated and should not be edited. + +// ==================================================== +// GraphQL query operation: Erc20Approval +// ==================================================== + +export interface Erc20Approval_erc20WithdrawalApproval { + __typename: "Erc20WithdrawalApproval"; + /** + * The source asset in the ethereum network + */ + assetSource: string; + /** + * The amount to be withdrawn + */ + amount: string; + /** + * The nonce to be used in the request + */ + nonce: string; + /** + * Signature aggregate from the nodes, in the following format: + * 0x + sig1 + sig2 + ... + sigN + */ + signatures: string; + /** + * The target address which will receive the funds + */ + targetAddress: string; + /** + * Timestamp in seconds for expiry of the approval + */ + expiry: string; +} + +export interface Erc20Approval { + /** + * find an erc20 withdrawal approval using its withdrawal id + */ + erc20WithdrawalApproval: Erc20Approval_erc20WithdrawalApproval | null; +} + +export interface Erc20ApprovalVariables { + withdrawalId: string; +} diff --git a/apps/token/src/hooks/__generated__/NetworkParams.ts b/apps/token/src/hooks/__generated__/NetworkParams.ts new file mode 100644 index 000000000..493e5eaf1 --- /dev/null +++ b/apps/token/src/hooks/__generated__/NetworkParams.ts @@ -0,0 +1,27 @@ +/* tslint:disable */ +/* eslint-disable */ +// @generated +// This file was automatically generated and should not be edited. + +// ==================================================== +// GraphQL query operation: NetworkParams +// ==================================================== + +export interface NetworkParams_networkParameters { + __typename: "NetworkParameter"; + /** + * The name of the network parameter + */ + key: string; + /** + * The value of the network parameter + */ + value: string; +} + +export interface NetworkParams { + /** + * return the full list of network parameters + */ + networkParameters: NetworkParams_networkParameters[] | null; +} diff --git a/apps/token/src/hooks/__generated__/WithdrawalPoll.ts b/apps/token/src/hooks/__generated__/WithdrawalPoll.ts new file mode 100644 index 000000000..665f928d9 --- /dev/null +++ b/apps/token/src/hooks/__generated__/WithdrawalPoll.ts @@ -0,0 +1,93 @@ +/* tslint:disable */ +/* eslint-disable */ +// @generated +// This file was automatically generated and should not be edited. + +import { WithdrawalStatus } from "./../../__generated__/globalTypes"; + +// ==================================================== +// GraphQL query operation: WithdrawalPoll +// ==================================================== + +export interface WithdrawalPoll_party_withdrawals_asset { + __typename: "Asset"; + /** + * The id of the asset + */ + id: string; + /** + * The symbol of the asset (e.g: GBP) + */ + symbol: string; + /** + * The precision of the asset + */ + decimals: number; +} + +export interface WithdrawalPoll_party_withdrawals_details { + __typename: "Erc20WithdrawalDetails"; + /** + * The ethereum address of the receiver of the asset funds + */ + receiverAddress: string; +} + +export interface WithdrawalPoll_party_withdrawals { + __typename: "Withdrawal"; + /** + * The Vega internal id of the withdrawal + */ + id: string; + /** + * The amount to be withdrawn + */ + amount: string; + /** + * The current status of the withdrawal + */ + status: WithdrawalStatus; + /** + * The asset to be withdrawn + */ + asset: WithdrawalPoll_party_withdrawals_asset; + /** + * RFC3339Nano time at which the withdrawal was created + */ + createdTimestamp: string; + /** + * RFC3339Nano time at which the withdrawal was finalized + */ + withdrawnTimestamp: string | null; + /** + * Hash of the transaction on the foreign chain + */ + txHash: string | null; + /** + * Foreign chain specific details about the withdrawal + */ + details: WithdrawalPoll_party_withdrawals_details | null; +} + +export interface WithdrawalPoll_party { + __typename: "Party"; + /** + * Party identifier + */ + id: string; + /** + * The list of all withdrawals initiated by the party + */ + withdrawals: WithdrawalPoll_party_withdrawals[] | null; +} + +export interface WithdrawalPoll { + /** + * An entity that is trading on the VEGA network + */ + party: WithdrawalPoll_party | null; +} + +export interface WithdrawalPollVariables { + partyId: string; +} diff --git a/apps/token/src/hooks/__mocks__/tranches-mock.ts b/apps/token/src/hooks/__mocks__/tranches-mock.ts new file mode 100644 index 000000000..8627e2221 --- /dev/null +++ b/apps/token/src/hooks/__mocks__/tranches-mock.ts @@ -0,0 +1,666 @@ +import parseJSON from 'date-fns/parseJSON'; +import { BigNumber } from '../../lib/bignumber'; +import type { Tranche } from '@vegaprotocol/smart-contracts-sdk'; + +const json: Tranche[] = [ + { + tranche_id: 1, + tranche_start: parseJSON('2022-03-05T00:00:00.000Z'), + tranche_end: parseJSON('2023-06-05T00:00:00.000Z'), + total_added: new BigNumber('3505372.53445'), + total_removed: new BigNumber('0'), + locked_amount: new BigNumber('3505372.53445'), + deposits: [ + { + amount: new BigNumber('187637.95'), + user: '0xE6CacAE56Cca8dFdB7910b5A13578719D4E57DA0', + tx: '0xc4491908e3347b05f2394ac7e1006f573fe8cbc490a57cd1dadad70785e95024', + }, + { + amount: new BigNumber('200000'), + user: '0x93b478148FF792B00076B7EdC89Db1FdE7772079', + tx: '0xcc8fba855a0d965044d4cc587701fe9ee9f5863852cede017382ffe02963d9b8', + }, + { + amount: new BigNumber('21666.5743'), + user: '0xB523235B6c7C74DDB26b10E78bFb2d0Cb63Ae289', + tx: '0x8cc5159f3d665dd33a2bdac6e990cf1b65dc18b6b5e37a07b37dd54495a8d33c', + }, + { + amount: new BigNumber('200000'), + user: '0x7227e17101E6C70F4dAfC7DDB77BB7D83DdfC1C8', + tx: '0x0cdef6868bd6b977362396fd06525e1e757e827659c5d75cd512db121947e6f7', + }, + { + amount: new BigNumber('137998.56'), + user: '0x69eFc5642CfcCB1777bc663433640531F044D1F5', + tx: '0xaa9b3b39836a69f760f5d1d2fdba44ad348b27c8f31eb094ad6f779b39d7949c', + }, + { + amount: new BigNumber('16249.93'), + user: '0x006B59DD3bC838A74476c0F4a33C1565831dA0DD', + tx: '0xda9bdc846300600c0d360edcaf4a5ed40fa2586ba7872f2bf68251a669adff0e', + }, + ], + withdrawals: [], + users: [ + { + address: '0xE6CacAE56Cca8dFdB7910b5A13578719D4E57DA0', + deposits: [ + { + amount: new BigNumber('187637.95'), + user: '0xE6CacAE56Cca8dFdB7910b5A13578719D4E57DA0', + tranche_id: 1, + tx: '0xc4491908e3347b05f2394ac7e1006f573fe8cbc490a57cd1dadad70785e95024', + }, + ], + withdrawals: [], + total_tokens: new BigNumber('187637.95'), + withdrawn_tokens: new BigNumber('0'), + remaining_tokens: new BigNumber('187637.95'), + }, + { + address: '0x1A71e3ED1996CAbB91bB043f880CE963D601707e', + deposits: [ + { + amount: new BigNumber('112323.67'), + user: '0x1A71e3ED1996CAbB91bB043f880CE963D601707e', + tranche_id: 1, + tx: '0xaa378d2d0d4d7b964a675bb19f19c4f7401deec6ce66b1bd98ad5b812026e53e', + }, + ], + withdrawals: [], + total_tokens: new BigNumber('112323.67'), + withdrawn_tokens: '0', + remaining_tokens: new BigNumber('112323.67'), + }, + ], + }, + { + tranche_id: 2, + tranche_start: parseJSON('2022-06-05T00:00:00.000Z'), + tranche_end: parseJSON('2023-12-05T00:00:00.000Z'), + total_added: new BigNumber('15464357.550320999700000001'), + total_removed: new BigNumber('0'), + locked_amount: new BigNumber('15464357.550320999700000001'), + deposits: [ + { + amount: new BigNumber('1'), + user: '0x7fff551249D223f723557a96a0e1a469C79cC934', + tx: '0x55fa59d71aac37428a5804442c48da677a4426a4e92447919a8199520ce20f53', + }, + { + amount: new BigNumber('100000'), + user: '0xe20D4d4fFb165e4b9926467d82d03c0e9ab66D89', + tx: '0xabf2cc96c41c8b4f0cff8d8ff7448e241ff83e296a7b7dea79d9d9868f33b7ad', + }, + { + amount: new BigNumber('500000'), + user: '0x5f01A497e4033E4812ba5D494bCBc2220cd510Ed', + tx: '0xe3a1a74378a42eace12c21c24889d8b0da6a3736ca7987720e70f59886caa5a3', + }, + { + amount: new BigNumber('59228.95'), + user: '0x1d20f66eF3889aa48Bb4Badbbf993dE965BDb029', + tx: '0xf31eab593b86aac54f5fa9fe24bb26105ff52386be60bc24617dd362df7c6f15', + }, + { + amount: new BigNumber('206374.1211'), + user: '0x1b979e8AE3BbbaF96Dd1bbbC0060b360A23f2EBE', + tx: '0x2983daa9acf6da5fba0debc2aaaaf47389b92aea0de0c27b20809fb69a63ce69', + }, + { + amount: new BigNumber('200000'), + user: '0xe45993F39183E148bC35BA02ba8C289111181c0f', + tx: '0xbda7b70ab8ac629617e74daaaa5451b04d7830bc0da516e10d533efc2eef1530', + }, + ], + withdrawals: [ + { + amount: new BigNumber('0'), + user: '0x4527F5A12bbbbb7c88c5863F8AB9a708928Fe702', + tx: '0xbaa8632cd162265ca46baaaad746ec3d283a474e344727854d962e057380a51', + }, + ], + users: [ + { + address: '0x7fff551249D223f723557a96a0e1aCCCC79cC934', + deposits: [ + { + amount: new BigNumber('1'), + user: '0x7fff551249D223f723557a96a0e1aCCCC79cC934', + tranche_id: 2, + tx: '0x55fa59d71aac37428a0000042c48da677a4426a4e92447919a8199520ce20f53', + }, + ], + withdrawals: [], + total_tokens: new BigNumber('1'), + withdrawn_tokens: new BigNumber('0'), + remaining_tokens: new BigNumber('1'), + }, + { + address: '0xCc5CAFD3daA3bb2c1168521F35d1eBEB6cf7c051', + deposits: [ + { + amount: new BigNumber('200000'), + user: '0xCc5CAFD3daA3bb2c1168521F35d1eBEB6cf7c051', + tranche_id: 2, + tx: '0x8168230eb08320a7a874ebeeea20f0def842b8059a2b05a036870e00ca624c88', + }, + ], + withdrawals: [], + total_tokens: new BigNumber('200000'), + withdrawn_tokens: new BigNumber('0'), + remaining_tokens: new BigNumber('200000'), + }, + { + address: '0x9cd59376F896a5F2084232E386A65c17EEA4Fe9f', + deposits: [ + { + amount: new BigNumber('200000'), + user: '0x9cd59376F896a5F2084232E386A65c17EEA4Fe9f', + tranche_id: 2, + tx: '0x2eb27449e08a245314faaaaf0d93fafc70733586495f18cf2fb69ef979459efd', + }, + ], + withdrawals: [], + total_tokens: new BigNumber('200000'), + withdrawn_tokens: new BigNumber('0'), + remaining_tokens: new BigNumber('200000'), + }, + { + address: '0xe45993F39183E148bC35BA02ba8aaaa807981caa', + deposits: [ + { + amount: new BigNumber('200000'), + user: '0xe45993F39183E148bC35BA02ba8aaaa07981caa', + tranche_id: 2, + tx: '0xbda7b70ab8ac629617e74d33575451b04d7830bc0da516e10d533efc2eef1530', + }, + ], + withdrawals: [], + total_tokens: new BigNumber('200000'), + withdrawn_tokens: new BigNumber('0'), + remaining_tokens: new BigNumber('200000'), + }, + ], + }, + { + tranche_id: 3, + tranche_start: parseJSON('2021-11-05T00:00:00.000Z'), + tranche_end: parseJSON('2023-05-05T00:00:00.000Z'), + total_added: new BigNumber('14597706.0446472999'), + total_removed: new BigNumber('0'), + locked_amount: new BigNumber('14445316.74229298796336861823365303'), + deposits: [ + { + amount: new BigNumber('129284.449'), + user: '0x26100B2C8168Cb0A6c869a5698265086A3Dfeaaa', + tx: '0xcc67a776a2e3b48864470aaa9e0940c1814663b4fde6df60c1a099a636dcae79', + }, + { + amount: new BigNumber('1151405.093'), + user: '0x777Ec2e2beaB6a63c1E763D0dc4120AF60BEe39F', + tx: '0x1237d45a40aacc5dff7f8f69e8a4c0536fd0460b915de576bd3f0fdf5892c0a4', + }, + { + amount: new BigNumber('1151073.595'), + user: '0x5CD0Ec63687588817044794bF15d4e37991efAB3', + tx: '0xb4eaca7d8abeaf7e1d9d28b1f1fa09fc1933af0e11bff4b0120dcef7d2dfc64d', + }, + { + amount: new BigNumber('54034.5'), + user: '0xc01F2E57554Bb392384feCA6a54c8E3A3Ca94E42', + tx: '0xf33289a2a73a65b132accdddd600a8d2c7556c2d80784d5f8d4eea1ecacf93cc', + }, + { + amount: new BigNumber('115049.22'), + user: '0x01a8055A97b461b58ba8e37cd349721FeAe77A8D', + tx: '0xf650c3599b24d01dfa1f3e19b22f870ff8ac8dfac529893f0b22d548c3535eda', + }, + ], + withdrawals: [ + { + amount: new BigNumber('0'), + user: '0x4Aa3c35F6CC2d507E5C18205ee57099A4C80B19b', + tx: '0x1af894d1f9ce5ea79aa52d180fbff5f30b8b456e43b76ca5d7d73366e422ea37', + }, + ], + users: [ + { + address: '0x26100B2C8168Cb0A6c869a5698265086A3DfeF98', + deposits: [ + { + amount: new BigNumber('129284.449'), + user: '0x26100B2C8168Cb0A6c869a5698265086A3DfeF98', + tranche_id: 3, + tx: '0xcc67a776a2e3b48864470eff9e0940c1814663b4fde6df60c1a099a636dcae79', + }, + ], + withdrawals: [], + total_tokens: new BigNumber('129284.449'), + withdrawn_tokens: new BigNumber('0'), + remaining_tokens: new BigNumber('129284.449'), + }, + { + address: '0xd4632B682228Db5f38E2283869AEe8c29ee6Eec8', + deposits: [ + { + amount: new BigNumber('44499.2'), + user: '0xd4632B682228Db5f38E2283869AEe8c29ee6Eec8', + tranche_id: 3, + tx: '0x57019840d1ce05e0ef65c45801d6699e5eb1032bd8ad56493594d4866996ea82', + }, + ], + withdrawals: [], + total_tokens: new BigNumber('44499.2'), + withdrawn_tokens: '0', + remaining_tokens: new BigNumber('44499.2'), + }, + { + address: '0xe2E6F37cb1f1980418012BF69f43910d6Bc73e73', + deposits: [ + { + amount: new BigNumber('66748.8'), + user: '0xe2E6F37cb1f1980418012BF69f43910d6Bc73e73', + tranche_id: 3, + tx: '0xd257a3aacd5bdf86cbea0ed3db3697f55dff9092129db6baedacaf00b50af936', + }, + ], + withdrawals: [], + total_tokens: new BigNumber('66748.8'), + withdrawn_tokens: new BigNumber('0'), + remaining_tokens: new BigNumber('66748.8'), + }, + { + address: '0xc01F2E57554Bb392384feCA6a54c8E3A3Ca94E42', + deposits: [ + { + amount: new BigNumber('54034.5'), + user: '0xc01F2E57554Bb392384feCA6a54c8E3A3Ca94E42', + tranche_id: 3, + tx: '0xf33289a2a73a65b132accdddd600a8d2c7556c2d80784d5f8d4eea1ecacf93cc', + }, + ], + withdrawals: [], + total_tokens: new BigNumber('54034.5'), + withdrawn_tokens: new BigNumber('0'), + remaining_tokens: new BigNumber('54034.5'), + }, + ], + }, + { + tranche_id: 4, + tranche_start: parseJSON('2021-10-05T00:00:00.000Z'), + tranche_end: parseJSON('2023-04-05T00:00:00.000Z'), + total_added: new BigNumber('5198082.8647159303'), + total_removed: new BigNumber('12706.1452878164044708'), + locked_amount: new BigNumber('4849328.20502099651595959714823613'), + deposits: [ + { + amount: new BigNumber('110499.5291'), + user: '0xa8679b60612Fb2e19d68964326CA02dCe6a08D08', + tx: '0x9d3432b818054796489848c415af5c523acb16c1540e5865010baf71964c03a7', + }, + { + amount: new BigNumber('331498.5873'), + user: '0x39fEc2e2beaB6a63c1E763D0dc4120AF60BEe39F', + tx: '0xdf5c6e44ef0763e785721802704e5fd186fa3964302a566899027447d0dda57b', + }, + { + amount: new BigNumber('27624.032275'), + user: '0xF5Fb27b912D987B5b6e02A1B1BE0C1F0740E2c6f', + tx: '0x1860d39ae3e9ad710da9e2a9bf9606eedc1b176fca673473d6854ea91ed8beb5', + }, + { + amount: new BigNumber('73666.3527333333'), + user: '0x2895059cB5a492BEd58D1fB22713006EfaD465eA', + tx: '0x260619e2129cc58ae03f6b4ecfc5a6eeab29b5998de69875accb3cb945beed04', + }, + ], + withdrawals: [ + { + amount: new BigNumber('1290.014571009862016'), + user: '0xBc934494675a6ceB639B9EfEe5b9C0f017D35a75', + tx: '0x637c3648ce941a77e08e741f981806a5d56275db6d280f041902386ae8567d06', + }, + { + amount: new BigNumber('5197.621879605058623'), + user: '0xafa64cCa337eFEE0AD827F6C2684e69275226e90', + tx: '0xe8b8c1a38d3ae809dcaae54a11adeeba0f46be03924e91d8f251f3f2d48c3553', + }, + { + amount: new BigNumber('376.2625308599198808'), + user: '0x1dD2718fd01d05C9F50Fce8Bb723A4C7483A1E15', + tx: '0x78af737235f1123bb1c6a607a0b4b7a3c5ed6859a4e8912f45bb7c812724b1de', + }, + { + amount: new BigNumber('4162.301372742020875'), + user: '0xBc934494675a6ceB639B9EfEe5b9C0f017D35a75', + tx: '0x85c7d9979f0e3a3660dc5952732eaf9414f7c28a1c00a9a10f449843f91d85e0', + }, + { + amount: new BigNumber('1679.944933599543076'), + user: '0x9058e12e2F32cB1cD4D3123359963D77786477FC', + tx: '0xd92083f2e90e84cb70ef27ac410ed1144200c41b1714fb54d29f5f23ca086ecb', + }, + ], + users: [ + { + address: '0xa8679b60612Fb2e19d68964326CA02dCe6a08D08', + deposits: [ + { + amount: new BigNumber('110499.5291'), + user: '0xa8679b60612Fb2e19d68964326CA02dCe6a08D08', + tranche_id: 4, + tx: '0x9d3432b818054796489848c415af5c523acb16c1540e5865010baf71964c03a7', + }, + ], + withdrawals: [], + total_tokens: new BigNumber('110499.5291'), + withdrawn_tokens: new BigNumber('0'), + remaining_tokens: new BigNumber('110499.5291'), + }, + { + address: '0x8767d65677Cabaa2050b764AEf40610f2f9796F5', + deposits: [ + { + amount: new BigNumber('1104995.291'), + user: '0x8767d65677Cabaa2050b764AEf40610f2f9796F5', + tranche_id: 4, + tx: '0xc6298f52c173a837abd051ed810b01eb5731be307376b73df6e31b4de39d0122', + }, + ], + withdrawals: [], + total_tokens: new BigNumber('1104995.291'), + withdrawn_tokens: '0', + remaining_tokens: new BigNumber('1104995.291'), + }, + { + address: '0x91715128a71c9C734CDC20E5EdaaeA02E72e422E', + deposits: [ + { + amount: new BigNumber('165749.29365'), + user: '0x91715128a71c9C734CDC20E5EdEEeA02E72e422E', + tranche_id: 4, + tx: '0xf828cea685a0689f27446f02d3376c3afa4398182d3b5bf1c81e949f5965d1c1', + }, + ], + withdrawals: [], + total_tokens: new BigNumber('165749.29365'), + withdrawn_tokens: new BigNumber('0'), + remaining_tokens: new BigNumber('165749.29365'), + }, + { + address: '0x2895059cB5a492BEd58D1fB22713006EfaD465eA', + deposits: [ + { + amount: new BigNumber('73666.3527333333'), + user: '0x2895059cB5a492BEd58D1fB22713006EfaD465eA', + tranche_id: 4, + tx: '0x260619e2129cc58ae03f6b4ecfc5a6eeab29b5998de69875accb3cb945beed04', + }, + ], + withdrawals: [], + total_tokens: new BigNumber('73666.3527333333'), + withdrawn_tokens: new BigNumber('0'), + remaining_tokens: new BigNumber('73666.3527333333'), + }, + ], + }, + { + tranche_id: 23, + tranche_start: parseJSON('2022-04-30T00:00:00.000Z'), + tranche_end: parseJSON('2022-04-30T00:00:00.000Z'), + total_added: new BigNumber('10833.29'), + total_removed: new BigNumber('0'), + locked_amount: new BigNumber('10833.29'), + deposits: [ + { + amount: new BigNumber('10833.29'), + user: '0xF3359E5B89f7804c8c9283781Aaaa33BBd979c9D', + tx: '0x65f904ef34d6992b52f449a709d7a24411a501fd07f90aaa9255eacc994bc229', + }, + ], + withdrawals: [], + users: [ + { + address: '0xF3359E5B89f7804c8c9283781Aaaa33BBd979c9D', + deposits: [ + { + amount: new BigNumber('10833.29'), + user: '0xF3359E5B89f7804c8c9283781Aaaa33BBd979c9D', + tranche_id: 23, + tx: '0x65f904ef34d6992b52f449a709d7a24411a501fd07f90aaa9255eacc994bc229', + }, + ], + withdrawals: [], + total_tokens: new BigNumber('10833.29'), + withdrawn_tokens: new BigNumber('0'), + remaining_tokens: new BigNumber('10833.29'), + }, + ], + }, + { + tranche_id: 24, + tranche_start: parseJSON('2022-09-26T00:00:00.000Z'), + tranche_end: parseJSON('2022-09-26T00:00:00.000Z'), + total_added: new BigNumber('16249.93'), + total_removed: new BigNumber('0'), + locked_amount: new BigNumber('16249.93'), + deposits: [ + { + amount: new BigNumber('16249.93'), + user: '0xcE96670971ec2E1E79D0d96688adbA2FfD6F6C7f', + tx: '0x3dbd991b7914986505d89a7c1562278dffffa2f5f444bdbf5d6bbd838e3d8d5d', + }, + ], + withdrawals: [], + users: [ + { + address: '0xcE96670971ec2E1E79D0d96688adbA2FfD6F6C7f', + deposits: [ + { + amount: new BigNumber('16249.93'), + user: '0xcE96670971ec2E1E79D0d96688adbA2FfD6F6C7f', + tranche_id: 24, + tx: '0x3dbd991b7914986505d89a7c1562278dffffa2f5f444bdbf5d6bbd838e3d8d5d', + }, + ], + withdrawals: [], + total_tokens: new BigNumber('16249.93'), + withdrawn_tokens: new BigNumber('0'), + remaining_tokens: new BigNumber('16249.93'), + }, + ], + }, + { + tranche_id: 25, + tranche_start: parseJSON('2022-02-10T00:00:00.000Z'), + tranche_end: parseJSON('2023-04-05T00:00:00.000Z'), + total_added: new BigNumber('0'), + total_removed: new BigNumber('0'), + locked_amount: new BigNumber('0'), + deposits: [], + withdrawals: [], + users: [], + }, + { + tranche_id: 26, + tranche_start: parseJSON('2022-02-04T00:00:00.000Z'), + tranche_end: parseJSON('2023-04-05T00:00:00.000Z'), + total_added: new BigNumber('135173.4239508'), + total_removed: new BigNumber('0'), + locked_amount: new BigNumber('135173.4239508'), + deposits: [ + { + amount: new BigNumber('135173.4239508'), + user: '0xc90eA4d8D214D548221EE3622a8BE1D61f7077A2', + tx: '0x123fb1e293a8246b92d85a47c8d33def9fb6468c7cbb70f1754d78914b12dbf8', + }, + ], + withdrawals: [], + users: [ + { + address: '0x222eA4d8D214D548221EE3622a8BE1D61f7077A2', + deposits: [ + { + amount: new BigNumber('135173.4239508'), + user: '0x222eA4d8D214D548221EE3622a8BE1D61f7077A2', + tranche_id: 26, + tx: '0x9fafb1e293a8246b92d85a47c8d33def9fb6468c7cbb70f1754d78914b12dbf8', + }, + ], + withdrawals: [], + total_tokens: new BigNumber('135173.4239508'), + withdrawn_tokens: new BigNumber('0'), + remaining_tokens: new BigNumber('135173.4239508'), + }, + ], + }, + { + tranche_id: 27, + tranche_start: parseJSON('2022-05-09T00:00:00.000Z'), + tranche_end: parseJSON('2023-04-05T00:00:00.000Z'), + total_added: new BigNumber('32499.86'), + total_removed: new BigNumber('0'), + locked_amount: new BigNumber('32499.86'), + deposits: [ + { + amount: new BigNumber('32499.86'), + user: '0x1E7c4E57A1dc4dD4bBE81b833e3E437f69619DaB', + tx: '0x25a3dd4852ce8ac1c15fe42123cfab14e4bf8a5c1cb97167cb4d6fe20bd319ae', + }, + ], + withdrawals: [], + users: [ + { + address: '0x3E7c4E57A1dc4dD4bBE81bbEFBe3Eaaaf69619Da9', + deposits: [ + { + amount: new BigNumber('32499.86'), + user: '0x3E7c4E57A1dc4dD4bBE81bbEFBe3Eaaaf69619Da9', + tranche_id: 27, + tx: '0x75a3dd4852ce8ac1c15fe42ff6cfab1455bf8a5c1cb97167cb4d6fe20bd319ae', + }, + ], + withdrawals: [], + total_tokens: new BigNumber('32499.86'), + withdrawn_tokens: new BigNumber('0'), + remaining_tokens: new BigNumber('32499.86'), + }, + ], + }, + { + tranche_id: 28, + tranche_start: parseJSON('2022-04-30T00:00:00.000Z'), + tranche_end: parseJSON('2023-04-05T00:00:00.000Z'), + total_added: new BigNumber('10833.29'), + total_removed: new BigNumber('0'), + locked_amount: new BigNumber('10833.29'), + deposits: [ + { + amount: new BigNumber('10833.29'), + user: '0xF3359E5B89f7804c8c9283781Aaa133BBd979c9D', + tx: '0x166d235eff44e7bcc63597c0d6e698552e4440fe90ec7cf07a1d510c275cf3e0', + }, + ], + withdrawals: [], + users: [ + { + address: '0x12349E5B89f7804c8c9283781A23133BBd979c22', + deposits: [ + { + amount: new BigNumber('10833.29'), + user: '0x12349E5B89f7804c8c9283781A23133BBd979c22', + tranche_id: 28, + tx: '0x166d235eff44e7baa6359712345698552e6150fe90ec7cf07a1d510c275cf3e0', + }, + ], + withdrawals: [], + total_tokens: new BigNumber('10833.29'), + withdrawn_tokens: new BigNumber('0'), + remaining_tokens: new BigNumber('10833.29'), + }, + ], + }, + { + tranche_id: 29, + tranche_start: parseJSON('2022-09-26T00:00:00.000Z'), + tranche_end: parseJSON('2023-04-05T00:00:00.000Z'), + total_added: new BigNumber('16249.93'), + total_removed: new BigNumber('0'), + locked_amount: new BigNumber('16249.93'), + deposits: [ + { + amount: new BigNumber('16249.93'), + user: '0xcE96670971ec2E1E79D0d12388adbA2FfD6F6C7f', + tx: '0xa770ab2d05e6c81be46b73ac2326e81a111da4ce55a2d8544bd95b48ad530674', + }, + ], + withdrawals: [], + users: [ + { + address: '0xcE96670971ec2E1E79D0d96688adbA2FfD6F6C7f', + deposits: [ + { + amount: new BigNumber('16249.93'), + user: '0xcE96670971ec212379D0d12388adbA2Ffc6F6C7f', + tranche_id: 29, + tx: '0xa220ab2d05e6c81be12373ac2326e81a912da4ce55a2d8544bd95b48ad530674', + }, + ], + withdrawals: [], + total_tokens: new BigNumber('16249.93'), + withdrawn_tokens: new BigNumber('0'), + remaining_tokens: new BigNumber('16249.93'), + }, + ], + }, + { + tranche_id: 30, + tranche_start: parseJSON('2021-11-01T00:00:00.000Z'), + tranche_end: parseJSON('2022-05-01T00:00:00.000Z'), + total_added: new BigNumber('0'), + total_removed: new BigNumber('0'), + locked_amount: new BigNumber('0'), + deposits: [], + withdrawals: [], + users: [], + }, + { + tranche_id: 31, + tranche_start: parseJSON('2022-02-01T00:00:00.000Z'), + tranche_end: parseJSON('2022-08-01T00:00:00.000Z'), + total_added: new BigNumber('0'), + total_removed: new BigNumber('0'), + locked_amount: new BigNumber('0'), + deposits: [], + withdrawals: [], + users: [], + }, + { + tranche_id: 32, + tranche_start: parseJSON('2022-05-01T00:00:00.000Z'), + tranche_end: parseJSON('2022-11-01T00:00:00.000Z'), + total_added: new BigNumber('0'), + total_removed: new BigNumber('0'), + locked_amount: new BigNumber('0'), + deposits: [], + withdrawals: [], + users: [], + }, + { + tranche_id: 33, + tranche_start: parseJSON('2022-11-01T00:00:00.000Z'), + tranche_end: parseJSON('2023-05-01T00:00:00.000Z'), + total_added: new BigNumber('0'), + total_removed: new BigNumber('0'), + locked_amount: new BigNumber('0'), + deposits: [], + withdrawals: [], + users: [], + }, +]; + +export default json; diff --git a/apps/token/src/hooks/__mocks__/use-tranches.ts b/apps/token/src/hooks/__mocks__/use-tranches.ts new file mode 100644 index 000000000..92ff1fbc4 --- /dev/null +++ b/apps/token/src/hooks/__mocks__/use-tranches.ts @@ -0,0 +1,23 @@ +import React from 'react'; +import { useContracts } from '../../contexts/contracts/contracts-context'; +import mock from './tranches-mock'; +import type { Tranche } from '@vegaprotocol/smart-contracts-sdk'; + +export function useTranches() { + const { vesting } = useContracts(); + const [tranches, setTranches] = React.useState(null); + const [error, setError] = React.useState(null); + + React.useEffect(() => { + const run = async () => { + try { + setTranches(mock); + } catch (err) { + setError((err as Error).message); + } + }; + run(); + }, [vesting]); + + return { tranches, error }; +} diff --git a/apps/token/src/hooks/transaction-reducer.ts b/apps/token/src/hooks/transaction-reducer.ts new file mode 100644 index 000000000..8adf20acc --- /dev/null +++ b/apps/token/src/hooks/transaction-reducer.ts @@ -0,0 +1,153 @@ +import type { ethers } from 'ethers'; + +export enum TxState { + Default = 'Default', + Requested = 'Requested', + Pending = 'Pending', + Complete = 'Complete', + Error = 'Error', +} + +export interface TransactionState { + // claim form state + txState: TxState; + requiredConfirmations: number | null; + txData: { + hash: string | null; + receipt: object | null; + error: Error | null; + userFacingError?: Error | null; + confirmations: number | null; + }; +} + +export const initialState: TransactionState = { + // claim tx + txState: TxState.Default, + requiredConfirmations: null, + txData: { + hash: null, + receipt: null, + error: null, + userFacingError: null, + confirmations: null, + }, +}; + +const substituteErrorMessage = ( + errMessage: string, + errorSubstitutions: { [errMessage: string]: string } +): Error => { + let newErrorMessage = errorSubstitutions['unknown']; + + Object.keys(errorSubstitutions).forEach((errorSubstitutionKey) => { + if (errMessage.includes(errorSubstitutionKey)) { + newErrorMessage = errorSubstitutions[errorSubstitutionKey]; + } + }); + return new Error(newErrorMessage); +}; + +export enum TransactionActionType { + TX_RESET, + TX_REQUESTED, + TX_SUBMITTED, + TX_COMPLETE, + TX_ERROR, + TX_CONFIRMATION, +} + +export type TransactionAction = + | { + type: TransactionActionType.TX_RESET; + } + | { + type: TransactionActionType.TX_REQUESTED; + } + | { + type: TransactionActionType.TX_SUBMITTED; + txHash: string; + } + | { + type: TransactionActionType.TX_COMPLETE; + receipt: ethers.ContractReceipt; + confirmations: number; + } + | { + type: TransactionActionType.TX_ERROR; + error: Error; + errorSubstitutions: { [errMessage: string]: string }; + } + | { + type: TransactionActionType.TX_CONFIRMATION; + confirmations: number; + }; + +export function transactionReducer( + state: TransactionState, + action: TransactionAction +): TransactionState { + switch (action.type) { + case TransactionActionType.TX_RESET: + return { + ...state, + txState: TxState.Default, + requiredConfirmations: state.requiredConfirmations || null, + txData: { + hash: null, + receipt: null, + error: null, + confirmations: null, + }, + }; + case TransactionActionType.TX_REQUESTED: + return { + ...state, + txState: TxState.Requested, + txData: { + ...state.txData, + }, + }; + case TransactionActionType.TX_SUBMITTED: { + return { + ...state, + txState: TxState.Pending, + txData: { + ...state.txData, + hash: action.txHash, + }, + }; + } + case TransactionActionType.TX_COMPLETE: + return { + ...state, + txState: TxState.Complete, + txData: { + ...state.txData, + receipt: action.receipt, + confirmations: action.confirmations, + }, + }; + case TransactionActionType.TX_CONFIRMATION: + return { + ...state, + txData: { + ...state.txData, + confirmations: action.confirmations, + }, + }; + case TransactionActionType.TX_ERROR: + return { + ...state, + txState: TxState.Error, + txData: { + ...state.txData, + userFacingError: substituteErrorMessage( + action.error.message, + action.errorSubstitutions + ), + error: action.error, + }, + }; + } +} diff --git a/apps/token/src/hooks/use-add-asset-to-wallet.ts b/apps/token/src/hooks/use-add-asset-to-wallet.ts new file mode 100644 index 000000000..5129c7e6a --- /dev/null +++ b/apps/token/src/hooks/use-add-asset-to-wallet.ts @@ -0,0 +1,59 @@ +import * as Sentry from '@sentry/react'; +import { useWeb3React } from '@web3-react/core'; +import { MetaMask } from '@web3-react/metamask'; +import React from 'react'; + +import { APP_ENV, Networks } from '../config'; + +export const useAddAssetSupported = () => { + const { connector } = useWeb3React(); + + return React.useMemo(() => { + return connector && connector instanceof MetaMask; + }, [connector]); +}; + +export const useAddAssetToWallet = ( + address: string, + symbol: string, + decimals: number, + image: string +) => { + const { provider } = useWeb3React(); + const addSupported = useAddAssetSupported(); + const add = React.useCallback(async () => { + if (!provider?.provider.request) { + return; + } + try { + provider.provider.request({ + method: 'wallet_watchAsset', + params: { + // @ts-ignore string type not accepted, but this is working + type: 'ERC20', + options: { + address, + symbol: `${symbol}${ + // Add the environment if not mainnet + APP_ENV === Networks.MAINNET + ? '' + : // Remove NET as VEGA(TESTNET) is too long + ` ${APP_ENV.replace('NET', '')}` + }`, + decimals, + image, + }, + }, + }); + } catch (error) { + Sentry.captureException(error); + } + }, [address, decimals, image, provider, symbol]); + + return React.useMemo(() => { + return { + add, + addSupported, + }; + }, [add, addSupported]); +}; diff --git a/apps/token/src/hooks/use-animate-value.ts b/apps/token/src/hooks/use-animate-value.ts new file mode 100644 index 000000000..1047f4082 --- /dev/null +++ b/apps/token/src/hooks/use-animate-value.ts @@ -0,0 +1,57 @@ +import React from 'react'; +import { Colors } from '../config'; +import { usePrevious } from './use-previous'; +import type { BigNumber } from '../lib/bignumber'; + +const FLASH_DURATION = 1200; // Duration of flash animation in milliseconds + +export function useAnimateValue( + elRef: React.MutableRefObject, + value?: BigNumber | null +) { + const shouldAnimate = React.useRef(false); + const previous = usePrevious(value); + + React.useEffect(() => { + const timeout = setTimeout(() => { + shouldAnimate.current = true; + }, 800); + return () => clearTimeout(timeout); + }, []); + + if ( + shouldAnimate.current && + value && + previous && + !value.isEqualTo(previous) && + value.isLessThan(previous) + ) { + elRef.current?.animate( + [ + { backgroundColor: Colors.VEGA_RED, color: Colors.WHITE }, + { backgroundColor: Colors.VEGA_RED, color: Colors.WHITE, offset: 0.8 }, + { backgroundColor: Colors.GRAY_LIGHT, color: Colors.WHITE }, + ], + FLASH_DURATION + ); + } else if ( + shouldAnimate.current && + value && + previous && + !value.isEqualTo(previous) && + value.isGreaterThan(previous) + ) { + elRef.current?.animate( + [ + { backgroundColor: Colors.VEGA_GREEN, color: Colors.WHITE }, + { + backgroundColor: Colors.VEGA_GREEN, + color: Colors.WHITE, + offset: 0.8, + }, + { backgroundColor: Colors.GRAY_LIGHT, color: Colors.WHITE }, + ], + FLASH_DURATION + ); + } +} diff --git a/apps/token/src/hooks/use-copy-to-clipboard.ts b/apps/token/src/hooks/use-copy-to-clipboard.ts new file mode 100644 index 000000000..e6b4a7ce6 --- /dev/null +++ b/apps/token/src/hooks/use-copy-to-clipboard.ts @@ -0,0 +1,38 @@ +import * as React from 'react' + +export function useCopyToClipboard() { + const [copied, setCopied] = React.useState(false) + + // Once copied flip a boolean so we can display + // a message to the user such as 'Copied!' which will + // revert after 800 milliseconds + React.useEffect(() => { + let timeout: any + if (copied) { + timeout = setTimeout(() => { + setCopied(false) + }, 800) + } + return () => clearTimeout(timeout) + }, [copied]) + + // Create an input we can copy text from and render it + // off screen + function handler(text: string) { + const input = document.createElement('input') + input.style.position = 'fixed' + input.style.left = '100vw' + input.style.opacity = '0' + input.value = text + document.body.appendChild(input) + input.select() + document.execCommand('copy') + document.body.removeChild(input) + setCopied(true) + } + + return { + copy: handler, + copied + } +} diff --git a/apps/token/src/hooks/use-create-withdrawal.ts b/apps/token/src/hooks/use-create-withdrawal.ts new file mode 100644 index 000000000..6448697a8 --- /dev/null +++ b/apps/token/src/hooks/use-create-withdrawal.ts @@ -0,0 +1,143 @@ +import React from 'react'; +import * as Sentry from '@sentry/react'; +import { gql, useApolloClient } from '@apollo/client'; +import { sigToId } from '../lib/sig-to-id'; +import { vegaWalletService } from '../lib/vega-wallet/vega-wallet-service'; + +import type { WithdrawSubmissionInput } from '../lib/vega-wallet/vega-wallet-service'; +import type { + WithdrawalPoll, + WithdrawalPollVariables, +} from './__generated__/WithdrawalPoll'; + +export enum Status { + Idle, + Submitted, + Pending, + Success, + Failure, +} + +type Submit = ( + amount: string, + asset: string, + receiverAddress: string +) => Promise; + +const WITHDRAWAL_QUERY = gql` + query WithdrawalPoll($partyId: ID!) { + party(id: $partyId) { + id + withdrawals { + id + amount + status + asset { + id + symbol + decimals + } + createdTimestamp + withdrawnTimestamp + txHash + details { + ... on Erc20WithdrawalDetails { + receiverAddress + } + } + } + } + } +`; + +export function useCreateWithdrawal(pubKey: string): [Status, Submit] { + const mountedRef = React.useRef(true); + const client = useApolloClient(); + const [status, setStatus] = React.useState(Status.Idle); + const [id, setId] = React.useState(''); + + const safeSetStatus = (status: Status) => { + if (mountedRef.current) { + setStatus(status); + } + }; + + const submit = React.useCallback( + async (amount: string, asset: string, receiverAddress: string) => { + const command: WithdrawSubmissionInput = { + pubKey, + withdrawSubmission: { + amount, + asset, + ext: { + erc20: { + receiverAddress, + }, + }, + }, + }; + + safeSetStatus(Status.Submitted); + + try { + const [err, res] = await vegaWalletService.commandSync(command); + + if (err || !res) { + safeSetStatus(Status.Failure); + } else { + const id = sigToId(res.signature.value); + setId(id); + // Now await subscription + } + + safeSetStatus(Status.Pending); + } catch (err) { + safeSetStatus(Status.Failure); + Sentry.captureException(err); + } + }, + [pubKey] + ); + + React.useEffect(() => { + let interval: any = null; + if (status === Status.Pending) { + interval = setInterval(async () => { + try { + const { data } = await client.query< + WithdrawalPoll, + WithdrawalPollVariables + >({ + fetchPolicy: 'network-only', + query: WITHDRAWAL_QUERY, + variables: { partyId: pubKey }, + }); + + // find matching withdrawals + const withdrawal = data?.party?.withdrawals?.find((e) => { + return e.id === id; + }); + if (withdrawal) { + safeSetStatus(Status.Success); + clearInterval(interval); + } + } catch (err) { + clearInterval(interval); + } + }, 1000); + } + + return () => { + clearInterval(interval); + }; + }, [client, id, pubKey, status]); + + React.useEffect(() => { + mountedRef.current = true; + return () => { + mountedRef.current = false; + }; + }, []); + + return [status, submit]; +} diff --git a/apps/token/src/hooks/use-document-title.ts b/apps/token/src/hooks/use-document-title.ts new file mode 100644 index 000000000..4d25ab242 --- /dev/null +++ b/apps/token/src/hooks/use-document-title.ts @@ -0,0 +1,13 @@ +import React from "react"; + +export function useDocumentTitle(name?: string) { + const base = "VEGA token"; + + React.useEffect(() => { + if (name) { + document.title = `${base} | ${name}`; + } else { + document.title = base; + } + }, [name]); +} diff --git a/apps/token/src/hooks/use-erc-poll20-approval.ts b/apps/token/src/hooks/use-erc-poll20-approval.ts new file mode 100644 index 000000000..917ddfa0d --- /dev/null +++ b/apps/token/src/hooks/use-erc-poll20-approval.ts @@ -0,0 +1,63 @@ +import React from 'react'; +import { gql, useApolloClient } from '@apollo/client'; + +import type { + Erc20Approval, + Erc20Approval_erc20WithdrawalApproval, + Erc20ApprovalVariables, +} from './__generated__/Erc20Approval'; + +const ERC20_APPROVAL_QUERY = gql` + query Erc20Approval($withdrawalId: ID!) { + erc20WithdrawalApproval(withdrawalId: $withdrawalId) { + assetSource + amount + nonce + signatures + targetAddress + expiry + } + } +`; + +export const usePollERC20Approval = (withdrawalId: string) => { + const mountedRef = React.useRef(true); + const client = useApolloClient(); + const [erc20Approval, setErc20Approval] = + React.useState(null); + + const safeSetErc20Approval = ( + approval: Erc20Approval_erc20WithdrawalApproval + ) => { + if (mountedRef.current) { + setErc20Approval(approval); + } + }; + + React.useEffect(() => { + const interval = setInterval(async () => { + try { + const res = await client.query({ + query: ERC20_APPROVAL_QUERY, + variables: { withdrawalId }, + }); + + if (res.data.erc20WithdrawalApproval) { + safeSetErc20Approval(res.data.erc20WithdrawalApproval); + clearInterval(interval); + } + } catch (err) { + // No op. If the erc20 withdrawal is not created yet it will error + // but we will just want to poll until it is. There is no bus event for + // erc20 approvals yet.. + } + }, 1000); + + return () => { + clearInterval(interval); + mountedRef.current = false; + }; + }, [withdrawalId, client]); + + return erc20Approval; +}; diff --git a/apps/token/src/hooks/use-ethereum-config.ts b/apps/token/src/hooks/use-ethereum-config.ts new file mode 100644 index 000000000..da199edce --- /dev/null +++ b/apps/token/src/hooks/use-ethereum-config.ts @@ -0,0 +1,37 @@ +import * as Sentry from "@sentry/react"; +import React from "react"; + +import { NetworkParams } from "../config"; +import { useNetworkParam } from "./use-network-param"; + +export const useEthereumConfig = () => { + const { data: ethereumConfigJSON, loading } = useNetworkParam([ + NetworkParams.ETHEREUM_CONFIG, + ]); + const ethereumConfig = React.useMemo(() => { + if (!ethereumConfigJSON && !loading) { + Sentry.captureMessage( + `No ETH config found for network param ${NetworkParams.ETHEREUM_CONFIG}` + ); + return null; + } else if (!ethereumConfigJSON) { + return null; + } + try { + const [configJson] = ethereumConfigJSON; + const config = JSON.parse(configJson); + return config; + } catch { + Sentry.captureMessage("Ethereum config JSON is invalid"); + return null; + } + }, [ethereumConfigJSON, loading]); + + if (!ethereumConfig) { + return null; + } + + return { + confirmations: ethereumConfig.confirmations, + }; +}; diff --git a/apps/token/src/hooks/use-fetch.ts b/apps/token/src/hooks/use-fetch.ts new file mode 100644 index 000000000..1979b3843 --- /dev/null +++ b/apps/token/src/hooks/use-fetch.ts @@ -0,0 +1,95 @@ +import { useCallback, useEffect, useReducer, useRef } from "react"; + +interface State { + data?: T; + error?: Error; + loading?: boolean; +} + +enum ActionType { + LOADING = "LOADING", + ERROR = "ERROR", + FETCHED = "FETCHED", +} + +// discriminated union type +type Action = + | { type: ActionType.LOADING } + | { type: ActionType.FETCHED; payload: T } + | { type: ActionType.ERROR; error: Error }; + +function useFetch( + url?: string, + options?: RequestInit +): { state: State; refetch: () => void } { + // Used to prevent state update if the component is unmounted + const cancelRequest = useRef(false); + + const initialState: State = { + error: undefined, + data: undefined, + loading: false, + }; + + // Keep state logic separated + const fetchReducer = (state: State, action: Action): State => { + switch (action.type) { + case ActionType.LOADING: + return { ...initialState, loading: true }; + case ActionType.FETCHED: + return { ...initialState, data: action.payload, loading: false }; + case ActionType.ERROR: + return { ...initialState, error: action.error, loading: false }; + } + }; + + const [state, dispatch] = useReducer(fetchReducer, initialState); + const fetchCallback = useCallback(() => { + if (!url) return; + + const fetchData = async () => { + dispatch({ type: ActionType.LOADING }); + + try { + const response = await fetch(url, options); + if (!response.ok) { + throw new Error(response.statusText); + } + + const data = (await response.json()) as T; + if ("error" in data) { + // @ts-ignore - data.error + throw new Error(data.error); + } + if (cancelRequest.current) return; + + dispatch({ type: ActionType.FETCHED, payload: data }); + } catch (error) { + if (cancelRequest.current) return; + + dispatch({ type: ActionType.ERROR, error: error as Error }); + } + }; + + void fetchData(); + + // Do nothing if the url is not given + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [url]); + + useEffect(() => { + fetchCallback(); + // Use the cleanup function for avoiding a possibly... + // ...state update after the component was unmounted + return () => { + cancelRequest.current = true; + }; + }, [fetchCallback]); + + return { + state, + refetch: fetchCallback, + }; +} + +export default useFetch; diff --git a/apps/token/src/hooks/use-get-association-breakdown.ts b/apps/token/src/hooks/use-get-association-breakdown.ts new file mode 100644 index 000000000..ca836ab3f --- /dev/null +++ b/apps/token/src/hooks/use-get-association-breakdown.ts @@ -0,0 +1,40 @@ +import React from 'react'; +import * as Sentry from '@sentry/react'; +import type { + VegaStaking, + VegaVesting, +} from '@vegaprotocol/smart-contracts-sdk'; + +import { + AppStateActionType, + useAppState, +} from '../contexts/app-state/app-state-context'; + +export function useGetAssociationBreakdown( + ethAddress: string, + staking: VegaStaking, + vesting: VegaVesting +): () => Promise { + const { appDispatch } = useAppState(); + + const getAssociationBreakdown = React.useCallback(async () => { + try { + const [stakingAssociations, vestingAssociations] = await Promise.all([ + staking.userTotalStakedByVegaKey(ethAddress), + vesting.userTotalStakedByVegaKey(ethAddress), + ]); + + appDispatch({ + type: AppStateActionType.SET_ASSOCIATION_BREAKDOWN, + breakdown: { + stakingAssociations, + vestingAssociations, + }, + }); + } catch (err) { + Sentry.captureException(err); + } + }, [ethAddress, staking, vesting, appDispatch]); + + return getAssociationBreakdown; +} diff --git a/apps/token/src/hooks/use-get-user-tranche-balances.ts b/apps/token/src/hooks/use-get-user-tranche-balances.ts new file mode 100644 index 000000000..959be64c4 --- /dev/null +++ b/apps/token/src/hooks/use-get-user-tranche-balances.ts @@ -0,0 +1,56 @@ +import React from 'react'; +import * as Sentry from '@sentry/react'; +import type { VegaVesting } from '@vegaprotocol/smart-contracts-sdk'; + +import { + AppStateActionType, + useAppState, +} from '../contexts/app-state/app-state-context'; +import { BigNumber } from '../lib/bignumber'; + +export const useGetUserTrancheBalances = ( + address: string, + vesting: VegaVesting +) => { + const { appDispatch } = useAppState(); + return React.useCallback(async () => { + appDispatch({ + type: AppStateActionType.SET_TRANCHE_ERROR, + error: null, + }); + try { + const tranches = await vesting.getAllTranches(); + const userTranches = tranches.filter((t) => + t.users.some( + ({ address: a }) => + a && address && a.toLowerCase() === address.toLowerCase() + ) + ); + const trancheIds = [0, ...userTranches.map((t) => t.tranche_id)]; + const promises = trancheIds.map(async (tId) => { + const [total, vested] = await Promise.all([ + vesting.userTrancheTotalBalance(address, tId), + vesting.userTrancheVestedBalance(address, tId), + ]); + return { + id: tId, + locked: tId === 0 ? total : total.minus(vested), + vested: tId === 0 ? new BigNumber(0) : vested, + }; + }); + + const trancheBalances = await Promise.all(promises); + appDispatch({ + type: AppStateActionType.SET_TRANCHE_DATA, + trancheBalances, + tranches, + }); + } catch (e) { + Sentry.captureException(e); + appDispatch({ + type: AppStateActionType.SET_TRANCHE_ERROR, + error: e as Error, + }); + } + }, [address, appDispatch, vesting]); +}; diff --git a/apps/token/src/hooks/use-network-param.tsx b/apps/token/src/hooks/use-network-param.tsx new file mode 100644 index 000000000..d9fc8c7a3 --- /dev/null +++ b/apps/token/src/hooks/use-network-param.tsx @@ -0,0 +1,27 @@ +import { useQuery } from "@apollo/client"; +import { gql } from "@apollo/client"; + +import type { NetworkParams } from "./__generated__/NetworkParams"; + +export const NETWORK_PARAMS_QUERY = gql` + query NetworkParams { + networkParameters { + key + value + } + } +`; + +export function useNetworkParam(params: string[]) { + const { data, loading, error } = useQuery( + NETWORK_PARAMS_QUERY + ); + const foundParams = data?.networkParameters + ?.filter((p) => params.includes(p.key)) + .sort((a, b) => params.indexOf(a.key) - params.indexOf(b.key)); + return { + data: foundParams ? foundParams.map((f) => f.value) : null, + loading, + error, + }; +} diff --git a/apps/token/src/hooks/use-pending-transactions.ts b/apps/token/src/hooks/use-pending-transactions.ts new file mode 100644 index 000000000..6cc09ce49 --- /dev/null +++ b/apps/token/src/hooks/use-pending-transactions.ts @@ -0,0 +1,13 @@ +import React from "react"; + +import { useContracts } from "../contexts/contracts/contracts-context"; + +export const usePendingTransactions = () => { + const { transactions } = useContracts(); + + const pending = React.useMemo(() => { + return transactions.some((tx) => tx.pending); + }, [transactions]); + + return pending; +}; diff --git a/apps/token/src/hooks/use-previous.ts b/apps/token/src/hooks/use-previous.ts new file mode 100644 index 000000000..1647994d0 --- /dev/null +++ b/apps/token/src/hooks/use-previous.ts @@ -0,0 +1,11 @@ +import React from "react"; + +export function usePrevious(value: T): T | undefined { + const ref = React.useRef(value); + + React.useEffect(() => { + ref.current = value; + }, [value]); + + return ref.current; +} diff --git a/apps/token/src/hooks/use-refresh-associated-balances.ts b/apps/token/src/hooks/use-refresh-associated-balances.ts new file mode 100644 index 000000000..3e4498acb --- /dev/null +++ b/apps/token/src/hooks/use-refresh-associated-balances.ts @@ -0,0 +1,31 @@ +import React from "react"; + +import { + AppStateActionType, + useAppState, +} from "../contexts/app-state/app-state-context"; +import { useContracts } from "../contexts/contracts/contracts-context"; + +export function useRefreshAssociatedBalances() { + const { appDispatch } = useAppState(); + const { staking, vesting } = useContracts(); + + const refresh = React.useCallback( + async (ethAddress: string, vegaKey: string) => { + const [walletAssociatedBalance, vestingAssociatedBalance] = + await Promise.all([ + staking.stakeBalance(ethAddress, vegaKey), + vesting.stakeBalance(ethAddress, vegaKey), + ]); + + appDispatch({ + type: AppStateActionType.REFRESH_ASSOCIATED_BALANCES, + walletAssociatedBalance, + vestingAssociatedBalance, + }); + }, + [staking, vesting, appDispatch] + ); + + return refresh; +} diff --git a/apps/token/src/hooks/use-refresh-balances.ts b/apps/token/src/hooks/use-refresh-balances.ts new file mode 100644 index 000000000..629f24b4a --- /dev/null +++ b/apps/token/src/hooks/use-refresh-balances.ts @@ -0,0 +1,48 @@ +import * as Sentry from '@sentry/react'; +import { useVegaWallet } from '@vegaprotocol/wallet'; +import React from 'react'; + +import { ADDRESSES } from '../config'; +import { + AppStateActionType, + useAppState, +} from '../contexts/app-state/app-state-context'; +import { useContracts } from '../contexts/contracts/contracts-context'; + +export const useRefreshBalances = (address: string) => { + const { appDispatch } = useAppState(); + const { keypair } = useVegaWallet(); + const { token, staking, vesting } = useContracts(); + + return React.useCallback(async () => { + try { + const [ + balance, + walletBalance, + lien, + allowance, + walletAssociatedBalance, + vestingAssociatedBalance, + ] = await Promise.all([ + vesting.getUserBalanceAllTranches(address), + token.balanceOf(address), + vesting.getLien(address), + token.allowance(address, ADDRESSES.stakingBridge), + // Refresh connected vega key balances as well if we are connected to a vega key + keypair?.pub ? staking.stakeBalance(address, keypair.pub) : null, + keypair?.pub ? vesting.stakeBalance(address, keypair.pub) : null, + ]); + appDispatch({ + type: AppStateActionType.REFRESH_BALANCES, + balance, + walletBalance, + allowance, + lien, + walletAssociatedBalance, + vestingAssociatedBalance, + }); + } catch (err) { + Sentry.captureException(err); + } + }, [address, appDispatch, keypair?.pub, staking, token, vesting]); +}; diff --git a/apps/token/src/hooks/use-search-params.ts b/apps/token/src/hooks/use-search-params.ts new file mode 100644 index 000000000..c774e9274 --- /dev/null +++ b/apps/token/src/hooks/use-search-params.ts @@ -0,0 +1,10 @@ +import * as React from 'react'; +import { useLocation } from 'react-router-dom'; + +export function useSearchParams() { + const location = useLocation(); + + return React.useMemo(() => { + return new URLSearchParams(location.search) as any; + }, [location]); +} diff --git a/apps/token/src/hooks/use-tranches.ts b/apps/token/src/hooks/use-tranches.ts new file mode 100644 index 000000000..e85d0d231 --- /dev/null +++ b/apps/token/src/hooks/use-tranches.ts @@ -0,0 +1,29 @@ +import React from 'react'; +import * as Sentry from '@sentry/react'; +import type { Tranche } from '@vegaprotocol/smart-contracts-sdk'; + +import { useContracts } from '../contexts/contracts/contracts-context'; + +export function useTranches() { + const { vesting } = useContracts(); + const [tranches, setTranches] = React.useState(null); + const [error, setError] = React.useState(null); + + React.useEffect(() => { + const run = async () => { + try { + const res = await vesting.getAllTranches(); + setTranches(res); + } catch (err) { + Sentry.captureException(err); + setError((err as Error).message); + } + }; + run(); + }, [vesting]); + + return { + tranches, + error, + }; +} diff --git a/apps/token/src/hooks/use-transaction.ts b/apps/token/src/hooks/use-transaction.ts new file mode 100644 index 000000000..8d1bbd28c --- /dev/null +++ b/apps/token/src/hooks/use-transaction.ts @@ -0,0 +1,129 @@ +import React from 'react'; +import * as Sentry from '@sentry/react'; +import { useTranslation } from 'react-i18next'; +import type { ethers } from 'ethers'; + +import { isUnexpectedError, isUserRejection } from '../lib/web3-utils'; +import { + initialState, + TransactionActionType, + transactionReducer, +} from './transaction-reducer'; + +export const useTransaction = ( + performTransaction: () => Promise, + requiredConfirmations = 1 +) => { + const { t } = useTranslation(); + const [state, dispatch] = React.useReducer(transactionReducer, { + ...initialState, + requiredConfirmations, + }); + + const handleError = React.useCallback( + (err: Error) => { + if (isUnexpectedError(err)) { + Sentry.captureException(err); + } + + if (isUserRejection(err)) { + dispatch({ type: TransactionActionType.TX_RESET }); + return; + } else { + Sentry.captureException(err); + } + + const defaultMessage = t('Something went wrong'); + const errorSubstitutions = { + unknown: defaultMessage, + 'Transaction has been reverted by the EVM': defaultMessage, + }; + dispatch({ + type: TransactionActionType.TX_ERROR, + error: err, + errorSubstitutions, + }); + }, + [dispatch, t] + ); + + const perform = React.useCallback(async () => { + dispatch({ + type: TransactionActionType.TX_REQUESTED, + }); + + Sentry.addBreadcrumb({ + type: 'Transaction', + level: Sentry.Severity.Log, + message: 'Transaction requested', + timestamp: Date.now(), + }); + + try { + const tx = await performTransaction(); + + dispatch({ + type: TransactionActionType.TX_SUBMITTED, + txHash: tx.hash, + }); + Sentry.addBreadcrumb({ + type: 'Transaction', + level: Sentry.Severity.Log, + message: 'Transaction submitted', + data: { + hash: tx.hash, + from: tx.from, + gasLimit: tx.gasLimit.toString(), + nonce: tx.nonce, + }, + timestamp: Date.now(), + }); + + let receipt: ethers.ContractReceipt | null = null; + + for (let i = 1; i <= requiredConfirmations; i++) { + receipt = await tx.wait(i); + dispatch({ + type: TransactionActionType.TX_CONFIRMATION, + confirmations: receipt.confirmations, + }); + } + + if (!receipt) { + throw new Error('No receipt after confirmations are met'); + } + + dispatch({ + type: TransactionActionType.TX_COMPLETE, + receipt, + confirmations: receipt.confirmations, + }); + Sentry.addBreadcrumb({ + type: 'Transaction', + level: Sentry.Severity.Log, + message: 'Transaction complete', + data: { + blockNumber: receipt.blockNumber, + confirmations: receipt.confirmations, + from: receipt.from, + to: receipt.to, + transactionHash: receipt.transactionHash, + }, + timestamp: Date.now(), + }); + } catch (err) { + handleError(err as Error); + } + }, [performTransaction, requiredConfirmations, handleError]); + + const reset = () => { + dispatch({ type: TransactionActionType.TX_RESET }); + }; + + return { + state, + dispatch, + perform, + reset, + }; +}; diff --git a/apps/token/src/i18n/index.ts b/apps/token/src/i18n/index.ts new file mode 100644 index 000000000..41cf7a3bc --- /dev/null +++ b/apps/token/src/i18n/index.ts @@ -0,0 +1,33 @@ +import i18n from 'i18next'; +import LanguageDetector from 'i18next-browser-languagedetector'; +import { initReactI18next } from 'react-i18next'; + +import { Flags } from '../config'; +import dev from './translations/dev.json'; + +i18n + .use(LanguageDetector) + .use(initReactI18next) + .init({ + // we init with resources + resources: { + en: { + translations: { + ...dev, + }, + }, + }, + lng: undefined, + fallbackLng: 'en', + debug: true, + // have a common namespace used around the full app + ns: ['translations'], + defaultNS: 'translations', + keySeparator: false, // we use content as keys + + interpolation: { + escapeValue: false, + }, + }); + +export default i18n; diff --git a/apps/token/src/i18n/translations/dev.json b/apps/token/src/i18n/translations/dev.json new file mode 100644 index 000000000..0fbc294ae --- /dev/null +++ b/apps/token/src/i18n/translations/dev.json @@ -0,0 +1,544 @@ +{ + "Home": "Home", + "fairgroundTitle": "Fairground token", + "pageTitleHome": "$VEGA Tokens", + "pageTitleClaim": "Claim $VEGA tokens", + "pageTitleAssociate": "Associate $VEGA tokens with $VEGA Key", + "pageTitleRedemption": "Vesting", + "pageTitleLiquidity": "Incentivised Liquidity Programme", + "pageTitleRedemptionTranche": "Redeem from Tranche", + "pageTitleTranches": "Vesting tranches", + "pageTitleStaking": "Staking on Vega", + "pageTitle404": "Page not found", + "pageTitleNotPermitted": "Can not proceed!", + "pageTitleDisassociate": "Disassociate $VEGA tokens from a Vega key", + "pageTitleGovernance": "Governance", + "pageTitleDepositLp": "Deposit liquidity token for $VEGA rewards", + "pageTitleWithdrawLp": "Withdraw SLP and Rewards", + "pageTitleRewards": "Rewards", + "Vesting": "Vesting", + "unstaked": "Unstaked", + "of": "of", + "to": "to", + "To": "To", + "Deposit": "deposit", + "Tranche": "Tranche", + "Tranches": "Tranches", + "Invalid tranche!": "Invalid tranche!", + "Redeemed": "Redeemed", + "Locked": "Locked", + "Back": "Back", + "Continue": "Continue", + "Withdraw": "Withdraw", + "Step": "Step", + "Unlocked": "Unlocked", + "Staked": "Staked", + "Total": "Total", + "Balance": "Balance", + "Cancel": "Cancel", + "Warning": "Warning", + "Associated": "Associated", + "Not Associated": "Not Associated", + "vegaTokens": "$VEGA tokens", + "VEGA was successfully withdrawn to your wallet": "$VEGA was successfully withdrawn to your wallet", + "Please select your country": "Please select your country", + "Fully vested on": "Fully vested on {{date}}", + "Vesting from": "Vesting from {{fromDate}} to {{endDate}}", + "Something doesn't look right": "Something doesn't look right. Please check the link again or the Vesting page to see if you have already claimed", + "If you have been given a link please double check and try again": "If you have been given a link please double check and try again or the Vesting page to see if you have already claimed", + "You will need to connect to an ethereum wallet to pay the gas and claim tokens": "To claim tokens you will need to connect an Ethereum wallet with ETH to pay for gas. It may be easier to connect to the wallet that you wish your tokens to be sent to.", + "Please check wallet": "Please check wallet", + "The contract is deployed at the following address": "The contract is deployed at the following address:", + "Connected Ethereum address": "Connected Ethereum address", + "Amount of VEGA": "Amount of $VEGA", + "Claim expires": "Claim expires", + "Starts unlocking": "Unlocking starts", + "Fully unlocked": "Fully unlocked", + "Select country": "Select country/region of residence", + "You cannot claim VEGA tokens if you reside in that country": "It is not possible to claim $VEGA tokens if you reside in that country or region", + "commitTitle": "Link claim to your Ethereum address", + "commitBody": "This links your claim to a specific Ethereum address to prevent it being used by another person", + "selectCountryPrompt": "You must select a country/region first.", + "verifyingCountryPrompt": "Verifying country/region...", + "Claim tokens": "Claim tokens", + "claimNotReady": "You must complete step 2 first.", + "claim": "This code ({{code}}) entitles {{user}} to {{amount}} $VEGA tokens from {{linkText}} of the vesting contract. {{expiry}}.", + "claimExpiry": "The code expires on {{date}}", + "claimNoExpiry": "It has no expiry date", + "showRedeem": "You'll be able to redeem your unlocked tokens at token.vega.xyz/vesting", + "codeUsed": "Code already used", + "codeUsedText": "Looks like that code has already been used. Check the Vesting page to see if you can redeem your tokens.", + "codeExpired": "Code expired", + "Vesting Balance": "Vesting Balance", + "VEGA": "$VEGA", + "SLP": "SLP", + "Account": "Account", + "Loading": "Loading...", + "Something went wrong": "Something went wrong", + "Try again": "Try again", + "Complete": "Complete", + "View on Etherscan (opens in a new tab)": "View on Etherscan (opens in a new tab)", + "Transaction in progress": "Transaction in progress", + "Unknown error": "Unknown error", + "Awaiting action in Ethereum wallet (e.g. MetaMask)": "Awaiting action in Ethereum wallet (e.g. MetaMask)", + "Claim {amount} Vega": "Claim {{amount}} $VEGA", + "Sorry. It is not possible to claim tokens in your country or region.": "It is not possible to claim tokens in your country or region.", + "none redeemable": "Tokens in this tranche unlock on {{unlockDate}} and continue to unlock gradually until {{trancheEndDate}} when all tokens are unlocked. Come back to token.vega.xyz to redeem your tokens once they begin to unlock.", + "partially redeemable": "Tokens in this tranche began to unlock on {{unlockDate}} and will continue to unlock gradually until {{trancheEndDate}} when all tokens are unlocked.", + "fully redeemable": "Tokens in this tranche have fully unlocked and can be redeemed once claimed.", + "This page can not be found, please check the URL and try again.": "This page can not be found, please check the URL and try again.", + "Service unavailable": "Service unavailable", + "This service is not available in your country": "This service is not available in your country/region", + "wrongNetwork": "Looks like you are on {{chain}}.", + "wrongNetworkUnknownChain": "Looks like you are on not on {{chain}}.", + "Desired network": "This app is only configured for {{chain}}", + "This code ({code}) has expired and cannot be used to claim tokens": "This code ({{code}}) has expired and cannot be used to claim tokens.", + "Looks like that code has already been used.": "Looks like that code has already been used.", + "Add the Vega vesting token to your wallet to track how much you Vega you have in the vesting contract.": "Add the Vega vesting token to your wallet to track how much you Vega you have in the vesting contract.", + "connectedAddress": "Connected to Ethereum key {{address}}.", + "addressMismatch": "Error: The address you are connected to is not the address the claim is valid for. To claim these tokens please connect with {{target}}.", + "Select your country or region of current residence": "Select your country or region of current residence", + "Tranche not found": "Tranche not found", + "You must select a valid country": "You must select a valid country/region", + "Verifying your claim": "Verifying your claim", + "Holders": "Holders", + "No holders": "No holders", + "required": "Required", + "claimComplete": "Claim successful", + "claimCompleteMessage": "Ethereum address {{address}} now has a vested right to {{balance}} $VEGA tokens, and can redeem these once unlocked", + "Link transaction": "Link transaction", + "Claim transaction": "Claim transaction", + "trancheExtraInfo": "placeholder", + "trancheExtraInfoTranche10": "placeholder", + "Showing tranches with <{{trancheMinimum}} VEGA, click to hide these tranches": "Showing tranches with ≤{{trancheMinimum}} $VEGA, click to hide these tranches", + "Not showing tranches with <{{trancheMinimum}} VEGA, click to show all tranches": "Not showing tranches with ≤{{trancheMinimum}} $VEGA, click to show all tranches", + "the holder": "the holder", + "We couldn't seem to load your data.": "We couldn't seem to load your data.", + "Vesting VEGA": "Vesting VEGA", + "All the tokens in this tranche are locked and can not be redeemed yet.": "All the tokens in this tranche are locked and can not be redeemed yet.", + "Redeem unlocked VEGA from tranche {{id}}": "Redeem unlocked $VEGA from tranche {{id}}", + "You must reduce your associated vesting tokens by at least {{amount}} to redeem from this tranche. Manage your stake or just disassociate your tokens.": "You must reduce your associated vesting tokens by at least {{amount}} to redeem from this tranche. Manage your stake or just disassociate your tokens.", + "All the tokens in this tranche are locked and must be assigned to a tranche before they can be redeemed.": "All the tokens in this tranche are locked and must be assigned to a tranche before they can be redeemed.", + "{{address}} has {{balance}} VEGA tokens in {{tranches}} tranches of the vesting contract.": "The connected Ethereum wallet ({{address}}) has {{balance}} $VEGA tokens in {{tranches}} tranche(s) of the vesting contract.", + "Stake your Locked VEGA tokens!": "You can stake your $VEGA tokens even while locked.", + "Find out more about Staking.": "Use your $VEGA tokens to nominate a validator, earn rewards and participate in governance of the Vega network.", + "noVestingTokens": "You do not have any vesting $VEGA tokens. Switch to another Ethereum address to check what can be redeemed, or view all tranches", + "ethereumKey": "Ethereum key", + "checkingForProvider": "Checking for provider", + "Awaiting action in wallet...": "Awaiting action in Ethereum wallet (e.g. MetaMask)", + "In wallet": "In wallet", + "Not staked": "Not staked", + "viewKeys": "View keys", + "vegaKey": "Vega key", + "noService": "Looks like the Vega wallet service isn't running. Please start it and refresh the page", + "disconnect": "Disconnect", + "Checking Vega wallet status": "Checking Vega Wallet status", + "hostedSwitchLabel": "Use hosted wallet", + "walletServiceLabel": "Wallet service URL", + "walletLabel": "Wallet name", + "passphraseLabel": "Passphrase", + "vegaWalletConnect": "Connect", + "vegaWalletConnecting": "Connecting...", + "No token": "No token", + "Wallet service unavailable": "Wallet service not running at that url", + "Session expired": "Session expired", + "Invalid credentials": "Wallet or passphrase incorrect", + "Invalid wallet URL": "Invalid wallet URL", + "noKeys": "No keys", + "Stake VEGA tokens": "Stake $VEGA tokens", + "Tranche breakdown": "Tranche breakdown", + "Across all tranches": "Across all tranches", + "theVegaToken": "The {{symbol}} token", + "Token Vesting": "Vesting", + "Rewards": "Rewards", + "Governance": "Governance", + "Staking": "Staking", + "The vesting contract holds VEGA tokens until they have become unlocked.": "The vesting contract holds $VEGA tokens until they have become unlocked.", + "Once unlocked they can be redeemed from the contract so that you can transfer them between wallets.": "Once unlocked they can be redeemed from the contract so that you can transfer them between wallets.", + "Tokens are held in different Tranches. Each tranche has its own schedule for how the tokens are unlocked.": "Tokens are held in different Tranches. Each tranche has its own schedule for how the tokens are unlocked.", + "proposedChangesToVegaNetwork": "This page lists proposed changes to the Vega network.", + "vegaTokenHoldersCanVote": "$VEGA token holders can vote for or against proposals as well as make their own.", + "requiredMajorityDescription": "Each proposal needs both a required majority of votes (e.g 66% but this differs by proposal type) and to meet a minimum threshold of votes.", + "proposals": "Proposals", + "proposedEnactment": "Proposed enactment", + "enactedOn": "Enacted on", + "status": "Status", + "state": "State", + "shouldPass": "Should pass", + "participationNotMet": "Participation Not Met", + "majorityNotMet": "Majority not Met", + "noProposals": "There are no active network change proposals", + "updateNetworkParam": "Update Network Param", + "proposedOn": "Proposed on", + "proposedBy": "Proposed by", + "toEnactOn": "Enacts on", + "closesOn": "Closes on", + "closedOn": "Closed on", + "errorDetails": "Error details", + "proposedNewValue": "Proposed new value:", + "proposalChange": "Change {{key}} to {{value}}", + "votes": "Votes", + "yourVote": "Your vote", + "for": "For", + "against": "Against", + "majorityRequired": "Majority Required", + "participation": "Participation", + "met": "Met", + "notMet": "Not Met", + "governanceRequired": "Required", + "daysLeft": "{{daysLeft}} left to vote.", + "toVote": "to vote", + "voteFor": "Vote for", + "voteAgainst": "Vote against", + "noGovernanceTokens": "You need some VEGA tokens to participate in governance", + "youVoted": "You voted", + "changeVote": "Change vote", + "votePending": "Casting vote", + "voteError": "Something went wrong, and your vote was not seen by the network", + "back": "back", + "youDidNotVote": "Voting has ended. You did not vote", + "voteState_Yes": "For", + "voteState_No": "Against", + "voteState_NotCast": "Not cast", + "voteState_Failed": "Failed", + "Token address": "Token address", + "Vesting contract": "Vesting contract", + "Total supply": "Total supply", + "Circulating supply": "Circulating supply", + "vegaAssociatedWithKey": "{{symbol}} associated with a Vega key", + "There are {{nodeCount}} nodes with a shared stake of {{sharedStake}} VEGA tokens": "There are {{nodeCount}} nodes with a shared stake of {{sharedStake}} $VEGA tokens", + "Epoch": "Epoch", + "Started": "Started", + "Node invalid": "Node invalid", + "Next epoch in {{endText}}": "Next epoch in {{endText}}", + "Awaiting next epoch": "Waiting for next epoch to start...", + "Manage your stake": "Manage your stake", + "Add Stake": "Add Stake", + "Remove Stake": "Remove Stake", + "Total stake": "Total stake", + "Your stake": "Your stake", + "Your Stake On Node (This Epoch)": "Your Stake On Node (This Epoch)", + "Your Stake On Node (Next Epoch)": "Your Stake On Node (Next Epoch)", + "validatorTitle": "VALIDATOR: {{nodeName}}", + "validatorTitleFallback": "[no name]", + "VEGA ADDRESS / PUBLIC KEY": "VEGA ADDRESS / PUBLIC KEY", + "ABOUT THIS VALIDATOR": "ABOUT THIS VALIDATOR", + "ETHEREUM ADDRESS": "ETHEREUM ADDRESS", + "IP ADDRESS": "IP ADDRESS", + "TOTAL STAKE": "TOTAL STAKE", + "STAKE SHARE": "STAKE SHARE", + "PENDING STAKE": "PENDING STAKE", + "STAKED BY OPERATOR": "STAKED BY OPERATOR", + "STAKED BY DELEGATES": "STAKED BY DELEGATES", + "OWN STAKE (THIS EPOCH)": "OWN STAKE (THIS EPOCH)", + "NOMINATED (THIS EPOCH)": "NOMINATED (THIS EPOCH)", + "Use maximum": "Use maximum", + "How much would you like to associate?": "How much would you like to associate?", + "VEGA Tokens": "$VEGA Tokens", + "SLP Tokens": "SLP Tokens", + "Connected Vega key": "Connected Vega key", + "What Vega wallet/key is going to control your stake?": "What Vega Wallet/key is going to control your stake?", + "Where would you like to stake from?": "Where would you like to associate from?", + "associateNoVega": "Your connected Ethereum address does not have any $VEGA", + "associateInfo1": "To participate in governance or to nominate a Validator you'll need to associate $VEGA tokens with a Vega wallet/key.", + "associateInfo2": "If you already have $VEGA tokens nominated to validators, your newly associated tokens will automatically be nominated to the same validators, in the same proportion.", + "Associate VEGA Tokens with key": "Associate $VEGA Tokens with key", + "Wallet": "Wallet", + "Associating Tokens": "Associating with Vega key", + "associationPendingWaitingForVega": "Waiting for Vega to credit key...", + "Done": "Done", + "Associating {{amount}} VEGA tokens with Vega key {{vegaKey}}": "Associating {{amount}} $VEGA tokens with Vega key {{vegaKey}}", + "pendingAssociationText": "The Vega network requires a number of confirmations on Ethereum before crediting your Vega key with your tokens. You can see the number of confirmations that are required in the network parameters. This page will update once complete or you can come back and check your Vega wallet to see if it is ready to use.", + "You have no VEGA tokens in your connected wallet. You will need to buy some VEGA tokens from an exchange in order to stake using this method.": "You have no $VEGA tokens in your connected wallet. You will need to buy some $VEGA tokens from an exchange in order to stake using this method.", + "All VEGA tokens in the connected wallet is already associated with a Vega wallet/key": "All $VEGA tokens in the connected wallet are already associated with a Vega Wallet/key", + "VEGA tokens are approved for staking": "$VEGA tokens are approved for staking", + "Approve VEGA tokens for staking on Vega": "Approve $VEGA tokens for staking on Vega", + "You have no VEGA tokens currently vesting.": "You have no $VEGA tokens currently vesting.", + "All VEGA tokens vesting in the connected wallet have already been associated.": "All $VEGA tokens vesting in the connected wallet have already been associated.", + "Any Tokens that have been nominated to a node will sacrifice any Rewards they are due for the current epoch. If you do not wish to sacrifices fees you should remove stake from a node at the end of an epoch before disassocation.": "If you disassociate tokens that have been nominated to a node, you will sacrifice any rewards they are due for the current epoch. If you do not wish to sacrifice rewards, remove your stake from a node at the end of an epoch before disassociating.", + "Use this form to disassociate VEGA tokens with a Vega key. This returns them to either the Ethereum wallet that used the Staking bridge or the vesting contract.": "Use this form to disassociate $VEGA tokens from a Vega key. This returns them to the Ethereum wallet that connected to either the staking bridge or the vesting contract.", + "What Vega wallet are you removing Tokens from?": "What Vega Wallet are you removing tokens from?", + "What tokens would you like to return?": "What tokens would you like to return?", + "You have no VEGA tokens currently staked through your connected Vega wallet.": "You have no $VEGA tokens currently staked through your connected Vega Wallet.", + "You have no VEGA tokens currently staked through your connected Eth wallet.": "You have no $VEGA tokens currently staked through your connected Ethereum wallet.", + "Dissociating Tokens": "Disassociating Tokens", + "Dissociating {{amount}} VEGA tokens from Vega key {{vegaKey}}": "Disassociating {{amount}} $VEGA tokens from Vega key {{vegaKey}}", + "backToStaking": "Back to Staking", + "{{amount}} VEGA tokens have been returned to Vesting contract": "{{amount}} $VEGA tokens have been returned to Vesting contract", + "{{amount}} VEGA tokens have been returned to Ethereum wallet": "{{amount}} $VEGA tokens have been returned to Ethereum wallet", + "Disassociate VEGA Tokens from key": "Disassociate $VEGA Tokens from key", + "Read about Vesting on Vega": "Read about Vesting on Vega", + "Governance is coming soon": "Governance is coming soon", + "Staking is coming soon": "Staking is coming soon", + "VESTING VEGA TOKENS": "in vesting contract", + "stakingStep1": "Step 1. Connect to a Vega Wallet", + "stakingStep1Text": "You will need a Vega Wallet to control stake and receive staking rewards.", + "stakingVegaWalletConnected": "Connected to Vega Wallet with public key {{key}}", + "stakingStep2": "Step 2. Associate tokens with a Vega Wallet", + "stakingAssociateConnectVega": "You need to connect to a Vega Wallet first", + "stakingAssociateConnectEth": "You need to connect to an Ethereum wallet first", + "stakingHasAssociated": "You have {{tokens}} $VEGA tokens associated.", + "stakingAssociateMoreButton": "Associate more $VEGA tokens with wallet", + "stakingDisassociateButton": "Disassociate $VEGA tokens from wallet", + "associateButton": "Associate $VEGA tokens with wallet", + "nodeQueryFailed": "Could not get data for validator {{node}}", + "stakeAddPendingTitle": "Adding {{amount}} $VEGA to validator {{node}}", + "stakeRemovePendingTitle": "Removing {{amount}} $VEGA from validator {{node}}", + "timeForConfirmation": "Waiting for confirmation that your change in nomination has been received", + "stakeAddSuccessTitle": "At the beginning of the next epoch your $VEGA will be nominated to the validator", + "stakeRemoveSuccessTitle": "{{amount}} $VEGA has been removed from validator {{node}}", + "stakeRemoveSuccessMessage": "It will be applied in the next epoch", + "stakeRemoveNowSuccessMessage": "It will be applied immediately", + "stakeFailed": "Failed to delegate to validator {{node}}", + "Remove {{amount}} VEGA tokens": "Remove {{amount}} $VEGA tokens", + "at the end of epoch": "at the end of epoch", + "undelegateSubmitButton": "{{amount}} {{when}}", + "Removing stake mid epoch will forsake any staking rewards from that epoch": "Removing stake mid epoch will forsake any staking rewards from that epoch", + "minimumNomination": "Your nomination must be greater than or equal to {{minTokens}} $VEGA", + "lpTokensInvalidToken": "Address {{address}} is not a valid SLP token address for $VEGA", + "lpTxSuccessButton": "Review liquidity stake", + "depositLpTokensHeading": "How much would you like to deposit?", + "depositLpSubmitButton": "Deposit SLP", + "depositLpApproveButton": "Approve SLP tokens for deposit", + "depositLpInsufficientBalance": "You do not have tokens to deposit.", + "depositLpAlreadyStaked": "You have already staked your SLP tokens, go to withdraw in order withdraw these before you can add more.", + "depositLpCalloutTitle": "You can only make one deposit at a time", + "depositLpCalloutBody": "If you want to add more SLP tokens later you will need to unstake first or use a different Ethereum key.", + "depositLpSuccessCalloutTitle": "You SLP tokens have been deposited and will start earning rewards from the next epoch", + "depositLpSuccessCalloutBody": "You will be rewarded for each full epoch your SLP tokens are staked", + "withdrawLpWithdrawAllButton": "Unstake SLP and Withdraw $VEGA rewards", + "withdrawLpNoneDeposited": "You have no SLP tokens deposited or rewards accumulated", + "withdrawAllLpSuccessCalloutTitle": "Your SLP tokens and rewards have been sent to your Ethereum address", + "Dissociate VEGA tokens": "Disassociate $VEGA tokens", + "Early Investors": "Early Investors", + "Team": "Team", + "Community": "Community", + "Public Sale": "Public Sale", + "Check to see if you can redeem unlocked VEGA tokens": "Check to see if you can redeem unlocked $VEGA tokens", + "To use your tokens on the Vega network they need to be associated with a Vega wallet/key.": "To use your tokens on the Vega network they need to be associated with a Vega Wallet/key.", + "This can happen both while held in the vesting contract as well as when redeemed.": "This can happen both while held in the vesting contract as well as when redeemed.", + "Get a Vega wallet": "Get a Vega Wallet", + "Associate VEGA tokens": "Associate $VEGA tokens", + "VEGA token holders can vote on proposed changes to the network and create proposals.": "$VEGA token holders can vote on proposed changes to the network and create proposals.", + "VEGA token holders can nominate a validator node and receive staking rewards.": "$VEGA token holders can nominate a validator node and receive staking rewards.", + "USE YOUR VEGA TOKENS": "USE YOUR $VEGA TOKENS", + "Check your vesting VEGA tokens": "Check your vesting $VEGA tokens", + "Tokens from this Tranche have been redeemed": "Tokens from this Tranche have been redeemed", + "You have redeemed {{redeemedAmount}} VEGA tokens from this tranche. They are now free to transfer from your Ethereum wallet.": "You have redeemed {{redeemedAmount}} $VEGA tokens from this tranche. They are now free to transfer from your Ethereum wallet.", + "The VEGA token address is {{address}}, make sure you add this to your wallet to see your tokens": "The $VEGA token address is {{address}}, make sure you add this to your wallet to see your tokens", + "Go to staking or governance to see how you can use your unlocked tokens": "Go to staking or governance to see how you can use your unlocked tokens", + "liquidityNav": "DEX Liquidity", + "liquidityIntro": "You can read about our incentive program in this blog post.", + "liquidityStep1Title": "Provide liquidity on one of the markets below and get your SLP tokens.", + "liquidityStep1Body": "You will need to add the SushiSwap market/token address to your wallet to see your SLP tokens.", + "liquidityStep2Title": "Stake these SLP tokens into the appropriate contract below.", + "liquidityStep2Body": "You can't increase your stake without un-staking first so consider how much you stake and when.", + "liquidityStep3Title": "Wait for a full epoch, get a share of the incentive for each full epoch you stake.", + "liquidityStep3Body": "The reward amount is divided by the amount of SLP tokens staked in that epoch. The APY on each pool is indicative based on the current state, this will change over time and is not guaranteed. You will not be entitled to rewards from the epoch that you un-staked in.", + "liquidityStep4Title": "Un-stake or withdraw to receive your rewards.", + "liquidityStep4Body": "Upon un-staking, your Ethereum key will be credited with its share of $VEGA tokens for each full epoch that it was staked and all SLP tokens staked. Withdrawing your rewards will credit your earned VEGA to your wallet while leaving you SLP staked to earn further rewards.", + "liquidityTokensWalletTitle": "SLP Tokens in connected wallet", + "liquidityTokensWalletIntro": "The following tokens can be staked to earn $VEGA", + "liquidityTokensContractTitle": "SLP Tokens earning rewards", + "liquidityTotalAvailableRewards": "Total available rewards", + "liquidityRewardsTitle": "Active liquidity rewards", + "liquidityOnsenIntro": "Earn rewards for providing liquidity on the", + "liquidityOnsenLinkText": "SushiSwap Onsen Menu", + "liquidityOnsenButtonText": "View the SushiSwap Onsen Menu", + "liquidityOnsenHowItWorks": "How it works", + "liquidityOnsenFAQ": "FAQ", + "liquidityRewardsTitlePrevious": "Previous liquidity rewards", + "liquidityTokenSushiAddress": "SLP pool/token address", + "liquidityTokenContractAddress": "Liquidity token contract address", + "rewardPerEpoch": "Reward per epoch (split between reward pool)", + "rewardTokenContractAddress": "Reward token contract address ($VEGA)", + "slpTokenContractAddress": "SLP token contract address", + "lpTokensInRewardPool": "Tokens in reward pool", + "lpTokensEstimateAPY": "Estimated APY", + "liquidityTokenWithdrawBalance": "Withdrawal balance", + "liquidityTokenWithdrawRewards": "Withdrawal rewards", + "usersLpTokens": "Your SLP tokens in connected wallet", + "usersStakedLPTokens": "Your SLP tokens in reward pool", + "usersPendingStakeLPTokens": "Your SLP tokens in reward pool (next epoch)", + "usersShareOfPool": "Your share of pool", + "usersAccumulatedRewards": "Your accumulated rewards", + "withdrawFromRewardPoolButton": "Withdraw rewards and unstake", + "liquidityTotalAvailableRewardsBalance": "Balance", + "liquidityStakedToken": "SLP Token", + "liquidityStakedIntro": "Withdrawing your SLP tokens from the contract will also claim the reward balance", + "liquidityStakedBalance": "SLP token balance", + "liquidityStakedRewards": "Earned rewards", + "liquidityStakedWithdraw": "Withdraw", + "liquidityTokenTitle": "SLP Token", + "liquidityTokenBalance": "Balance", + "liquidityTokenDeposit": "Deposit", + "liquidityTokenApprove": "Approve", + "liquidityComingSoon": "Liquidity rewards coming soon", + "lpEndedParagraph": "You can only withdraw your rewards and unstake. Upon unstaking, your Ethereum key will be credited with all SLP tokens staked and its share of $VEGA tokens for each full epoch that it was staked.", + "lpEndedTitle": "This liquidity incentive ended on 03 December 2021 14:52 UTC", + "lpDiscordPrompt": "Watch our Discord for future ways to earn $VEGA!", + "Keep track of locked tokens in your wallet with the VEGA (VESTING) token.": "Keep track of locked tokens in your wallet with the $VEGA (VESTING) token.", + "The token address is {{address}}. Hit the add token button in your ERC20 wallet and enter this address.": "The token address is {{address}}. Hit the add token button in your ERC20 wallet and enter this address.", + "mainnetDisableHome": "You will be able to use your $VEGA tokens on the Vega network to nominate Validator nodes and participate in governance.", + "vegaInWallet": "{{symbol}} in wallet", + "Vesting associated": "Vesting associated", + "Wallet associated": "Wallet associated", + "alreadyRedeemed": "Already redeemed", + "stakeNodeNone": "You need to associate some $VEGA before you can stake", + "stakeNodeWrongVegaKey": "Your Ethereum wallet indicates you have associated tokens for staking. However, there are none available to stake. You may be connected to the wrong Vega key, or Vega is still confirming your associations", + "redeemComingSoon": "Redeem is coming soon", + "associatedVega": "Associated", + "blockCountdown": "Waiting for {{amount}} more confirmations...", + "stakingNodeNotFound": "Could not find a node with ID {{node}}", + "copyToClipboard": "Copy to clipboard", + "copied!": "Copied!", + "viewAllTranches": "View all tranches", + "id": "ID", + "noVersionFound": "Version could not be found, most likely your wallet version is <0.9.2 which is not supported.", + "unsupportedVersion": "Looks like you're running an outdated version of GoWallet. You're running {{version}} but {{requiredVersion}} is required.", + "stakedValidators": "Staked Validators", + "governance": "Governance", + "staking": "Staking", + "assets": "Assets", + "collateral": "Collateral", + "associate": "Associate", + "disassociate": "Disassociate", + "associatedWithVegaKeys": "Associated with Vega keys", + "thisEpoch": "This Epoch", + "nextEpoch": "Next epoch", + "rewardsPara1": "Rewards are paid out from the treasury at the end of an epoch.", + "rewardsPara2": "This page lists all the rewards that your Vega key has received.", + "rewardsPara3": "This delay is set by a network parameter", + "rewardsCallout": "Rewards are credited {{duration}} after the epoch ends.", + "noRewards": "The Vega key has not been credited any rewards since the previous network checkpoint.", + "rewardType": "Reward type", + "yourStake": "Your stake", + "reward": "Reward", + "shareOfReward": "Share of reward", + "received": "Payout time", + "withdrawPreparedWarningHeading": "Only start a withdrawal when you are ready to pay the gas to release on Ethereum", + "withdrawPreparedWarningText1": "If you proceed beyond this stage, but do not complete the withdrawal on Ethereum, it will not be possible to cancel or alter your withdrawal request.", + "withdrawPreparedWarningText2": "To ensure your assets are not lost, you must pay gas on Ethereum to complete the final step of the withdrawal process. Gas costs per withdrawal have been between $100 and $200.", + "withdrawalsPreparedWarningHeading": "Complete these withdrawals before the next checkpoint restore", + "withdrawalsPreparedWarningText": "Prepared withdrawals are not stored between network resets meaning you will not have the information required to complete a withdrawal.", + "withdrawPageHeading": "Withdraw", + "withdrawPageText": "Use this form to withdraw/release assets from your Vega wallet to their native chain.", + "withdrawPageInfoCalloutTitle": "How ERC20 withdrawals work on Vega", + "withdrawPageInfoCalloutText": "To withdraw from Vega, the network needs to agree that a party can withdraw funds (to ensure they are available). Once that happens, it returns a signature that is used in an Ethereum transaction to send the tokens to the given Ethereum address.", + "pendingWithdrawalsCalloutTitle": "You have incomplete withdrawals", + "pendingWithdrawalsCalloutText": "You have withdrawals that have been released from the Vega network but not yet completed on Ethereum.", + "pendingWithdrawalsCalloutButton": "View incomplete withdrawals", + "withdrawFormAssetLabel": "What would you like to withdraw?", + "withdrawFormNoAsset": "You don't have any assets to withdraw", + "withdrawFormAmountLabel": "How much would you like to withdraw?", + "withdrawFormSubmitButtonIdle": "Withdraw {{amount}} {{symbol}} tokens", + "withdrawFormSubmitButtonPending": "Preparing", + "withdrawalsTitle": "Incomplete withdrawals", + "withdrawalsText": "These withdrawals need to be completed with an Ethereum transaction.", + "withdrawalsNone": "You don't have any pending withdrawals.", + "withdrawalsCompleteButton": "Finish withdrawal", + "withdrawalsPreparingButton": "Preparing withdrawal", + "signature": "Signature", + "created": "Created", + "toEthereum": "To (Ethereum)", + "from": "From", + "txButtonComplete": "Complete", + "txButtonActionRequired": "Action required in Ethereum wallet", + "txButtonAwaiting": "Awaiting Ethereum transaction", + "txButtonFailure": "Ethereum transaction failed", + "transaction": "Transaction", + "associated": "Associated", + "notAssociated": "Not Associated", + "title": "$VEGA TOKEN", + "Use the Ethereum wallet you want to send your tokens to. You'll also need enough Ethereum to pay gas.": "Connect to the Ethereum wallet that holds your $VEGA tokens to see what can be redeemed from vesting tranches. To redeem tokens you will need some ETH to pay gas fees.\n", + "Staked on Vega validator": "Staked $VEGA", + "You can associate tokens while they are held in the vesting contract, when they unlock you will need to disassociate them before they can be redeemed.": "You can associate tokens while they are held in the vesting contract, when they unlock you will need to disassociate them before they can be redeemed.", + "Nominate Stake to Validator Node": "Select a validator to nominate", + "Vega key {{vegaKey}} can now participate in governance and Nominate a validator with it's stake.": "Vega key {{vegaKey}} can now participate in governance and nominate a validator with your associated $VEGA.", + "stakingStep2Text": "Your tokens need to be associated with a Vega Wallet so that you can control your stake", + "stakingStep3": "Step 3. Select the validator you'd like to nominate", + "stakeAddSuccessMessage": "You can cancel your nomination at any time", + "How much to Add in next epoch?": "How much do you want to add in next epoch?", + "How much to Remove?": "How much do you want to remove?", + "as soon as possible": "now", + "Want to remove your stake before the epoch ends?": "Do you want to remove your stake when the epoch ends?", + "Want to remove your stake at the end of the epoch?": "Do you want to remove your stake now?", + "Switch to form for immediate removal": "Switch to remove now", + "Switch to form for removal at end of epoch": "Switch to remove at end of epoch", + "Nominate a validator": "Nominate validator", + "View Governance proposals": "View proposals", + "vegaWallet": "Vega Wallet", + "rewardsComingSoon": "Rewards is coming soon", + "associationChoice": "You have $VEGA tokens held by the vesting contract. Would you like to associate those or associate $VEGA directly from your wallet?", + "footerLinksText": "Known issues and feedback on the Feedback board and Github", + "connectEthWallet": "Connect Ethereum wallet", + "connectEthWalletToAssociate": "Connect Ethereum wallet to associate $VEGA", + "connectVegaWallet": "Connect Vega wallet", + "connectVegaWalletToUseAssociated": "Connect Vega wallet to use associated $VEGA", + "getWallet": "Don't have a Vega wallet yet?", + "readGuide": "Read the wallet guide", + "downloadWallet": "Download wallet from GitHub", + "useConnectedWallet": "Use connected wallet", + "enterAddress": "Enter address manually", + "invalidAddress": "Looks like that address isn't a valid Ethereum address, please check and try again", + "Signature": "Signature", + "voteFailedReason": "Vote closed. Failed due to: ", + "votePassed": "Vote passed.", + "subjectToFurtherActions": "Vote passed {{daysAgo}} subject to further actions.", + "transactionHashPrompt": "Transaction hash will appear here once the transaction is approved in your Ethereum wallet", + "newWalletVersionAvailable": "A new Vega wallet is available 🎉. ", + "downloadNewWallet": "Download {{newVersionAvailable}}", + "errorLoadingTranches": "Error loading tranches. Please try again later.", + "pendingNomination": "Pending Nomination", + "pendingNominationNextEpoch": "Pending nomination for next epoch: {{pendingAmount}} $VEGA", + "cancelPendingEpochNomination": "Cancel pending epoch nomination", + "removingPendingStake": "Removing pending stake of {{pendingAmount}} $VEGA", + "failedToRemovePendingStake": "Failed to remove pending stake of {{pendingAmount}} $VEGA", + "pleaseTryAgain": "Please try again later.", + "injected.name": "Injected", + "injected.text": "Connect with the provider in your browser", + "walletConnect.name": "Mobile", + "walletConnect.text": "Scan QR code with your mobile wallet", + "resourceNotFound": "Resource Not Found", + "Or": "Or", + "addTokenToWallet": "Show this token in your Ethereum wallet", + "chartBelow": "*Certain activities, for example community incentive tokens, do not have specific dates to be credited and so an approximation has been used. ", + "chartTitle": "Token unlocking schedule", + "chartAbove": "This chart shows the approximate* schedule for how tokens will unlock from vesting tranches over time.", + "date": "Date", + "noEthereumProviderError": "No Ethereum browser extension detected, install MetaMask on desktop or visit from a dApp browser on mobile", + "unsupportedChainIdError": "You're connected to an unsupported network", + "userRejectionError": "Please authorise this website to access your Ethereum account", + "unknownEthereumConnectionError": "An unknown error occurred. Check the console in your browser's web developer tools for more details", + "stakingDescription1": "Associate VEGA tokens from your Ethereum wallet to a Vega wallet/key to nominate a validator", + "stakingDescription2": "Validators and their nominators are rewared every 24 hours for securing the network with a cut of trading fees (and rewards from the Vega treasury). Staking rewards are paid into your Vega wallet after an epoch ends.", + "stakingDescription3": "The amount that a validator, and its nominators receives is proportionate to the amount staked on it, however a validator can be penalised during an epoch for a number of reasons. In this case the validator and its nominator will forfeit some or all of its reward from that epoch", + "stakingDescription4": "A validator will receive a higher share of the pot than its nominators. This share is the same for all validators and is set by a network parameter.", + "readMoreStaking": "Read more about staking on Vega", + "networkDown": "This site is not currently connecting to the network please try again later.", + "ethTransactionModalTitle": "Ethereum Transactions", + "confirmed": "Confirmed", + "pending": "Pending", + "confirmationsRemaining": "{{confirmations}} of {{required}} blocks to go", + "pendingTransactions": "Pending transactions", + "noTransactions": "No transactions", + "networkRestoring": "The network is less than {{bootstrapBlockCount}} blocks old, it could be in the process of restoring from a checkpoint", + "type": "Type", + "rejectionReason": "Rejection reason", + "reference": "Reference", + "voteBreakdown": "Vote breakdown", + "willPass": "Will pass", + "majorityMet": "Majority met", + "participationMet": "Participation met", + "tokenForProposal": "Tokens for proposal", + "tokensAgainstProposal": "Tokens against proposal", + "participationRequired": "Participation required", + "numberOfVotingParties": "Number of voting parties", + "totalTokensVotes": "Total yes tokens", + "totalTokenVotedPercentage": "Total tokens voted percentage", + "numberOfForVotes": "Number of votes for", + "numberOfAgainstVotes": "Number of votes against", + "yesPercentage": "Yes percentage", + "noPercentage": "No percentage", + "proposalTerms": "Proposal terms" +} diff --git a/apps/token/src/images/back.png b/apps/token/src/images/back.png new file mode 100644 index 0000000000000000000000000000000000000000..516041a882f745886e9c906a566c099d52fdfeaf GIT binary patch literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^96-#+!3HFS!eXZZDb50q$YKTtZeb8+WSBKa0w~B> z9OUlAu#WAFUap^fnE`|UW*T8@OzP}0f5t(bP0l+XkK DYNalP literal 0 HcmV?d00001 diff --git a/apps/token/src/images/banner.png b/apps/token/src/images/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..7682d73b5571d483f0a432acce3cd1211d53ba41 GIT binary patch literal 612986 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

F#!WBr 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%0AG{N4gP{HE5`ReD>qpQ+%OCp0{ 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�@%6_~uTjjGJCmQ)w45zHeIPjN&1zSt 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

+ {/* @ts-ignore conflict between @types/react and nextjs internal types */}
( +export const AgGrid = (props: { children: ReactNode }) => ( <> {props.children} diff --git a/libs/ui-toolkit/src/components/ag-grid/ag-grid-dynamic-themed.tsx b/libs/ui-toolkit/src/components/ag-grid/ag-grid-dynamic-themed.tsx index 9579616df..52b9cf1e7 100644 --- a/libs/ui-toolkit/src/components/ag-grid/ag-grid-dynamic-themed.tsx +++ b/libs/ui-toolkit/src/components/ag-grid/ag-grid-dynamic-themed.tsx @@ -1,19 +1,24 @@ -import * as React from 'react'; +import type { ReactNode, FunctionComponent } from 'react'; +import { useContext } from 'react'; import dynamic from 'next/dynamic'; import type { AgGridReactProps, AgReactUiProps } from 'ag-grid-react'; import { AgGridReact } from 'ag-grid-react'; import { ThemeContext } from '@vegaprotocol/react-helpers'; import 'ag-grid-community/dist/styles/ag-grid.css'; -const AgGridLightTheme = dynamic<{ children: React.ReactElement }>( +interface GridProps { + children: ReactNode; +} + +const AgGridLightTheme = dynamic( () => import('./ag-grid-light').then((mod) => mod.AgGrid), { ssr: false } -); +) as FunctionComponent; -const AgGridDarkTheme = dynamic<{ children: React.ReactElement }>( +const AgGridDarkTheme = dynamic( () => import('./ag-grid-dark').then((mod) => mod.AgGrid), { ssr: false } -); +) as FunctionComponent; export const AgGridThemed = ({ style, @@ -25,7 +30,7 @@ export const AgGridThemed = ({ className?: string; gridRef?: React.ForwardedRef; }) => { - const theme = React.useContext(ThemeContext); + const theme = useContext(ThemeContext); const defaultProps = { rowHeight: 20, headerHeight: 22 }; return (
( // https://nextjs.org/docs/messages/invalid-dynamic-suspense // suspense: true } -); +) as React.FunctionComponent; export const AgGridDynamic = React.forwardRef( (props, ref) => diff --git a/libs/ui-toolkit/src/components/ag-grid/ag-grid-light.tsx b/libs/ui-toolkit/src/components/ag-grid/ag-grid-light.tsx index 868d8fdb5..5e1953d13 100644 --- a/libs/ui-toolkit/src/components/ag-grid/ag-grid-light.tsx +++ b/libs/ui-toolkit/src/components/ag-grid/ag-grid-light.tsx @@ -1,4 +1,4 @@ -import type { ReactElement } from 'react'; +import type { ReactNode } from 'react'; import { theme } from '@vegaprotocol/tailwindcss-config'; import 'ag-grid-community/dist/styles/ag-theme-balham.css'; @@ -27,7 +27,7 @@ const agGridLightVariables = ` } `; -export const AgGrid = (props: { children: ReactElement }) => ( +export const AgGrid = (props: { children: ReactNode }) => ( <> {props.children} diff --git a/libs/ui-toolkit/src/components/button/button.tsx b/libs/ui-toolkit/src/components/button/button.tsx index e071f20d2..de0e06790 100644 --- a/libs/ui-toolkit/src/components/button/button.tsx +++ b/libs/ui-toolkit/src/components/button/button.tsx @@ -7,6 +7,7 @@ import { includesLeftPadding, includesRightPadding, includesBorderWidth, + includesHeight, } from '../../utils/class-names'; interface CommonProps { @@ -28,11 +29,12 @@ const getClasses = ( variant: CommonProps['variant'], paddingLeftProvided: boolean, paddingRightProvided: boolean, - borderWidthProvided: boolean + borderWidthProvided: boolean, + heightProvided: boolean ) => { // Add classes into variables if there are multiple classes shared in multiple button styles const sharedClasses = - 'inline-flex items-center justify-center box-border h-28 transition-all disabled:no-underline'; + 'inline-flex items-center justify-center box-border transition-all disabled:no-underline'; const underlineOnHover = 'no-underline hover:underline'; const commonHoverAndActiveBorder = 'hover:border-black dark:hover:border-white active:border-black dark:active:border-white'; @@ -56,6 +58,7 @@ const getClasses = ( const standardButtonBorderWidth = `${ borderWidthProvided ? borderWidthProvided : 'border' }`; + const buttonHeight = `${heightProvided ? heightProvided : 'h-28'}`; const primaryClasses = [ sharedClasses, @@ -65,6 +68,7 @@ const getClasses = ( standardButtonPaddingLeft, standardButtonPaddingRight, standardButtonBorderWidth, + buttonHeight, 'bg-black dark:bg-white hover:bg-black-80 dark:hover:bg-white-80 active:bg-white dark:active:bg-black', 'text-ui text-white dark:text-black active:text-black dark:active:text-white', ]; @@ -77,6 +81,7 @@ const getClasses = ( standardButtonPaddingLeft, standardButtonPaddingRight, standardButtonBorderWidth, + buttonHeight, 'bg-white dark:bg-black hover:bg-black-25 dark:hover:bg-white-25 active:bg-black dark:active:bg-white', 'text-ui text-black dark:text-white active:text-white dark:active:text-black', 'border-black-60 dark:border-white-60 hover:border-black', @@ -90,6 +95,7 @@ const getClasses = ( standardButtonPaddingLeft, standardButtonPaddingRight, standardButtonBorderWidth, + buttonHeight, 'bg-vega-yellow dark:bg-vega-yellow hover:bg-vega-yellow-dark dark:hover:bg-vega-yellow/30 active:bg-white dark:active:bg-black', 'text-ui uppercase text-black dark:text-black hover:text-white dark:hover:text-white active:text-black dark:active:text-white', 'border-transparent dark:border-transparent', @@ -99,6 +105,7 @@ const getClasses = ( sharedClasses, inlineButtonPaddingLeft, inlineButtonPaddingRight, + buttonHeight, inlineTextColour, 'border-none', 'text-ui', @@ -108,6 +115,7 @@ const getClasses = ( sharedClasses, inlineButtonPaddingLeft, inlineButtonPaddingRight, + buttonHeight, inlineTextColour, 'underline hover:underline', 'border-none', @@ -136,13 +144,15 @@ const classes = ( const paddingLeftProvided = includesLeftPadding(className); const paddingRightProvided = includesRightPadding(className); const borderWidthProvided = includesBorderWidth(className); + const heightProvided = includesHeight(className); return classNames( getClasses( variant, paddingLeftProvided, paddingRightProvided, - borderWidthProvided + borderWidthProvided, + heightProvided ), className ); diff --git a/libs/ui-toolkit/src/components/callout/callout.tsx b/libs/ui-toolkit/src/components/callout/callout.tsx index 999f0143b..20d6e245e 100644 --- a/libs/ui-toolkit/src/components/callout/callout.tsx +++ b/libs/ui-toolkit/src/components/callout/callout.tsx @@ -24,7 +24,7 @@ export function Callout({ 'dark:border-white', 'text-body-large', 'dark:text-white', - 'p-8', + 'p-16', getIntentShadow(intent), { flex: !!iconName, @@ -38,7 +38,7 @@ export function Callout({ ); const body = ( <> - {title && {title}} + {title && {title}} {children} ); diff --git a/libs/ui-toolkit/src/components/dialog/dialog.tsx b/libs/ui-toolkit/src/components/dialog/dialog.tsx index b5e8cccc5..d09057d92 100644 --- a/libs/ui-toolkit/src/components/dialog/dialog.tsx +++ b/libs/ui-toolkit/src/components/dialog/dialog.tsx @@ -38,7 +38,11 @@ export function Dialog({ > - {title &&

{title}

} + {title && ( +

+ {title} +

+ )} {children} diff --git a/libs/ui-toolkit/src/utils/class-names.ts b/libs/ui-toolkit/src/utils/class-names.ts index 273595d71..a37c94817 100644 --- a/libs/ui-toolkit/src/utils/class-names.ts +++ b/libs/ui-toolkit/src/utils/class-names.ts @@ -6,3 +6,6 @@ export const includesRightPadding = (className?: string) => export const includesBorderWidth = (className?: string) => !!className?.match(/(^| )border-\d+( |$)/); + +export const includesHeight = (className?: string) => + !!className?.match(/(^| )h-(\d+|auto)( |$)/); diff --git a/libs/wallet/src/index.ts b/libs/wallet/src/index.ts index 1910ae3b2..62e2cde4e 100644 --- a/libs/wallet/src/index.ts +++ b/libs/wallet/src/index.ts @@ -6,4 +6,5 @@ export * from './connectors'; export * from './storage-keys'; export * from './types'; export * from './use-vega-transaction'; +export * from './use-eager-connect'; export * from './manage-dialog'; diff --git a/libs/wallet/src/use-eager-connect.ts b/libs/wallet/src/use-eager-connect.ts new file mode 100644 index 000000000..e048e0abe --- /dev/null +++ b/libs/wallet/src/use-eager-connect.ts @@ -0,0 +1,55 @@ +import { useVegaWallet, WALLET_CONFIG } from './'; +import { useEffect, useState } from 'react'; +import { LocalStorage } from '@vegaprotocol/react-helpers'; +import type { VegaConnector } from './connectors'; + +export function useEagerConnect(Connectors: { + [connector: string]: VegaConnector; +}) { + const [connecting, setConnecting] = useState(true); + const { connect } = useVegaWallet(); + + useEffect(() => { + const attemptConnect = async () => { + const cfg = LocalStorage.getItem(WALLET_CONFIG); + let cfgObj: { connector: 'rest'; token: string } | null; + + try { + cfgObj = cfg ? JSON.parse(cfg) : null; + } catch { + cfgObj = null; + } + + // No stored config, or config was malformed + if (!cfgObj || !cfgObj.connector) { + setConnecting(false); + return; + } + + // Use the connector string in local storage to find the right connector to auto + // connect to + const connector = Connectors[cfgObj.connector]; + + // Developer hasn't provided this connector + if (!connector) { + setConnecting(false); + console.error( + `Can't eager connect, connector: ${cfgObj.connector} not found` + ); + return; + } + + try { + await connect(Connectors[cfgObj.connector]); + } catch { + console.warn(`Failed to connect with connector: ${cfgObj.connector}`); + } finally { + setConnecting(false); + } + }; + + attemptConnect(); + }, [connect, Connectors]); + + return connecting; +} diff --git a/package.json b/package.json index 7814d2db8..4420e93d2 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,9 @@ "private": true, "dependencies": { "@apollo/client": "^3.5.8", + "@blueprintjs/core": "^3.47.0", "@blueprintjs/icons": "^3.32.0", + "@blueprintjs/select": "^3.16.6", "@nrwl/next": "13.8.1", "@radix-ui/react-dialog": "^0.1.5", "@radix-ui/react-tabs": "^0.1.5", @@ -22,8 +24,6 @@ "@sentry/nextjs": "^6.19.3", "@sentry/react": "^6.19.2", "@sentry/tracing": "^6.19.2", - "@types/lodash": "^4.14.180", - "@types/uuid": "^8.3.4", "@vegaprotocol/smart-contracts-sdk": "^1.6.0", "@vegaprotocol/vegawallet-service-api-client": "^0.4.6", "@walletconnect/ethereum-provider": "^1.7.5", @@ -39,10 +39,14 @@ "classnames": "^2.3.1", "core-js": "^3.6.5", "date-fns": "^2.28.0", + "duration-js": "^4.0.0", "env-cmd": "^10.1.0", "ethers": "^5.6.0", + "faker": "^5.5.3", "graphql": "^15.7.2", "graphql-ws": "^5.6.3", + "i18next": "^20.3.5", + "i18next-browser-languagedetector": "^6.1.2", "immer": "^9.0.12", "lodash": "^4.17.21", "next": "12.0.7", @@ -53,10 +57,12 @@ "react-copy-to-clipboard": "^5.0.4", "react-dom": "17.0.2", "react-hook-form": "^7.27.0", + "react-i18next": "^11.11.4", "react-router-dom": "^6.3.0", "react-syntax-highlighter": "^15.4.5", "react-use-websocket": "^3.0.0", "react-virtualized-auto-sizer": "^1.0.6", + "recharts": "^2.1.2", "regenerator-runtime": "0.13.7", "sha3": "^2.1.4", "tailwindcss": "^3.0.23", @@ -90,14 +96,17 @@ "@testing-library/react": "12.1.2", "@testing-library/react-hooks": "7.0.2", "@types/classnames": "^2.3.1", + "@types/faker": "^5.5.8", "@types/jest": "27.0.2", + "@types/lodash": "^4.14.171", "@types/node": "16.11.7", "@types/prismjs": "^1.26.0", - "@types/react": "17.0.30", + "@types/react": "17.0.39", "@types/react-copy-to-clipboard": "^5.0.2", "@types/react-dom": "17.0.9", "@types/react-router-dom": "5.3.1", "@types/react-virtualized-auto-sizer": "^1.0.1", + "@types/uuid": "^8.3.4", "@typescript-eslint/eslint-plugin": "~5.10.0", "@typescript-eslint/parser": "~5.10.0", "babel-jest": "27.2.3", @@ -121,7 +130,7 @@ "prettier": "^2.5.1", "react-test-renderer": "17.0.2", "resize-observer-polyfill": "^1.5.1", - "sass": "1.43.2", + "sass": "^1.49.11", "storybook-addon-themes": "^6.1.0", "ts-jest": "27.0.5", "type-fest": "^2.12.2", diff --git a/workspace.json b/workspace.json index 6bd9780af..873bce562 100644 --- a/workspace.json +++ b/workspace.json @@ -18,6 +18,8 @@ "stats": "apps/stats", "stats-e2e": "apps/stats-e2e", "tailwindcss-config": "libs/tailwindcss-config", + "token": "apps/token", + "token-e2e": "apps/token-e2e", "trades": "libs/trades", "trading": "apps/trading", "trading-e2e": "apps/trading-e2e", diff --git a/yarn.lock b/yarn.lock index 4ce5b755e..182ba8351 100644 --- a/yarn.lock +++ b/yarn.lock @@ -42,10 +42,10 @@ dependencies: "@apollo/client" latest -"@apollographql/apollo-tools@^0.5.2": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@apollographql/apollo-tools/-/apollo-tools-0.5.2.tgz#01750a655731a198c3634ee819c463254a7c7767" - integrity sha512-KxZiw0Us3k1d0YkJDhOpVH5rJ+mBfjXcgoRoCcslbgirjgLotKMzOcx4PZ7YTEvvEROmvG7X3Aon41GvMmyGsw== +"@apollographql/apollo-tools@^0.5.3": + version "0.5.3" + resolved "https://registry.yarnpkg.com/@apollographql/apollo-tools/-/apollo-tools-0.5.3.tgz#ba241d50f0849150ca0de54fd2927160033bc0bc" + integrity sha512-VcsXHfTFoCodDAgJZxN04GdFK1kqOhZQnQY/9Fa147P+I8xfvOSz5d+lKAPB+hwSgBNyd7ncAKGIs4+utbL+yA== "@apollographql/graphql-language-service-interface@^2.0.2": version "2.0.2" @@ -138,39 +138,39 @@ source-map "^0.5.0" "@babel/core@^7.1.0", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.15.0", "@babel/core@^7.15.5", "@babel/core@^7.16.0", "@babel/core@^7.7.2", "@babel/core@^7.7.5", "@babel/core@^7.8.0": - version "7.17.8" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.8.tgz#3dac27c190ebc3a4381110d46c80e77efe172e1a" - integrity sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ== + version "7.17.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.9.tgz#6bae81a06d95f4d0dec5bb9d74bbc1f58babdcfe" + integrity sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw== dependencies: "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.7" + "@babel/generator" "^7.17.9" "@babel/helper-compilation-targets" "^7.17.7" "@babel/helper-module-transforms" "^7.17.7" - "@babel/helpers" "^7.17.8" - "@babel/parser" "^7.17.8" + "@babel/helpers" "^7.17.9" + "@babel/parser" "^7.17.9" "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.3" + "@babel/traverse" "^7.17.9" "@babel/types" "^7.17.0" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" - json5 "^2.1.2" + json5 "^2.2.1" semver "^6.3.0" -"@babel/generator@7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.0.tgz#d40f3d1d5075e62d3500bccb67f3daa8a95265b2" - integrity sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew== +"@babel/generator@7.16.5": + version "7.16.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.5.tgz#26e1192eb8f78e0a3acaf3eede3c6fc96d22bedf" + integrity sha512-kIvCdjZqcdKqoDbVVdt5R99icaRtrtYhYK/xux5qiWCBmfdvEYMFZ68QCrpE5cbFM1JsuArUNs1ZkuKtTtUcZA== dependencies: "@babel/types" "^7.16.0" jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.12.11", "@babel/generator@^7.12.13", "@babel/generator@^7.12.5", "@babel/generator@^7.17.3", "@babel/generator@^7.17.7", "@babel/generator@^7.7.2": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.7.tgz#8da2599beb4a86194a3b24df6c085931d9ee45ad" - integrity sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w== +"@babel/generator@^7.12.11", "@babel/generator@^7.12.13", "@babel/generator@^7.12.5", "@babel/generator@^7.17.9", "@babel/generator@^7.7.2": + version "7.17.9" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.9.tgz#f4af9fd38fa8de143c29fce3f71852406fc1e2fc" + integrity sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ== dependencies: "@babel/types" "^7.17.0" jsesc "^2.5.1" @@ -201,15 +201,15 @@ browserslist "^4.17.5" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7", "@babel/helper-create-class-features-plugin@^7.17.6": - version "7.17.6" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz#3778c1ed09a7f3e65e6d6e0f6fbfcc53809d92c9" - integrity sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg== +"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7", "@babel/helper-create-class-features-plugin@^7.17.6", "@babel/helper-create-class-features-plugin@^7.17.9": + version "7.17.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz#71835d7fb9f38bd9f1378e40a4c0902fdc2ea49d" + integrity sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ== dependencies: "@babel/helper-annotate-as-pure" "^7.16.7" "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-function-name" "^7.17.9" + "@babel/helper-member-expression-to-functions" "^7.17.7" "@babel/helper-optimise-call-expression" "^7.16.7" "@babel/helper-replace-supers" "^7.16.7" "@babel/helper-split-export-declaration" "^7.16.7" @@ -264,21 +264,13 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-function-name@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" - integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== +"@babel/helper-function-name@^7.16.7", "@babel/helper-function-name@^7.17.9": + version "7.17.9" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz#136fcd54bc1da82fcb47565cf16fd8e444b1ff12" + integrity sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg== dependencies: - "@babel/helper-get-function-arity" "^7.16.7" "@babel/template" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-get-function-arity@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" - integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== - dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.17.0" "@babel/helper-hoist-variables@^7.16.7": version "7.16.7" @@ -287,7 +279,7 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-member-expression-to-functions@^7.16.7": +"@babel/helper-member-expression-to-functions@^7.16.7", "@babel/helper-member-expression-to-functions@^7.17.7": version "7.17.7" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz#a34013b57d8542a8c4ff8ba3f747c02452a4d8c4" integrity sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw== @@ -393,28 +385,28 @@ "@babel/traverse" "^7.16.8" "@babel/types" "^7.16.8" -"@babel/helpers@^7.12.13", "@babel/helpers@^7.12.5", "@babel/helpers@^7.17.8": - version "7.17.8" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.8.tgz#288450be8c6ac7e4e44df37bcc53d345e07bc106" - integrity sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw== +"@babel/helpers@^7.12.13", "@babel/helpers@^7.12.5", "@babel/helpers@^7.17.9": + version "7.17.9" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.9.tgz#b2af120821bfbe44f9907b1826e168e819375a1a" + integrity sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q== dependencies: "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.3" + "@babel/traverse" "^7.17.9" "@babel/types" "^7.17.0" "@babel/highlight@^7.10.4", "@babel/highlight@^7.16.7": - version "7.16.10" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" - integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== + version "7.17.9" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.9.tgz#61b2ee7f32ea0454612def4fccdae0de232b73e3" + integrity sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg== dependencies: "@babel/helper-validator-identifier" "^7.16.7" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.1.3", "@babel/parser@^7.12.11", "@babel/parser@^7.12.13", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.17.3", "@babel/parser@^7.17.8": - version "7.17.8" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.8.tgz#2817fb9d885dd8132ea0f8eb615a6388cca1c240" - integrity sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.1.3", "@babel/parser@^7.12.11", "@babel/parser@^7.12.13", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.17.9": + version "7.17.9" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.9.tgz#9c94189a6062f0291418ca021077983058e171ef" + integrity sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": version "7.16.7" @@ -459,13 +451,14 @@ "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-proposal-decorators@^7.12.12", "@babel/plugin-proposal-decorators@^7.14.5": - version "7.17.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.8.tgz#4f0444e896bee85d35cf714a006fc5418f87ff00" - integrity sha512-U69odN4Umyyx1xO1rTII0IDkAEC+RNlcKXtqOblfpzqy1C+aOplb76BQNq0+XdpVkOaPlpEDwd++joY8FNFJKA== + version "7.17.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.9.tgz#67a1653be9c77ce5b6c318aa90c8287b87831619" + integrity sha512-EfH2LZ/vPa2wuPwJ26j+kYRkaubf89UlwxKXtxqEm57HrgSEYDB8t4swFP+p8LcI9yiP9ZRJJjo/58hS6BnaDA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.17.6" + "@babel/helper-create-class-features-plugin" "^7.17.9" "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" "@babel/plugin-syntax-decorators" "^7.17.0" charcodes "^0.2.0" @@ -878,9 +871,9 @@ babel-plugin-dynamic-import-node "^2.3.3" "@babel/plugin-transform-modules-commonjs@^7.16.8": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.7.tgz#d86b217c8e45bb5f2dbc11eefc8eab62cf980d19" - integrity sha512-ITPmR2V7MqioMJyrxUo2onHNC3e+MvfFiFIR0RP21d3PtlVb6sfzoxNKiphSZUOM9hEIdzCcZe83ieX3yoqjUA== + version "7.17.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.9.tgz#274be1a2087beec0254d4abd4d86e52442e1e5b6" + integrity sha512-2TBFd/r2I6VlYn0YRTz2JdazS+FoUuQ2rIFHoAxtyP/0G3D82SBLaRq9rnUkpqlLg03Byfl/+M32mpxjO6KaPw== dependencies: "@babel/helper-module-transforms" "^7.17.7" "@babel/helper-plugin-utils" "^7.16.7" @@ -983,11 +976,11 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-regenerator@^7.14.5", "@babel/plugin-transform-regenerator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz#9e7576dc476cb89ccc5096fff7af659243b4adeb" - integrity sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q== + version "7.17.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.17.9.tgz#0a33c3a61cf47f45ed3232903683a0afd2d3460c" + integrity sha512-Lc2TfbxR1HOyn/c6b4Y/b6NHoTb67n/IoWLxTu4kC7h4KQnWlhCq2S8Tx0t2SVvv5Uu87Hs+6JEJ5kt2tYGylQ== dependencies: - regenerator-transform "^0.14.2" + regenerator-transform "^0.15.0" "@babel/plugin-transform-reserved-words@^7.16.7": version "7.16.7" @@ -1210,9 +1203,9 @@ source-map-support "^0.5.16" "@babel/runtime-corejs3@^7.10.2": - version "7.17.8" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.17.8.tgz#d7dd49fb812f29c61c59126da3792d8740d4e284" - integrity sha512-ZbYSUvoSF6dXZmMl/CYTMOvzIFnbGfv4W3SEHYgMvNsFTeLaF2gkGAF4K2ddmtSK4Emej+0aYcnSC6N5dPCXUQ== + version "7.17.9" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.17.9.tgz#3d02d0161f0fbf3ada8e88159375af97690f4055" + integrity sha512-WxYHHUWF2uZ7Hp1K+D1xQgbgkGUfA+5UPOegEXGt2Y5SMog/rYCVaifLZDbw8UkNXozEqqrZTy6bglL7xTaCOw== dependencies: core-js-pure "^3.20.2" regenerator-runtime "^0.13.4" @@ -1224,10 +1217,10 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.14.8", "@babel/runtime@^7.16.0", "@babel/runtime@^7.16.3", "@babel/runtime@^7.16.7", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": - version "7.17.8" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.8.tgz#3e56e4aff81befa55ac3ac6a0967349fd1c5bca2" - integrity sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA== +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.14.5", "@babel/runtime@^7.14.6", "@babel/runtime@^7.14.8", "@babel/runtime@^7.16.0", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.8", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": + version "7.17.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72" + integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg== dependencies: regenerator-runtime "^0.13.4" @@ -1240,18 +1233,18 @@ "@babel/parser" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/traverse@^7.1.6", "@babel/traverse@^7.12.11", "@babel/traverse@^7.12.13", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.3", "@babel/traverse@^7.7.2": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.3.tgz#0ae0f15b27d9a92ba1f2263358ea7c4e7db47b57" - integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw== +"@babel/traverse@^7.1.6", "@babel/traverse@^7.12.11", "@babel/traverse@^7.12.13", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.3", "@babel/traverse@^7.17.9", "@babel/traverse@^7.7.2": + version "7.17.9" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.9.tgz#1f9b207435d9ae4a8ed6998b2b82300d83c37a0d" + integrity sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw== dependencies: "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.3" + "@babel/generator" "^7.17.9" "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" + "@babel/helper-function-name" "^7.17.9" "@babel/helper-hoist-variables" "^7.16.7" "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.17.3" + "@babel/parser" "^7.17.9" "@babel/types" "^7.17.0" debug "^4.1.0" globals "^11.1.0" @@ -1290,7 +1283,30 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@blueprintjs/icons@^3.32.0": +"@blueprintjs/colors@^4.0.0-alpha.3": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@blueprintjs/colors/-/colors-4.0.5.tgz#7841a62b350f94fd2f2cc36e04c9e62d19e6986d" + integrity sha512-5ewWnDdUzyP7hnfidIPyAykGmjHAY2xjcUPM3J2hmnAQ4FORWPv7Mr3PJ9D0D7GfZV/ACx3URRclE1MXfvVlGA== + +"@blueprintjs/core@^3.47.0", "@blueprintjs/core@^3.54.0": + version "3.54.0" + resolved "https://registry.yarnpkg.com/@blueprintjs/core/-/core-3.54.0.tgz#7269f34eccdf0d2874377c5ad973ca2a31562221" + integrity sha512-u2c1s6MNn0ocxhnC6CuiG5g3KV6b4cKUvSobznepA9SC3/AL1s3XOvT7DLWoHRv2B/vBOHFYEDzLw2/vlcGGZg== + dependencies: + "@blueprintjs/colors" "^4.0.0-alpha.3" + "@blueprintjs/icons" "^3.33.0" + "@juggle/resize-observer" "^3.3.1" + "@types/dom4" "^2.0.1" + classnames "^2.2" + dom4 "^2.1.5" + normalize.css "^8.0.1" + popper.js "^1.16.1" + react-lifecycles-compat "^3.0.4" + react-popper "^1.3.7" + react-transition-group "^2.9.0" + tslib "~2.3.1" + +"@blueprintjs/icons@^3.32.0", "@blueprintjs/icons@^3.33.0": version "3.33.0" resolved "https://registry.yarnpkg.com/@blueprintjs/icons/-/icons-3.33.0.tgz#4dacdb7731abdf08d1ab240f3a23a185df60918b" integrity sha512-Q6qoSDIm0kRYQZISm59UUcDCpV3oeHulkLuh3bSlw0HhcSjvEQh2PSYbtaifM60Q4aK4PCd6bwJHg7lvF1x5fQ== @@ -1298,6 +1314,15 @@ classnames "^2.2" tslib "~2.3.1" +"@blueprintjs/select@^3.16.6": + version "3.19.1" + resolved "https://registry.yarnpkg.com/@blueprintjs/select/-/select-3.19.1.tgz#b5e8baa6f182a0647651a57fde8d1d97eaa1e997" + integrity sha512-8UJIZMaWXRMQHr14wbmzJc/CklcSKxOU5JUux0xXKQz/hDW/g1a650tlwJmnxufvRdShbGinlVfHupCs0EL6sw== + dependencies: + "@blueprintjs/core" "^3.54.0" + classnames "^2.2" + tslib "~2.3.1" + "@cnakazawa/watch@^1.0.3": version "1.0.4" resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" @@ -1705,7 +1730,7 @@ dependencies: "@ethersproject/logger" "^5.6.0" -"@ethersproject/providers@5.6.2": +"@ethersproject/providers@5.6.2", "@ethersproject/providers@^5.6.0": version "5.6.2" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.6.2.tgz#b9807b1c8c6f59fa2ee4b3cf6519724d07a9f422" integrity sha512-6/EaFW/hNWz+224FXwl8+HdMRzVHt8DpPmu5MZaIQqx/K/ELnC9eY236SMV7mleCM3NnEArFwcAAxH5kUUgaRg== @@ -1730,31 +1755,6 @@ bech32 "1.1.4" ws "7.4.6" -"@ethersproject/providers@^5.6.0": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.6.1.tgz#9a05f00ecbac59565bf6907c8d2af8ac33303b48" - integrity sha512-w8Wx15nH+aVDvnoKCyI1f3x0B5idmk/bDJXMEUqCfdO8Eadd0QpDx9lDMTMmenhOmf9vufLJXjpSm24D3ZnVpg== - dependencies: - "@ethersproject/abstract-provider" "^5.6.0" - "@ethersproject/abstract-signer" "^5.6.0" - "@ethersproject/address" "^5.6.0" - "@ethersproject/basex" "^5.6.0" - "@ethersproject/bignumber" "^5.6.0" - "@ethersproject/bytes" "^5.6.0" - "@ethersproject/constants" "^5.6.0" - "@ethersproject/hash" "^5.6.0" - "@ethersproject/logger" "^5.6.0" - "@ethersproject/networks" "^5.6.0" - "@ethersproject/properties" "^5.6.0" - "@ethersproject/random" "^5.6.0" - "@ethersproject/rlp" "^5.6.0" - "@ethersproject/sha2" "^5.6.0" - "@ethersproject/strings" "^5.6.0" - "@ethersproject/transactions" "^5.6.0" - "@ethersproject/web" "^5.6.0" - bech32 "1.1.4" - ws "7.4.6" - "@ethersproject/random@5.6.0", "@ethersproject/random@^5.6.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.6.0.tgz#1505d1ab6a250e0ee92f436850fa3314b2cb5ae6" @@ -1924,6 +1924,14 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@hypnosphi/create-react-context@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@hypnosphi/create-react-context/-/create-react-context-0.3.1.tgz#f8bfebdc7665f5d426cba3753e0e9c7d3154d7c6" + integrity sha512-V1klUed202XahrWJLLOT3EXNeCpFHCcJntdFGI15ntCwau+jfT386w7OFTMaCqOgXUH1fa0w/I1oZs+i/Rfr0A== + dependencies: + gud "^1.0.0" + warning "^4.0.3" + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -2229,6 +2237,11 @@ resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.3.1.tgz#b50a781709c81e10701004214340f25475a171a0" integrity sha512-zMM9Ds+SawiUkakS7y94Ymqx+S0ORzpG3frZirN3l+UlXUmSUR7hF4wxCVqW+ei94JzV5kt0uXBcoOEAuiydrw== +"@leichtgewicht/ip-codec@^2.0.1": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.3.tgz#0300943770e04231041a51bd39f0439b5c7ab4f0" + integrity sha512-nkalE/f1RvRGChwBnEIoBfSEYOXnCRdleKuv6+lePbMDrMZXeDQnqak5XDOeBgrPPyPfAdcCu/B5z+v3VhplGg== + "@mdx-js/loader@^1.6.22": version "1.6.22" resolved "https://registry.yarnpkg.com/@mdx-js/loader/-/loader-1.6.22.tgz#d9e8fe7f8185ff13c9c8639c048b123e30d322c4" @@ -2303,10 +2316,10 @@ dependencies: glob "7.1.7" -"@next/eslint-plugin-next@12.1.1": - version "12.1.1" - resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-12.1.1.tgz#e3e51503e9d7f987a0e080344648bc84ac1e8eb8" - integrity sha512-5hd1VFWZzECADhvA+OE+g0CnrRBFZbPm03HbiUtpk7XeluNn7xVxBU6XvNQA+YrQ7qe5jCK9q7R8MbI9R55Y/Q== +"@next/eslint-plugin-next@12.1.4": + version "12.1.4" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-12.1.4.tgz#9c52637af8eecab24dac3f2e5098376f6fc2dff4" + integrity sha512-BRy565KVK6Cdy8LHaHTiwctLqBu/RT84RLpESug70BDJzBlV8QBvODyx/j7wGhvYqp9kvstM05lyb6JaTkSCcQ== dependencies: glob "7.1.7" @@ -2434,6 +2447,13 @@ mkdirp "^1.0.4" rimraf "^3.0.2" +"@nrwl/cli@13.10.1": + version "13.10.1" + resolved "https://registry.yarnpkg.com/@nrwl/cli/-/cli-13.10.1.tgz#0ca38d8972e4b090738f2cffc7f6538e0534d4e5" + integrity sha512-qpjnx7bobwurUOCZG7DIZGfRNfyaxovSIFWacWRv0Pe60ZRGZw76PRmhTyRj5/U5qnvdKhlPIWy4hxeusJTHLw== + dependencies: + nx "13.10.1" + "@nrwl/cli@13.8.1": version "13.8.1" resolved "https://registry.yarnpkg.com/@nrwl/cli/-/cli-13.8.1.tgz#31af91b27f4c19e736dd9793b0f36f69ef482256" @@ -2445,12 +2465,24 @@ v8-compile-cache "2.3.0" yargs-parser "20.0.0" -"@nrwl/cli@13.9.5": - version "13.9.5" - resolved "https://registry.yarnpkg.com/@nrwl/cli/-/cli-13.9.5.tgz#398122e1b70350454f4d4e4230d98cc4e24f1c1f" - integrity sha512-WO2tcRTnYcz/LMJO9RVDoQtpwREjanosUJhymFD6ozrdZBhDuxKQ2S681mjnCXWlWEhYvccGfLhechluiEdCLA== +"@nrwl/cypress@13.10.1": + version "13.10.1" + resolved "https://registry.yarnpkg.com/@nrwl/cypress/-/cypress-13.10.1.tgz#32b39f7c5ccb98a9b7a7158f627cca0ffd418880" + integrity sha512-IJK1LPOkFYlLrofZMYsI5uvj7rr13nSWnxcpm92VNRpca1jyeIfCWBn8l63m9ydD5l9xTrLRbdJ19VKrg9+1Mg== dependencies: - nx "13.9.5" + "@cypress/webpack-preprocessor" "^5.9.1" + "@nrwl/devkit" "13.10.1" + "@nrwl/linter" "13.10.1" + "@nrwl/workspace" "13.10.1" + chalk "4.1.0" + enhanced-resolve "^5.8.3" + fork-ts-checker-webpack-plugin "6.2.10" + rxjs "^6.5.4" + ts-loader "^9.2.6" + tsconfig-paths "^3.9.0" + tsconfig-paths-webpack-plugin "3.5.2" + tslib "^2.3.0" + webpack-node-externals "^3.0.0" "@nrwl/cypress@13.8.1": version "13.8.1" @@ -2471,24 +2503,17 @@ tslib "^2.3.0" webpack-node-externals "^3.0.0" -"@nrwl/cypress@13.9.5": - version "13.9.5" - resolved "https://registry.yarnpkg.com/@nrwl/cypress/-/cypress-13.9.5.tgz#a339305b914df735f27e0eaaa6bb230b4fc40944" - integrity sha512-tO6qe1zTE3mdfF8qzWl/ViqAkdg56ixqhv2apHLnDrcvW1o77A6amyb7GL1voaTwvzOpTX/RGb82EiHuxzOlzg== +"@nrwl/devkit@13.10.1": + version "13.10.1" + resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-13.10.1.tgz#5dd67eff8cebb5022a7f3168adaa0a06259a0e8f" + integrity sha512-2gzrVfnYH+0ZmM9gDI9kl0qSf0NnzBUDsy0D6uDmvUrwP7jh8Q48d+aFN28E73wTpO91qzzNXUc66iC9Sr9ozQ== dependencies: - "@cypress/webpack-preprocessor" "^5.9.1" - "@nrwl/devkit" "13.9.5" - "@nrwl/linter" "13.9.5" - "@nrwl/workspace" "13.9.5" - chalk "4.1.0" - enhanced-resolve "^5.8.3" - fork-ts-checker-webpack-plugin "6.2.10" + ejs "^3.1.5" + ignore "^5.0.4" + nx "13.10.1" rxjs "^6.5.4" - ts-loader "^9.2.6" - tsconfig-paths "^3.9.0" - tsconfig-paths-webpack-plugin "3.5.2" + semver "7.3.4" tslib "^2.3.0" - webpack-node-externals "^3.0.0" "@nrwl/devkit@13.8.1": version "13.8.1" @@ -2502,18 +2527,6 @@ semver "7.3.4" tslib "^2.3.0" -"@nrwl/devkit@13.9.5": - version "13.9.5" - resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-13.9.5.tgz#75bc685f9866755252716dccfede9aba037c2a2a" - integrity sha512-7C79pueB1y0WCQa5iGoMID+lvXOvj66lPqeN7a/H6E7VHWyjmCqfo/Sf53KWKIQn9qJwzcp4MFyE/2U+ey9T5A== - dependencies: - ejs "^3.1.5" - ignore "^5.0.4" - nx "13.9.5" - rxjs "^6.5.4" - semver "7.3.4" - tslib "^2.3.0" - "@nrwl/eslint-plugin-nx@13.8.1": version "13.8.1" resolved "https://registry.yarnpkg.com/@nrwl/eslint-plugin-nx/-/eslint-plugin-nx-13.8.1.tgz#6a5c045d0b95f63a2adbd07cfbdaa62045e7c9bd" @@ -2532,6 +2545,23 @@ "@swc/core-linux-x64-gnu" "^1.2.136" "@swc/core-linux-x64-musl" "^1.2.136" +"@nrwl/jest@13.10.1": + version "13.10.1" + resolved "https://registry.yarnpkg.com/@nrwl/jest/-/jest-13.10.1.tgz#71b637595176308c98c44e87c6feb4126b4db6d1" + integrity sha512-Nglpc+EOYadTIOmN5JuXuFbo8rUkjcdQmjs+grkIHgAOnGTrvdrGoKnwfSTd3rk/EJLZuLXamVt2K5K+pks/7Q== + dependencies: + "@jest/reporters" "27.2.2" + "@jest/test-result" "27.2.2" + "@nrwl/devkit" "13.10.1" + chalk "4.1.0" + identity-obj-proxy "3.0.0" + jest-config "27.2.2" + jest-resolve "27.2.2" + jest-util "27.2.0" + resolve.exports "1.1.0" + rxjs "^6.5.4" + tslib "^2.3.0" + "@nrwl/jest@13.8.1": version "13.8.1" resolved "https://registry.yarnpkg.com/@nrwl/jest/-/jest-13.8.1.tgz#32f2c9c28ae03e0f4a5bdd8fc6688c4bbca8ab09" @@ -2549,22 +2579,24 @@ rxjs "^6.5.4" tslib "^2.3.0" -"@nrwl/jest@13.9.5": - version "13.9.5" - resolved "https://registry.yarnpkg.com/@nrwl/jest/-/jest-13.9.5.tgz#8920f245f965072123049d9751378c0b387600f1" - integrity sha512-Tm2YQFMLON0UVAplH2eJP2OwDrMt7NX4tbQadeTRWwfgkhQHkzMrHuo7D7pLRoS+MVKdTcC6oOCrJTU5e9rMXg== +"@nrwl/js@13.10.1": + version "13.10.1" + resolved "https://registry.yarnpkg.com/@nrwl/js/-/js-13.10.1.tgz#f4fc3b228465101831833b8bf9c3906866828271" + integrity sha512-jUNJrdo8PQIfThpywKBBaEzTA/dccIyNoAjlyn58ZW1ZRbZYqxc8YceZsNxgcyEggkJ1O8fa1eWp55oJkMQm5A== dependencies: - "@jest/reporters" "27.2.2" - "@jest/test-result" "27.2.2" - "@nrwl/devkit" "13.9.5" + "@nrwl/devkit" "13.10.1" + "@nrwl/jest" "13.10.1" + "@nrwl/linter" "13.10.1" + "@nrwl/workspace" "13.10.1" + "@parcel/watcher" "2.0.4" chalk "4.1.0" - identity-obj-proxy "3.0.0" - jest-config "27.2.2" - jest-resolve "27.2.2" - jest-util "27.2.0" - resolve.exports "1.1.0" - rxjs "^6.5.4" - tslib "^2.3.0" + fast-glob "3.2.7" + fs-extra "^9.1.0" + ignore "^5.0.4" + js-tokens "^4.0.0" + minimatch "3.0.4" + source-map-support "0.5.19" + tree-kill "1.2.2" "@nrwl/js@13.8.1": version "13.8.1" @@ -2587,24 +2619,16 @@ source-map-support "0.5.19" tree-kill "1.2.2" -"@nrwl/js@13.9.5": - version "13.9.5" - resolved "https://registry.yarnpkg.com/@nrwl/js/-/js-13.9.5.tgz#14a11a48334ee7b7af90cbb5e9b56e334c98720c" - integrity sha512-0kMOq4GkjwzH90mVHHKDHFD5uW6ygNsBmdaSu42gM3zWRsfiAAs8jmgk/oaMuYGN01SYLqTbAllIHKfBUrEkHw== +"@nrwl/linter@13.10.1": + version "13.10.1" + resolved "https://registry.yarnpkg.com/@nrwl/linter/-/linter-13.10.1.tgz#d443ba523e0c80c5d56c1f4717863b34c4f1b611" + integrity sha512-Zp46DV4lL9hE3XQbLH+PzmCLRuu2KbPL9/JeOKSUNrKVjW49kdorKaLwzwD3zmmpyBKCGEJcnWTJcwBzUOY8uQ== dependencies: - "@nrwl/devkit" "13.9.5" - "@nrwl/jest" "13.9.5" - "@nrwl/linter" "13.9.5" - "@nrwl/workspace" "13.9.5" - "@parcel/watcher" "2.0.4" - chalk "4.1.0" - fast-glob "3.2.7" - fs-extra "^9.1.0" - ignore "^5.0.4" - js-tokens "^4.0.0" - minimatch "3.0.4" - source-map-support "0.5.19" - tree-kill "1.2.2" + "@nrwl/devkit" "13.10.1" + "@nrwl/jest" "13.10.1" + "@phenomnomnominal/tsquery" "4.1.1" + tmp "~0.2.1" + tslib "^2.3.0" "@nrwl/linter@13.8.1": version "13.8.1" @@ -2617,17 +2641,6 @@ tmp "~0.2.1" tslib "^2.3.0" -"@nrwl/linter@13.9.5": - version "13.9.5" - resolved "https://registry.yarnpkg.com/@nrwl/linter/-/linter-13.9.5.tgz#4cc60539365e2b96a9de3b95ac753e74ffca6f69" - integrity sha512-J3AoQ3wBt3gX+xmEpNPIUVAnAG1Wmhb1nGTRhsQm72I+TOy0f1cbwWh6Y34ICESQNL/inbNc1af/o2FakET47A== - dependencies: - "@nrwl/devkit" "13.9.5" - "@nrwl/jest" "13.9.5" - "@phenomnomnominal/tsquery" "4.1.1" - tmp "~0.2.1" - tslib "^2.3.0" - "@nrwl/next@13.8.1": version "13.8.1" resolved "https://registry.yarnpkg.com/@nrwl/next/-/next-13.8.1.tgz#3e9faea7dda45518e6553aaf9de143f91f2132ec" @@ -2651,14 +2664,13 @@ webpack-merge "^5.8.0" "@nrwl/nx-cloud@latest": - version "13.1.6" - resolved "https://registry.yarnpkg.com/@nrwl/nx-cloud/-/nx-cloud-13.1.6.tgz#c1923ffc3c8336363e6c2c0d43d640b5671d8045" - integrity sha512-p/Iybpvixywm2iSFb6tcNde8BAIYFbzowhsNwDOuEVy7s9y9v/bEvCdT14VF6SxWrcGylyXo8A98Yyg0hsr0zQ== + version "13.2.2" + resolved "https://registry.yarnpkg.com/@nrwl/nx-cloud/-/nx-cloud-13.2.2.tgz#9eee1e9ea0b0c3a3a805208405fb6341a02123b4" + integrity sha512-ryGE3JBkSGie0Oy+hFHfiYVNt1BQlNGa3Q7RjeZjILFyNFXkSFzufWYCt1gIRiGlQ7+Q48t1m6gLi2afElNGmg== dependencies: axios "^0.21.1" chalk "4.1.0" node-machine-id "^1.1.12" - rxjs "6.5.5" strip-json-comments "^3.1.1" tar "6.1.11" @@ -2692,20 +2704,20 @@ webpack-merge "^5.8.0" "@nrwl/react@^13.8.1": - version "13.9.5" - resolved "https://registry.yarnpkg.com/@nrwl/react/-/react-13.9.5.tgz#7240beeee2936b36f73c0d98fa41e7e734308756" - integrity sha512-4TcSc2pIIU5uUYNt/GIePWtffGWQ7AFx5KqPEBsWUNyzQPvEMbbKlj1WQZZO+6xqk/rDdiyiS8/Tg0SJ9YFFDg== + version "13.10.1" + resolved "https://registry.yarnpkg.com/@nrwl/react/-/react-13.10.1.tgz#c9ab889e093e7fcd18aa62718a6b8faff3b6c6a2" + integrity sha512-EHNBkrVeqc0VvnHnJ0LI1QRKMzKHynwenbK4d0j3v3JaT2uAxaKQtiI4ux4XnUjy6vTbCWNao/Ht0zByJBKL7A== dependencies: "@babel/core" "^7.15.0" "@babel/preset-react" "^7.14.5" - "@nrwl/cypress" "13.9.5" - "@nrwl/devkit" "13.9.5" - "@nrwl/jest" "13.9.5" - "@nrwl/js" "13.9.5" - "@nrwl/linter" "13.9.5" - "@nrwl/storybook" "13.9.5" - "@nrwl/web" "13.9.5" - "@nrwl/workspace" "13.9.5" + "@nrwl/cypress" "13.10.1" + "@nrwl/devkit" "13.10.1" + "@nrwl/jest" "13.10.1" + "@nrwl/js" "13.10.1" + "@nrwl/linter" "13.10.1" + "@nrwl/storybook" "13.10.1" + "@nrwl/web" "13.10.1" + "@nrwl/workspace" "13.10.1" "@pmmmwh/react-refresh-webpack-plugin" "^0.5.1" "@storybook/node-logger" "6.1.20" "@svgr/webpack" "^6.1.2" @@ -2720,6 +2732,20 @@ webpack "^5.58.1" webpack-merge "^5.8.0" +"@nrwl/storybook@13.10.1", "@nrwl/storybook@^13.8.1": + version "13.10.1" + resolved "https://registry.yarnpkg.com/@nrwl/storybook/-/storybook-13.10.1.tgz#307d2a035006a343fb7cf641013d4f6380da08cc" + integrity sha512-X72czI4uXZWw4tEo2ni/Ks7ar2L9/04UJEynZwy+VyMtWnCIHbmaIkHPe4lO0jxQxlbQ+ctVIQ7woPhHc+/ZMg== + dependencies: + "@nrwl/cypress" "13.10.1" + "@nrwl/devkit" "13.10.1" + "@nrwl/linter" "13.10.1" + "@nrwl/workspace" "13.10.1" + core-js "^3.6.5" + semver "7.3.4" + ts-loader "^9.2.6" + tsconfig-paths-webpack-plugin "3.5.2" + "@nrwl/storybook@13.8.1": version "13.8.1" resolved "https://registry.yarnpkg.com/@nrwl/storybook/-/storybook-13.8.1.tgz#038e98225b236099b7d8af698ada06e2e53c9642" @@ -2734,19 +2760,12 @@ ts-loader "^9.2.6" tsconfig-paths-webpack-plugin "3.5.2" -"@nrwl/storybook@13.9.5", "@nrwl/storybook@^13.8.1": - version "13.9.5" - resolved "https://registry.yarnpkg.com/@nrwl/storybook/-/storybook-13.9.5.tgz#b7623800ea72f5971b6a6f43da4518af47171e8c" - integrity sha512-O5qRI4OxQaStNrnLkAk77pvv2tEi1FwPgpjUQZW69iZpXfTEB4GLTkUN0dDTGbfLByV/5Ul9WQkHQrEiXm872w== +"@nrwl/tao@13.10.1": + version "13.10.1" + resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-13.10.1.tgz#c13e7f98743839ed9b520a798aab3a1186ccd87d" + integrity sha512-QYtMISnJPYyA9ADfBTXiEWvwzjgMICGIrM6sWc018dI2pQ8rWiTRRGOKq5YOsyHGhVd+MSEQYJlElGl3Y4gDIA== dependencies: - "@nrwl/cypress" "13.9.5" - "@nrwl/devkit" "13.9.5" - "@nrwl/linter" "13.9.5" - "@nrwl/workspace" "13.9.5" - core-js "^3.6.5" - semver "7.3.4" - ts-loader "^9.2.6" - tsconfig-paths-webpack-plugin "3.5.2" + nx "13.10.1" "@nrwl/tao@13.8.1": version "13.8.1" @@ -2767,12 +2786,91 @@ tslib "^2.3.0" yargs-parser "20.0.0" -"@nrwl/tao@13.9.5": - version "13.9.5" - resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-13.9.5.tgz#d45d3b75bfe015f9344f6e22735d5aa0388b04c6" - integrity sha512-wvHdEuTxamADvQoGJa3BOZoijQm3Irol0vAxkxzoFS47SYXNvoBPtLhvrtF8P+yJv+gTLW8C0QnUHPVtsnenPA== +"@nrwl/web@13.10.1": + version "13.10.1" + resolved "https://registry.yarnpkg.com/@nrwl/web/-/web-13.10.1.tgz#e8e98474322394dc3cc3b1a3c49f873f4b1e0608" + integrity sha512-8UsAvJjIS5gvou2Ao8Mwciin5lATWdeMQ5rRbjD3Qf6F+9G5/tqQiRdnYLoaHL7HJwK/f2maiQPBX1A7PNoEJg== dependencies: - nx "13.9.5" + "@babel/core" "^7.15.0" + "@babel/plugin-proposal-class-properties" "^7.14.5" + "@babel/plugin-proposal-decorators" "^7.14.5" + "@babel/plugin-transform-regenerator" "^7.14.5" + "@babel/plugin-transform-runtime" "^7.15.0" + "@babel/preset-env" "^7.15.0" + "@babel/preset-typescript" "^7.15.0" + "@babel/runtime" "^7.14.8" + "@nrwl/cypress" "13.10.1" + "@nrwl/devkit" "13.10.1" + "@nrwl/jest" "13.10.1" + "@nrwl/js" "13.10.1" + "@nrwl/linter" "13.10.1" + "@nrwl/workspace" "13.10.1" + "@pmmmwh/react-refresh-webpack-plugin" "^0.5.1" + "@rollup/plugin-babel" "^5.3.0" + "@rollup/plugin-commonjs" "^20.0.0" + "@rollup/plugin-image" "^2.1.0" + "@rollup/plugin-json" "^4.1.0" + "@rollup/plugin-node-resolve" "^13.0.4" + autoprefixer "^10.2.5" + babel-loader "^8.2.2" + babel-plugin-const-enum "^1.0.1" + babel-plugin-macros "^2.8.0" + babel-plugin-transform-async-to-promises "^0.8.15" + babel-plugin-transform-typescript-metadata "^0.3.1" + browserslist "^4.16.6" + bytes "^3.1.0" + caniuse-lite "^1.0.30001251" + chalk "4.1.0" + chokidar "^3.5.1" + copy-webpack-plugin "^9.0.1" + core-js "^3.6.5" + css-loader "^6.4.0" + css-minimizer-webpack-plugin "^3.1.1" + enhanced-resolve "^5.8.3" + file-loader "^6.2.0" + fork-ts-checker-webpack-plugin "6.2.10" + fs-extra "^9.1.0" + http-server "14.1.0" + identity-obj-proxy "3.0.0" + ignore "^5.0.4" + less "3.12.2" + less-loader "^10.1.0" + license-webpack-plugin "^4.0.2" + loader-utils "1.2.3" + mini-css-extract-plugin "~2.4.7" + parse5 "4.0.0" + parse5-html-rewriting-stream "6.0.1" + postcss "^8.2.13" + postcss-import "14.0.2" + postcss-loader "^6.1.1" + raw-loader "^4.0.2" + react-refresh "^0.10.0" + rollup "^2.56.2" + rollup-plugin-copy "^3.4.0" + rollup-plugin-peer-deps-external "^2.2.4" + rollup-plugin-postcss "^4.0.1" + rollup-plugin-typescript2 "^0.31.1" + rxjs "^6.5.4" + rxjs-for-await "0.0.2" + sass "^1.42.1" + sass-loader "^12.2.0" + semver "7.3.4" + source-map "0.7.3" + source-map-loader "^3.0.0" + style-loader "^3.3.0" + stylus "^0.55.0" + stylus-loader "^6.2.0" + terser-webpack-plugin "^5.3.0" + ts-loader "^9.2.6" + ts-node "~9.1.1" + tsconfig-paths "^3.9.0" + tsconfig-paths-webpack-plugin "3.5.2" + tslib "^2.3.0" + webpack "^5.58.1" + webpack-dev-server "^4.3.1" + webpack-merge "^5.8.0" + webpack-sources "^3.0.2" + webpack-subresource-integrity "^5.1.0" "@nrwl/web@13.8.1": version "13.8.1" @@ -2861,91 +2959,36 @@ webpack-sources "^3.0.2" webpack-subresource-integrity "^1.5.2" -"@nrwl/web@13.9.5": - version "13.9.5" - resolved "https://registry.yarnpkg.com/@nrwl/web/-/web-13.9.5.tgz#3590cb9a3016ee4acdb8046ef115a2f8d3a006e8" - integrity sha512-37vP+zsgDOnTjeqYfbbWpCxKLB67vFxcXfaCqu1o7+WJKf1+VJ9vCGYiPKKgrXe4ddGd0h633jbL6VRWEzvCrg== +"@nrwl/workspace@13.10.1": + version "13.10.1" + resolved "https://registry.yarnpkg.com/@nrwl/workspace/-/workspace-13.10.1.tgz#79715a29c618eef0850c389bd4e4a00f77e58299" + integrity sha512-I3ODcyTlZLt0f0wTrw2mgxoKEYMnCd2PQM9zkMpSLIjgN0QBQ6uVmuvVXxqlWkjgtGXd/IUKubFQ5wfcV9AdQA== dependencies: - "@babel/core" "^7.15.0" - "@babel/plugin-proposal-class-properties" "^7.14.5" - "@babel/plugin-proposal-decorators" "^7.14.5" - "@babel/plugin-transform-regenerator" "^7.14.5" - "@babel/plugin-transform-runtime" "^7.15.0" - "@babel/preset-env" "^7.15.0" - "@babel/preset-typescript" "^7.15.0" - "@babel/runtime" "^7.14.8" - "@nrwl/cypress" "13.9.5" - "@nrwl/devkit" "13.9.5" - "@nrwl/jest" "13.9.5" - "@nrwl/js" "13.9.5" - "@nrwl/linter" "13.9.5" - "@nrwl/workspace" "13.9.5" - "@pmmmwh/react-refresh-webpack-plugin" "^0.5.1" - "@rollup/plugin-babel" "^5.3.0" - "@rollup/plugin-commonjs" "^20.0.0" - "@rollup/plugin-image" "^2.1.0" - "@rollup/plugin-json" "^4.1.0" - "@rollup/plugin-node-resolve" "^13.0.4" - autoprefixer "^10.2.5" - babel-loader "^8.2.2" - babel-plugin-const-enum "^1.0.1" - babel-plugin-macros "^2.8.0" - babel-plugin-transform-async-to-promises "^0.8.15" - babel-plugin-transform-typescript-metadata "^0.3.1" - browserslist "^4.16.6" - bytes "^3.1.0" - caniuse-lite "^1.0.30001251" + "@nrwl/devkit" "13.10.1" + "@nrwl/jest" "13.10.1" + "@nrwl/linter" "13.10.1" + "@parcel/watcher" "2.0.4" chalk "4.1.0" chokidar "^3.5.1" - copy-webpack-plugin "^9.0.1" - core-js "^3.6.5" - css-loader "^6.4.0" - css-minimizer-webpack-plugin "^3.1.1" - enhanced-resolve "^5.8.3" - file-loader "^6.2.0" - fork-ts-checker-webpack-plugin "6.2.10" + cli-cursor "3.1.0" + cli-spinners "2.6.1" + dotenv "~10.0.0" + enquirer "~2.3.6" + figures "3.2.0" + flat "^5.0.2" fs-extra "^9.1.0" - http-server "14.1.0" - identity-obj-proxy "3.0.0" + glob "7.1.4" ignore "^5.0.4" - less "3.12.2" - less-loader "^10.1.0" - license-webpack-plugin "^4.0.2" - loader-utils "1.2.3" - mini-css-extract-plugin "~2.4.7" - parse5 "4.0.0" - parse5-html-rewriting-stream "6.0.1" - postcss "^8.2.13" - postcss-import "14.0.2" - postcss-loader "^6.1.1" - raw-loader "^4.0.2" - react-refresh "^0.10.0" - rollup "^2.56.2" - rollup-plugin-copy "^3.4.0" - rollup-plugin-peer-deps-external "^2.2.4" - rollup-plugin-postcss "^4.0.1" - rollup-plugin-typescript2 "^0.31.1" + minimatch "3.0.4" + npm-run-path "^4.0.1" + nx "13.10.1" + open "^8.4.0" rxjs "^6.5.4" - rxjs-for-await "0.0.2" - sass "^1.42.1" - sass-loader "^12.2.0" semver "7.3.4" - source-map "0.7.3" - source-map-loader "^3.0.0" - style-loader "^3.3.0" - stylus "^0.55.0" - stylus-loader "^6.2.0" - terser-webpack-plugin "^5.3.0" - ts-loader "^9.2.6" - ts-node "~9.1.1" - tsconfig-paths "^3.9.0" - tsconfig-paths-webpack-plugin "3.5.2" + tmp "~0.2.1" tslib "^2.3.0" - webpack "^5.58.1" - webpack-dev-server "^4.3.1" - webpack-merge "^5.8.0" - webpack-sources "^3.0.2" - webpack-subresource-integrity "^5.1.0" + yargs "^17.4.0" + yargs-parser "21.0.1" "@nrwl/workspace@13.8.1": version "13.8.1" @@ -2978,38 +3021,7 @@ yargs "15.4.1" yargs-parser "20.0.0" -"@nrwl/workspace@13.9.5": - version "13.9.5" - resolved "https://registry.yarnpkg.com/@nrwl/workspace/-/workspace-13.9.5.tgz#321a77a049876c17b7647bdd23d5511591614fe5" - integrity sha512-gF4B4ekWBmjEjfbdR0IiX8lgEcG0RAKg5ncgViTWfX6mfHig/xyStdF1vjwOuv9mZjd+04S8sD405mj44s2rtg== - dependencies: - "@nrwl/devkit" "13.9.5" - "@nrwl/jest" "13.9.5" - "@nrwl/linter" "13.9.5" - "@parcel/watcher" "2.0.4" - chalk "4.1.0" - chokidar "^3.5.1" - cli-cursor "3.1.0" - cli-spinners "2.6.1" - dotenv "~10.0.0" - enquirer "~2.3.6" - figures "3.2.0" - flat "^5.0.2" - fs-extra "^9.1.0" - glob "7.1.4" - ignore "^5.0.4" - minimatch "3.0.4" - npm-run-path "^4.0.1" - nx "13.9.5" - open "^8.4.0" - rxjs "^6.5.4" - semver "7.3.4" - tmp "~0.2.1" - tslib "^2.3.0" - yargs "15.4.1" - yargs-parser "20.0.0" - -"@oclif/color@^0.x": +"@oclif/color@^0.1.2": version "0.1.2" resolved "https://registry.yarnpkg.com/@oclif/color/-/color-0.1.2.tgz#28b07e2850d9ce814d0b587ce3403b7ad8f7d987" integrity sha512-M9o+DOrb8l603qvgz1FogJBUGLqcMFL1aFg2ZEL0FbXJofiNTLOWIeB4faeZTLwE6dt0xH9GpCVpzksMMzGbmA== @@ -3020,19 +3032,19 @@ supports-color "^5.4.0" tslib "^1" -"@oclif/command@1.8.0": - version "1.8.0" - resolved "https://registry.yarnpkg.com/@oclif/command/-/command-1.8.0.tgz#c1a499b10d26e9d1a611190a81005589accbb339" - integrity sha512-5vwpq6kbvwkQwKqAoOU3L72GZ3Ta8RRrewKj9OJRolx28KLJJ8Dg9Rf7obRwt5jQA9bkYd8gqzMTrI7H3xLfaw== +"@oclif/command@1.8.11": + version "1.8.11" + resolved "https://registry.yarnpkg.com/@oclif/command/-/command-1.8.11.tgz#926919fe8ddb7ab778fef8a8f2951c975f35e0c2" + integrity sha512-2fGLMvi6J5+oNxTaZfdWPMWY8oW15rYj0V8yLzmZBAEjfzjLqLIzJE9IlNccN1zwRqRHc1bcISSRDdxJ56IS/Q== dependencies: - "@oclif/config" "^1.15.1" - "@oclif/errors" "^1.3.3" - "@oclif/parser" "^3.8.3" - "@oclif/plugin-help" "^3" + "@oclif/config" "^1.18.2" + "@oclif/errors" "^1.3.5" + "@oclif/parser" "^3.8.6" + "@oclif/plugin-help" "3.2.14" debug "^4.1.1" semver "^7.3.2" -"@oclif/command@^1.5.10", "@oclif/command@^1.5.12", "@oclif/command@^1.5.13", "@oclif/command@^1.5.20", "@oclif/command@^1.6.0", "@oclif/command@^1.8.15": +"@oclif/command@1.8.16", "@oclif/command@^1.5.13", "@oclif/command@^1.8.15", "@oclif/command@^1.8.6", "@oclif/command@^1.8.9": version "1.8.16" resolved "https://registry.yarnpkg.com/@oclif/command/-/command-1.8.16.tgz#bea46f81b2061b47e1cda318a0b923e62ca4cc0c" integrity sha512-rmVKYEsKzurfRU0xJz+iHelbi1LGlihIWZ7Qvmb/CBz1EkhL7nOkW4SVXmG2dA5Ce0si2gr88i6q4eBOMRNJ1w== @@ -3044,18 +3056,6 @@ debug "^4.1.1" semver "^7.3.2" -"@oclif/config@1.17.0": - version "1.17.0" - resolved "https://registry.yarnpkg.com/@oclif/config/-/config-1.17.0.tgz#ba8639118633102a7e481760c50054623d09fcab" - integrity sha512-Lmfuf6ubjQ4ifC/9bz1fSCHc6F6E653oyaRXxg+lgT4+bYf9bk+nqrUpAbrXyABkCqgIBiFr3J4zR/kiFdE1PA== - dependencies: - "@oclif/errors" "^1.3.3" - "@oclif/parser" "^3.8.0" - debug "^4.1.1" - globby "^11.0.1" - is-wsl "^2.1.1" - tslib "^2.0.0" - "@oclif/config@1.18.2": version "1.18.2" resolved "https://registry.yarnpkg.com/@oclif/config/-/config-1.18.2.tgz#5bfe74a9ba6a8ca3dceb314a81bd9ce2e15ebbfe" @@ -3068,7 +3068,7 @@ is-wsl "^2.1.1" tslib "^2.0.0" -"@oclif/config@^1.12.8", "@oclif/config@^1.13.0", "@oclif/config@^1.15.1", "@oclif/config@^1.18.2": +"@oclif/config@1.18.3", "@oclif/config@^1.13.0", "@oclif/config@^1.17.1", "@oclif/config@^1.18.2": version "1.18.3" resolved "https://registry.yarnpkg.com/@oclif/config/-/config-1.18.3.tgz#ddfc144fdab66b1658c2f1b3478fa7fbfd317e79" integrity sha512-sBpko86IrTscc39EvHUhL+c++81BVTsIZ3ETu/vG+cCdi0N6vb2DoahR67A9FI2CGnxRRHjnTfa3m6LulwNATA== @@ -3080,7 +3080,7 @@ is-wsl "^2.1.1" tslib "^2.3.1" -"@oclif/errors@1.3.5", "@oclif/errors@^1.2.1", "@oclif/errors@^1.2.2", "@oclif/errors@^1.3.3", "@oclif/errors@^1.3.5": +"@oclif/errors@1.3.5", "@oclif/errors@^1.3.3", "@oclif/errors@^1.3.5": version "1.3.5" resolved "https://registry.yarnpkg.com/@oclif/errors/-/errors-1.3.5.tgz#a1e9694dbeccab10fe2fe15acb7113991bed636c" integrity sha512-OivucXPH/eLLlOT7FkCMoZXiaVYf8I/w1eTAM1+gKzfhALwWTusxEx7wBmW0uzvkSg/9ovWLycPaBgJbM3LOCQ== @@ -3111,7 +3111,7 @@ resolved "https://registry.yarnpkg.com/@oclif/linewrap/-/linewrap-1.0.0.tgz#aedcb64b479d4db7be24196384897b5000901d91" integrity sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw== -"@oclif/parser@^3.8.0", "@oclif/parser@^3.8.3", "@oclif/parser@^3.8.6": +"@oclif/parser@^3.8.0", "@oclif/parser@^3.8.6": version "3.8.7" resolved "https://registry.yarnpkg.com/@oclif/parser/-/parser-3.8.7.tgz#236d48db05d0b00157d3b42d31f9dac7550d2a7c" integrity sha512-b11xBmIUK+LuuwVGJpFs4LwQN2xj2cBWj2c4z1FtiXGrJ85h9xV6q+k136Hw0tGg1jQoRXuvuBnqQ7es7vO9/Q== @@ -3134,23 +3134,23 @@ fs-extra "^9.0.1" moment "^2.22.1" -"@oclif/plugin-help@3.2.3": - version "3.2.3" - resolved "https://registry.yarnpkg.com/@oclif/plugin-help/-/plugin-help-3.2.3.tgz#cd24010e7eb326782843d3aa6d6b5a4affebb2c3" - integrity sha512-l2Pd0lbOMq4u/7xsl9hqISFqyR9gWEz/8+05xmrXFr67jXyS6EUCQB+mFBa0wepltrmJu0sAFg9AvA2mLaMMqQ== +"@oclif/plugin-help@3.2.14": + version "3.2.14" + resolved "https://registry.yarnpkg.com/@oclif/plugin-help/-/plugin-help-3.2.14.tgz#7149eb322d36abc6cbf09f205bad128141e7eba4" + integrity sha512-NP5qmE2YfcW3MmXjcrxiqKe9Hf3G0uK/qNc0zAMYKU4crFyIsWj7dBfQVFZSb28YXGioOOpjMzG1I7VMxKF38Q== dependencies: - "@oclif/command" "^1.5.20" - "@oclif/config" "^1.15.1" - "@oclif/errors" "^1.2.2" - chalk "^4.1.0" + "@oclif/command" "^1.8.9" + "@oclif/config" "^1.18.2" + "@oclif/errors" "^1.3.5" + chalk "^4.1.2" indent-string "^4.0.0" - lodash.template "^4.4.0" + lodash "^4.17.21" string-width "^4.2.0" strip-ansi "^6.0.0" widest-line "^3.1.0" - wrap-ansi "^4.0.0" + wrap-ansi "^6.2.0" -"@oclif/plugin-help@^3": +"@oclif/plugin-help@3.3.1": version "3.3.1" resolved "https://registry.yarnpkg.com/@oclif/plugin-help/-/plugin-help-3.3.1.tgz#36adb4e0173f741df409bb4b69036d24a53bfb24" integrity sha512-QuSiseNRJygaqAdABYFWn/H1CwIZCp9zp/PLid6yXvy6VcQV7OenEFF5XuYaCvSARe2Tg9r8Jqls5+fw1A9CbQ== @@ -3167,52 +3167,52 @@ widest-line "^3.1.0" wrap-ansi "^6.2.0" -"@oclif/plugin-not-found@1.2.4": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@oclif/plugin-not-found/-/plugin-not-found-1.2.4.tgz#160108c82f0aa10f4fb52cee4e0135af34b7220b" - integrity sha512-G440PCuMi/OT8b71aWkR+kCWikngGtyRjOR24sPMDbpUFV4+B3r51fz1fcqeUiiEOYqUpr0Uy/sneUe1O/NfBg== +"@oclif/plugin-not-found@1.2.6": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@oclif/plugin-not-found/-/plugin-not-found-1.2.6.tgz#7e354f7de6866477fe415c8fde357765876fe8ec" + integrity sha512-cfkDub79I9EpselfU/W8FTXhslrkOgfqjaa25tyGo99dAX5UVr6BWL2wbUobsU+rUcm4HN3byzdHDcqfu6hoAw== dependencies: - "@oclif/color" "^0.x" - "@oclif/command" "^1.6.0" - cli-ux "^4.9.0" - fast-levenshtein "^2.0.6" - lodash "^4.17.13" + "@oclif/color" "^0.1.2" + "@oclif/command" "1.8.11" + cli-ux "5.6.6" + fast-levenshtein "^3.0.0" + lodash "^4.17.21" -"@oclif/plugin-plugins@1.10.1": - version "1.10.1" - resolved "https://registry.yarnpkg.com/@oclif/plugin-plugins/-/plugin-plugins-1.10.1.tgz#13666d7c2f591a77f7a16334feee59f9eb216eb1" - integrity sha512-JDUA3NtOa4OlH8ofUBXQMTFlpEkSmeE9BxoQTD6+BeUvMgqFuZThENucRvCD00sywhCmDngmIYN59gKcXpGJeQ== +"@oclif/plugin-plugins@1.10.11": + version "1.10.11" + resolved "https://registry.yarnpkg.com/@oclif/plugin-plugins/-/plugin-plugins-1.10.11.tgz#f2d11dc164a3dd96392298670b4aafc04e89a44a" + integrity sha512-C9eHF10UkxwoAqRYrPW51YDuDOpDXASX4BEA++kTVcqhMQTKBQalmEJKw+gVnLl1YNmapse1ZSAcU1TrXjqykg== dependencies: - "@oclif/color" "^0.x" - "@oclif/command" "^1.5.12" - "@oclif/errors" "^1.2.2" - chalk "^4.1.0" - cli-ux "^5.2.1" - debug "^4.1.0" + "@oclif/color" "^0.1.2" + "@oclif/command" "^1.8.15" + "@oclif/errors" "^1.3.5" + chalk "^4.1.2" + cli-ux "^5.6.7" + debug "^4.3.3" fs-extra "^9.0" - http-call "^5.2.2" - load-json-file "^5.2.0" + http-call "^5.3.0" + load-json-file "^5.3.0" npm-run-path "^4.0.1" semver "^7.3.2" tslib "^2.0.0" yarn "^1.21.1" -"@oclif/plugin-warn-if-update-available@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@oclif/plugin-warn-if-update-available/-/plugin-warn-if-update-available-1.7.0.tgz#5a72abe39ce0b831eb4ae81cb64eb4b9f3ea424a" - integrity sha512-Nwyz3BJ8RhsfQ+OmFSsJSPIfn5YJqMrCzPh72Zgo2jqIjKIBWD8N9vTTe4kZlpeUUn77SyXFfwlBQbNCL5OEuQ== +"@oclif/plugin-warn-if-update-available@1.7.3": + version "1.7.3" + resolved "https://registry.yarnpkg.com/@oclif/plugin-warn-if-update-available/-/plugin-warn-if-update-available-1.7.3.tgz#efe6676655fabbed2e90cc9e646e9da4c99bc8ae" + integrity sha512-q8q0NIneVCwIAJzglUMsl3EbXR/H5aPDk6g+qs7uF0tToxe07SWSONoNaKPzViwRWvYChMPjL77/rXyW1HVn4A== dependencies: - "@oclif/command" "^1.5.10" - "@oclif/config" "^1.12.8" - "@oclif/errors" "^1.2.2" - chalk "^2.4.1" + "@oclif/command" "^1.8.6" + "@oclif/config" "^1.17.1" + "@oclif/errors" "^1.3.5" + chalk "^4.1.0" debug "^4.1.0" - fs-extra "^7.0.0" + fs-extra "^9.0.1" http-call "^5.2.2" - lodash.template "^4.4.0" - semver "^5.6.0" + lodash "^4.17.21" + semver "^7.3.2" -"@oclif/screen@^1.0.3", "@oclif/screen@^1.0.4": +"@oclif/screen@^1.0.4": version "1.0.4" resolved "https://registry.yarnpkg.com/@oclif/screen/-/screen-1.0.4.tgz#b740f68609dfae8aa71c3a6cab15d816407ba493" integrity sha512-60CHpq+eqnTxLZQ4PGHYNwUX572hgpMHGPtTWMjdTMsAvlm69lZV/4ly6O3sAYkomo4NggGcomrDpBe34rxUqw== @@ -3238,9 +3238,9 @@ esquery "^1.0.1" "@pmmmwh/react-refresh-webpack-plugin@^0.5.1": - version "0.5.4" - resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.4.tgz#df0d0d855fc527db48aac93c218a0bf4ada41f99" - integrity sha512-zZbZeHQDnoTlt2AF+diQT0wsSXpvWiaIOZwBRdltNFhG1+I3ozyaw7U/nBiUwyJ0D+zwdXp0E3bWOl38Ag2BMw== + version "0.5.5" + resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.5.tgz#e77aac783bd079f548daa0a7f080ab5b5a9741ca" + integrity sha512-RbG7h6TuP6nFFYKJwbcToA1rjC1FyPg25NR2noAZ0vKI+la01KTSRPkuVPE+U88jXv7javx2JHglUcL1MHcshQ== dependencies: ansi-html-community "^0.0.8" common-path-prefix "^3.0.0" @@ -3253,9 +3253,9 @@ source-map "^0.7.3" "@popperjs/core@^2.5.4", "@popperjs/core@^2.6.0": - version "2.11.4" - resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.4.tgz#d8c7b8db9226d2d7664553a0741ad7d0397ee503" - integrity sha512-q/ytXxO5NKvyT37pmisQAItCFqA7FD/vNb8dgaJy3/630Fsc+Mz9/9f2SziBoIZ30TJooXyTwZmhi1zjXmObYg== + version "2.11.5" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.5.tgz#db5a11bf66bdab39569719555b0f76e138d7bd64" + integrity sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw== "@radix-ui/popper@0.1.0": version "0.1.0" @@ -3574,9 +3574,9 @@ "@rollup/pluginutils" "^3.0.8" "@rollup/plugin-node-resolve@^13.0.4": - version "13.1.3" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.1.3.tgz#2ed277fb3ad98745424c1d2ba152484508a92d79" - integrity sha512-BdxNk+LtmElRo5d06MGY4zoepyrXX1tkzX2hrnPEZ53k78GuOMWLqmJDGIIOPwVRIFZrLQOo+Yr6KtCuLIA0AQ== + version "13.2.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.2.0.tgz#ac516c4649b7133273a944778df439d3081dc3d1" + integrity sha512-GuUIUyIKq7EjQxB51XSn6zPHYo+cILQQBYOGYvFFNxws2OVOqCBShAoof2hFrV8bAZzZGDBDQ8m2iUt8SLOUkg== dependencies: "@rollup/pluginutils" "^3.1.0" "@types/resolve" "1.17.1" @@ -3608,9 +3608,9 @@ integrity sha512-ZK5v4bJwgXldAUA8r3q9YKfCwOqoHTK/ZqRjSeRXQrBXWouoPnS4MQtgC4AXGiiBuUu5wxrRgTlv0ktmM4P1Aw== "@rushstack/eslint-patch@^1.0.8": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.1.1.tgz#782fa5da44c4f38ae9fd38e9184b54e451936118" - integrity sha512-BUyKJGdDWqvWC5GEhyOiUrGNi9iJUr4CU0O2WxJL6QJhHeeA/NVBalH+FeK0r/x/W0rPymXt5s78TDS7d6lCwg== + version "1.1.2" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.1.2.tgz#7a26e63b1bdaf654bcce2176a38b83f7f576327e" + integrity sha512-oe5WJEDaVsW8fBlGT7udrSCgOwWfoYHQOmSpnh8X+0GXpqqcRCP8k4y+Dxb0taWJDPpB+rdDUtumIiBwkY9qGA== "@samverschueren/stream-to-observable@^0.3.0": version "0.3.1" @@ -3619,30 +3619,20 @@ dependencies: any-observable "^0.3.0" -"@sentry/browser@6.19.2": - version "6.19.2" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-6.19.2.tgz#c0f6df07584f3b36fa037067aea20b2c8c2095a3" - integrity sha512-5VC44p5Vu2eJhVT39nLAJFgha5MjHDYCyZRR1ieeZt3a++otojPGBBAKNAtrEMGV+A2Z9AoneD6ZnDVlyb3GKg== +"@sentry/browser@6.19.6": + version "6.19.6" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-6.19.6.tgz#75be467667fffa1f4745382fc7a695568609c634" + integrity sha512-V5QyY1cO1iuFCI78dOFbHV7vckbeQEPPq3a5dGSXlBQNYnd9Ec5xoxp5nRNpWQPOZ8/Ixt9IgRxdqVTkWib51g== dependencies: - "@sentry/core" "6.19.2" - "@sentry/types" "6.19.2" - "@sentry/utils" "6.19.2" - tslib "^1.9.3" - -"@sentry/browser@6.19.3": - version "6.19.3" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-6.19.3.tgz#b4cfc6eba48d10a5fdf096c05ca11303354edb8b" - integrity sha512-E8UA6IN8z9hL6aGzOHUzqgNZiBwARkA89i8ncKB9QU1/+jl7598ZLziN4+uyPeZiRquEz8Ub7Ve1eacs1u+fbw== - dependencies: - "@sentry/core" "6.19.3" - "@sentry/types" "6.19.3" - "@sentry/utils" "6.19.3" + "@sentry/core" "6.19.6" + "@sentry/types" "6.19.6" + "@sentry/utils" "6.19.6" tslib "^1.9.3" "@sentry/cli@^1.73.0": - version "1.74.2" - resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-1.74.2.tgz#3821ec2fe1a027c6bb6c802ea3ae4f63a21e2533" - integrity sha512-J1P66/4yNN55PMO70+QQXeS87r4O9nYuJqZ29HJCPA/ih57jbMFRw9Wp9XLuO/QtpF8Yl7FvOwya/nImTOVOkA== + version "1.74.3" + resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-1.74.3.tgz#8405a19f6bb21b2ff3d051fb8a18056cc796c5ae" + integrity sha512-74NiqWTgTFDPe2S99h1ge5UMe6aAC44ebareadd1P6MdaNfYz6JUEa2QrDfMq7TKccEiRFXhXBHbUI8mxzrzuQ== dependencies: https-proxy-agent "^5.0.0" mkdirp "^0.5.5" @@ -3652,173 +3642,108 @@ proxy-from-env "^1.1.0" which "^2.0.2" -"@sentry/core@6.19.2": - version "6.19.2" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.19.2.tgz#dd35ba6ca41a2dd011c43f732bcdadbb52c06376" - integrity sha512-yu1R3ewBT4udmB4v7sc4biQZ0Z0rfB9+TzB5ZKoCftbe6kqXjFMMaFRYNUF9HicVldKAsBktgkWw3+yfqGkw/A== +"@sentry/core@6.19.6": + version "6.19.6" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.19.6.tgz#7d4649d0148b5d0be1358ab02e2f869bf7363e9a" + integrity sha512-biEotGRr44/vBCOegkTfC9rwqaqRKIpFljKGyYU6/NtzMRooktqOhjmjmItNCMRknArdeaQwA8lk2jcZDXX3Og== dependencies: - "@sentry/hub" "6.19.2" - "@sentry/minimal" "6.19.2" - "@sentry/types" "6.19.2" - "@sentry/utils" "6.19.2" + "@sentry/hub" "6.19.6" + "@sentry/minimal" "6.19.6" + "@sentry/types" "6.19.6" + "@sentry/utils" "6.19.6" tslib "^1.9.3" -"@sentry/core@6.19.3": - version "6.19.3" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.19.3.tgz#88268afc8c42716c455ad77bb4bed2bbf96abd83" - integrity sha512-RcGmYdkrE3VYBMl9Hgv4GKsC8FEVUdWYsfGIcT/btwP2YpBeUaTZl+1vV9r3Ncdl125LqzP5CKSj5otVxiEg6g== +"@sentry/hub@6.19.6": + version "6.19.6" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.19.6.tgz#ada83ceca0827c49534edfaba018221bc1eb75e1" + integrity sha512-PuEOBZxvx3bjxcXmWWZfWXG+orojQiWzv9LQXjIgroVMKM/GG4QtZbnWl1hOckUj7WtKNl4hEGO2g/6PyCV/vA== dependencies: - "@sentry/hub" "6.19.3" - "@sentry/minimal" "6.19.3" - "@sentry/types" "6.19.3" - "@sentry/utils" "6.19.3" + "@sentry/types" "6.19.6" + "@sentry/utils" "6.19.6" tslib "^1.9.3" -"@sentry/hub@6.19.2": - version "6.19.2" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.19.2.tgz#0e9f9c507e55d8396002f644b43ef27cc9ff1289" - integrity sha512-W7KCgNBgdBIMagOxy5J5KQPe+maYxSqfE8a5ncQ3R8BcZDQEKnkW/1FplNbfRLZqA/tL/ndKb7pTPqVtzsbARw== +"@sentry/integrations@6.19.6": + version "6.19.6" + resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-6.19.6.tgz#157152f16a8ad8df8a97d08bfe740909446b075a" + integrity sha512-K2xuA/ByhTh3qfIe0/XIsQSNf1HrRuIgtkC4TbU7T0QosybtXDsh6t/EWK+qzs2RjVE+Iaqldihstpoyew1JgA== dependencies: - "@sentry/types" "6.19.2" - "@sentry/utils" "6.19.2" - tslib "^1.9.3" - -"@sentry/hub@6.19.3": - version "6.19.3" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.19.3.tgz#d555c83404f19ac9b68f336b051b8e7a9d75feb0" - integrity sha512-iYbkrxEZt6CrHP3U3r54MARVZSs3YHjAMUMOTlC16s/Amz1McwV95XtI3NJaqMhwzl7R5vbGrs3xOtLg1V1Uyw== - dependencies: - "@sentry/types" "6.19.3" - "@sentry/utils" "6.19.3" - tslib "^1.9.3" - -"@sentry/integrations@6.19.3": - version "6.19.3" - resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-6.19.3.tgz#b5ac64591a9c7ae60f54c7d5ebd0d9152215c377" - integrity sha512-hOyX0UoH1ZyFtOjIazL2M9HfQMIjwukv0AtTX2W7sVfV1qxvISaV5lYZrAw1xB1lRoUwOJr/C0odddHWtBgdsA== - dependencies: - "@sentry/types" "6.19.3" - "@sentry/utils" "6.19.3" + "@sentry/types" "6.19.6" + "@sentry/utils" "6.19.6" localforage "^1.8.1" tslib "^1.9.3" -"@sentry/minimal@6.19.2": - version "6.19.2" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.19.2.tgz#e748541e4adbc7e80a3b6ccaf01b631c17fc44b4" - integrity sha512-ClwxKm77iDHET7kpzv1JvzDx1er5DoNu+EUjst0kQzARIrXvu9xuZuE2/CnBWycQWqw8o3HoGoKz65uIhsUCzQ== +"@sentry/minimal@6.19.6": + version "6.19.6" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.19.6.tgz#b6cced3708e25d322039e68ebdf8fadfa445bf7d" + integrity sha512-T1NKcv+HTlmd8EbzUgnGPl4ySQGHWMCyZ8a8kXVMZOPDzphN3fVIzkYzWmSftCWp0rpabXPt9aRF2mfBKU+mAQ== dependencies: - "@sentry/hub" "6.19.2" - "@sentry/types" "6.19.2" - tslib "^1.9.3" - -"@sentry/minimal@6.19.3": - version "6.19.3" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.19.3.tgz#b9b7f0d7f0cd2341b243318668ac01458f9d7889" - integrity sha512-xy/6ThHK8B2NJT98nWrx6V9eVgUbzq2N/8lv5/QqrKsICjxx22TRC8Q6zPg/o7BYcrY5vpugSEbIeErTnyxHDA== - dependencies: - "@sentry/hub" "6.19.3" - "@sentry/types" "6.19.3" + "@sentry/hub" "6.19.6" + "@sentry/types" "6.19.6" tslib "^1.9.3" "@sentry/nextjs@^6.19.3": - version "6.19.3" - resolved "https://registry.yarnpkg.com/@sentry/nextjs/-/nextjs-6.19.3.tgz#3e56ebfd0409a263c360bb275d2cfe3deffbf259" - integrity sha512-+Gw69DDW89VIi0SMqBFNZpSMhKH9VBCSubhm94gFae3u4eoRs8ZChuNuhbnScmE7OsJ4uLOnnu4Y186yCY7RpQ== + version "6.19.6" + resolved "https://registry.yarnpkg.com/@sentry/nextjs/-/nextjs-6.19.6.tgz#419205659c0fe2b7695bb7c892c9014b55ddd01b" + integrity sha512-xV6yj9H1Ieg4uSS4SsT1x5GvrWdifuBNLPWrneQ89kWBuPVFLLH1wZA0gvDuq6AJstRZ3A5pWI2IbwpmQzxMWQ== dependencies: - "@sentry/core" "6.19.3" - "@sentry/hub" "6.19.3" - "@sentry/integrations" "6.19.3" - "@sentry/node" "6.19.3" - "@sentry/react" "6.19.3" - "@sentry/tracing" "6.19.3" - "@sentry/utils" "6.19.3" + "@sentry/core" "6.19.6" + "@sentry/hub" "6.19.6" + "@sentry/integrations" "6.19.6" + "@sentry/node" "6.19.6" + "@sentry/react" "6.19.6" + "@sentry/tracing" "6.19.6" + "@sentry/utils" "6.19.6" "@sentry/webpack-plugin" "1.18.8" tslib "^1.9.3" -"@sentry/node@6.19.3": - version "6.19.3" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.19.3.tgz#afcf106bf72acc0e4bbacbc54744de8a938cbd1c" - integrity sha512-eHreMMbaK4mMAQ45Ki2xJ6in02l66hL6xhltppy/h4m297JIvjaQAFpbQf5XLtO7W4KjdbSV5qnB45D1aOAzFA== +"@sentry/node@6.19.6": + version "6.19.6" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.19.6.tgz#d63c4ffcf0150b4175a2e4e5021b53af46e5946f" + integrity sha512-kHQMfsy40ZxxdS9zMPmXCOOLWOJbQj6/aVSHt/L1QthYcgkAi7NJQNXnQIPWQDe8eP3DfNIWM7dc446coqjXrQ== dependencies: - "@sentry/core" "6.19.3" - "@sentry/hub" "6.19.3" - "@sentry/types" "6.19.3" - "@sentry/utils" "6.19.3" + "@sentry/core" "6.19.6" + "@sentry/hub" "6.19.6" + "@sentry/types" "6.19.6" + "@sentry/utils" "6.19.6" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^1.9.3" -"@sentry/react@6.19.3": - version "6.19.3" - resolved "https://registry.yarnpkg.com/@sentry/react/-/react-6.19.3.tgz#6b2bfb19faa55cf83af593a5778bb23cd2cf60a3" - integrity sha512-Zza1RX0+1tFCM1Hfq3Yl50cbc/ml0V/katw4aVZIU6+vEgvk5EuSFKU2LtblmJkpID7x6UwWz+1qgXumZPze6Q== +"@sentry/react@6.19.6", "@sentry/react@^6.19.2": + version "6.19.6" + resolved "https://registry.yarnpkg.com/@sentry/react/-/react-6.19.6.tgz#4c07168637bfcef4d6556a2c4548b74a61eaed87" + integrity sha512-RnWZ7clg1lRgf/JFNnTOs8ZPCv566E5CwFXXb6swyjPYUMcIn95XujDQU9SU4hXZ4qXd9BRvifxqyxvq0LMXNw== dependencies: - "@sentry/browser" "6.19.3" - "@sentry/minimal" "6.19.3" - "@sentry/types" "6.19.3" - "@sentry/utils" "6.19.3" + "@sentry/browser" "6.19.6" + "@sentry/minimal" "6.19.6" + "@sentry/types" "6.19.6" + "@sentry/utils" "6.19.6" hoist-non-react-statics "^3.3.2" tslib "^1.9.3" -"@sentry/react@^6.19.2": - version "6.19.2" - resolved "https://registry.yarnpkg.com/@sentry/react/-/react-6.19.2.tgz#67760aed06d7e54a2e117cd9048ad19d573c78f1" - integrity sha512-6ffifcUWJegvC5iYJlXL3zBirR05F/i5nA7QaYSMERJqZpXuYhwNPySbuiNTajm64+HA1RbdQkiwrHE/Ur3f1w== +"@sentry/tracing@6.19.6", "@sentry/tracing@^6.19.2": + version "6.19.6" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.19.6.tgz#faa156886afe441730f03cf9ac9c4982044b7135" + integrity sha512-STZdlEtTBqRmPw6Vjkzi/1kGkGPgiX0zdHaSOhSeA2HXHwx7Wnfu7veMKxtKWdO+0yW9QZGYOYqp0GVf4Swujg== dependencies: - "@sentry/browser" "6.19.2" - "@sentry/minimal" "6.19.2" - "@sentry/types" "6.19.2" - "@sentry/utils" "6.19.2" - hoist-non-react-statics "^3.3.2" + "@sentry/hub" "6.19.6" + "@sentry/minimal" "6.19.6" + "@sentry/types" "6.19.6" + "@sentry/utils" "6.19.6" tslib "^1.9.3" -"@sentry/tracing@6.19.3": - version "6.19.3" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.19.3.tgz#dfdbd5019486c899bdf352b1152d5d253544ef70" - integrity sha512-3lyb4yCFH/ltEQSyKM96g2c74vvKIwByx8fLDS4FHYQQDXY+xPcs+zyK8L1Fs5PRFAUciEOK5TS9qwELom5K4w== +"@sentry/types@6.19.6": + version "6.19.6" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.19.6.tgz#70513f9dca05d23d7ab9c2a6cb08d4db6763ca67" + integrity sha512-QH34LMJidEUPZK78l+Frt3AaVFJhEmIi05Zf8WHd9/iTt+OqvCHBgq49DDr1FWFqyYWm/QgW/3bIoikFpfsXyQ== + +"@sentry/utils@6.19.6": + version "6.19.6" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.19.6.tgz#2ddc9ef036c3847084c43d0e5a55e4646bdf9021" + integrity sha512-fAMWcsguL0632eWrROp/vhPgI7sBj/JROWVPzpabwVkm9z3m1rQm6iLFn4qfkZL8Ozy6NVZPXOQ7EXmeU24byg== dependencies: - "@sentry/hub" "6.19.3" - "@sentry/minimal" "6.19.3" - "@sentry/types" "6.19.3" - "@sentry/utils" "6.19.3" - tslib "^1.9.3" - -"@sentry/tracing@^6.19.2": - version "6.19.2" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.19.2.tgz#ed6ff1bc901c4d79ef97f77ed54ce58c650e4915" - integrity sha512-rGoPpP1JIAxdq5bzrww0XuNVr6yn7RN6/wUcaxf6CAvklKvDx+q28WTGlZLGTZ/3un8Rv6i1FZFZOXizgnVnrg== - dependencies: - "@sentry/hub" "6.19.2" - "@sentry/minimal" "6.19.2" - "@sentry/types" "6.19.2" - "@sentry/utils" "6.19.2" - tslib "^1.9.3" - -"@sentry/types@6.19.2": - version "6.19.2" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.19.2.tgz#0219c9da21ed975951108b8541913b1966464435" - integrity sha512-XO5qmVBdTs+7PdCz7fAwn1afWxSnRE2KLBFg5/vOdKosPSSHsSHUURSkxiEZc2QsR+JpRB4AeQ26AkIRX38qTg== - -"@sentry/types@6.19.3": - version "6.19.3" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.19.3.tgz#94b19da68d4d23561efb1014f72968bcea85cd0c" - integrity sha512-jHhqxp8MIWSfOc3krorirTGKTEaSFO6XrAvi+2AZhr6gvOChwOgzgrN2ZqesJcZmgCsqWV21u3usSwYeRrjOJA== - -"@sentry/utils@6.19.2": - version "6.19.2" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.19.2.tgz#995efb896c5159369509f4896c27a2d2ea9191f2" - integrity sha512-2DQQ2OJaxjtyxGq5FmMlqb6hptsqMs2xoBiVRMkTS/rvyTrk1oQdKZ8ePwjtgX3nJ728ni3IXIyXV+vfGp4EBw== - dependencies: - "@sentry/types" "6.19.2" - tslib "^1.9.3" - -"@sentry/utils@6.19.3": - version "6.19.3" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.19.3.tgz#0c3a3f0b86c12e3b079e56e37a44e62a1226043d" - integrity sha512-GdC9B/FK7qd0zItY43135bYbhuVSawE18bIrQDNuno8gTpDJ5OgShpTN9zR53AmMh16/lwKNnV3ZZjlpKcxuNw== - dependencies: - "@sentry/types" "6.19.3" + "@sentry/types" "6.19.6" tslib "^1.9.3" "@sentry/webpack-plugin@1.18.8", "@sentry/webpack-plugin@^1.18.8": @@ -3843,18 +3768,18 @@ "@sinonjs/commons" "^1.7.0" "@storybook/addon-a11y@^6.4.19": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/addon-a11y/-/addon-a11y-6.4.19.tgz#fb92840b5559b429afe2f28211440a5b5d1b6fcb" - integrity sha512-dG6easap6W4AqyggVZPq8lBrhza8StA8J4eYz/GVdoXINSGtq/casV0rkmY3+SUXhPYux5oGavHo86j5I4Q/0Q== + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/addon-a11y/-/addon-a11y-6.4.21.tgz#c7133533cc100ce147c52c14203a286c6db8c261" + integrity sha512-CL9IqlvS+pxFP01t2+zHqauEoqu1BK7e7Bs2OX+BfYQlO9BNT7QetFJKhd8aR6/EW391H9FKw2DSfCyWnnds2Q== dependencies: - "@storybook/addons" "6.4.19" - "@storybook/api" "6.4.19" - "@storybook/channels" "6.4.19" - "@storybook/client-logger" "6.4.19" - "@storybook/components" "6.4.19" - "@storybook/core-events" "6.4.19" + "@storybook/addons" "6.4.21" + "@storybook/api" "6.4.21" + "@storybook/channels" "6.4.21" + "@storybook/client-logger" "6.4.21" + "@storybook/components" "6.4.21" + "@storybook/core-events" "6.4.21" "@storybook/csf" "0.0.2--canary.87bc651.0" - "@storybook/theming" "6.4.19" + "@storybook/theming" "6.4.21" axe-core "^4.2.0" core-js "^3.8.2" global "^4.4.0" @@ -3864,17 +3789,17 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/addon-actions@6.4.19": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-6.4.19.tgz#10631d9c0a6669810264ea7fac3bff7201553084" - integrity sha512-GpSvP8xV8GfNkmtGJjfCgaOx6mbjtyTK0aT9FqX9pU0s+KVMmoCTrBh43b7dWrwxxas01yleBK9VpYggzhi/Fw== +"@storybook/addon-actions@6.4.21": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-6.4.21.tgz#9a1c7c21561f4c0917743c7868c9816c96555070" + integrity sha512-rqEsAHwywZZv9Zzv6A/QXNLiosKY6S+JAEoT9VSeDW07d/MvH7FKoF7fQCnm3ZR53et9AazBJttoiyODZsbjxA== dependencies: - "@storybook/addons" "6.4.19" - "@storybook/api" "6.4.19" - "@storybook/components" "6.4.19" - "@storybook/core-events" "6.4.19" + "@storybook/addons" "6.4.21" + "@storybook/api" "6.4.21" + "@storybook/components" "6.4.21" + "@storybook/core-events" "6.4.21" "@storybook/csf" "0.0.2--canary.87bc651.0" - "@storybook/theming" "6.4.19" + "@storybook/theming" "6.4.21" core-js "^3.8.2" fast-deep-equal "^3.1.3" global "^4.4.0" @@ -3888,18 +3813,18 @@ util-deprecate "^1.0.2" uuid-browser "^3.1.0" -"@storybook/addon-backgrounds@6.4.19": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/addon-backgrounds/-/addon-backgrounds-6.4.19.tgz#76435e2037824bb3a6fed9f7d51b9df34fae8af2" - integrity sha512-yn8MTE7lctO48Rdw+DmmA1wKdf5eyAbA/vrug5ske/U2WPgGc65sApzwT8BItZfuyAMjuT5RnCWwd7o6hGRgGQ== +"@storybook/addon-backgrounds@6.4.21": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/addon-backgrounds/-/addon-backgrounds-6.4.21.tgz#872a5a0232318dd5414cc929b4562d9a454c8333" + integrity sha512-W7FTIBdztuj3zwQX6c+YdnQQqqk5JrWGJ+OwMIRusG7uPOLeADLVHNwC19avytWuK5xsioawzsj7ZB/Od+z9aA== dependencies: - "@storybook/addons" "6.4.19" - "@storybook/api" "6.4.19" - "@storybook/client-logger" "6.4.19" - "@storybook/components" "6.4.19" - "@storybook/core-events" "6.4.19" + "@storybook/addons" "6.4.21" + "@storybook/api" "6.4.21" + "@storybook/client-logger" "6.4.21" + "@storybook/components" "6.4.21" + "@storybook/core-events" "6.4.21" "@storybook/csf" "0.0.2--canary.87bc651.0" - "@storybook/theming" "6.4.19" + "@storybook/theming" "6.4.21" core-js "^3.8.2" global "^4.4.0" memoizerific "^1.11.3" @@ -3907,28 +3832,28 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/addon-controls@6.4.19": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/addon-controls/-/addon-controls-6.4.19.tgz#1ebf74f7b0843ea0eccd319f5295dfa48947a975" - integrity sha512-JHi5z9i6NsgQLfG5WOeQE1AyOrM+QJLrjT+uOYx40bq+OC1yWHH7qHiphPP8kjJJhCZlaQk1qqXYkkQXgaeHSw== +"@storybook/addon-controls@6.4.21": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/addon-controls/-/addon-controls-6.4.21.tgz#72c43c75a1bf9a2379aac07d733067d897939fc6" + integrity sha512-lrBmFB/Zog41rIKOohYXmA6yjeust5AtO+ZK02iqQZVCSMfYF9FXN7XRsnd0wv4WbFgPtQbLyWRWerb+IPOvBw== dependencies: - "@storybook/addons" "6.4.19" - "@storybook/api" "6.4.19" - "@storybook/client-logger" "6.4.19" - "@storybook/components" "6.4.19" - "@storybook/core-common" "6.4.19" + "@storybook/addons" "6.4.21" + "@storybook/api" "6.4.21" + "@storybook/client-logger" "6.4.21" + "@storybook/components" "6.4.21" + "@storybook/core-common" "6.4.21" "@storybook/csf" "0.0.2--canary.87bc651.0" - "@storybook/node-logger" "6.4.19" - "@storybook/store" "6.4.19" - "@storybook/theming" "6.4.19" + "@storybook/node-logger" "6.4.21" + "@storybook/store" "6.4.21" + "@storybook/theming" "6.4.21" core-js "^3.8.2" lodash "^4.17.21" ts-dedent "^2.0.0" -"@storybook/addon-docs@6.4.19": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-6.4.19.tgz#229deabc74ea478c34fee96b85edb73da439680e" - integrity sha512-OEPyx/5ZXmZOPqIAWoPjlIP8Q/YfNjAmBosA8tmA8t5KCSiq/vpLcAvQhxqK6n0wk/B8Xp67Z8RpLfXjU8R3tw== +"@storybook/addon-docs@6.4.21": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-6.4.21.tgz#c171693f49d2bc5b27757d8a3bad21937ff05ead" + integrity sha512-yaj6f5wHUwju1mq3sAs1CuP01EJ3jwJ5awes/1oH6T3FSumphhECzyMeSWbNheQU/9wGVwMdPRPSjuNumTMOrQ== dependencies: "@babel/core" "^7.12.10" "@babel/generator" "^7.12.11" @@ -3939,21 +3864,21 @@ "@mdx-js/loader" "^1.6.22" "@mdx-js/mdx" "^1.6.22" "@mdx-js/react" "^1.6.22" - "@storybook/addons" "6.4.19" - "@storybook/api" "6.4.19" - "@storybook/builder-webpack4" "6.4.19" - "@storybook/client-logger" "6.4.19" - "@storybook/components" "6.4.19" - "@storybook/core" "6.4.19" - "@storybook/core-events" "6.4.19" + "@storybook/addons" "6.4.21" + "@storybook/api" "6.4.21" + "@storybook/builder-webpack4" "6.4.21" + "@storybook/client-logger" "6.4.21" + "@storybook/components" "6.4.21" + "@storybook/core" "6.4.21" + "@storybook/core-events" "6.4.21" "@storybook/csf" "0.0.2--canary.87bc651.0" - "@storybook/csf-tools" "6.4.19" - "@storybook/node-logger" "6.4.19" - "@storybook/postinstall" "6.4.19" - "@storybook/preview-web" "6.4.19" - "@storybook/source-loader" "6.4.19" - "@storybook/store" "6.4.19" - "@storybook/theming" "6.4.19" + "@storybook/csf-tools" "6.4.21" + "@storybook/node-logger" "6.4.21" + "@storybook/postinstall" "6.4.21" + "@storybook/preview-web" "6.4.21" + "@storybook/source-loader" "6.4.21" + "@storybook/store" "6.4.21" + "@storybook/theming" "6.4.21" acorn "^7.4.1" acorn-jsx "^5.3.1" acorn-walk "^7.2.0" @@ -3978,113 +3903,113 @@ util-deprecate "^1.0.2" "@storybook/addon-essentials@~6.4.12": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/addon-essentials/-/addon-essentials-6.4.19.tgz#20f6d65270d1f15830fb0631dfcc935fddb95137" - integrity sha512-vbV8sjepMVEuwhTDBHjO3E6vXluG7RiEeozV1QVuS9lGhjQdvUPdZ9rDNUcP6WHhTdEkS/ffTMaGIy1v8oZd7g== + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/addon-essentials/-/addon-essentials-6.4.21.tgz#d5debdf302ba883ab17055a5b7c45992b26440a7" + integrity sha512-2vhbzSMAfQ2Trwrg7E+doWLHy++mhXtV+ksgezo7PATMCKnBK6ItUwGvL7fQzLtaz+JbLqx/tgI8spMCUod+BA== dependencies: - "@storybook/addon-actions" "6.4.19" - "@storybook/addon-backgrounds" "6.4.19" - "@storybook/addon-controls" "6.4.19" - "@storybook/addon-docs" "6.4.19" - "@storybook/addon-measure" "6.4.19" - "@storybook/addon-outline" "6.4.19" - "@storybook/addon-toolbars" "6.4.19" - "@storybook/addon-viewport" "6.4.19" - "@storybook/addons" "6.4.19" - "@storybook/api" "6.4.19" - "@storybook/node-logger" "6.4.19" + "@storybook/addon-actions" "6.4.21" + "@storybook/addon-backgrounds" "6.4.21" + "@storybook/addon-controls" "6.4.21" + "@storybook/addon-docs" "6.4.21" + "@storybook/addon-measure" "6.4.21" + "@storybook/addon-outline" "6.4.21" + "@storybook/addon-toolbars" "6.4.21" + "@storybook/addon-viewport" "6.4.21" + "@storybook/addons" "6.4.21" + "@storybook/api" "6.4.21" + "@storybook/node-logger" "6.4.21" core-js "^3.8.2" regenerator-runtime "^0.13.7" ts-dedent "^2.0.0" -"@storybook/addon-measure@6.4.19": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/addon-measure/-/addon-measure-6.4.19.tgz#cd648a3d07b84505863f6d9918c6023a2921a596" - integrity sha512-PXeU0AlpnGEvnzBQ6snkzmlIpwE0ci8LdFtL1Vz1V1Xk5fbuETWYuEkPuk1oZ7L9igB9cfT32SyJlE5MC1iaGg== +"@storybook/addon-measure@6.4.21": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/addon-measure/-/addon-measure-6.4.21.tgz#79d7921899525d6e9ca0e7128ff49ebd3e4f402a" + integrity sha512-Gg+/os8erwwMkxqMnMeRtS7zrRBqPlWxYoXCdDEDqWe+sbJ8lbIXpJpBDC7PfVpotVYWuNETSxR3qAfJjWrBRg== dependencies: - "@storybook/addons" "6.4.19" - "@storybook/api" "6.4.19" - "@storybook/client-logger" "6.4.19" - "@storybook/components" "6.4.19" - "@storybook/core-events" "6.4.19" + "@storybook/addons" "6.4.21" + "@storybook/api" "6.4.21" + "@storybook/client-logger" "6.4.21" + "@storybook/components" "6.4.21" + "@storybook/core-events" "6.4.21" "@storybook/csf" "0.0.2--canary.87bc651.0" core-js "^3.8.2" global "^4.4.0" -"@storybook/addon-outline@6.4.19": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/addon-outline/-/addon-outline-6.4.19.tgz#07990749de4286c525593cc74d49fbb120f7cf22" - integrity sha512-7ZDXo8qrms6dx0KRP9PInXIie82h5g9XCNrGOUdfZkQPvgofJVj0kNv6p+WOiGiaVfKPC5KMgIofqzBTFV+k6Q== +"@storybook/addon-outline@6.4.21": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/addon-outline/-/addon-outline-6.4.21.tgz#d08cf233ad4a4960ec826de8628750bb8653a16a" + integrity sha512-ADVnl3dOKkzdv32qkS63Fm37keellV98RrNbGDmE4xMiu55/srn/LfklTHRdbUwpKvVxf/44EQ0HXSNJBuWeDg== dependencies: - "@storybook/addons" "6.4.19" - "@storybook/api" "6.4.19" - "@storybook/client-logger" "6.4.19" - "@storybook/components" "6.4.19" - "@storybook/core-events" "6.4.19" + "@storybook/addons" "6.4.21" + "@storybook/api" "6.4.21" + "@storybook/client-logger" "6.4.21" + "@storybook/components" "6.4.21" + "@storybook/core-events" "6.4.21" "@storybook/csf" "0.0.2--canary.87bc651.0" core-js "^3.8.2" global "^4.4.0" regenerator-runtime "^0.13.7" ts-dedent "^2.0.0" -"@storybook/addon-toolbars@6.4.19": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/addon-toolbars/-/addon-toolbars-6.4.19.tgz#75a8d531c0f7bfda1c6c97d19bf95fdd2ad54d3f" - integrity sha512-2UtuX9yB1rD/CAZv1etnOnunfPTvsEKEg/J2HYMKE1lhenWC5muIUXvDXCXvwDC65WviPJ56nFNKaKK1Zz7JDg== +"@storybook/addon-toolbars@6.4.21": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/addon-toolbars/-/addon-toolbars-6.4.21.tgz#7ad78d0c300d2894389fffa886b23784561cd44c" + integrity sha512-eu1OkMy4slGsK1jYxfEydQXDW+/VnhBf9zf6JexUh9SVzIWswDzmtsoZ4L1ws/vw7EQcbBBXU4UIG/xy5qH8dA== dependencies: - "@storybook/addons" "6.4.19" - "@storybook/api" "6.4.19" - "@storybook/components" "6.4.19" - "@storybook/theming" "6.4.19" + "@storybook/addons" "6.4.21" + "@storybook/api" "6.4.21" + "@storybook/components" "6.4.21" + "@storybook/theming" "6.4.21" core-js "^3.8.2" regenerator-runtime "^0.13.7" -"@storybook/addon-viewport@6.4.19": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/addon-viewport/-/addon-viewport-6.4.19.tgz#08702f5c2103c8ec5bc69344c06b85553949d274" - integrity sha512-T1hdImxbLj8suQSTbp6HSA1LLHOlqaNK5jjnqzEOoAxY0O8LNPXMJ2jKIeT2fPQ0v+tWGU3tbwf+3xFq0parVQ== +"@storybook/addon-viewport@6.4.21": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/addon-viewport/-/addon-viewport-6.4.21.tgz#ee7d8b272754798404801c0d846f439e56d7a131" + integrity sha512-O+SarJuO+S3ZrGskgMDmDnDjZg+7spCE6zdOuv2OX2wB+OTnoka0P0OhwHsg14Lc5DOWn22rv4q91v6RqAx6Yg== dependencies: - "@storybook/addons" "6.4.19" - "@storybook/api" "6.4.19" - "@storybook/client-logger" "6.4.19" - "@storybook/components" "6.4.19" - "@storybook/core-events" "6.4.19" - "@storybook/theming" "6.4.19" + "@storybook/addons" "6.4.21" + "@storybook/api" "6.4.21" + "@storybook/client-logger" "6.4.21" + "@storybook/components" "6.4.21" + "@storybook/core-events" "6.4.21" + "@storybook/theming" "6.4.21" core-js "^3.8.2" global "^4.4.0" memoizerific "^1.11.3" prop-types "^15.7.2" regenerator-runtime "^0.13.7" -"@storybook/addons@6.4.19", "@storybook/addons@^6.0.0": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-6.4.19.tgz#797d912b8b5a86cd6e0d31fa4c42d1f80808a432" - integrity sha512-QNyRYhpqmHV8oJxxTBdkRlLSbDFhpBvfvMfIrIT1UXb/eemdBZTaCGVvXZ9UixoEEI7f8VwAQ44IvkU5B1509w== +"@storybook/addons@6.4.21", "@storybook/addons@^6.0.0": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-6.4.21.tgz#a0081d167eda8a30b2206ccabfe75abae0bb6b58" + integrity sha512-TFLv4FyqP5SBOHEqE6tiW+2++HngkyQ2KRbHICC7khQgRqDkrwvrdKZwzF29igseglhSmftpZrBLXyWbA7q1vg== dependencies: - "@storybook/api" "6.4.19" - "@storybook/channels" "6.4.19" - "@storybook/client-logger" "6.4.19" - "@storybook/core-events" "6.4.19" + "@storybook/api" "6.4.21" + "@storybook/channels" "6.4.21" + "@storybook/client-logger" "6.4.21" + "@storybook/core-events" "6.4.21" "@storybook/csf" "0.0.2--canary.87bc651.0" - "@storybook/router" "6.4.19" - "@storybook/theming" "6.4.19" + "@storybook/router" "6.4.21" + "@storybook/theming" "6.4.21" "@types/webpack-env" "^1.16.0" core-js "^3.8.2" global "^4.4.0" regenerator-runtime "^0.13.7" -"@storybook/api@6.4.19", "@storybook/api@^6.0.0": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/api/-/api-6.4.19.tgz#8000a0e4c52c39b910b4ccc6731419e8e71800ef" - integrity sha512-aDvea+NpQCBjpNp9YidO1Pr7fzzCp15FSdkG+2ihGQfv5raxrN+IIJnGUXecpe71nvlYiB+29UXBVK7AL0j51Q== +"@storybook/api@6.4.21", "@storybook/api@^6.0.0": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/api/-/api-6.4.21.tgz#efee41ae7bde37f6fe43ee960fef1a261b1b1dd6" + integrity sha512-AULsLd7ew11IRCpzffyLFGl5cwt9BLMok33DcIlCyvXsiqLm4/OsbgM4sj6QqWVuxcFlWMQJHoRJyeFlULFvZA== dependencies: - "@storybook/channels" "6.4.19" - "@storybook/client-logger" "6.4.19" - "@storybook/core-events" "6.4.19" + "@storybook/channels" "6.4.21" + "@storybook/client-logger" "6.4.21" + "@storybook/core-events" "6.4.21" "@storybook/csf" "0.0.2--canary.87bc651.0" - "@storybook/router" "6.4.19" + "@storybook/router" "6.4.21" "@storybook/semver" "^7.3.2" - "@storybook/theming" "6.4.19" + "@storybook/theming" "6.4.21" core-js "^3.8.2" fast-deep-equal "^3.1.3" global "^4.4.0" @@ -4096,10 +4021,10 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/builder-webpack4@6.4.19": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/builder-webpack4/-/builder-webpack4-6.4.19.tgz#ca8228639be06e50d5f1555b844dd4177e5068ad" - integrity sha512-wxA6SMH11duc9D53aeVVBwrVRemFIoxHp/dOugkkg6ZZFAb4ZmWzf/ENc3vQIZdZpfNRi7IZIZEOfoHc994cmw== +"@storybook/builder-webpack4@6.4.21": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/builder-webpack4/-/builder-webpack4-6.4.21.tgz#5355ab1bfe7ee153e907d8e64c6088fdb7a95676" + integrity sha512-tetK8iZJ/S7U1Hrvm9i5ejH/SKJ/UHJcZ+j1VrzQK15wuwalevYJGJI3Gk2NzqKE8rda4CXPK1ES3iGcS67eZw== dependencies: "@babel/core" "^7.12.10" "@babel/plugin-proposal-class-properties" "^7.12.1" @@ -4122,22 +4047,22 @@ "@babel/preset-env" "^7.12.11" "@babel/preset-react" "^7.12.10" "@babel/preset-typescript" "^7.12.7" - "@storybook/addons" "6.4.19" - "@storybook/api" "6.4.19" - "@storybook/channel-postmessage" "6.4.19" - "@storybook/channels" "6.4.19" - "@storybook/client-api" "6.4.19" - "@storybook/client-logger" "6.4.19" - "@storybook/components" "6.4.19" - "@storybook/core-common" "6.4.19" - "@storybook/core-events" "6.4.19" - "@storybook/node-logger" "6.4.19" - "@storybook/preview-web" "6.4.19" - "@storybook/router" "6.4.19" + "@storybook/addons" "6.4.21" + "@storybook/api" "6.4.21" + "@storybook/channel-postmessage" "6.4.21" + "@storybook/channels" "6.4.21" + "@storybook/client-api" "6.4.21" + "@storybook/client-logger" "6.4.21" + "@storybook/components" "6.4.21" + "@storybook/core-common" "6.4.21" + "@storybook/core-events" "6.4.21" + "@storybook/node-logger" "6.4.21" + "@storybook/preview-web" "6.4.21" + "@storybook/router" "6.4.21" "@storybook/semver" "^7.3.2" - "@storybook/store" "6.4.19" - "@storybook/theming" "6.4.19" - "@storybook/ui" "6.4.19" + "@storybook/store" "6.4.21" + "@storybook/theming" "6.4.21" + "@storybook/ui" "6.4.21" "@types/node" "^14.0.10" "@types/webpack" "^4.41.26" autoprefixer "^9.8.6" @@ -4172,9 +4097,9 @@ webpack-virtual-modules "^0.2.2" "@storybook/builder-webpack5@~6.4.12": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/builder-webpack5/-/builder-webpack5-6.4.19.tgz#f9d3cf6e7f7769ec2eba11e226e662e4116da659" - integrity sha512-AWM4YMN1gPaf7jfntqZTCGpIQ1tF6YRU1JtczPG4ox28rTaO6NMfOBi9aRhBre/59pPOh9bF6u2gu/MIHmRW+w== + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/builder-webpack5/-/builder-webpack5-6.4.21.tgz#d601676083a263a1f03847b12fe2ad1ecd3865bb" + integrity sha512-pUD8+wL2LN1iFHAcpDo0E7lXkL5E6pCqmKmUbkgs1bPgvY0n9gyvDK46H70P/HWu+PGXKMXI/gofsF5ub1NaRQ== dependencies: "@babel/core" "^7.12.10" "@babel/plugin-proposal-class-properties" "^7.12.1" @@ -4196,21 +4121,21 @@ "@babel/preset-env" "^7.12.11" "@babel/preset-react" "^7.12.10" "@babel/preset-typescript" "^7.12.7" - "@storybook/addons" "6.4.19" - "@storybook/api" "6.4.19" - "@storybook/channel-postmessage" "6.4.19" - "@storybook/channels" "6.4.19" - "@storybook/client-api" "6.4.19" - "@storybook/client-logger" "6.4.19" - "@storybook/components" "6.4.19" - "@storybook/core-common" "6.4.19" - "@storybook/core-events" "6.4.19" - "@storybook/node-logger" "6.4.19" - "@storybook/preview-web" "6.4.19" - "@storybook/router" "6.4.19" + "@storybook/addons" "6.4.21" + "@storybook/api" "6.4.21" + "@storybook/channel-postmessage" "6.4.21" + "@storybook/channels" "6.4.21" + "@storybook/client-api" "6.4.21" + "@storybook/client-logger" "6.4.21" + "@storybook/components" "6.4.21" + "@storybook/core-common" "6.4.21" + "@storybook/core-events" "6.4.21" + "@storybook/node-logger" "6.4.21" + "@storybook/preview-web" "6.4.21" + "@storybook/router" "6.4.21" "@storybook/semver" "^7.3.2" - "@storybook/store" "6.4.19" - "@storybook/theming" "6.4.19" + "@storybook/store" "6.4.21" + "@storybook/theming" "6.4.21" "@types/node" "^14.0.10" babel-loader "^8.0.0" babel-plugin-macros "^3.0.1" @@ -4234,51 +4159,51 @@ webpack-hot-middleware "^2.25.1" webpack-virtual-modules "^0.4.1" -"@storybook/channel-postmessage@6.4.19": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-6.4.19.tgz#5db4e1188aaa9de05fee3ba6a6b7f3b988cade03" - integrity sha512-E5h/itFzQ/6M08LR4kqlgqqmeO3tmavI+nUAlZrkCrotpJFNMHE2i0PQHg0TkFJrRDpYcrwD+AjUW4IwdqrisQ== +"@storybook/channel-postmessage@6.4.21": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-6.4.21.tgz#491a8ae93b29ab4c23888297403acbeb7e6d2c25" + integrity sha512-9mYtc4khwALGA9m4oh2ssnIoyYyKs/q6CZ+luaxct5bd1AZ6iZGBW+qwPaE+g/jjJyLotcSA/1FVr3AiImlWIQ== dependencies: - "@storybook/channels" "6.4.19" - "@storybook/client-logger" "6.4.19" - "@storybook/core-events" "6.4.19" + "@storybook/channels" "6.4.21" + "@storybook/client-logger" "6.4.21" + "@storybook/core-events" "6.4.21" core-js "^3.8.2" global "^4.4.0" qs "^6.10.0" telejson "^5.3.2" -"@storybook/channel-websocket@6.4.19": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/channel-websocket/-/channel-websocket-6.4.19.tgz#5b2f34f9089966bab66c55721766d3d1803edf2e" - integrity sha512-cXKwQjIXttfdUyZlcHORelUmJ5nUKswsnCA/qy7IRWpZjD8yQJcNk1dYC+tTHDVqFgdRT89pL0hRRB1rlaaR8Q== +"@storybook/channel-websocket@6.4.21": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/channel-websocket/-/channel-websocket-6.4.21.tgz#46db7dbfb9a37907ab12ba2632c46070557b5a97" + integrity sha512-qsyxR0e9ErqyDuCLTh/bSTnBkuNmD1GfVXp7f+NpKoSyfTOYKkaqydOiYDwN0LIHMt4ml9v6NN/zQ/i3avI4jw== dependencies: - "@storybook/channels" "6.4.19" - "@storybook/client-logger" "6.4.19" + "@storybook/channels" "6.4.21" + "@storybook/client-logger" "6.4.21" core-js "^3.8.2" global "^4.4.0" telejson "^5.3.2" -"@storybook/channels@6.4.19": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-6.4.19.tgz#095bbaee494bf5b03f7cb92d34626f2f5063cb31" - integrity sha512-EwyoncFvTfmIlfsy8jTfayCxo2XchPkZk/9txipugWSmc057HdklMKPLOHWP0z5hLH0IbVIKXzdNISABm36jwQ== +"@storybook/channels@6.4.21": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-6.4.21.tgz#0f1924963f77ec0c3d82aa643a246824ca9f5fca" + integrity sha512-qgy8z3Hp04Q4p+E/8V9MamYYJLW8z1uv1Z+rvosNkg+eAApPg+Qe08BSj59OAUwPLrr2vpBW7WZ/BYSieW1tUg== dependencies: core-js "^3.8.2" ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/client-api@6.4.19": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-6.4.19.tgz#131597e160f112f51240a4e407191053e5ed972f" - integrity sha512-OCrT5Um3FDvZnimQKwWtwsaI+5agPwq2i8YiqlofrI/NPMKp0I7DEkCGwE5IRD1Q8BIKqHcMo5tTmfYi0AxyOg== +"@storybook/client-api@6.4.21": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-6.4.21.tgz#6dcf41a9e55b5e38638cd4d032f1ceaec305e0eb" + integrity sha512-qdxRdVQLO9A4KsQVT3o3Xj1PF3cSdasHz1mwuH8/l2p5Zce5vWKtNSUuxcSoI50P0A18FLntVMpgyM+8+bHxhQ== dependencies: - "@storybook/addons" "6.4.19" - "@storybook/channel-postmessage" "6.4.19" - "@storybook/channels" "6.4.19" - "@storybook/client-logger" "6.4.19" - "@storybook/core-events" "6.4.19" + "@storybook/addons" "6.4.21" + "@storybook/channel-postmessage" "6.4.21" + "@storybook/channels" "6.4.21" + "@storybook/client-logger" "6.4.21" + "@storybook/core-events" "6.4.21" "@storybook/csf" "0.0.2--canary.87bc651.0" - "@storybook/store" "6.4.19" + "@storybook/store" "6.4.21" "@types/qs" "^6.9.5" "@types/webpack-env" "^1.16.0" core-js "^3.8.2" @@ -4293,23 +4218,23 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/client-logger@6.4.19": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-6.4.19.tgz#b2011ad2fa446cce4a9afdb41974b2a576e9fad2" - integrity sha512-zmg/2wyc9W3uZrvxaW4BfHcr40J0v7AGslqYXk9H+ERLVwIvrR4NhxQFaS6uITjBENyRDxwzfU3Va634WcmdDQ== +"@storybook/client-logger@6.4.21": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-6.4.21.tgz#7df21cec4d5426669e828af59232ec44ea19c81a" + integrity sha512-XkVCQ5swyYDVh5U+87DGRBdC5utJBpVW7kU5P14TQKMnSc/yHbMcXWaA89K8WKDa/WGkGbc0bKi4WrUwHFg2FA== dependencies: core-js "^3.8.2" global "^4.4.0" -"@storybook/components@6.4.19", "@storybook/components@^6.0.0": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/components/-/components-6.4.19.tgz#084ba21f26a3eeab82f45178de6899688eecb2fc" - integrity sha512-q/0V37YAJA7CNc+wSiiefeM9+3XVk8ixBNylY36QCGJgIeGQ5/79vPyUe6K4lLmsQwpmZsIq1s1Ad5+VbboeOA== +"@storybook/components@6.4.21", "@storybook/components@^6.0.0": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/components/-/components-6.4.21.tgz#77483ef429f96d94cf7d2d8c1af8441ef855a77d" + integrity sha512-OnuAS/bMdLKdmkWtDNUxM9qSFCU3pcGWqXzasU3sjvibIcz3472xTFiwjW9UiHR7ipu/YQKALnIbyyjznGY4Kg== dependencies: "@popperjs/core" "^2.6.0" - "@storybook/client-logger" "6.4.19" + "@storybook/client-logger" "6.4.21" "@storybook/csf" "0.0.2--canary.87bc651.0" - "@storybook/theming" "6.4.19" + "@storybook/theming" "6.4.21" "@types/color-convert" "^2.0.0" "@types/overlayscrollbars" "^1.12.0" "@types/react-syntax-highlighter" "11.0.5" @@ -4331,21 +4256,21 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/core-client@6.4.19": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/core-client/-/core-client-6.4.19.tgz#fc6902c4321ae9e7c2858126172bc0752a84321c" - integrity sha512-rQHRZjhArPleE7/S8ZUolgzwY+hC0smSKX/3PQxO2GcebDjnJj6+iSV3h+aSMHMmTdoCQvjYw9aBpT8scuRe+A== +"@storybook/core-client@6.4.21": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/core-client/-/core-client-6.4.21.tgz#4882092315c884dca6118202c83a5e6758b7de57" + integrity sha512-1zdfhL7ryP5xgcBNuaQplkiPIgPZ2OnIFA1gqun1xl9OBA7K2J115uZ2grQwS7hrhRBqsRIvMv1k9UmAYzXqiw== dependencies: - "@storybook/addons" "6.4.19" - "@storybook/channel-postmessage" "6.4.19" - "@storybook/channel-websocket" "6.4.19" - "@storybook/client-api" "6.4.19" - "@storybook/client-logger" "6.4.19" - "@storybook/core-events" "6.4.19" + "@storybook/addons" "6.4.21" + "@storybook/channel-postmessage" "6.4.21" + "@storybook/channel-websocket" "6.4.21" + "@storybook/client-api" "6.4.21" + "@storybook/client-logger" "6.4.21" + "@storybook/core-events" "6.4.21" "@storybook/csf" "0.0.2--canary.87bc651.0" - "@storybook/preview-web" "6.4.19" - "@storybook/store" "6.4.19" - "@storybook/ui" "6.4.19" + "@storybook/preview-web" "6.4.21" + "@storybook/store" "6.4.21" + "@storybook/ui" "6.4.21" airbnb-js-shims "^2.2.1" ansi-to-html "^0.6.11" core-js "^3.8.2" @@ -4357,10 +4282,10 @@ unfetch "^4.2.0" util-deprecate "^1.0.2" -"@storybook/core-common@6.4.19": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-6.4.19.tgz#18e6c6095ebd9a94b074529917c693084921d3ca" - integrity sha512-X1pJJkO48DFxl6iyEemIKqRkJ7j9/cBh3BRBUr+xZHXBvnD0GKDXIocwh0PjSxSC6XSu3UCQnqtKi3PbjRl8Dg== +"@storybook/core-common@6.4.21": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-6.4.21.tgz#7151eeb5f628bec1dc1461df2de4c51fec15ac4c" + integrity sha512-apYT4CTRn0iR3DEf59Sc2i9L1WjbewmzYrmHTjNuygS7sjKxV8nppz60yvtLiHu4AWE+quXL3hen5yW9n9mnjw== dependencies: "@babel/core" "^7.12.10" "@babel/plugin-proposal-class-properties" "^7.12.1" @@ -4383,7 +4308,7 @@ "@babel/preset-react" "^7.12.10" "@babel/preset-typescript" "^7.12.7" "@babel/register" "^7.12.1" - "@storybook/node-logger" "6.4.19" + "@storybook/node-logger" "6.4.21" "@storybook/semver" "^7.3.2" "@types/node" "^14.0.10" "@types/pretty-hrtime" "^1.0.0" @@ -4412,29 +4337,29 @@ util-deprecate "^1.0.2" webpack "4" -"@storybook/core-events@6.4.19", "@storybook/core-events@^6.0.0": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-6.4.19.tgz#d2a03156783a3cb9bd9f7ba81a06a798a5c296ae" - integrity sha512-KICzUw6XVQUJzFSCXfvhfHAuyhn4Q5J4IZEfuZkcGJS4ODkrO6tmpdYE5Cfr+so95Nfp0ErWiLUuodBsW9/rtA== +"@storybook/core-events@6.4.21", "@storybook/core-events@^6.0.0": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-6.4.21.tgz#28fff8b10c0d564259edf4439ff8677615ce59c0" + integrity sha512-K6b9M1zYvW/Kfb1cnH6JDfmFvTYDMx/ot9zdl9O5SPH9glUwzOXSk8qKu6GmZTiW2YnC2nKbjaN20mfMsCBPGw== dependencies: core-js "^3.8.2" -"@storybook/core-server@6.4.19": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/core-server/-/core-server-6.4.19.tgz#0d1b4b2094749b8bce03e3d01422e14e5fef8e66" - integrity sha512-bKsUB9f7hl5ya2JXxpIrErmbDQjoH39FVbzYZWjMo4t/b7+Xyi6vYadwyWcqlpUQmis09ZaSMv8L/Tw0TuwLAA== +"@storybook/core-server@6.4.21": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/core-server/-/core-server-6.4.21.tgz#3f60c68bb21fd1b07113b2bbaefd6e0498bdbd68" + integrity sha512-uOBrLKzERAJvGAtd9ieozoTjEu0Hnr7DnufppG4t14Yu61lcbsT3IzPeZDuFaM3tGjWlNgXIezZ2aBoxTMVokQ== dependencies: "@discoveryjs/json-ext" "^0.5.3" - "@storybook/builder-webpack4" "6.4.19" - "@storybook/core-client" "6.4.19" - "@storybook/core-common" "6.4.19" - "@storybook/core-events" "6.4.19" + "@storybook/builder-webpack4" "6.4.21" + "@storybook/core-client" "6.4.21" + "@storybook/core-common" "6.4.21" + "@storybook/core-events" "6.4.21" "@storybook/csf" "0.0.2--canary.87bc651.0" - "@storybook/csf-tools" "6.4.19" - "@storybook/manager-webpack4" "6.4.19" - "@storybook/node-logger" "6.4.19" + "@storybook/csf-tools" "6.4.21" + "@storybook/manager-webpack4" "6.4.21" + "@storybook/node-logger" "6.4.21" "@storybook/semver" "^7.3.2" - "@storybook/store" "6.4.19" + "@storybook/store" "6.4.21" "@types/node" "^14.0.10" "@types/node-fetch" "^2.5.7" "@types/pretty-hrtime" "^1.0.0" @@ -4467,18 +4392,18 @@ webpack "4" ws "^8.2.3" -"@storybook/core@6.4.19": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/core/-/core-6.4.19.tgz#58dd055bcc0ef335e0e0d3f6eca74b4d4d49eba1" - integrity sha512-55LOQ/h/kf1jMhjN85t/pIEdIwWEG9yV7bdwv3niVvmoypCxyyjn9/QNK0RKYAeDSUtdm6FVoJ6k5CpxWz2d8w== +"@storybook/core@6.4.21": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/core/-/core-6.4.21.tgz#d92a60a6014df5f88902edfe4fadf1cbdd9ba238" + integrity sha512-HNy3L/5stURU5CPyo4Gh/NHhgs6qgvNq82pOr9mhnr2chNOUTh/kaWjrR4k/Mnh8qzItYLs1tpIFKvhclHXAdw== dependencies: - "@storybook/core-client" "6.4.19" - "@storybook/core-server" "6.4.19" + "@storybook/core-client" "6.4.21" + "@storybook/core-server" "6.4.21" -"@storybook/csf-tools@6.4.19": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/csf-tools/-/csf-tools-6.4.19.tgz#28bdea11da17501a8bc4e761b821d7721880eaf6" - integrity sha512-gf/zRhGoAVsFwSyV2tc+jeJfZQkxF6QsaZgbUSe24/IUvGFCT/PS/jZq1qy7dECAwrTOfykgu8juyBtj6WhWyw== +"@storybook/csf-tools@6.4.21": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/csf-tools/-/csf-tools-6.4.21.tgz#007eababed1ff334b08afd92491e09191a57053c" + integrity sha512-Qt7NFEWkVaAWsy9sc0+0nLsi0k8UE+JjsR8Dit2Z/51ED7CMBJCl6nZKSU2vTnwDdRWwUj3d1a+zeKlozKsXYA== dependencies: "@babel/core" "^7.12.10" "@babel/generator" "^7.12.11" @@ -4505,20 +4430,20 @@ dependencies: lodash "^4.17.15" -"@storybook/manager-webpack4@6.4.19": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/manager-webpack4/-/manager-webpack4-6.4.19.tgz#999577afb9b9a57fc478f7c5e5d95d785ea69da3" - integrity sha512-R8ugZjTYqXvlc6gDOcw909L65sIleOmIJLZR+N6/H85MivGXHu39jOwONqB7tVACufRty4FNecn8tEiQL2SAKA== +"@storybook/manager-webpack4@6.4.21": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/manager-webpack4/-/manager-webpack4-6.4.21.tgz#260aeffcfcc9e09f33a11b362d7bfc1d07ac4230" + integrity sha512-JhcGU6KtmNQUfSNNgAWIKVKOaupx7+RYw3y6P0JN5km5nzqpipkeJzh+jdMqefJbIRV/psqKm/jpt/pPfaIHyQ== dependencies: "@babel/core" "^7.12.10" "@babel/plugin-transform-template-literals" "^7.12.1" "@babel/preset-react" "^7.12.10" - "@storybook/addons" "6.4.19" - "@storybook/core-client" "6.4.19" - "@storybook/core-common" "6.4.19" - "@storybook/node-logger" "6.4.19" - "@storybook/theming" "6.4.19" - "@storybook/ui" "6.4.19" + "@storybook/addons" "6.4.21" + "@storybook/core-client" "6.4.21" + "@storybook/core-common" "6.4.21" + "@storybook/node-logger" "6.4.21" + "@storybook/theming" "6.4.21" + "@storybook/ui" "6.4.21" "@types/node" "^14.0.10" "@types/webpack" "^4.41.26" babel-loader "^8.0.0" @@ -4548,19 +4473,19 @@ webpack-virtual-modules "^0.2.2" "@storybook/manager-webpack5@~6.4.12": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/manager-webpack5/-/manager-webpack5-6.4.19.tgz#161809337b69e6c4ea6a4eb6f881a32760bbeb60" - integrity sha512-hVjWhWAOgWaymBy0HeRskN+MfKLpqLP4Txfw+3Xqg1qplgexV0w2O4BQrS/SNEH4V/1qF9h8XTsk3L3oQIj3Mg== + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/manager-webpack5/-/manager-webpack5-6.4.21.tgz#f8f20c03bed8c3911a3678e637feef1d36bb45f5" + integrity sha512-oAec1kNFVcGSPOht51BN6uE+OvEcZPa04qgqoMu58vBF20XVcNXofs0sJxXTdwNgwPW+xL2rzsGk1GK1EsLmmQ== dependencies: "@babel/core" "^7.12.10" "@babel/plugin-transform-template-literals" "^7.12.1" "@babel/preset-react" "^7.12.10" - "@storybook/addons" "6.4.19" - "@storybook/core-client" "6.4.19" - "@storybook/core-common" "6.4.19" - "@storybook/node-logger" "6.4.19" - "@storybook/theming" "6.4.19" - "@storybook/ui" "6.4.19" + "@storybook/addons" "6.4.21" + "@storybook/core-client" "6.4.21" + "@storybook/core-common" "6.4.21" + "@storybook/node-logger" "6.4.21" + "@storybook/theming" "6.4.21" + "@storybook/ui" "6.4.21" "@types/node" "^14.0.10" babel-loader "^8.0.0" case-sensitive-paths-webpack-plugin "^2.3.0" @@ -4597,10 +4522,10 @@ npmlog "^4.1.2" pretty-hrtime "^1.0.3" -"@storybook/node-logger@6.4.19": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-6.4.19.tgz#554f9efad4e95ce6fa63222d026f43258293c896" - integrity sha512-hO2Aar3PgPnPtNq2fVgiuGlqo3EEVR6TKVBXMq7foL3tN2k4BQFKLDHbm5qZQQntyYKurKsRUGKPJFPuI1ov/w== +"@storybook/node-logger@6.4.21": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-6.4.21.tgz#f4606e345f1896e8ee709ced42d4cd7dc5c5f7ec" + integrity sha512-iCQ6ToARy0Ri6oP3UPDGsiIqDKf/gsL3XwZ5iPj80HyuCdUwm2dB+e3/09gD7XkHNkY2//TxKOUxcAkorQRFUQ== dependencies: "@types/npmlog" "^4.1.2" chalk "^4.1.0" @@ -4608,24 +4533,24 @@ npmlog "^5.0.1" pretty-hrtime "^1.0.3" -"@storybook/postinstall@6.4.19": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/postinstall/-/postinstall-6.4.19.tgz#ba9799e30a727e39f51168f9c193aab99ef87bdf" - integrity sha512-/0tHHxyIV82zt1rw4BW70GmrQbDVu9IJPAxOqFzGjC1fNojwJ53mK6FfUsOzbhG5mWk5p0Ip5+zr74moP119AA== +"@storybook/postinstall@6.4.21": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/postinstall/-/postinstall-6.4.21.tgz#1a0dc4ae0c8bf73fcda3d2abf6f22477dce0a908" + integrity sha512-vuynjqEnjoRoe0E0jo27vJQ5JH2lRPAGR0lZMNvmw3EasWSA586eyJvEVTAte/z1wO9ZV2dTHbgAozv33N1Z2w== dependencies: core-js "^3.8.2" -"@storybook/preview-web@6.4.19": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/preview-web/-/preview-web-6.4.19.tgz#bdfab7b2f760caf72140229dd64fd57617ad000b" - integrity sha512-jqltoBv5j7lvnxEfV9w8dLX9ASWGuvgz97yg8Yo5FqkftEwrHJenyvMGcTgDJKJPorF+wiz/9aIqnmd3LCAcZQ== +"@storybook/preview-web@6.4.21": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/preview-web/-/preview-web-6.4.21.tgz#c1e7eb345bd1c9a93df0de066efe053c5ba5f745" + integrity sha512-v0AS7rDbdcD3aw/1pY525EJ4jmgY5ntz9CqiLmBKVBgshjng7Cza8AVR8Kvhr+ppoP/v63w4sEdxIw7jYsO5rQ== dependencies: - "@storybook/addons" "6.4.19" - "@storybook/channel-postmessage" "6.4.19" - "@storybook/client-logger" "6.4.19" - "@storybook/core-events" "6.4.19" + "@storybook/addons" "6.4.21" + "@storybook/channel-postmessage" "6.4.21" + "@storybook/client-logger" "6.4.21" + "@storybook/core-events" "6.4.21" "@storybook/csf" "0.0.2--canary.87bc651.0" - "@storybook/store" "6.4.19" + "@storybook/store" "6.4.21" ansi-to-html "^0.6.11" core-js "^3.8.2" global "^4.4.0" @@ -4651,21 +4576,21 @@ tslib "^2.0.0" "@storybook/react@~6.4.12": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/react/-/react-6.4.19.tgz#1707b785b5a65c867e291ede12113e7fd55f8998" - integrity sha512-5b3i8jkVrjQGmcxxxXwCduHPIh+cluWkfeweKeQOe+lW4BR8fuUICo3AMLrYPAtB/UcaJyYkIYmTvF2mkfepFA== + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/react/-/react-6.4.21.tgz#c83f3c817f8b77fa69b9619e88eb94be7d11fe6b" + integrity sha512-7SJJnEbZ5THQBjor37shxnhXiFTB7g46U68I/PY56A5ZLb4TkorKStrniKgTcxG9xNqQjyxm0S6CICUp9gn8PQ== dependencies: "@babel/preset-flow" "^7.12.1" "@babel/preset-react" "^7.12.10" "@pmmmwh/react-refresh-webpack-plugin" "^0.5.1" - "@storybook/addons" "6.4.19" - "@storybook/core" "6.4.19" - "@storybook/core-common" "6.4.19" + "@storybook/addons" "6.4.21" + "@storybook/core" "6.4.21" + "@storybook/core-common" "6.4.21" "@storybook/csf" "0.0.2--canary.87bc651.0" - "@storybook/node-logger" "6.4.19" + "@storybook/node-logger" "6.4.21" "@storybook/react-docgen-typescript-plugin" "1.0.2-canary.253f8c1.0" "@storybook/semver" "^7.3.2" - "@storybook/store" "6.4.19" + "@storybook/store" "6.4.21" "@types/webpack-env" "^1.16.0" babel-plugin-add-react-displayname "^0.0.5" babel-plugin-named-asset-import "^0.3.1" @@ -4680,12 +4605,12 @@ ts-dedent "^2.0.0" webpack "4" -"@storybook/router@6.4.19": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/router/-/router-6.4.19.tgz#e653224dd9a521836bbd2610f604f609a2c77af2" - integrity sha512-KWWwIzuyeEIWVezkCihwY2A76Il9tUNg0I410g9qT7NrEsKyqXGRYOijWub7c1GGyNjLqz0jtrrehtixMcJkuA== +"@storybook/router@6.4.21": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/router/-/router-6.4.21.tgz#a18172601907918c1442a8a125c9c625d798d09b" + integrity sha512-otn3xYc017SNebeA95xLQ7P6elfyu9541QteXbLR5gFvrT+MB/8zMRZrVuD7n1xwpBgazlonzAdODC736Be9jQ== dependencies: - "@storybook/client-logger" "6.4.19" + "@storybook/client-logger" "6.4.21" core-js "^3.8.2" fast-deep-equal "^3.1.3" global "^4.4.0" @@ -4705,13 +4630,13 @@ core-js "^3.6.5" find-up "^4.1.0" -"@storybook/source-loader@6.4.19": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/source-loader/-/source-loader-6.4.19.tgz#24d134750bc41a13255b2b4a545f2d82613f004f" - integrity sha512-XqTsqddRglvfW7mhyjwoqd/B8L6samcBehhO0OEbsFp6FPWa9eXuObCxtRYIcjcSIe+ksbW3D/54ppEs1L/g1Q== +"@storybook/source-loader@6.4.21": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/source-loader/-/source-loader-6.4.21.tgz#6145c3dcede3bfbd1159755c6aad8722cadd0b5f" + integrity sha512-rRu3uWla1c73F5FKl7mdkIKcj+Of4jzIT7aHycS0j6rYKwbGpsptLgxbpMUaEdNHjSDyAzSM6Mj5XcnE5rC8nQ== dependencies: - "@storybook/addons" "6.4.19" - "@storybook/client-logger" "6.4.19" + "@storybook/addons" "6.4.21" + "@storybook/client-logger" "6.4.21" "@storybook/csf" "0.0.2--canary.87bc651.0" core-js "^3.8.2" estraverse "^5.2.0" @@ -4721,14 +4646,14 @@ prettier ">=2.2.1 <=2.3.0" regenerator-runtime "^0.13.7" -"@storybook/store@6.4.19": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/store/-/store-6.4.19.tgz#bf4031499f4d49909d7b691c03cc5ef1ec00ad74" - integrity sha512-N9/ZjemRHGfT3InPIbqQqc6snkcfnf3Qh9oOr0smbfaVGJol//KOX65kzzobtzFcid0WxtTDZ3HmgFVH+GvuhQ== +"@storybook/store@6.4.21": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/store/-/store-6.4.21.tgz#e34d6e0194cca5eb74a7c1d06fb0151625975576" + integrity sha512-j0cMo3JUs6yGc1cJi29kkzZK2zCGmx03BCMtMflnqNnMVnhuIF2iOTnwj4z01keL8/7hosUAz0OJxhvIV0JHIg== dependencies: - "@storybook/addons" "6.4.19" - "@storybook/client-logger" "6.4.19" - "@storybook/core-events" "6.4.19" + "@storybook/addons" "6.4.21" + "@storybook/client-logger" "6.4.21" + "@storybook/core-events" "6.4.21" "@storybook/csf" "0.0.2--canary.87bc651.0" core-js "^3.8.2" fast-deep-equal "^3.1.3" @@ -4742,15 +4667,15 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/theming@6.4.19", "@storybook/theming@^6.0.0": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-6.4.19.tgz#0a6834d91e0b0eadbb10282e7fb2947e2bbf9e9e" - integrity sha512-V4pWmTvAxmbHR6B3jA4hPkaxZPyExHvCToy7b76DpUTpuHihijNDMAn85KhOQYIeL9q14zP/aiz899tOHsOidg== +"@storybook/theming@6.4.21", "@storybook/theming@^6.0.0": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-6.4.21.tgz#ea1a33be70c654cb31e5b38fae93f72171e88ef8" + integrity sha512-7pLNwmqbyqCeHXzjsacI69IdJcAZr6zoZA84iGqx+Na32OI8wtIpFczbwuYpVPN2jzgRYp23CgIv1Gz27yk/zw== dependencies: "@emotion/core" "^10.1.1" "@emotion/is-prop-valid" "^0.8.6" "@emotion/styled" "^10.0.27" - "@storybook/client-logger" "6.4.19" + "@storybook/client-logger" "6.4.21" core-js "^3.8.2" deep-object-diff "^1.1.0" emotion-theming "^10.0.27" @@ -4760,21 +4685,21 @@ resolve-from "^5.0.0" ts-dedent "^2.0.0" -"@storybook/ui@6.4.19": - version "6.4.19" - resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-6.4.19.tgz#1fb9f6cd875ee4937cf9d81ca45d5156800176d1" - integrity sha512-gFwdn5LA2U6oQ4bfUFLyHZnNasGQ01YVdwjbi+l6yjmnckBNtZfJoVTZ1rzGUbxSE9rK48InJRU+latTsr7xAg== +"@storybook/ui@6.4.21": + version "6.4.21" + resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-6.4.21.tgz#03b0ba66663f70b706ca29481bedf08a468dad3d" + integrity sha512-jjEEFDm8PAzscn5dN+3YJap9033ce98YYC9FCQVF5sB41CIwI0PD5LUafxWbaxQdL+t/ZlRYXNz3FLNFHMwzcQ== dependencies: "@emotion/core" "^10.1.1" - "@storybook/addons" "6.4.19" - "@storybook/api" "6.4.19" - "@storybook/channels" "6.4.19" - "@storybook/client-logger" "6.4.19" - "@storybook/components" "6.4.19" - "@storybook/core-events" "6.4.19" - "@storybook/router" "6.4.19" + "@storybook/addons" "6.4.21" + "@storybook/api" "6.4.21" + "@storybook/channels" "6.4.21" + "@storybook/client-logger" "6.4.21" + "@storybook/components" "6.4.21" + "@storybook/core-events" "6.4.21" + "@storybook/router" "6.4.21" "@storybook/semver" "^7.3.2" - "@storybook/theming" "6.4.19" + "@storybook/theming" "6.4.21" copy-to-clipboard "^3.3.1" core-js "^3.8.2" core-js-pure "^3.8.2" @@ -5028,94 +4953,94 @@ dependencies: source-map-support "^0.5.21" -"@swc/core-android-arm-eabi@1.2.161": - version "1.2.161" - resolved "https://registry.yarnpkg.com/@swc/core-android-arm-eabi/-/core-android-arm-eabi-1.2.161.tgz#3a723984a51705a6360fefc7c7efb5a7681c8f3f" - integrity sha512-SYm08FusdMo70JaKEYE7GpJHVp020iqPL3FjYEmQ+iyhc0Id8RlMeFt7ZtIj0aYHPKudR3GljzG5FVJXmm1Iuw== +"@swc/core-android-arm-eabi@1.2.165": + version "1.2.165" + resolved "https://registry.yarnpkg.com/@swc/core-android-arm-eabi/-/core-android-arm-eabi-1.2.165.tgz#8fb8a8f15cd0a1d68b0d4056e03701f4027bed0b" + integrity sha512-DjX1/5qElHOnlrqhefcZsD1LEspJWDLpW31SKv9cNT2T13U76MkcrHi5ePI50NhG/bWDpHuWFWfuEmgcU+mwHA== -"@swc/core-android-arm64@1.2.161": - version "1.2.161" - resolved "https://registry.yarnpkg.com/@swc/core-android-arm64/-/core-android-arm64-1.2.161.tgz#4d9e1b2d6a42ee767fda8ee7d46f059ab001ff0b" - integrity sha512-zk+GgVGKwIO9PsUcLZ7tG1XGGBJ/xyv5Or9/R0rQArBTGS5mvSK4d+9XrItQph8i3ECZhik3PuexmR7us6ysCw== +"@swc/core-android-arm64@1.2.165": + version "1.2.165" + resolved "https://registry.yarnpkg.com/@swc/core-android-arm64/-/core-android-arm64-1.2.165.tgz#14a2f0c3445929ac607a89e389c5dd8754a9fce4" + integrity sha512-lPgG+td9/JlV3ZQiHZtdtqn+lZzGly+s/VQXfnaXgaHQE4JjWU2B4rhTVkVOQxEYbA/Cd9pszNWWxjJSrXytMA== -"@swc/core-darwin-arm64@1.2.161": - version "1.2.161" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.2.161.tgz#bdef41c63d905a1da094c6756f09ca3ff19644d1" - integrity sha512-pf65TWy9oFkWCRzRq16Ec6rglurdajWT5tv1E93Kh4izEFLvKN/Mp+8EMnqOcoAn+HEtjzp2R6NosBruV/d1Ww== +"@swc/core-darwin-arm64@1.2.165": + version "1.2.165" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.2.165.tgz#296365622287d5019d193480ee7deafc0c1ff94f" + integrity sha512-O6eFbCD4lZ4ZW2E1a4CsIo3zVTI5Tu2MpTbaVan7LvYyv2RK+tot9xjysVbOx/1nfgYDym9JLHU9gY/ayrdOtA== -"@swc/core-darwin-x64@1.2.161": - version "1.2.161" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.2.161.tgz#96980fb8c3207f8305457864241c4a942b4d9903" - integrity sha512-QdgsY+BjYO0ngSIwR/xZn6W3iP0E/+of38Afon3maANDiKzvzsvyZm4IVTznOaxG1ZUJ/q1oKeRV/DcW7QvHiw== +"@swc/core-darwin-x64@1.2.165": + version "1.2.165" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.2.165.tgz#4e80d654287f65ea1cb842ca213692ebcaa0cac0" + integrity sha512-R1WRiDnkmXWBkyNGR09WDq+mCFIujhdUs3e4QiHJih1HY2rKGXU0SZKoqaBTjeVerk/IYXaEnZM3Bx7sb0oyEQ== -"@swc/core-freebsd-x64@1.2.161": - version "1.2.161" - resolved "https://registry.yarnpkg.com/@swc/core-freebsd-x64/-/core-freebsd-x64-1.2.161.tgz#8b41d589a04c1236ab0d6163cca548574925cae4" - integrity sha512-yApHncnlQNQINxxcz+Y+svlrdU3d/yaJ769eoThIQXsZTL0Il3gnhhkjJkMEigLTexpQZQOGjgYnV9HKkpYqkw== +"@swc/core-freebsd-x64@1.2.165": + version "1.2.165" + resolved "https://registry.yarnpkg.com/@swc/core-freebsd-x64/-/core-freebsd-x64-1.2.165.tgz#7f37255bad9958ef90e6367b7f3f9a329f913983" + integrity sha512-bL7Jxy2is/+YLZedQsF5a7swpbq9RGsvtXJmx5Bi0JqaavqWpbICmQtTr9I2S97taw16S/k8vOJ6DPzEvgJWWQ== -"@swc/core-linux-arm-gnueabihf@1.2.161": - version "1.2.161" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.2.161.tgz#4d475d57fdccaab900d88195e2b4e1b990e45e21" - integrity sha512-DGSKqKSBQ42mAMmPhWkfgzXaci4RU0XgmnO1bFVkl8Yw9TaxBBBeCbLIBYJik4DehOOYic9gtXZIfEs90+oc2w== +"@swc/core-linux-arm-gnueabihf@1.2.165": + version "1.2.165" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.2.165.tgz#bd576c091b0d76a8250d540b4d570cd12cfd9d2d" + integrity sha512-6m+X7a0iw5G97WfkJBKNy7/KfSEivRVRHbWB4VvJgRanNIO4tb//LxlUJFn58frQJg+H7bMFyOXhDJ/taRYAyg== -"@swc/core-linux-arm64-gnu@1.2.161", "@swc/core-linux-arm64-gnu@^1.2.136": - version "1.2.161" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.2.161.tgz#e528dd661ed85f9069a5792536a2f784cab377f8" - integrity sha512-wdEPjBLuf0bUMafURrUN11MOGs7PHnedWOFAfvyRuNf4HdfwbS2nYDpFCL4mklN8BuprxvRFWfoA+ROigexK4g== +"@swc/core-linux-arm64-gnu@1.2.165", "@swc/core-linux-arm64-gnu@^1.2.136": + version "1.2.165" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.2.165.tgz#9f3c6e4cdffa2084aa8ec24c36f5d1e69b408b78" + integrity sha512-4roZScf8UZLhKTYBEqqbTNasZPqs3zDA2LF+SJuc4eFUGJyyrl9KgeVC08vTMtkAI47EebT15FgcQ+9LhtMlkg== -"@swc/core-linux-arm64-musl@1.2.161", "@swc/core-linux-arm64-musl@^1.2.136": - version "1.2.161" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.2.161.tgz#928dc578ba5cd8bb26decee62d150c565a09f1f5" - integrity sha512-EPwDDlAIchv1FG1Vc2ArUGsX2b87LSEXHjF59TuOj+oXOANHnFRQa/28wHpeMYN5lHYmyjMplfn37XYLMo8BDw== +"@swc/core-linux-arm64-musl@1.2.165", "@swc/core-linux-arm64-musl@^1.2.136": + version "1.2.165" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.2.165.tgz#a99234b7c543b692d28dc66dbceec45cd3597a48" + integrity sha512-xM5MDECEnptdsClSitld/f+azudbkeT8nNCkXCP+vFsurex9ISJ2DCWTvw7hgpkFElVv/qFEagDCucgESHcUzw== -"@swc/core-linux-x64-gnu@1.2.161", "@swc/core-linux-x64-gnu@^1.2.136": - version "1.2.161" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.2.161.tgz#c13866ef8a1eade5bf9b9b0f0be4b90d69970f10" - integrity sha512-UE+8n2PLCojxywQd1nPbMcus/3zLQjg05Oozrvl1IkHBssk89tk2GhLujUwbFS+MoGFPKAmL+wT+9lXHavK7Og== +"@swc/core-linux-x64-gnu@1.2.165", "@swc/core-linux-x64-gnu@^1.2.136": + version "1.2.165" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.2.165.tgz#646b0dfaf673ae7d6eeace5a8b62a7d1d6b82b45" + integrity sha512-MTEhtso3De+HP+qZKZw1DfPTbngn4ms3+7XG6jqUs6CKpmLTJkvnpPJ5swlXGvpKyDq367O2Aicft52Uoaoq+Q== -"@swc/core-linux-x64-musl@1.2.161", "@swc/core-linux-x64-musl@^1.2.136": - version "1.2.161" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.2.161.tgz#dd171b5357a5e34ece729e4aba528c15cfe4727b" - integrity sha512-mkshCdRhS5s1w1Koph/kS8EJVEmrq+/p4iLsLDozXi1RL16lzk5SYn4ppmzF/Zj9OpgJ+Nzk7kNcZMMJMVIwqw== +"@swc/core-linux-x64-musl@1.2.165", "@swc/core-linux-x64-musl@^1.2.136": + version "1.2.165" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.2.165.tgz#42fc808aa176c6615064e6fd171f0ea6775105bd" + integrity sha512-T2ZSApYoK4VTMTTqhUKcrNcv68ChoAOZDKUNfOik8zXcN1pMttus/VaqfZjxT2+orviRTD5Bkdsc3UvrhHqHnw== -"@swc/core-win32-arm64-msvc@1.2.161": - version "1.2.161" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.2.161.tgz#e8e7cb5bac7319525ba297e4a2819dafc44f98d6" - integrity sha512-5ZMhPSeFJO+h0Ejoq766S25VvrooUW0RdhfcG2u7OFqhdlTXHlvryL7jdf6tILltmJxNWeAGrNE8YI+ARolTeQ== +"@swc/core-win32-arm64-msvc@1.2.165": + version "1.2.165" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.2.165.tgz#932056556bb5fcc062075a3cbed9281961abd170" + integrity sha512-Icg6dtQpQZKjAUG6kME4WuYpG6cqZjUzzmiZPQ9wWOw7wY8EYFPwC2ZjTg8KwbOJFkAKN6cjk3O2IAFsOWuUGg== -"@swc/core-win32-ia32-msvc@1.2.161": - version "1.2.161" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.2.161.tgz#938e66e731f2d72b3dcf8af963c36a807f46286b" - integrity sha512-/c+L8bYCjg8pbx3Jbgx9Cns9nlLUpB4CmugfIdlW+2EdncyZyKu+u+D0egnOjvtlxe8BNw0889oH1Lv4p7KuhA== +"@swc/core-win32-ia32-msvc@1.2.165": + version "1.2.165" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.2.165.tgz#66660c20beec35b777e9bade6c4b9ef4b8eb4e6d" + integrity sha512-ldrTYG1zydyJP54YmYie3VMGcU7gCT2dZ7S1uZ1Tab+10GzZtdvePGGlQ/39jJVpr36/DZ34L6PsjwQkPG7AOw== -"@swc/core-win32-x64-msvc@1.2.161": - version "1.2.161" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.2.161.tgz#f95a8ebe77fe35a1b9e87b52628b870a706b43be" - integrity sha512-FXzZXf+kXvqgZFd+dIzD8Pcc22yejm/XNvpGTy9HZHWYLvlif+QSXrNgvX1oyMWZYT+NCVHwebKjS9FTnTMi9w== +"@swc/core-win32-x64-msvc@1.2.165": + version "1.2.165" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.2.165.tgz#ea864711b177ce20bf9028ba55d13c531897afae" + integrity sha512-gi2ZELsRLC3RfQFk+qwccL0VZ6ZgprMOP/phCVd8sA2MZsVVrFu6QBEJNGO0Z6hEqQ2BWrva6+cMF/eHSzuAsQ== -"@swc/core@^1.2.119", "@swc/core@^1.2.146": - version "1.2.161" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.2.161.tgz#bbc79daeb33c1436df8eac58994dc0b73480a02f" - integrity sha512-RXv1y2HDqZ4gAjdvqV0KL1Oms8vUkDgXRU5SPOEa3zMzMDNKHvRfoiBk4ZyaGzhGcr0zflqT4EADKgTB8RFNsw== +"@swc/core@^1.2.119", "@swc/core@^1.2.152": + version "1.2.165" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.2.165.tgz#bb12edd47ce556a0fd3405869cfe7c245957caf9" + integrity sha512-+Z/FquMEUQLOOVWJY4B2QnHvcAIgBKKJMVtVQLVlIwfC4Ez8OvzGPTfL1W4ixYlUoIaTbAd1956kjBXalr4wEg== optionalDependencies: - "@swc/core-android-arm-eabi" "1.2.161" - "@swc/core-android-arm64" "1.2.161" - "@swc/core-darwin-arm64" "1.2.161" - "@swc/core-darwin-x64" "1.2.161" - "@swc/core-freebsd-x64" "1.2.161" - "@swc/core-linux-arm-gnueabihf" "1.2.161" - "@swc/core-linux-arm64-gnu" "1.2.161" - "@swc/core-linux-arm64-musl" "1.2.161" - "@swc/core-linux-x64-gnu" "1.2.161" - "@swc/core-linux-x64-musl" "1.2.161" - "@swc/core-win32-arm64-msvc" "1.2.161" - "@swc/core-win32-ia32-msvc" "1.2.161" - "@swc/core-win32-x64-msvc" "1.2.161" + "@swc/core-android-arm-eabi" "1.2.165" + "@swc/core-android-arm64" "1.2.165" + "@swc/core-darwin-arm64" "1.2.165" + "@swc/core-darwin-x64" "1.2.165" + "@swc/core-freebsd-x64" "1.2.165" + "@swc/core-linux-arm-gnueabihf" "1.2.165" + "@swc/core-linux-arm64-gnu" "1.2.165" + "@swc/core-linux-arm64-musl" "1.2.165" + "@swc/core-linux-x64-gnu" "1.2.165" + "@swc/core-linux-x64-musl" "1.2.165" + "@swc/core-win32-arm64-msvc" "1.2.165" + "@swc/core-win32-ia32-msvc" "1.2.165" + "@swc/core-win32-x64-msvc" "1.2.165" "@testing-library/dom@^8.0.0": - version "8.12.0" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.12.0.tgz#fef5e545533fb084175dda6509ee71d7d2f72e23" - integrity sha512-rBrJk5WjI02X1edtiUcZhgyhgBhiut96r5Jp8J5qktKdcvLcZpKDW8i2hkGMMItxrghjXuQ5AM6aE0imnFawaw== + version "8.13.0" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.13.0.tgz#bc00bdd64c7d8b40841e27a70211399ad3af46f5" + integrity sha512-9VHgfIatKNXQNaZTtLnalIy0jNZzY35a4S3oi08YAt9Hv1VsfZ/DfA45lM8D/UhtHBGJ4/lGwp0PZkVndRkoOQ== dependencies: "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.12.5" @@ -5127,9 +5052,9 @@ pretty-format "^27.0.2" "@testing-library/jest-dom@^5.16.2": - version "5.16.3" - resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.16.3.tgz#b76851a909586113c20486f1679ffb4d8ec27bfa" - integrity sha512-u5DfKj4wfSt6akfndfu1eG06jsdyA/IUrlX2n3pyq5UXgXMhXY+NJb8eNK/7pqPWAhCKsCGWDdDO0zKMKAYkEA== + version "5.16.4" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.16.4.tgz#938302d7b8b483963a3ae821f1c0808f872245cd" + integrity sha512-Gy+IoFutbMQcky0k+bqqumXZ1cTGswLsFqmNLzNdSKkU9KGV2u9oXhukCbbJ9/LRPKiqwxEE8VpV/+YZlfkPUA== dependencies: "@babel/runtime" "^7.9.2" "@types/testing-library__jest-dom" "^5.9.1" @@ -5279,7 +5204,7 @@ dependencies: "@types/d3-selection" "^2" -"@types/d3-interpolate@^2": +"@types/d3-interpolate@^2", "@types/d3-interpolate@^2.0.0": version "2.0.2" resolved "https://registry.yarnpkg.com/@types/d3-interpolate/-/d3-interpolate-2.0.2.tgz#78eddf7278b19e48e8652603045528d46897aba0" integrity sha512-lElyqlUfIPyWG/cD475vl6msPL4aMU7eJvx1//Q177L8mdXoVPFl1djIESF2FKnc0NyaHvQlJpWwKJYwAhUoCw== @@ -5291,7 +5216,7 @@ resolved "https://registry.yarnpkg.com/@types/d3-path/-/d3-path-2.0.2.tgz#6052f38f6186319769dfabab61b5514b0e02c75c" integrity sha512-3YHpvDw9LzONaJzejXLOwZ3LqwwkoXb9LI2YN7Hbd6pkGo5nIlJ09ul4bQhBN4hQZJKmUpX8HkVqbzgUKY48cg== -"@types/d3-scale@^3.2.2": +"@types/d3-scale@^3.0.0", "@types/d3-scale@^3.2.2": version "3.3.2" resolved "https://registry.yarnpkg.com/@types/d3-scale/-/d3-scale-3.3.2.tgz#18c94e90f4f1c6b1ee14a70f14bfca2bd1c61d06" integrity sha512-gGqr7x1ost9px3FvIfUMi5XA/F/yAf4UkUDtdQhpH92XCT0Oa7zkkRzY61gPVJq+DxpHn/btouw5ohWkbBsCzQ== @@ -5340,6 +5265,11 @@ "@types/d3-interpolate" "^2" "@types/d3-selection" "^2" +"@types/dom4@^2.0.1": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@types/dom4/-/dom4-2.0.2.tgz#6495303f049689ce936ed328a3e5ede9c51408ee" + integrity sha512-Rt4IC1T7xkCWa0OG1oSsPa0iqnxlDeQqKXZAHrQGLb7wFGncWm85MaxKUjAGejOrUynOgWlFi4c6S6IyJwoK4g== + "@types/eslint-scope@^3.7.3": version "3.7.3" resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.3.tgz#125b88504b61e3c8bc6f870882003253005c3224" @@ -5385,6 +5315,11 @@ "@types/qs" "*" "@types/serve-static" "*" +"@types/faker@^5.5.8": + version "5.5.9" + resolved "https://registry.yarnpkg.com/@types/faker/-/faker-5.5.9.tgz#588ede92186dc557bff8341d294335d50d255f0c" + integrity sha512-uCx6mP3UY5SIO14XlspxsGjgaemrxpssJI0Ol+GfhxtcKpv9pgRZYsS4eeKeHVLje6Qtc8lGszuBI461+gVZBA== + "@types/fs-extra@^8.0.1": version "8.1.2" resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-8.1.2.tgz#7125cc2e4bdd9bd2fc83005ffdb1d0ba00cca61f" @@ -5493,10 +5428,15 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= -"@types/lodash@^4.14.168", "@types/lodash@^4.14.180": - version "4.14.180" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.180.tgz#4ab7c9ddfc92ec4a887886483bc14c79fb380670" - integrity sha512-XOKXa1KIxtNXgASAnwj7cnttJxS4fksBRywK/9LzRV5YxrF80BXZIGeQSuoESQ/VkUj30Ae0+YcuHc15wJCB2g== +"@types/lodash@^4.14.168": + version "4.14.181" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.181.tgz#d1d3740c379fda17ab175165ba04e2d03389385d" + integrity sha512-n3tyKthHJbkiWhDZs3DkhkCzt2MexYHXlX0td5iMplyfwketaOeKboEVBqzceH7juqvEg3q5oUoBFxSLu7zFag== + +"@types/lodash@^4.14.171": + version "4.14.182" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.182.tgz#05301a4d5e62963227eaafe0ce04dd77c54ea5c2" + integrity sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q== "@types/mdast@^3.0.0": version "3.0.10" @@ -5569,9 +5509,9 @@ integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== "@types/prettier@^2.1.5": - version "2.4.4" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.4.tgz#5d9b63132df54d8909fce1c3f8ca260fdd693e17" - integrity sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA== + version "2.6.0" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.6.0.tgz#efcbd41937f9ae7434c714ab698604822d890759" + integrity sha512-G/AdOadiZhnJp0jXCaBQU449W2h716OW/EoXeYkCytxKL06X1WCXB4DZpp8TpZ8eyIJVS1cw4lrlkkSYU21cDw== "@types/pretty-hrtime@^1.0.0": version "1.0.1" @@ -5584,9 +5524,9 @@ integrity sha512-ZTaqn/qSqUuAq1YwvOFQfVW1AR/oQJlLSZVustdjwI+GZ8kr0MSHBj0tsXPW1EqHubx50gtBEjbPGsdZwQwCjQ== "@types/prop-types@*": - version "15.7.4" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" - integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ== + version "15.7.5" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== "@types/q@^1.5.1": version "1.5.5" @@ -5617,13 +5557,20 @@ dependencies: "@types/react" "*" -"@types/react-dom@>=16.9.0", "@types/react-dom@^17.0.0": - version "17.0.14" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.14.tgz#c8f917156b652ddf807711f5becbd2ab018dea9f" - integrity sha512-H03xwEP1oXmSfl3iobtmQ/2dHF5aBHr8aUMwyGZya6OW45G+xtdzmq6HkncefiBt5JU8DVyaWl/nWZbjZCnzAQ== +"@types/react-dom@>=16.9.0": + version "18.0.0" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.0.tgz#b13f8d098e4b0c45df4f1ed123833143b0c71141" + integrity sha512-49897Y0UiCGmxZqpC8Blrf6meL8QUla6eb+BBhn69dTXlmuOlzkfr7HHY/O8J25e1lTUMs+YYxSlVDAaGHCOLg== dependencies: "@types/react" "*" +"@types/react-dom@^17.0.0": + version "17.0.15" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.15.tgz#f2c8efde11521a4b7991e076cb9c70ba3bb0d156" + integrity sha512-Tr9VU9DvNoHDWlmecmcsE5ZZiUkYx+nKBzum4Oxe1K0yJVyBlfbq7H3eXjxXqJczBKqPGq3EgfTru4MgKb9+Yw== + dependencies: + "@types/react" "^17" + "@types/react-router-dom@5.3.1": version "5.3.1" resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.1.tgz#76700ccce6529413ec723024b71f01fc77a4a980" @@ -5662,7 +5609,16 @@ dependencies: "@types/react" "*" -"@types/react@*": +"@types/react@*", "@types/react@>=16.9.0": + version "18.0.1" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.1.tgz#1b2e02fb7613212518733946e49fb963dfc66e19" + integrity sha512-VnWlrVgG0dYt+NqlfMI0yUYb8Rdl4XUROyH+c6gq/iFCiZ805Vi//26UW38DHnxQkbDhnrIWTBiy6oKZqL11cw== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/react@17.0.39": version "17.0.39" resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.39.tgz#d0f4cde092502a6db00a1cded6e6bf2abb7633ce" integrity sha512-UVavlfAxDd/AgAacMa60Azl7ygyQNRwC/DsHZmKgNvPmRR5p70AJ5Q9EAmL2NWOJmeV+vVUI4IAP7GZrN8h8Ug== @@ -5671,23 +5627,19 @@ "@types/scheduler" "*" csstype "^3.0.2" -"@types/react@17.0.30": - version "17.0.30" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.30.tgz#2f8e6f5ab6415c091cc5e571942ee9064b17609e" - integrity sha512-3Dt/A8gd3TCXi2aRe84y7cK1K8G+N9CZRDG8kDGguOKa0kf/ZkSwTmVIDPsm/KbQOVMaDJXwhBtuOXxqwdpWVg== +"@types/react@^17", "@types/react@^17.0.0": + version "17.0.44" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.44.tgz#c3714bd34dd551ab20b8015d9d0dbec812a51ec7" + integrity sha512-Ye0nlw09GeMp2Suh8qoOv0odfgCoowfM/9MG6WeRD60Gq9wS90bdkdRtYbRkNhXOpG4H+YXGvj4wOWhAC0LJ1g== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" csstype "^3.0.2" -"@types/react@>=16.9.0", "@types/react@^17.0.0": - version "17.0.43" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.43.tgz#4adc142887dd4a2601ce730bc56c3436fdb07a55" - integrity sha512-8Q+LNpdxf057brvPu1lMtC5Vn7J119xrP1aq4qiaefNioQUYANF/CYeK4NsKorSZyUGJ66g0IM+4bbjwx45o2A== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" +"@types/resize-observer-browser@^0.1.6": + version "0.1.7" + resolved "https://registry.yarnpkg.com/@types/resize-observer-browser/-/resize-observer-browser-0.1.7.tgz#294aaadf24ac6580b8fbd1fe3ab7b59fe85f9ef3" + integrity sha512-G9eN0Sn0ii9PWQ3Vl72jDPgeJwRWhv2Qk/nQkJuWmRmOB4HX3/BhD5SE1dZs/hzPZL/WKnvF0RHdTSG54QJFyg== "@types/resolve@1.17.1": version "1.17.1" @@ -5761,9 +5713,9 @@ "@types/jest" "*" "@types/uglify-js@*": - version "3.13.1" - resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.1.tgz#5e889e9e81e94245c75b6450600e1c5ea2878aea" - integrity sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ== + version "3.13.2" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.2.tgz#1044c1713fb81cb1ceef29ad8a9ee1ce08d690ef" + integrity sha512-/xFrPIo+4zOeNGtVMbf9rUm0N+i4pDf1ynExomqtokIJmVzR3962lJ1UE+MmexMkA0cmN9oTzg5Xcbwge0Ij2Q== dependencies: source-map "^0.6.1" @@ -5803,7 +5755,7 @@ anymatch "^3.0.0" source-map "^0.6.0" -"@types/ws@^8.2.2": +"@types/ws@^8.5.1": version "8.5.3" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== @@ -5830,9 +5782,9 @@ "@types/yargs-parser" "*" "@types/yauzl@^2.9.1": - version "2.9.2" - resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.9.2.tgz#c48e5d56aff1444409e39fa164b0b4d4552a7b7a" - integrity sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA== + version "2.10.0" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" + integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== dependencies: "@types/node" "*" @@ -5869,13 +5821,13 @@ debug "^4.3.2" "@typescript-eslint/parser@^5.0.0": - version "5.17.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.17.0.tgz#7def77d5bcd8458d12d52909118cf3f0a45f89d5" - integrity sha512-aRzW9Jg5Rlj2t2/crzhA2f23SIYFlF9mchGudyP0uiD6SenIxzKoLjwzHbafgHn39dNV/TV7xwQkLfFTZlJ4ig== + version "5.19.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.19.0.tgz#05e587c1492868929b931afa0cb5579b0f728e75" + integrity sha512-yhktJjMCJX8BSBczh1F/uY8wGRYrBeyn84kH6oyqdIJwTGKmzX5Qiq49LRQ0Jh0LXnWijEziSo6BRqny8nqLVQ== dependencies: - "@typescript-eslint/scope-manager" "5.17.0" - "@typescript-eslint/types" "5.17.0" - "@typescript-eslint/typescript-estree" "5.17.0" + "@typescript-eslint/scope-manager" "5.19.0" + "@typescript-eslint/types" "5.19.0" + "@typescript-eslint/typescript-estree" "5.19.0" debug "^4.3.2" "@typescript-eslint/parser@~5.10.0": @@ -5904,13 +5856,13 @@ "@typescript-eslint/types" "5.10.2" "@typescript-eslint/visitor-keys" "5.10.2" -"@typescript-eslint/scope-manager@5.17.0": - version "5.17.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.17.0.tgz#4cea7d0e0bc0e79eb60cad431c89120987c3f952" - integrity sha512-062iCYQF/doQ9T2WWfJohQKKN1zmmXVfAcS3xaiialiw8ZUGy05Em6QVNYJGO34/sU1a7a+90U3dUNfqUDHr3w== +"@typescript-eslint/scope-manager@5.19.0": + version "5.19.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.19.0.tgz#97e59b0bcbcb54dbcdfba96fc103b9020bbe9cb4" + integrity sha512-Fz+VrjLmwq5fbQn5W7cIJZ066HxLMKvDEmf4eu1tZ8O956aoX45jAuBB76miAECMTODyUxH61AQM7q4/GOMQ5g== dependencies: - "@typescript-eslint/types" "5.17.0" - "@typescript-eslint/visitor-keys" "5.17.0" + "@typescript-eslint/types" "5.19.0" + "@typescript-eslint/visitor-keys" "5.19.0" "@typescript-eslint/type-utils@5.10.2": version "5.10.2" @@ -5931,10 +5883,10 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.10.2.tgz#604d15d795c4601fffba6ecb4587ff9fdec68ce8" integrity sha512-Qfp0qk/5j2Rz3p3/WhWgu4S1JtMcPgFLnmAKAW061uXxKSa7VWKZsDXVaMXh2N60CX9h6YLaBoy9PJAfCOjk3w== -"@typescript-eslint/types@5.17.0": - version "5.17.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.17.0.tgz#861ec9e669ffa2aa9b873dd4d28d9b1ce26d216f" - integrity sha512-AgQ4rWzmCxOZLioFEjlzOI3Ch8giDWx8aUDxyNw9iOeCvD3GEYAB7dxWGQy4T/rPVe8iPmu73jPHuaSqcjKvxw== +"@typescript-eslint/types@5.19.0": + version "5.19.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.19.0.tgz#12d3d600d754259da771806ee8b2c842d3be8d12" + integrity sha512-zR1ithF4Iyq1wLwkDcT+qFnhs8L5VUtjgac212ftiOP/ZZUOCuuF2DeGiZZGQXGoHA50OreZqLH5NjDcDqn34w== "@typescript-eslint/typescript-estree@5.10.1": version "5.10.1" @@ -5962,13 +5914,13 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.17.0": - version "5.17.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.17.0.tgz#a7cba7dfc8f9cc2ac78c18584e684507df4f2488" - integrity sha512-X1gtjEcmM7Je+qJRhq7ZAAaNXYhTgqMkR10euC4Si6PIjb+kwEQHSxGazXUQXFyqfEXdkGf6JijUu5R0uceQzg== +"@typescript-eslint/typescript-estree@5.19.0": + version "5.19.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.19.0.tgz#fc987b8f62883f9ea6a5b488bdbcd20d33c0025f" + integrity sha512-dRPuD4ocXdaE1BM/dNR21elSEUPKaWgowCA0bqJ6YbYkvtrPVEvZ+zqcX5a8ECYn3q5iBSSUcBBD42ubaOp0Hw== dependencies: - "@typescript-eslint/types" "5.17.0" - "@typescript-eslint/visitor-keys" "5.17.0" + "@typescript-eslint/types" "5.19.0" + "@typescript-eslint/visitor-keys" "5.19.0" debug "^4.3.2" globby "^11.0.4" is-glob "^4.0.3" @@ -6003,12 +5955,12 @@ "@typescript-eslint/types" "5.10.2" eslint-visitor-keys "^3.0.0" -"@typescript-eslint/visitor-keys@5.17.0": - version "5.17.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.17.0.tgz#52daae45c61b0211b4c81b53a71841911e479128" - integrity sha512-6K/zlc4OfCagUu7Am/BD5k8PSWQOgh34Nrv9Rxe2tBzlJ7uOeJ/h7ugCGDCeEZHT6k2CJBhbk9IsbkPI0uvUkA== +"@typescript-eslint/visitor-keys@5.19.0": + version "5.19.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.19.0.tgz#c84ebc7f6c744707a361ca5ec7f7f64cd85b8af6" + integrity sha512-Ym7zZoMDZcAKWsULi2s7UMLREdVQdScPQ/fKWMYefarCztWlHPFVJo8racf8R0Gc8FAEJ2eD4of8As1oFtnQlQ== dependencies: - "@typescript-eslint/types" "5.17.0" + "@typescript-eslint/types" "5.19.0" eslint-visitor-keys "^3.0.0" "@vegaprotocol/smart-contracts-sdk@^1.6.0": @@ -6029,35 +5981,35 @@ url-parse "^1.4.3" whatwg-fetch "^3.0.0" -"@walletconnect/browser-utils@^1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@walletconnect/browser-utils/-/browser-utils-1.7.6.tgz#c9a2516cf8d475067345f854aa81aa22a71d0e0d" - integrity sha512-7dZkvybjxIt59YdGqMCft8ydghlR7axSzZVW3Oy6NOYdq0ztZGCV/hpUcQ3pgC3uhpn93XqVPrBAyKLqt+/u5A== +"@walletconnect/browser-utils@^1.7.7": + version "1.7.7" + resolved "https://registry.yarnpkg.com/@walletconnect/browser-utils/-/browser-utils-1.7.7.tgz#4ae0db1ddf49be179ea556af842db3b7afce973d" + integrity sha512-6Mt7DSPaG0FKnHhuVzkU1hgtsCpGvl2nfbfRytLpyDY05iWMzMg5uK1DzV+0k4hCt9pVli0JVNt6dh9a6Xm94w== dependencies: "@walletconnect/safe-json" "1.0.0" - "@walletconnect/types" "^1.7.6" + "@walletconnect/types" "^1.7.7" "@walletconnect/window-getters" "1.0.0" "@walletconnect/window-metadata" "1.0.0" detect-browser "5.2.0" -"@walletconnect/client@^1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@walletconnect/client/-/client-1.7.6.tgz#0fdae23cb1ccb39cf4d41e6dd80b4971dba7c0c5" - integrity sha512-ZAcH9aL+p3psXwcsts51liKiqS/Kez05bYM193QC7mfcGwlFhQWMCRWHb38y8yHrWQMUmtOZ+jKotKjrOitDUw== +"@walletconnect/client@^1.7.7": + version "1.7.7" + resolved "https://registry.yarnpkg.com/@walletconnect/client/-/client-1.7.7.tgz#4570475b0aeed05e53b0c7b01a352a895c0b455b" + integrity sha512-UuDkpXDc1Emx09aGXKz2Fg8omNp5J8ZRgNblnQTb8xnoQ8rgOJSyhbFR37PFIFwVpriZZDAgmy8HlqoGwLQ2ug== dependencies: - "@walletconnect/core" "^1.7.6" - "@walletconnect/iso-crypto" "^1.7.6" - "@walletconnect/types" "^1.7.6" - "@walletconnect/utils" "^1.7.6" + "@walletconnect/core" "^1.7.7" + "@walletconnect/iso-crypto" "^1.7.7" + "@walletconnect/types" "^1.7.7" + "@walletconnect/utils" "^1.7.7" -"@walletconnect/core@^1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-1.7.6.tgz#5f6dce401b350d32bc722e55e0d6629332d0d75b" - integrity sha512-gWD80GTgJ/xpYbJ/R5sbto1daDcDqeHl3ODzdtaVbDR2whS16spsEsXxgsM6BXFKqbGJ0r90SkHsNHa8xiekLQ== +"@walletconnect/core@^1.7.7": + version "1.7.7" + resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-1.7.7.tgz#71d0c71beda8d10c636a4eae8e81e3b7ecefbe86" + integrity sha512-XsF2x4JcBS1V2Nk/Uh38dU7ZlLmW/R5oxHp4+tVgCwTID6nZlo3vUSHBOqM7jgDRblKOHixANollm0r94bM8Cg== dependencies: - "@walletconnect/socket-transport" "^1.7.6" - "@walletconnect/types" "^1.7.6" - "@walletconnect/utils" "^1.7.6" + "@walletconnect/socket-transport" "^1.7.7" + "@walletconnect/types" "^1.7.7" + "@walletconnect/utils" "^1.7.7" "@walletconnect/crypto@^1.0.2": version "1.0.2" @@ -6084,27 +6036,27 @@ integrity sha512-4BwqyWy6KpSvkocSaV7WR3BlZfrxLbJSLkg+j7Gl6pTDE+U55lLhJvQaMuDVazXYxcjBsG09k7UlH7cGiUI5vQ== "@walletconnect/ethereum-provider@^1.7.5": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@walletconnect/ethereum-provider/-/ethereum-provider-1.7.6.tgz#a5ca224ffb9cee5a0f12992eb3d279c4e9630f0b" - integrity sha512-0LIs9gN6OzOzNV+LCjGanIkhZg52GfgN10lMntr3WgV6qlntLEszb2wzT7xC7yWcjLz61E146tpalOWOltKhsA== + version "1.7.7" + resolved "https://registry.yarnpkg.com/@walletconnect/ethereum-provider/-/ethereum-provider-1.7.7.tgz#1a80eed7f36508cd1f4fd1c0e1e9942d37fa20c1" + integrity sha512-5YGLXO6ga+17HKtXbIsGocY+IoJRJGigLZAjGwjtlSehAf2U4QQGJjK/AdKieDwdlh7rIR5jFxaYrNiY4ZTtpQ== dependencies: - "@walletconnect/client" "^1.7.6" + "@walletconnect/client" "^1.7.7" "@walletconnect/jsonrpc-http-connection" "^1.0.0" "@walletconnect/jsonrpc-provider" "^1.0.3" - "@walletconnect/signer-connection" "^1.7.6" - "@walletconnect/types" "^1.7.6" - "@walletconnect/utils" "^1.7.6" + "@walletconnect/signer-connection" "^1.7.7" + "@walletconnect/types" "^1.7.7" + "@walletconnect/utils" "^1.7.7" eip1193-provider "1.0.1" eventemitter3 "4.0.7" -"@walletconnect/iso-crypto@^1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@walletconnect/iso-crypto/-/iso-crypto-1.7.6.tgz#4962634a3c2d4085fb753b6caaf1d250198f4f1f" - integrity sha512-x80OVfarjPzD02kJgnpmLCxlsFRaymGjlGWzLmtwO8/hp1mrtT/ukFOsl1Fs6Tunp7BdCoJT+9FYFarcvbsG8Q== +"@walletconnect/iso-crypto@^1.7.7": + version "1.7.7" + resolved "https://registry.yarnpkg.com/@walletconnect/iso-crypto/-/iso-crypto-1.7.7.tgz#a7f703f9c2a05aafe5b8cced8941c7732701e579" + integrity sha512-t8RKJZkFtFyWMFrl0jPz/3RAGhM5yext+MLFq3L/KTPxLgMZuT1yFHRUiV7cAN3+LcCmk6Sy/rV1yQPTiB158Q== dependencies: "@walletconnect/crypto" "^1.0.2" - "@walletconnect/types" "^1.7.6" - "@walletconnect/utils" "^1.7.6" + "@walletconnect/types" "^1.7.7" + "@walletconnect/utils" "^1.7.7" "@walletconnect/jsonrpc-http-connection@^1.0.0": version "1.0.0" @@ -6143,14 +6095,14 @@ resolved "https://registry.yarnpkg.com/@walletconnect/mobile-registry/-/mobile-registry-1.4.0.tgz#502cf8ab87330841d794819081e748ebdef7aee5" integrity sha512-ZtKRio4uCZ1JUF7LIdecmZt7FOLnX72RPSY7aUVu7mj7CSfxDwUn6gBuK6WGtH+NZCldBqDl5DenI5fFSvkKYw== -"@walletconnect/qrcode-modal@^1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@walletconnect/qrcode-modal/-/qrcode-modal-1.7.6.tgz#e23d55b10c8f15f2d62d1354255a7bfdfb483973" - integrity sha512-SXx8eTllgyGpArwdB8v1WsmAKbxiizqebJLn32C6KRzWVW5FP4FizzgEi+r6xINWSEpWLX72GbeWAoiQDwFVFw== +"@walletconnect/qrcode-modal@^1.7.7": + version "1.7.7" + resolved "https://registry.yarnpkg.com/@walletconnect/qrcode-modal/-/qrcode-modal-1.7.7.tgz#a7567370bf915a50fb8edc99f6ceb70ce9be2bfc" + integrity sha512-HRzw6g4P8/C4ClJYJShaGfdvjfrTfkXv+eb+IylWGWvC8IQhuiSXCq5+F3t0CXxuZs3ir26abgviEMRFQxGKdA== dependencies: - "@walletconnect/browser-utils" "^1.7.6" + "@walletconnect/browser-utils" "^1.7.7" "@walletconnect/mobile-registry" "^1.4.0" - "@walletconnect/types" "^1.7.6" + "@walletconnect/types" "^1.7.7" copy-to-clipboard "^3.3.1" preact "10.4.1" qrcode "1.4.4" @@ -6169,41 +6121,41 @@ resolved "https://registry.yarnpkg.com/@walletconnect/safe-json/-/safe-json-1.0.0.tgz#12eeb11d43795199c045fafde97e3c91646683b2" integrity sha512-QJzp/S/86sUAgWY6eh5MKYmSfZaRpIlmCJdi5uG4DJlKkZrHEF7ye7gA+VtbVzvTtpM/gRwO2plQuiooIeXjfg== -"@walletconnect/signer-connection@^1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@walletconnect/signer-connection/-/signer-connection-1.7.6.tgz#24e1562afb4921098aeb227fd3ad3a981780d085" - integrity sha512-DyvAEUfvNyC7TpgztLvzkL/dc0KvtBd8cNSK+T9eZypNcNAZNev/Jdr9KYKz1EFTBuZYtsFCYHStahWsPZ7y4g== +"@walletconnect/signer-connection@^1.7.7": + version "1.7.7" + resolved "https://registry.yarnpkg.com/@walletconnect/signer-connection/-/signer-connection-1.7.7.tgz#852296b7c1990f5ad228da38a081c2ce17eea273" + integrity sha512-mS0Y4k9ckXJwcK1ACI1TAVQtp4oBvZIQw7ErxbRwqVQzmmYEVddKVHLbNm73yWtf+QMGGzGJLn4K/B+qM2TRpw== dependencies: - "@walletconnect/client" "^1.7.6" + "@walletconnect/client" "^1.7.7" "@walletconnect/jsonrpc-types" "^1.0.0" "@walletconnect/jsonrpc-utils" "^1.0.0" - "@walletconnect/qrcode-modal" "^1.7.6" - "@walletconnect/types" "^1.7.6" + "@walletconnect/qrcode-modal" "^1.7.7" + "@walletconnect/types" "^1.7.7" eventemitter3 "4.0.7" -"@walletconnect/socket-transport@^1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@walletconnect/socket-transport/-/socket-transport-1.7.6.tgz#4f381e60fe759de21722411a19c163bb0fc87ce0" - integrity sha512-yH2eKD9P34gnOxOfCarERROl5SkiwBR9UcASjcnp2L7r02ZaXHbhheXHUWzcU5HpEXrvz8DGciE7GBQn+aNgQg== +"@walletconnect/socket-transport@^1.7.7": + version "1.7.7" + resolved "https://registry.yarnpkg.com/@walletconnect/socket-transport/-/socket-transport-1.7.7.tgz#2cf68b95c4c10f257189370d2456d99c9c206a0f" + integrity sha512-RxeFkT+5BqdaZzPtPYIw6+KSVh6Q1NaYqTiAzWWh9RPuvuTajIEsi+fUXizfkpmyi9UTYBvdFXnKcB+eSImpDg== dependencies: - "@walletconnect/types" "^1.7.6" - "@walletconnect/utils" "^1.7.6" + "@walletconnect/types" "^1.7.7" + "@walletconnect/utils" "^1.7.7" ws "7.5.3" -"@walletconnect/types@^1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-1.7.6.tgz#98d696478e930b6ed064001e663c4fd80f458e6b" - integrity sha512-3JVjEzvJgDc5DzaXNxhg4JcdG4U8Qk6HVBELOu+TwiWG31TZRt82uL9CcVZKieFPP/nTWQnj+QkiKSpO7T1KTQ== +"@walletconnect/types@^1.7.7": + version "1.7.7" + resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-1.7.7.tgz#71c623b36a93e373370b1772e82fea2d801adf54" + integrity sha512-yXJrLxwLLCXtWgd/e8FjfY9v5DKds12Z7EEPzUrPSq6v7WtXpqate577KwlFQ6UYzioQzIEDE8+98j+0aiZbsw== -"@walletconnect/utils@^1.7.6": - version "1.7.6" - resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-1.7.6.tgz#71965c8d85df249c74efb1def1c780553264b7a4" - integrity sha512-GLneac0Hx52pNHAOkTt/07K+Ht8LmWFaK0nQlHqrLmOJm8WZPnUvMZGMTpSOzgKw47u0cjhE38ipbXOaq8qReA== +"@walletconnect/utils@^1.7.7": + version "1.7.7" + resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-1.7.7.tgz#684522fa20ccf9ec2944f0497ca70254cb6d4729" + integrity sha512-slNlnROS4DEusGFx53hshIBylYhzd5JtGF+AJpza+Tc616+u8ozjQ9aKKUaV85bucnv5Q42bTwLYrYrXiydmuw== dependencies: - "@walletconnect/browser-utils" "^1.7.6" + "@walletconnect/browser-utils" "^1.7.7" "@walletconnect/encoding" "^1.0.1" "@walletconnect/jsonrpc-utils" "^1.0.0" - "@walletconnect/types" "^1.7.6" + "@walletconnect/types" "^1.7.7" bn.js "4.11.8" js-sha3 "0.8.0" query-string "6.13.5" @@ -6904,60 +6856,60 @@ anymatch@^3.0.0, anymatch@^3.0.3, anymatch@^3.1.0, anymatch@~3.1.1, anymatch@~3. normalize-path "^3.0.0" picomatch "^2.0.4" -apollo-codegen-core@^0.40.7: - version "0.40.7" - resolved "https://registry.yarnpkg.com/apollo-codegen-core/-/apollo-codegen-core-0.40.7.tgz#65ab0489783ecd984935b541ab882158e9da4972" - integrity sha512-lVnmXUS+7RiDPINDKGU6e/F668BXKARdgM27j0n7w8kHZ2AEC3YbSL3KNseRtyMhqWb4y9NRde/W2nMtB6pqfw== +apollo-codegen-core@^0.40.8: + version "0.40.8" + resolved "https://registry.yarnpkg.com/apollo-codegen-core/-/apollo-codegen-core-0.40.8.tgz#bead416d01ccddfd593477cb86b5a3bb86bd36e3" + integrity sha512-IuudtJMUdKb2FhEWN+7FjSVYVCOgyGXjFZ7/b4uereaAQgd6FSigzLBUhHafCbR0XmKys1vuYJ/JgPtSPc8f/w== dependencies: - "@babel/generator" "7.16.0" + "@babel/generator" "7.16.5" "@babel/parser" "^7.1.3" "@babel/types" "7.16.0" apollo-env "^0.10.1" - apollo-language-server "^1.26.7" + apollo-language-server "^1.26.8" ast-types "^0.14.0" common-tags "^1.5.1" recast "^0.20.0" -apollo-codegen-flow@^0.38.7: - version "0.38.7" - resolved "https://registry.yarnpkg.com/apollo-codegen-flow/-/apollo-codegen-flow-0.38.7.tgz#78e762102f0ff60c99ea719d0e85fc80a9b0ebec" - integrity sha512-YzqMLQlLrUGLvJetmS2FA9iN92cc2AOHcyn+JY64mzceiBPcg57OJfCRFcoNZVpaQvpO9EYDkdTWPEPcnU7BEw== +apollo-codegen-flow@^0.38.8: + version "0.38.8" + resolved "https://registry.yarnpkg.com/apollo-codegen-flow/-/apollo-codegen-flow-0.38.8.tgz#ebc69f751fd12733288585b8e6fd0032874f7b32" + integrity sha512-QMxvuCqNG7W8MSXTSn8tFThL+fRQW8mKRvdVA4bybVmw6ujbttuIZ7DoAgvmE9l0o1+EzsSoFSRE6sA7R28k7w== dependencies: - "@babel/generator" "7.16.0" + "@babel/generator" "7.16.5" "@babel/types" "7.16.0" - apollo-codegen-core "^0.40.7" + apollo-codegen-core "^0.40.8" change-case "^4.0.0" common-tags "^1.5.1" inflected "^2.0.3" -apollo-codegen-scala@^0.39.7: - version "0.39.7" - resolved "https://registry.yarnpkg.com/apollo-codegen-scala/-/apollo-codegen-scala-0.39.7.tgz#b9bc256c957b393e8f8a9824058b60767af7cd39" - integrity sha512-0h0lSwyAkOCG9oOs+g9lCdirL/oVuSGeQ1LBojHNroLjELPCHFFA3woK7dx+ryBhthHkN6/XraqSIi/QPxESzw== +apollo-codegen-scala@^0.39.8: + version "0.39.8" + resolved "https://registry.yarnpkg.com/apollo-codegen-scala/-/apollo-codegen-scala-0.39.8.tgz#7e40c40ccb9600e8b8ec3eef27b5b52ca53b40e3" + integrity sha512-XnqUR4778Tt9KpJ2Pxi5mgtkq0ySh0NmfZZloIShwQR67FES0zZepYruGrwlDcLUX0XlSazxgwA1kcQm46dLDQ== dependencies: - apollo-codegen-core "^0.40.7" + apollo-codegen-core "^0.40.8" change-case "^4.0.0" common-tags "^1.5.1" inflected "^2.0.3" -apollo-codegen-swift@^0.40.7: - version "0.40.7" - resolved "https://registry.yarnpkg.com/apollo-codegen-swift/-/apollo-codegen-swift-0.40.7.tgz#90ee1d5184de55cb350d7539ea3e22525ec2081e" - integrity sha512-0t/n67tVT3D57NDwiqdP70aZ0CcAs0cNVOriCtT1SzyXRJcOJPRBnR/ouZcod9TjjFGvD2T9hgej2nT0ne4VCQ== +apollo-codegen-swift@^0.40.8: + version "0.40.8" + resolved "https://registry.yarnpkg.com/apollo-codegen-swift/-/apollo-codegen-swift-0.40.8.tgz#c9c25fa6dcf00c6451447011a3704a893095566b" + integrity sha512-x4wvHwF9NGw5dR0DRL4yFhPE2i0y5Z/cItMNRWFoo85GpfzsUstyUg2uqkQlWaFeJj06zfAeWd0sfQLDsBywbQ== dependencies: - apollo-codegen-core "^0.40.7" + apollo-codegen-core "^0.40.8" change-case "^4.0.0" common-tags "^1.5.1" inflected "^2.0.3" -apollo-codegen-typescript@^0.40.7: - version "0.40.7" - resolved "https://registry.yarnpkg.com/apollo-codegen-typescript/-/apollo-codegen-typescript-0.40.7.tgz#7c924b936fd36b0d2360cf9bbf6ff26e95cf4c98" - integrity sha512-/yMz1E9K3iUdkbJiwGesVVDfWfsT4xrxaIcbDPnhjkwAvH8Dxgy+L6b+PNVjPS//laBFij50W+BaH2+px5Qzaw== +apollo-codegen-typescript@^0.40.8: + version "0.40.8" + resolved "https://registry.yarnpkg.com/apollo-codegen-typescript/-/apollo-codegen-typescript-0.40.8.tgz#459d5e0b43f342d07d2e96013158901f4961d5e8" + integrity sha512-LzzH+Jc2qIzA0lqLGoIw7V28CteBB+2Vr/H6HzADD8gVb184Dns0GBDaV4rCoCb+S7W0UGF3prvX9DWKYH++iQ== dependencies: - "@babel/generator" "7.16.0" + "@babel/generator" "7.16.5" "@babel/types" "7.16.0" - apollo-codegen-core "^0.40.7" + apollo-codegen-core "^0.40.8" change-case "^4.0.0" common-tags "^1.5.1" inflected "^2.0.3" @@ -6980,27 +6932,27 @@ apollo-env@^0.10.1: node-fetch "^2.6.1" sha.js "^2.4.11" -apollo-graphql@^0.9.3, apollo-graphql@^0.9.5: - version "0.9.5" - resolved "https://registry.yarnpkg.com/apollo-graphql/-/apollo-graphql-0.9.5.tgz#9113483ca7f7fa49ee9e9a299c45d30b1cf3bf61" - integrity sha512-RGt5k2JeBqrmnwRM0VOgWFiGKlGJMfmiif/4JvdaEqhMJ+xqe/9cfDYzXfn33ke2eWixsAbjEbRfy8XbaN9nTw== +apollo-graphql@^0.9.3, apollo-graphql@^0.9.6: + version "0.9.6" + resolved "https://registry.yarnpkg.com/apollo-graphql/-/apollo-graphql-0.9.6.tgz#756312a92685b0547f82cceb04f5b2d6e9f0df5c" + integrity sha512-CrqJxZwfu/U5x0bYYPPluwu1G+oC3jjKFK/EVn9CDcpi4+yD9rAYko/h1iUB5A6VRQhA4Boluc7QexMYQ2tCng== dependencies: core-js-pure "^3.10.2" lodash.sortby "^4.7.0" sha.js "^2.4.11" -apollo-language-server@^1.26.7: - version "1.26.7" - resolved "https://registry.yarnpkg.com/apollo-language-server/-/apollo-language-server-1.26.7.tgz#35cbb10a602a5d02cb53adb5473dd1c532da5f47" - integrity sha512-wY5oryqcbKEoFlwlXgCa8Aj0d2k5Bok7tpJfK4TQsKvvpZ5uP4qetZj69DXDz4wM0oHEx80iUdYCmxetxi6PkA== +apollo-language-server@^1.26.8: + version "1.26.8" + resolved "https://registry.yarnpkg.com/apollo-language-server/-/apollo-language-server-1.26.8.tgz#f47aca09e91c3f6d051b28e7656e14b3cd6d23f6" + integrity sha512-TyVT8S+hy5XwY1xUt6mXy7/MJcGc84M9CveDemSOHFF6ERI0atldoQzEkeKfxRJXMmRoOYGJODebXda2DRIejw== dependencies: "@apollo/federation" "0.27.0" - "@apollographql/apollo-tools" "^0.5.2" + "@apollographql/apollo-tools" "^0.5.3" "@apollographql/graphql-language-service-interface" "^2.0.2" "@endemolshinegroup/cosmiconfig-typescript-loader" "^1.0.0" apollo-datasource "^0.9.0" apollo-env "^0.10.1" - apollo-graphql "^0.9.5" + apollo-graphql "^0.9.6" apollo-link "^1.2.3" apollo-link-context "^1.0.9" apollo-link-error "^1.1.1" @@ -7096,30 +7048,30 @@ apollo-utilities@^1.3.0: tslib "^1.10.0" apollo@^2.33.9: - version "2.33.9" - resolved "https://registry.yarnpkg.com/apollo/-/apollo-2.33.9.tgz#058f67dad8d5e51cc1715417c060db2c64ba3cec" - integrity sha512-bfapwkHnarxUW498AoLkNNN69e1U1a8ghK+xm2qiKCNhFwEBU9MlhwyBEg522Modbmg1XD+DtSi7gl7N5msBrQ== + version "2.33.10" + resolved "https://registry.yarnpkg.com/apollo/-/apollo-2.33.10.tgz#be247d72f2e8ca8819622fe03f5e073425610011" + integrity sha512-V6S1OHcy9rbwJFSEWw+Qti+C6WIU7+R/uezMoPH9lA+50TMX9+p9TwwyFEu14AfLEYjZ+XYoA/WBxqaGAbtIzg== dependencies: - "@apollographql/apollo-tools" "^0.5.2" - "@oclif/command" "1.8.0" - "@oclif/config" "1.17.0" + "@apollographql/apollo-tools" "^0.5.3" + "@oclif/command" "1.8.16" + "@oclif/config" "1.18.3" "@oclif/errors" "1.3.5" "@oclif/plugin-autocomplete" "0.3.0" - "@oclif/plugin-help" "3.2.3" - "@oclif/plugin-not-found" "1.2.4" - "@oclif/plugin-plugins" "1.10.1" - "@oclif/plugin-warn-if-update-available" "1.7.0" - apollo-codegen-core "^0.40.7" - apollo-codegen-flow "^0.38.7" - apollo-codegen-scala "^0.39.7" - apollo-codegen-swift "^0.40.7" - apollo-codegen-typescript "^0.40.7" + "@oclif/plugin-help" "3.3.1" + "@oclif/plugin-not-found" "1.2.6" + "@oclif/plugin-plugins" "1.10.11" + "@oclif/plugin-warn-if-update-available" "1.7.3" + apollo-codegen-core "^0.40.8" + apollo-codegen-flow "^0.38.8" + apollo-codegen-scala "^0.39.8" + apollo-codegen-swift "^0.40.8" + apollo-codegen-typescript "^0.40.8" apollo-env "^0.10.1" - apollo-graphql "^0.9.5" - apollo-language-server "^1.26.7" + apollo-graphql "^0.9.6" + apollo-language-server "^1.26.8" chalk "2.4.2" - cli-ux "5.6.3" - env-ci "5.4.1" + cli-ux "5.6.7" + env-ci "5.5.0" gaze "1.1.3" git-parse "1.0.5" git-rev-sync "3.0.1" @@ -7134,7 +7086,7 @@ apollo@^2.33.9: mkdirp "1.0.4" moment "2.29.1" strip-ansi "5.2.0" - table "6.7.3" + table "6.8.0" tty "1.0.1" vscode-uri "1.0.6" @@ -7236,12 +7188,12 @@ array-flatten@1.1.1: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= -array-flatten@^2.1.0: +array-flatten@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== -array-includes@^3.0.3, array-includes@^3.1.3, array-includes@^3.1.4: +array-includes@^3.0.3, array-includes@^3.1.4: version "3.1.4" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9" integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw== @@ -7275,22 +7227,24 @@ array-unique@^0.3.2: integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= array.prototype.flat@^1.2.1, array.prototype.flat@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz#07e0975d84bbc7c48cd1879d609e682598d33e13" - integrity sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg== + version "1.3.0" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b" + integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.19.0" + es-abstract "^1.19.2" + es-shim-unscopables "^1.0.0" array.prototype.flatmap@^1.2.1, array.prototype.flatmap@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz#908dc82d8a406930fdf38598d51e7411d18d4446" - integrity sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA== + version "1.3.0" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz#a7e8ed4225f4788a70cd910abcf0791e76a5534f" + integrity sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.19.0" + es-abstract "^1.19.2" + es-shim-unscopables "^1.0.0" array.prototype.map@^1.0.4: version "1.0.4" @@ -7826,6 +7780,15 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + blob-util@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" @@ -7872,17 +7835,15 @@ body-parser@1.19.2: raw-body "2.4.3" type-is "~1.6.18" -bonjour@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" - integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= +bonjour-service@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.0.11.tgz#5418e5c1ac91c89a406f853a942e7892829c0d89" + integrity sha512-drMprzr2rDTCtgEE3VgdA9uUFaUHF+jXduwYSThHJnKMYM+FhI9Z3ph+TX3xy0LtgYHae6CHYPJ/2UnK8nQHcA== dependencies: - array-flatten "^2.1.0" - deep-equal "^1.0.1" + array-flatten "^2.1.2" dns-equal "^1.0.0" - dns-txt "^2.0.2" - multicast-dns "^6.0.1" - multicast-dns-service-types "^1.1.0" + fast-deep-equal "^3.1.3" + multicast-dns "^7.2.4" boolbase@^1.0.0, boolbase@~1.0.0: version "1.0.0" @@ -8201,11 +8162,6 @@ buffer-from@^1.0.0, buffer-from@^1.1.1: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer-indexof@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" - integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== - buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" @@ -8236,7 +8192,7 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -buffer@^5.4.3, buffer@^5.6.0: +buffer@^5.4.3, buffer@^5.5.0, buffer@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -8441,9 +8397,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001202, caniuse-lite@^1.0.30001219, caniuse-lite@^1.0.30001228, caniuse-lite@^1.0.30001251, caniuse-lite@^1.0.30001317: - version "1.0.30001320" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001320.tgz#8397391bec389b8ccce328636499b7284ee13285" - integrity sha512-MWPzG54AGdo3nWx7zHZTefseM5Y1ccM7hlQKHRqJkPozUaw3hNbBTMmLn16GG2FUzjR13Cr3NPfhIieX5PzXDA== + version "1.0.30001327" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001327.tgz#c1546d7d7bb66506f0ccdad6a7d07fc6d668c858" + integrity sha512-1/Cg4jlD9qjZzhbzkzEaAC2JHsP0WrOc8Rd/3a3LuajGzGWR/hD7TVyvq99VqmTy99eVh8Zkmdq213OgvgXx7w== capital-case@^1.0.4: version "1.0.4" @@ -8714,7 +8670,7 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -classnames@*, classnames@^2.2, classnames@^2.2.6, classnames@^2.3.0, classnames@^2.3.1: +classnames@*, classnames@^2.2, classnames@^2.2.5, classnames@^2.2.6, classnames@^2.3.0, classnames@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== @@ -8732,9 +8688,9 @@ clean-css@^4.2.3: source-map "~0.6.0" clean-css@^5.2.2: - version "5.2.4" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.2.4.tgz#982b058f8581adb2ae062520808fb2429bd487a4" - integrity sha512-nKseG8wCzEuji/4yrgM/5cthL9oTDc5UOQyFMvW/Q53oP6gLH690o1NbuTh6Y18nujr7BxlsFuS7gXLnLzKJGg== + version "5.3.0" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.0.tgz#ad3d8238d5f3549e83d5f87205189494bc7cbb59" + integrity sha512-YYuuxv4H/iNb1Z/5IbMRoxgrzjWGhOEFfd+groZ5dMCVkpENiMZmwspdrzBo9286JjM1gZJPAyL7ZIdzuvu2AQ== dependencies: source-map "~0.6.0" @@ -8828,15 +8784,15 @@ cli-truncate@^3.1.0: slice-ansi "^5.0.0" string-width "^5.0.0" -cli-ux@5.6.3: - version "5.6.3" - resolved "https://registry.yarnpkg.com/cli-ux/-/cli-ux-5.6.3.tgz#eecdb2e0261171f2b28f2be6b18c490291c3a287" - integrity sha512-/oDU4v8BiDjX2OKcSunGH0iGDiEtj2rZaGyqNuv9IT4CgcSMyVWAMfn0+rEHaOc4n9ka78B0wo1+N1QX89f7mw== +cli-ux@5.6.6: + version "5.6.6" + resolved "https://registry.yarnpkg.com/cli-ux/-/cli-ux-5.6.6.tgz#1424f5a9fbddcd796ad985b867a3de7f5a452090" + integrity sha512-4wUB34zoFklcZV0z5YiOM5IqVMMt9c3TK3QYRK3dqyk3XoRC0ybiWDWHfsMDjkKrzsVTw95rXn9NrzSHbae4pg== dependencies: - "@oclif/command" "^1.6.0" - "@oclif/errors" "^1.2.1" + "@oclif/command" "^1.8.9" + "@oclif/errors" "^1.3.5" "@oclif/linewrap" "^1.0.0" - "@oclif/screen" "^1.0.3" + "@oclif/screen" "^1.0.4" ansi-escapes "^4.3.0" ansi-styles "^4.2.0" cardinal "^2.1.1" @@ -8849,7 +8805,7 @@ cli-ux@5.6.3: indent-string "^4.0.0" is-wsl "^2.2.0" js-yaml "^3.13.1" - lodash "^4.17.11" + lodash "^4.17.21" natural-orderby "^2.0.1" object-treeify "^1.1.4" password-prompt "^1.1.2" @@ -8860,34 +8816,7 @@ cli-ux@5.6.3: supports-hyperlinks "^2.1.0" tslib "^2.0.0" -cli-ux@^4.9.0: - version "4.9.3" - resolved "https://registry.yarnpkg.com/cli-ux/-/cli-ux-4.9.3.tgz#4c3e070c1ea23eef010bbdb041192e0661be84ce" - integrity sha512-/1owvF0SZ5Gn54cgrikJ0QskgTzeg30HGjkmjFoaHDJzAqFpuX1DBpFR8aLvsE1J5s9MgeYRENQK4BFwOag5VA== - dependencies: - "@oclif/errors" "^1.2.2" - "@oclif/linewrap" "^1.0.0" - "@oclif/screen" "^1.0.3" - ansi-escapes "^3.1.0" - ansi-styles "^3.2.1" - cardinal "^2.1.1" - chalk "^2.4.1" - clean-stack "^2.0.0" - extract-stack "^1.0.0" - fs-extra "^7.0.0" - hyperlinker "^1.0.0" - indent-string "^3.2.0" - is-wsl "^1.1.0" - lodash "^4.17.11" - password-prompt "^1.0.7" - semver "^5.6.0" - strip-ansi "^5.0.0" - supports-color "^5.5.0" - supports-hyperlinks "^1.0.1" - treeify "^1.1.0" - tslib "^1.9.3" - -cli-ux@^5.2.1: +cli-ux@5.6.7, cli-ux@^5.2.1, cli-ux@^5.6.7: version "5.6.7" resolved "https://registry.yarnpkg.com/cli-ux/-/cli-ux-5.6.7.tgz#32ef9e6cb2b457be834280cc799028a11c8235a8" integrity sha512-dsKAurMNyFDnO6X1TiiRNiVbL90XReLKcvIq4H777NMqXGBxBws23ag8ubCJE97vVZEgWG2eSUhsyLf63Jv8+g== @@ -9479,7 +9408,7 @@ crypto-browserify@3.12.0, crypto-browserify@^3.0.0, crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" -css-declaration-sorter@^6.0.3: +css-declaration-sorter@^6.2.2: version "6.2.2" resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.2.2.tgz#bfd2f6f50002d6a3ae779a87d3a0c5d5b10e0f02" integrity sha512-Ufadglr88ZLsrvS11gjeu/40Lw74D9Am/Jpr3LlYm5Q4ZP5KdlUhG+6u2EjyXeZcxmZ2h1ebCKngDjolpeLHpg== @@ -9587,15 +9516,20 @@ css-tree@^1.1.2, css-tree@^1.1.3: mdn-data "2.0.14" source-map "^0.6.1" +css-unit-converter@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.2.tgz#4c77f5a1954e6dbff60695ecb214e3270436ab21" + integrity sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA== + css-what@^3.2.1: version "3.4.2" resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== css-what@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.0.1.tgz#3be33be55b9f302f710ba3a9c3abc1e2a63fc7eb" - integrity sha512-z93ZGFLNc6yaoXAmVhqoSIb+BduplteCt1fepvwhBUQK6MNE4g6fgjpuZKJKp0esUe+vXWlIkwZZjNWoOKw0ZA== + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== css.escape@1.5.1, css.escape@^1.5.1: version "1.5.1" @@ -9621,12 +9555,12 @@ cssfontparser@^1.2.1: resolved "https://registry.yarnpkg.com/cssfontparser/-/cssfontparser-1.2.1.tgz#f4022fc8f9700c68029d542084afbaf425a3f3e3" integrity sha1-9AIvyPlwDGgCnVQghK+69CWj8+M= -cssnano-preset-default@^5.2.5: - version "5.2.5" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.5.tgz#267ded811a3e1664d78707f5355fcd89feeb38ac" - integrity sha512-WopL7PzN7sos3X8B54/QGl+CZUh1f0qN4ds+y2d5EPwRSSc3jsitVw81O+Uyop0pXyOfPfZxnc+LmA8w/Ki/WQ== +cssnano-preset-default@^5.2.7: + version "5.2.7" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.7.tgz#791e3603fb8f1b46717ac53b47e3c418e950f5f3" + integrity sha512-JiKP38ymZQK+zVKevphPzNSGHSlTI+AOwlasoSRtSVMUU285O7/6uZyd5NbW92ZHp41m0sSHe6JoZosakj63uA== dependencies: - css-declaration-sorter "^6.0.3" + css-declaration-sorter "^6.2.2" cssnano-utils "^3.1.0" postcss-calc "^8.2.3" postcss-colormin "^5.3.0" @@ -9635,7 +9569,7 @@ cssnano-preset-default@^5.2.5: postcss-discard-duplicates "^5.1.0" postcss-discard-empty "^5.1.1" postcss-discard-overridden "^5.1.0" - postcss-merge-longhand "^5.1.3" + postcss-merge-longhand "^5.1.4" postcss-merge-rules "^5.1.1" postcss-minify-font-values "^5.1.0" postcss-minify-gradients "^5.1.1" @@ -9676,11 +9610,11 @@ cssnano-utils@^3.1.0: integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== cssnano@^5.0.1, cssnano@^5.0.6: - version "5.1.5" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.5.tgz#5f3f519538c7f1c182c527096892243db3e17397" - integrity sha512-VZO1e+bRRVixMeia1zKagrv0lLN1B/r/u12STGNNUFxnp97LIFgZHQa0JxqlwEkvzUyA9Oz/WnCTAFkdEbONmg== + version "5.1.7" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.7.tgz#99858bef6c76c9240f0cdc9239570bc7db8368be" + integrity sha512-pVsUV6LcTXif7lvKKW9ZrmX+rGRzxkEdJuVJcp5ftUjWITgwam5LMZOgaTvUrWPkcORBey6he7JKb4XAJvrpKg== dependencies: - cssnano-preset-default "^5.2.5" + cssnano-preset-default "^5.2.7" lilconfig "^2.0.3" yaml "^1.10.2" @@ -9891,7 +9825,7 @@ d3-drag@2, d3-drag@^2.0.0: resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-2.0.0.tgz#a10bcc0f986c372b729ba447382413aabf5b0767" integrity sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA== -"d3-interpolate@1 - 2", "d3-interpolate@1.2.0 - 2": +"d3-interpolate@1 - 2", "d3-interpolate@1.2.0 - 2", d3-interpolate@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-2.0.1.tgz#98be499cfb8a3b94d4ff616900501a64abc91163" integrity sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ== @@ -9903,7 +9837,7 @@ d3-drag@2, d3-drag@^2.0.0: resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-2.0.0.tgz#55d86ac131a0548adae241eebfb56b4582dd09d8" integrity sha512-ZwZQxKhBnv9yHaiWd6ZU4x5BtCQ7pXszEV9CU6kRgwIQVQGLMv1oiL4M+MK/n79sYzsj+gcgpPQSctJUsLN7fA== -d3-scale@^3.2.3: +d3-scale@^3.0.0, d3-scale@^3.2.3: version "3.3.0" resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-3.3.0.tgz#28c600b29f47e5b9cd2df9749c206727966203f3" integrity sha512-1JGp44NQCt5d1g+Yy+GeOnZP7xHo0ii8zsQp6PGzd+C1/dl0KGsp9A7Mxwp+1D1o4unbTTxVdU/ZOIEBoeZPbQ== @@ -10059,6 +9993,11 @@ decamelize@^1.2.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= +decimal.js-light@^2.4.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.1.tgz#134fd32508f19e208f4fb2f8dac0d2626a867934" + integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg== + decimal.js@^10.2.1: version "10.3.1" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" @@ -10081,7 +10020,7 @@ deep-eql@^3.0.1: dependencies: type-detect "^4.0.0" -deep-equal@^1.0.1: +deep-equal@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== @@ -10154,20 +10093,6 @@ defined@^1.0.0: resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= -del@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952" - integrity sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ== - dependencies: - globby "^11.0.1" - graceful-fs "^4.2.4" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.2" - p-map "^4.0.0" - rimraf "^3.0.2" - slash "^3.0.0" - delaunator@5: version "5.0.0" resolved "https://registry.yarnpkg.com/delaunator/-/delaunator-5.0.0.tgz#60f052b28bd91c9b4566850ebf7756efe821d81b" @@ -10320,20 +10245,12 @@ dns-equal@^1.0.0: resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= -dns-packet@^1.3.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f" - integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA== +dns-packet@^5.2.2: + version "5.3.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.3.1.tgz#eb94413789daec0f0ebe2fcc230bdc9d7c91b43d" + integrity sha512-spBwIj0TK0Ey3666GwIdWVfUpLyubpU53BTCu8iPn4r4oXd9O14Hjg3EHw3ts2oed77/SeckunUYCyRlSngqHw== dependencies: - ip "^1.1.0" - safe-buffer "^5.0.1" - -dns-txt@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" - integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= - dependencies: - buffer-indexof "^1.0.0" + "@leichtgewicht/ip-codec" "^2.0.1" doctrine@^2.1.0: version "2.1.0" @@ -10361,6 +10278,13 @@ dom-converter@^0.2.0: 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-serializer@0: version "0.2.2" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" @@ -10370,9 +10294,9 @@ dom-serializer@0: entities "^2.0.0" dom-serializer@^1.0.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" - integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== dependencies: domelementtype "^2.0.1" domhandler "^4.2.0" @@ -10383,6 +10307,11 @@ dom-walk@^0.1.0: resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== +dom4@^2.1.5: + version "2.1.6" + resolved "https://registry.yarnpkg.com/dom4/-/dom4-2.1.6.tgz#c90df07134aa0dbd81ed4d6ba1237b36fc164770" + integrity sha512-JkCVGnN4ofKGbjf5Uvc8mmxaATIErKQKSgACdBXpsQ3fY6DlIpAyWfiBSrGkttATssbDCp3psiAKWXk5gmjycA== + domain-browser@4.19.0: version "4.19.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-4.19.0.tgz#1093e17c0a17dbd521182fe90d49ac1370054af1" @@ -10399,9 +10328,9 @@ domelementtype@1: integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== domelementtype@^2.0.1, domelementtype@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" - integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== domexception@^2.0.1: version "2.0.1" @@ -10485,6 +10414,11 @@ duplexify@^3.4.2, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" +duration-js@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/duration-js/-/duration-js-4.0.0.tgz#ab91575a4f1a6b096034685cfc6ea9aca99cd63f" + integrity sha1-q5FXWk8aawlgNGhc/G6prKmc1j8= + duration@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/duration/-/duration-0.2.2.tgz#ddf149bc3bc6901150fe9017111d016b3357f529" @@ -10526,9 +10460,9 @@ ejs@^3.1.5: jake "^10.6.1" electron-to-chromium@^1.3.723, electron-to-chromium@^1.4.84: - version "1.4.96" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.96.tgz#a97438a01d5db1460343fea4a344960b09330990" - integrity sha512-DPNjvNGPabv6FcyjzLAN4C0psN/GgD9rSGvMTuv81SeXG/EX3mCz0wiw9N1tUEnfQXYCJi3H8M0oFPRziZh7rw== + version "1.4.106" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.106.tgz#e7a3bfa9d745dd9b9e597616cb17283cc349781a" + integrity sha512-ZYfpVLULm67K7CaaGP7DmjyeMY4naxsbTy+syVVxT6QHI1Ww8XbJjmr9fDckrhq44WzCrcC5kH3zGpdusxwwqg== elegant-spinner@^1.0.1: version "1.0.1" @@ -10606,7 +10540,7 @@ encoding@0.1.13: dependencies: iconv-lite "^0.6.2" -end-of-stream@^1.0.0, end-of-stream@^1.1.0: +end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -10656,10 +10590,10 @@ entities@^3.0.1: resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== -env-ci@5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/env-ci/-/env-ci-5.4.1.tgz#814387ddd6857b37472ef612361f34d720c29a18" - integrity sha512-xyuCtyFZLpnW5aH0JstETKTSMwHHQX4m42juzEZzvbUCJX7RiPVlhASKM0f/cJ4vvI/+txMkZ7F5To6dCdPYhg== +env-ci@5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/env-ci/-/env-ci-5.5.0.tgz#43364e3554d261a586dec707bc32be81112b545f" + integrity sha512-o0JdWIbOLP+WJKIUt36hz1ImQQFuN92nhsfTkHHap+J8CiI8WgGpH/a9jEGHh4/TU5BUUGjlnKXNoDb57+ne+A== dependencies: execa "^5.0.0" fromentries "^1.3.2" @@ -10694,7 +10628,7 @@ error-stack-parser@^2.0.6: dependencies: stackframe "^1.1.1" -es-abstract@^1.17.2, es-abstract@^1.18.5, es-abstract@^1.19.0, es-abstract@^1.19.1: +es-abstract@^1.17.2, es-abstract@^1.18.5, es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2: version "1.19.2" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.2.tgz#8f7b696d8f15b167ae3640b4060670f3d054143f" integrity sha512-gfSBJoZdlL2xRiOCy0g8gLMryhoe1TlimjzU99L/31Z8QEGIhVQI+EWwt5lT+AuU9SnorVupXFqqOGqGfsyO6w== @@ -10744,6 +10678,13 @@ es-module-lexer@^0.9.0: resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -10754,9 +10695,9 @@ es-to-primitive@^1.2.1: is-symbol "^1.0.2" es5-ext@^0.10.35, es5-ext@^0.10.50, es5-ext@~0.10.46: - version "0.10.59" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.59.tgz#71038939730eb6f4f165f1421308fb60be363bc6" - integrity sha512-cOgyhW0tIJyQY1Kfw6Kr0viu9ZlUctVchRMZ7R0HiH3dxTSp5zJDLecwxUqPUrGKMsgBI1wd1FL+d9Jxfi4cLw== + version "0.10.60" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.60.tgz#e8060a86472842b93019c31c34865012449883f4" + integrity sha512-jpKNXIt60htYG59/9FGf2PYT3pwMpnEbNKysU+k/4FGwyGtMotOvcZOuW+EmXXYASRqYSXQfGL5cVIthOTgbkg== dependencies: es6-iterator "^2.0.3" es6-symbol "^3.1.3" @@ -10857,11 +10798,11 @@ eslint-config-next@12.0.7: eslint-plugin-react-hooks "^4.3.0" eslint-config-next@^12.0.0: - version "12.1.1" - resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-12.1.1.tgz#11f948c5f4959267c2157dff8f2c28d067e3e1d9" - integrity sha512-+Ql9F07Pafs+cDgy8Zp0F8FxCBq7ke02ZyC2/MMEiGAX+WlnuUCrboBDnfzmHJpAAkcBPjUthunu6LBnF9KWIQ== + version "12.1.4" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-12.1.4.tgz#939ea2ff33034763300bf1e62482cea91212d274" + integrity sha512-Uj0jrVjoQbg9qerxRjSHoOOv3PEzoZxpb8G9LYct25fsflP8xIiUq0l4WEu2KSB5owuLv5hie7wSMqPEsHj+bQ== dependencies: - "@next/eslint-plugin-next" "12.1.1" + "@next/eslint-plugin-next" "12.1.4" "@rushstack/eslint-patch" "1.0.8" "@typescript-eslint/parser" "5.10.1" eslint-import-resolver-node "0.3.4" @@ -10904,9 +10845,9 @@ eslint-import-resolver-typescript@2.4.0: tsconfig-paths "^3.9.0" eslint-import-resolver-typescript@^2.4.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.0.tgz#1f9d391b636dccdbaa4a3b1a87eb9a8237e23963" - integrity sha512-MNHS3u5pebvROX4MjGP9coda589ZGfL1SqdxUV4kSrcclfDRWvNE2D+eljbnWVMvWDVRgT89nhscMHPKYGcObQ== + version "2.7.1" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz#a90a4a1c80da8d632df25994c4c5fdcdd02b8751" + integrity sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ== dependencies: debug "^4.3.4" glob "^7.2.0" @@ -10914,7 +10855,7 @@ eslint-import-resolver-typescript@^2.4.0: resolve "^1.22.0" tsconfig-paths "^3.14.1" -eslint-module-utils@^2.7.0, eslint-module-utils@^2.7.2: +eslint-module-utils@^2.7.0, eslint-module-utils@^2.7.3: version "2.7.3" resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee" integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ== @@ -10949,23 +10890,23 @@ eslint-plugin-import@2.25.2: tsconfig-paths "^3.11.0" eslint-plugin-import@^2.25.2: - version "2.25.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz#322f3f916a4e9e991ac7af32032c25ce313209f1" - integrity sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA== + version "2.26.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" + integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== dependencies: array-includes "^3.1.4" array.prototype.flat "^1.2.5" debug "^2.6.9" doctrine "^2.1.0" eslint-import-resolver-node "^0.3.6" - eslint-module-utils "^2.7.2" + eslint-module-utils "^2.7.3" has "^1.0.3" - is-core-module "^2.8.0" + is-core-module "^2.8.1" is-glob "^4.0.3" - minimatch "^3.0.4" + minimatch "^3.1.2" object.values "^1.1.5" - resolve "^1.20.0" - tsconfig-paths "^3.12.0" + resolve "^1.22.0" + tsconfig-paths "^3.14.1" eslint-plugin-jsx-a11y@6.5.1, eslint-plugin-jsx-a11y@^6.5.1: version "6.5.1" @@ -10985,11 +10926,16 @@ eslint-plugin-jsx-a11y@6.5.1, eslint-plugin-jsx-a11y@^6.5.1: language-tags "^1.0.5" minimatch "^3.0.4" -eslint-plugin-react-hooks@4.3.0, eslint-plugin-react-hooks@^4.3.0: +eslint-plugin-react-hooks@4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz#318dbf312e06fab1c835a4abef00121751ac1172" integrity sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA== +eslint-plugin-react-hooks@^4.3.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.4.0.tgz#71c39e528764c848d8253e1aa2c7024ed505f6c4" + integrity sha512-U3RVIfdzJaeKDQKEJbz5p3NW8/L80PCATJAfuojwbaEL+gBjfGdhUcGde+WGUW46Q5sr/NgxevsIiDtNXrvZaQ== + eslint-plugin-react@7.27.0: version "7.27.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.27.0.tgz#f952c76517a3915b81c7788b220b2b4c96703124" @@ -11285,7 +11231,7 @@ eventemitter2@^6.4.3: resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.5.tgz#97380f758ae24ac15df8353e0cc27f8b95644655" integrity sha512-bXE7Dyc1i6oQElDG0jMRZJrRAn9QR2xyyFGmBdZleNmyQX0FqGYmhZIrIrpPfm/w//LTo4tVQGOGQcGCb5q9uw== -eventemitter3@4.0.7, eventemitter3@^4.0.0, eventemitter3@^4.0.4, eventemitter3@^4.0.7: +eventemitter3@4.0.7, eventemitter3@^4.0.0, eventemitter3@^4.0.1, eventemitter3@^4.0.4, eventemitter3@^4.0.7: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== @@ -11391,7 +11337,7 @@ expect@^27.5.1: jest-matcher-utils "^27.5.1" jest-message-util "^27.5.1" -express@^4.17.1: +express@^4.17.1, express@^4.17.3: version "4.17.3" resolved "https://registry.yarnpkg.com/express/-/express-4.17.3.tgz#f6c7302194a4fb54271b73a1fe7a06478c8f85a1" integrity sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg== @@ -11468,11 +11414,6 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extract-stack@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/extract-stack/-/extract-stack-1.0.0.tgz#b97acaf9441eea2332529624b732fc5a1c8165fa" - integrity sha1-uXrK+UQe6iMyUpYktzL8WhyBZfo= - extract-stack@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/extract-stack/-/extract-stack-2.0.0.tgz#11367bc865bfcd9bc0db3123e5edb57786f11f9b" @@ -11499,11 +11440,21 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== +faker@^5.5.3: + version "5.5.3" + resolved "https://registry.yarnpkg.com/faker/-/faker-5.5.3.tgz#c57974ee484431b25205c2c8dc09fda861e51e0e" + integrity sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g== + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== +fast-equals@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-2.0.4.tgz#3add9410585e2d7364c2deeb6a707beadb24b927" + integrity sha512-caj/ZmjHljPrZtbzJ3kfH5ia/k4mTJe/qSiXAGzxZWRZgsgDV0cvNaQULqUX8t0/JVlzzEdYOwCN5DmzTxoD4w== + fast-glob@3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" @@ -11553,11 +11504,23 @@ 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-levenshtein@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz#37b899ae47e1090e40e3fd2318e4d5f0142ca912" + integrity sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ== + dependencies: + fastest-levenshtein "^1.0.7" + fast-safe-stringify@^2.0.7: version "2.1.1" resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== +fastest-levenshtein@^1.0.7: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" + integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== + fastq@^1.6.0: version "1.13.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" @@ -11847,9 +11810,9 @@ fork-ts-checker-webpack-plugin@^4.1.6: worker-rpc "^0.1.0" fork-ts-checker-webpack-plugin@^6.0.4: - version "6.5.0" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.0.tgz#0282b335fa495a97e167f69018f566ea7d2a2b5e" - integrity sha512-cS178Y+xxtIjEUorcHddKS7yCMlrDPV31mt47blKKRfMd70Kxu5xruAFE2o9sDY6wVC5deuob/u/alD04YYHnw== + version "6.5.1" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.1.tgz#fd689e2d9de6ac76abb620909eea56438cd0f232" + integrity sha512-x1wumpHOEf4gDROmKTaB6i4/Q6H3LwmjVO7fIX47vBwlZbtPjU33hgoMuD/Q/y6SU8bnuYSoN6ZQOLshGp0T/g== dependencies: "@babel/code-frame" "^7.8.3" "@types/json-schema" "^7.0.5" @@ -11923,6 +11886,11 @@ fromentries@^1.3.2: resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + fs-extra@^0.30.0: version "0.30.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" @@ -11943,15 +11911,6 @@ fs-extra@^10.0.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - fs-extra@^8.1, fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -12395,9 +12354,9 @@ graceful-fs@4.1.15: integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.9" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" - integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== graphql-tag@2.12.4: version "2.12.4" @@ -12414,15 +12373,20 @@ graphql-tag@^2.10.1, graphql-tag@^2.12.3: tslib "^2.1.0" graphql-ws@^5.6.3: - version "5.6.4" - resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-5.6.4.tgz#ef00bcb4d1a6bbd96c1b30ca1d8096cd837ac9c9" - integrity sha512-5r8tAzznI1zeh7k12+3z07KkgXPckQbnC9h4kJ2TBDWG2wb26TJTbVHQOiAncDBgPbtXtc1A2BlttiRuPH2t/w== + version "5.7.0" + resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-5.7.0.tgz#4b9d7a0ee9555804582f27f5d7695d10aafdbdc8" + integrity sha512-8yYuvnyqIjlJ/WfebOyu2GSOQeFauRxnfuTveY9yvrDGs2g3kR9Nv4gu40AKvRHbXlSJwTbMJ6dVxAtEyKwVRA== "graphql@14.0.2 - 14.2.0 || ^14.3.1 || ^15.0.0", graphql@15.8.0, graphql@^15.7.2: version "15.8.0" resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.8.0.tgz#33410e96b012fa3bdb1091cc99a94769db212b38" integrity sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw== +gud@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" + integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw== + handle-thing@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" @@ -12457,11 +12421,6 @@ has-bigints@^1.0.1: resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" - integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -12701,7 +12660,7 @@ html-entities@^2.1.0, html-entities@^2.3.2: resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== -html-escaper@^2.0.0: +html-escaper@^2.0.0, html-escaper@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== @@ -12732,10 +12691,17 @@ html-minifier-terser@^6.0.2: relateurl "^0.2.7" terser "^5.10.0" +html-parse-stringify@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2" + integrity sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg== + dependencies: + void-elements "3.1.0" + html-tags@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" - integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.2.0.tgz#dbb3518d20b726524e4dd43de397eb0a95726961" + integrity sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg== html-void-elements@^1.0.0: version "1.0.5" @@ -12783,7 +12749,7 @@ htmlparser2@^6.1.0: domutils "^2.5.2" entities "^2.0.0" -http-call@^5.2.2: +http-call@^5.2.2, http-call@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/http-call/-/http-call-5.3.0.tgz#4ded815b13f423de176eb0942d69c43b25b148db" integrity sha512-ahwimsC23ICE4kPl9xTBjKB4inbRaeLyZeRunC/1Jy/Z6X8tv22MEAjK+KBOMSVLaqXPTTmd8638waVIKLGx2w== @@ -12846,7 +12812,7 @@ http-proxy-agent@^4.0.1: agent-base "6" debug "4" -http-proxy-middleware@^2.0.0: +http-proxy-middleware@^2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.4.tgz#03af0f4676d172ae775cb5c33f592f40e1a4e07a" integrity sha512-m/4FxX17SUvz4lJ5WPXOHDUuCwIqXLfLHs1s0uZ3oYjhoXlx9csYxaOa0ElDEJ+h8Q4iJ1s+lTMbiCa4EXIJqg== @@ -12927,6 +12893,20 @@ hyperlinker@^1.0.0: resolved "https://registry.yarnpkg.com/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e" integrity sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ== +i18next-browser-languagedetector@^6.1.2: + version "6.1.4" + resolved "https://registry.yarnpkg.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-6.1.4.tgz#7b087c5edb6f6acd38ef54ede2160ab9cde0108f" + integrity sha512-wukWnFeU7rKIWT66VU5i8I+3Zc4wReGcuDK2+kuFhtoxBRGWGdvYI9UQmqNL/yQH1KogWwh+xGEaIPH8V/i2Zg== + dependencies: + "@babel/runtime" "^7.14.6" + +i18next@^20.3.5: + version "20.6.1" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-20.6.1.tgz#535e5f6e5baeb685c7d25df70db63bf3cc0aa345" + integrity sha512-yCMYTMEJ9ihCwEQQ3phLo7I/Pwycf8uAx+sRHwwk5U9Aui/IZYgQRyMqXafQOw5QQ7DM1Z+WyEXWIqSuJHhG2A== + dependencies: + "@babel/runtime" "^7.12.0" + iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -13055,7 +13035,7 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -indent-string@^3.0.0, indent-string@^3.1.0, indent-string@^3.2.0: +indent-string@^3.0.0, indent-string@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= @@ -13167,7 +13147,7 @@ invariant@^2.2.4: dependencies: loose-envify "^1.0.0" -ip@^1.1.0, ip@^1.1.5: +ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= @@ -13292,7 +13272,7 @@ is-ci@^3.0.0: dependencies: ci-info "^3.2.0" -is-core-module@^2.2.0, is-core-module@^2.7.0, is-core-module@^2.8.0, is-core-module@^2.8.1: +is-core-module@^2.2.0, is-core-module@^2.7.0, is-core-module@^2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== @@ -13473,9 +13453,9 @@ is-negative-zero@^2.0.2: integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== is-number-object@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" - integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== dependencies: has-tostringtag "^1.0.0" @@ -13503,11 +13483,6 @@ is-observable@^1.1.0: dependencies: symbol-observable "^1.1.0" -is-path-cwd@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - is-path-inside@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" @@ -13576,9 +13551,11 @@ is-set@^2.0.2: integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== is-shared-array-buffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6" - integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA== + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" is-ssh@^1.3.0: version "1.3.3" @@ -14440,7 +14417,7 @@ json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -json5@2.x, json5@^2.1.2, json5@^2.1.3: +json5@2.x, json5@^2.1.2, json5@^2.1.3, json5@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== @@ -14501,11 +14478,11 @@ jsprim@^2.0.2: verror "1.10.0" "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz#720b97bfe7d901b927d87c3773637ae8ea48781b" - integrity sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA== + version "3.2.2" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.2.tgz#6ab1e52c71dfc0c0707008a91729a9491fe9f76c" + integrity sha512-HDAyJ4MNQBboGpUnHAVUNJs6X0lh058s6FuixsFGP7MgJYpD6Vasd6nzSG5iIfXu1zAYlHJ/zsOKNlrenTUBnw== dependencies: - array-includes "^3.1.3" + array-includes "^3.1.4" object.assign "^4.1.2" junk@^3.1.0: @@ -14671,7 +14648,7 @@ lilconfig@2.0.4: resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.4.tgz#f4507d043d7058b380b6a8f5cb7bcd4b34cee082" integrity sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA== -lilconfig@^2.0.3, lilconfig@^2.0.4: +lilconfig@^2.0.3, lilconfig@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.5.tgz#19e57fd06ccc3848fd1891655b5a447092225b25" integrity sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg== @@ -14773,7 +14750,7 @@ listr@0.14.3: p-map "^2.0.0" rxjs "^6.3.3" -load-json-file@^5.2.0: +load-json-file@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3" integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw== @@ -14872,11 +14849,6 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= - lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" @@ -14937,21 +14909,6 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash.template@^4.4.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" - integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.templatesettings "^4.0.0" - -lodash.templatesettings@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" - integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.truncate@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" @@ -14967,7 +14924,7 @@ lodash.xorby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.xorby/-/lodash.xorby-4.7.0.tgz#9c19a6f9f063a6eb53dd03c1b6871799801463d7" integrity sha1-nBmm+fBjputT3QPBtocXmYAUY9c= -lodash@4.x, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.7.0, lodash@~4.17.10: +lodash@4.x, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.7.0, lodash@~4.17.10: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -15054,6 +15011,11 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +lru-cache@^7.4.0: + version "7.8.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.8.1.tgz#68ee3f4807a57d2ba185b7fd90827d5c21ce82bb" + integrity sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg== + lru_map@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" @@ -15494,11 +15456,16 @@ module-deps@^6.2.3: through2 "^2.0.0" xtend "^4.0.0" -moment@2.29.1, moment@^2.22.1: +moment@2.29.1: version "2.29.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== +moment@^2.22.1: + version "2.29.2" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.2.tgz#00910c60b20843bcba52d37d58c628b47b1f20e4" + integrity sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg== + moo-color@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/moo-color/-/moo-color-1.0.3.tgz#d56435f8359c8284d83ac58016df7427febece74" @@ -15538,17 +15505,12 @@ ms@2.1.3, ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -multicast-dns-service-types@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" - integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= - -multicast-dns@^6.0.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" - integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== +multicast-dns@^7.2.4: + version "7.2.4" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.4.tgz#cf0b115c31e922aeb20b64e6556cbeb34cf0dd19" + integrity sha512-XkCYOU+rr2Ft3LI6w4ye51M3VK31qJXFIxu0XLw169PtKG0Zx47OrXeVW/GCYOfpC9s1yyyf1S+L8/4LY0J9Zw== dependencies: - dns-packet "^1.3.1" + dns-packet "^5.2.2" thunky "^1.0.2" mz@^2.4.0: @@ -15613,9 +15575,9 @@ neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1, neo-async@^2.6.2: integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== nested-error-stacks@^2.0.0, nested-error-stacks@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz#0fbdcf3e13fe4994781280524f8b96b0cdff9c61" - integrity sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug== + version "2.1.1" + resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz#26c8a3cee6cc05fbcf1e333cd2fc3e003326c0b5" + integrity sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw== next-tick@^1.1.0: version "1.1.0" @@ -15734,14 +15696,14 @@ node-fetch@2.6.7, node-fetch@^2.6.1, node-fetch@^2.6.7: whatwg-url "^5.0.0" node-forge@^1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.0.tgz#37a874ea723855f37db091e6c186e5b67a01d4b2" - integrity sha512-08ARB91bUi6zNKzVmaj3QO7cr397uiDT2nJ63cHjyNtCTWIgvS47j3eT0WfzUwS9+6Z5YshRaoasFkXCKrIYbA== + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== node-gyp-build@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.3.0.tgz#9f256b03e5826150be39c764bf51e993946d71a3" - integrity sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q== + version "4.4.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.4.0.tgz#42e99687ce87ddeaf3a10b99dc06abc11021f3f4" + integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ== node-html-parser@1.4.9: version "1.4.9" @@ -15795,9 +15757,9 @@ node-releases@^1.1.71: integrity sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ== node-releases@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01" - integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg== + version "2.0.3" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.3.tgz#225ee7488e4a5e636da8da52854844f9d716ca96" + integrity sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw== normalize-package-data@^2.5.0: version "2.5.0" @@ -15831,6 +15793,11 @@ normalize-url@^6.0.1, normalize-url@^6.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== +normalize.css@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-8.0.1.tgz#9b98a208738b9cc2634caacbc42d131c97487bf3" + integrity sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg== + npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -15894,6 +15861,43 @@ nwsapi@^2.2.0: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== +nx@13.10.1, nx@^13.8.3: + version "13.10.1" + resolved "https://registry.yarnpkg.com/nx/-/nx-13.10.1.tgz#ddadf6ca15eacd6543dc79e33563fdfc75e5c0e5" + integrity sha512-XA1sN8biNhUJcKqjUMsvbC8QzIF631CJvDxZ1n48R1QsB8LJG/pvHY2pIqz6GWRJFbR9mhwAqYyoHq43qCSyYw== + dependencies: + "@nrwl/cli" "13.10.1" + "@nrwl/tao" "13.10.1" + "@parcel/watcher" "2.0.4" + "@swc-node/register" "^1.4.2" + "@swc/core" "^1.2.152" + chalk "4.1.0" + chokidar "^3.5.1" + cli-cursor "3.1.0" + cli-spinners "2.6.1" + dotenv "~10.0.0" + enquirer "~2.3.6" + fast-glob "3.2.7" + figures "3.2.0" + flat "^5.0.2" + fs-extra "^9.1.0" + glob "7.1.4" + ignore "^5.0.4" + jsonc-parser "3.0.0" + minimatch "3.0.4" + npm-run-path "^4.0.1" + open "^8.4.0" + rxjs "^6.5.4" + rxjs-for-await "0.0.2" + semver "7.3.4" + tar-stream "~2.2.0" + tmp "~0.2.1" + tsconfig-paths "^3.9.0" + tslib "^2.3.0" + v8-compile-cache "2.3.0" + yargs "^17.4.0" + yargs-parser "21.0.1" + nx@13.8.1: version "13.8.1" resolved "https://registry.yarnpkg.com/nx/-/nx-13.8.1.tgz#10e17dace55eb38f762ed212ded02e24797c8ac7" @@ -15901,30 +15905,6 @@ nx@13.8.1: dependencies: "@nrwl/cli" "13.8.1" -nx@13.9.5, nx@^13.8.3: - version "13.9.5" - resolved "https://registry.yarnpkg.com/nx/-/nx-13.9.5.tgz#b67068a83a2bd80e35d97f7e8d62f622c7fc9744" - integrity sha512-hkGWaoJCqQPeVh3w67dlksM0Eab61EYYeZ1GZd6/YSC4EKzjtlQLRt2CMNu+2qCAkkUp4UgOWJHGUesGakcyDA== - dependencies: - "@nrwl/cli" "13.9.5" - "@nrwl/tao" "13.9.5" - "@swc-node/register" "^1.4.2" - "@swc/core" "^1.2.146" - chalk "4.1.0" - enquirer "~2.3.6" - fast-glob "3.2.7" - fs-extra "^9.1.0" - ignore "^5.0.4" - jsonc-parser "3.0.0" - rxjs "^6.5.4" - rxjs-for-await "0.0.2" - semver "7.3.4" - tmp "~0.2.1" - tsconfig-paths "^3.9.0" - tslib "^2.3.0" - v8-compile-cache "2.3.0" - yargs-parser "20.0.0" - object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -16433,7 +16413,7 @@ pascalcase@^0.1.1: resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= -password-prompt@^1.0.7, password-prompt@^1.1.2: +password-prompt@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/password-prompt/-/password-prompt-1.1.2.tgz#85b2f93896c5bd9e9f2d6ff0627fa5af3dc00923" integrity sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA== @@ -16692,11 +16672,16 @@ pnp-webpack-plugin@1.6.4: ts-pnp "^1.1.6" polished@^4.0.5: - version "4.1.4" - resolved "https://registry.yarnpkg.com/polished/-/polished-4.1.4.tgz#640293ba834109614961a700fdacbb6599fb12d0" - integrity sha512-Nq5Mbza+Auo7N3sQb1QMFaQiDO+4UexWuSGR7Cjb4Sw11SZIJcrrFtiZ+L0jT9MBsUsxDboHVASbCLbE1rnECg== + version "4.2.2" + resolved "https://registry.yarnpkg.com/polished/-/polished-4.2.2.tgz#2529bb7c3198945373c52e34618c8fe7b1aa84d1" + integrity sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ== dependencies: - "@babel/runtime" "^7.16.7" + "@babel/runtime" "^7.17.8" + +popper.js@^1.14.4, popper.js@^1.16.1: + version "1.16.1" + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" + integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== portfinder@^1.0.28: version "1.0.28" @@ -16781,11 +16766,11 @@ postcss-js@^4.0.0: camelcase-css "^2.0.1" postcss-load-config@^3.0.0, postcss-load-config@^3.1.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.3.tgz#21935b2c43b9a86e6581a576ca7ee1bde2bd1d23" - integrity sha512-5EYgaM9auHGtO//ljHH+v/aC/TQ5LHXtL7bQajNAUBKUVKiYE8rYpFms7+V26D9FncaGe2zwCoPQsFKb5zF/Hw== + version "3.1.4" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" + integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== dependencies: - lilconfig "^2.0.4" + lilconfig "^2.0.5" yaml "^1.10.2" postcss-loader@^4.2.0: @@ -16808,10 +16793,10 @@ postcss-loader@^6.1.1: klona "^2.0.5" semver "^7.3.5" -postcss-merge-longhand@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.3.tgz#a49e2be6237316e3b55e329e0a8da15d1f9f47ab" - integrity sha512-lX8GPGvZ0iGP/IboM7HXH5JwkXvXod1Rr8H8ixwiA372hArk0zP4ZcCy4z4Prg/bfNlbbTf0KCOjCF9kKnpP/w== +postcss-merge-longhand@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.4.tgz#0f46f8753989a33260efc47de9a0cdc571f2ec5c" + integrity sha512-hbqRRqYfmXoGpzYKeW0/NCZhvNyQIlQeWVSao5iKWdyx7skLvCfQFGIUsP9NUs3dSbPac2IC4Go85/zG+7MlmA== dependencies: postcss-value-parser "^4.2.0" stylehacks "^5.1.0" @@ -17027,9 +17012,9 @@ postcss-reduce-transforms@^5.1.0: postcss-value-parser "^4.2.0" postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.6, postcss-selector-parser@^6.0.9: - version "6.0.9" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz#ee71c3b9ff63d9cd130838876c13a2ec1a992b2f" - integrity sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ== + version "6.0.10" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" + integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" @@ -17049,6 +17034,11 @@ postcss-unique-selectors@^5.1.1: dependencies: postcss-selector-parser "^6.0.5" +postcss-value-parser@^3.3.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" @@ -17101,9 +17091,9 @@ prelude-ls@~1.1.2: integrity sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w== prettier@^2.5.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.1.tgz#d472797e0d7461605c1609808e27b80c0f9cfe17" - integrity sha512-8UVbTBYGwN37Bs9LERmxCPjdvPxlEowx2urIL6urHzdb3SDq4B/Z6xLFCblrSnE4iKWcS6ziJ3aOYrc1kz/E2A== + version "2.6.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.2.tgz#e26d71a18a74c3d0f0597f55f01fb6c06c206032" + integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew== pretty-bytes@^5.6.0: version "5.6.0" @@ -17199,7 +17189,7 @@ prompts@^2.0.1, prompts@^2.4.0: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.0.0, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@^15.0.0, 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.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -17391,6 +17381,13 @@ quick-lru@^5.1.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== +raf@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" + integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== + dependencies: + performance-now "^2.1.0" + ramda@^0.21.0: version "0.21.0" resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.21.0.tgz#a001abedb3ff61077d4ff1d577d44de77e8d0a35" @@ -17517,9 +17514,9 @@ react-fast-compare@^3.0.1, react-fast-compare@^3.2.0: integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== react-helmet-async@^1.0.7: - version "1.2.3" - resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-1.2.3.tgz#57326a69304ea3293036eafb49475e9ba454cb37" - integrity sha512-mCk2silF53Tq/YaYdkl2sB+/tDoPnaxN7dFS/6ZLJb/rhUY2EWGI5Xj2b4jHppScMqY45MbgPSwTxDchKpZ5Kw== + version "1.3.0" + resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-1.3.0.tgz#7bd5bf8c5c69ea9f02f6083f14ce33ef545c222e" + integrity sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg== dependencies: "@babel/runtime" "^7.12.5" invariant "^2.2.4" @@ -17528,9 +17525,18 @@ react-helmet-async@^1.0.7: shallowequal "^1.1.0" react-hook-form@^7.27.0: - version "7.28.1" - resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.28.1.tgz#95fc37be6c6b9d57212eb7eca055fb36d079b3b7" - integrity sha512-mgwxvXuvt3FMY/mdnWbPc++Zf1U5xYzkhOaL05mtFMLvXc9MvUhMUlKtUVuO12sOrgT3nPXBgVFawtiJ4ONrgg== + version "7.29.0" + resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.29.0.tgz#5e7e41a483b70731720966ed8be52163ea1fecf1" + integrity sha512-NcJqWRF6el5HMW30fqZRt27s+lorvlCCDbTpAyHoodQeYWXgQCvZJJQLC1kRMKdrJknVH0NIg3At6TUzlZJFOQ== + +react-i18next@^11.11.4: + version "11.16.5" + resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.16.5.tgz#5258784b9b617c443811307072a434ec7447c70a" + integrity sha512-dkDN9suVU/jaD9A0xM4qNU9++LwgueWZn5XGTDEKTZeBgsd3q17ssTQXlSbEb0Gl0iLDdUKU7MrdjQjDc33ztA== + dependencies: + "@babel/runtime" "^7.14.5" + html-escaper "^2.0.2" + html-parse-stringify "^3.0.1" react-inspector@^5.1.0: version "5.1.1" @@ -17541,16 +17547,26 @@ react-inspector@^5.1.0: is-dom "^1.0.0" prop-types "^15.0.0" -react-is@17.0.2, "react-is@^16.12.0 || ^17.0.0", react-is@^17.0.1, react-is@^17.0.2: +react-is@17.0.2, react-is@^17.0.1, react-is@^17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -react-is@^16.13.1, react-is@^16.7.0: +react-is@^16.10.2, react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== +"react-is@^16.12.0 || ^17.0.0 || ^18.0.0": + version "18.0.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.0.0.tgz#026f6c4a27dbe33bf4a35655b9e1327c4e55e3f5" + integrity sha512-yUcBYdBBbo3QiPsgYDcfQcIkGZHfxOaoE6HLSnr1sPzMhdyxusbfKOSUbSd/ocGi32dxcj366PsTj+5oggeKKw== + +react-lifecycles-compat@^3.0.4: + version "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@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/react-popper-tooltip/-/react-popper-tooltip-3.1.1.tgz#329569eb7b287008f04fcbddb6370452ad3f9eac" @@ -17560,6 +17576,19 @@ react-popper-tooltip@^3.1.1: "@popperjs/core" "^2.5.4" react-popper "^2.2.4" +react-popper@^1.3.7: + version "1.3.11" + resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-1.3.11.tgz#a2cc3f0a67b75b66cfa62d2c409f9dd1fcc71ffd" + integrity sha512-VSA/bS+pSndSF2fiasHK/PTEEAyOpX60+H5EPAjoArr8JGm+oihu4UbrqcEBpQibJxBVCpYyjAX7abJ+7DoYVg== + dependencies: + "@babel/runtime" "^7.1.2" + "@hypnosphi/create-react-context" "^0.3.1" + deep-equal "^1.1.1" + popper.js "^1.14.4" + prop-types "^15.6.1" + typed-styles "^0.0.7" + warning "^4.0.2" + react-popper@^2.2.4: version "2.2.5" resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-2.2.5.tgz#1214ef3cec86330a171671a4fbcbeeb65ee58e96" @@ -17602,15 +17631,16 @@ react-remove-scroll@^2.4.0: use-callback-ref "^1.2.3" use-sidecar "^1.0.1" -react-router-dom@^6.0.0: - version "6.2.2" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.2.2.tgz#f1a2c88365593c76b9612ae80154a13fcb72e442" - integrity sha512-AtYEsAST7bDD4dLSQHDnk/qxWLJdad5t1HFa1qJyUrCeGgEuCSw0VB/27ARbF9Fi/W5598ujvJOm3ujUCVzuYQ== +react-resize-detector@^6.6.3: + version "6.7.8" + resolved "https://registry.yarnpkg.com/react-resize-detector/-/react-resize-detector-6.7.8.tgz#318c85d1335e50f99d4fb8eb9ec34e066db597d0" + integrity sha512-0FaEcUBAbn+pq3PT5a9hHRebUfuS1SRLGLpIw8LydU7zX429I6XJgKerKAMPsJH0qWAl6o5bVKNqFJqr6tGPYw== dependencies: - history "^5.2.0" - react-router "6.2.2" + "@types/resize-observer-browser" "^0.1.6" + lodash "^4.17.21" + resize-observer-polyfill "^1.5.1" -react-router-dom@^6.3.0: +react-router-dom@^6.0.0, react-router-dom@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.3.0.tgz#a0216da813454e521905b5fa55e0e5176123f43d" integrity sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw== @@ -17618,14 +17648,7 @@ react-router-dom@^6.3.0: history "^5.2.0" react-router "6.3.0" -react-router@6.2.2, react-router@^6.0.0: - version "6.2.2" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.2.2.tgz#495e683a0c04461eeb3d705fe445d6cf42f0c249" - integrity sha512-/MbxyLzd7Q7amp4gDOGaYvXwhEojkJD5BtExkuKmj39VEE0m3l/zipf6h2WIB2jyAO0lI6NGETh4RDcktRm4AQ== - dependencies: - history "^5.2.0" - -react-router@6.3.0: +react-router@6.3.0, react-router@^6.0.0: version "6.3.0" resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.3.0.tgz#3970cc64b4cb4eae0c1ea5203a80334fdd175557" integrity sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ== @@ -17633,12 +17656,12 @@ react-router@6.3.0: history "^5.2.0" react-shallow-renderer@^16.13.1: - version "16.14.1" - resolved "https://registry.yarnpkg.com/react-shallow-renderer/-/react-shallow-renderer-16.14.1.tgz#bf0d02df8a519a558fd9b8215442efa5c840e124" - integrity sha512-rkIMcQi01/+kxiTE9D3fdS959U1g7gs+/rborw++42m1O9FAQiNI/UNRZExVUoAOprn4umcXf+pFRou8i4zuBg== + version "16.15.0" + resolved "https://registry.yarnpkg.com/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz#48fb2cf9b23d23cde96708fe5273a7d3446f4457" + integrity sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA== dependencies: object-assign "^4.1.1" - react-is "^16.12.0 || ^17.0.0" + react-is "^16.12.0 || ^17.0.0 || ^18.0.0" react-sizeme@^3.0.1: version "3.0.2" @@ -17650,6 +17673,15 @@ react-sizeme@^3.0.1: shallowequal "^1.1.0" throttle-debounce "^3.0.1" +react-smooth@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/react-smooth/-/react-smooth-2.0.0.tgz#561647b33e498b2e25f449b3c6689b2e9111bf91" + integrity sha512-wK4dBBR6P21otowgMT9toZk+GngMplGS1O5gk+2WSiHEXIrQgDvhR5IIlT74Vtu//qpTcipkgo21dD7a7AUNxw== + dependencies: + fast-equals "^2.0.0" + raf "^3.4.0" + react-transition-group "2.9.0" + react-style-singleton@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.1.1.tgz#ce7f90b67618be2b6b94902a30aaea152ce52e66" @@ -17700,6 +17732,16 @@ react-textarea-autosize@^8.3.0: use-composed-ref "^1.0.0" use-latest "^1.0.0" +react-transition-group@2.9.0, react-transition-group@^2.9.0: + 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-use-websocket@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/react-use-websocket/-/react-use-websocket-3.0.0.tgz#754cb8eea76f55d31c5676d4abe3e573bc2cea04" @@ -17764,7 +17806,7 @@ read-pkg@^5.2.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@3, readable-stream@^3.0.6, readable-stream@^3.5.0, readable-stream@^3.6.0: +readable-stream@3, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -17806,6 +17848,33 @@ recast@^0.20.0: source-map "~0.6.1" tslib "^2.0.1" +recharts-scale@^0.4.4: + version "0.4.5" + resolved "https://registry.yarnpkg.com/recharts-scale/-/recharts-scale-0.4.5.tgz#0969271f14e732e642fcc5bd4ab270d6e87dd1d9" + integrity sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w== + dependencies: + decimal.js-light "^2.4.1" + +recharts@^2.1.2: + version "2.1.9" + resolved "https://registry.yarnpkg.com/recharts/-/recharts-2.1.9.tgz#a52d411a7d822d118f7754cfc9c50db8fab46fb9" + integrity sha512-VozH5uznUvGqD7n224FGj7cmMAenlS0HPCs+7r2HeeHiQK6un6z0CTZfWVAB860xbcr4m+BN/EGMPZmYWd34Rg== + dependencies: + "@types/d3-interpolate" "^2.0.0" + "@types/d3-scale" "^3.0.0" + "@types/d3-shape" "^2.0.0" + classnames "^2.2.5" + d3-interpolate "^2.0.0" + d3-scale "^3.0.0" + d3-shape "^2.0.0" + eventemitter3 "^4.0.1" + lodash "^4.17.19" + react-is "^16.10.2" + react-resize-detector "^6.6.3" + react-smooth "^2.0.0" + recharts-scale "^0.4.4" + reduce-css-calc "^2.1.8" + rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" @@ -17828,6 +17897,14 @@ redeyed@~2.1.0: dependencies: esprima "~4.0.0" +reduce-css-calc@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz#7ef8761a28d614980dc0c982f772c93f7a99de03" + integrity sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg== + dependencies: + css-unit-converter "^1.1.1" + postcss-value-parser "^3.3.0" + refractor@^3.1.0, refractor@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/refractor/-/refractor-3.6.0.tgz#ac318f5a0715ead790fcfb0c71f4dd83d977935a" @@ -17869,10 +17946,10 @@ regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== -regenerator-transform@^0.14.2: - version "0.14.5" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" - integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== +regenerator-transform@^0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537" + integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg== dependencies: "@babel/runtime" "^7.8.4" @@ -18277,13 +18354,6 @@ rxjs-for-await@0.0.2: resolved "https://registry.yarnpkg.com/rxjs-for-await/-/rxjs-for-await-0.0.2.tgz#26598a1d6167147cc192172970e7eed4e620384b" integrity sha512-IJ8R/ZCFMHOcDIqoABs82jal00VrZx8Xkgfe7TOKoaRPAW5nH/VFlG23bXpeGdrmtqI9UobFPgUKgCuFc7Lncw== -rxjs@6.5.5: - version "6.5.5" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec" - integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ== - dependencies: - tslib "^1.9.0" - rxjs@^6.3.3, rxjs@^6.5.4: version "6.6.7" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" @@ -18365,17 +18435,10 @@ sass-loader@^12.2.0: klona "^2.0.4" neo-async "^2.6.2" -sass@1.43.2: - version "1.43.2" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.43.2.tgz#c02501520c624ad6622529a8b3724eb08da82d65" - integrity sha512-DncYhjl3wBaPMMJR0kIUaH3sF536rVrOcqqVGmTZHQRRzj7LQlyGV7Mb8aCKFyILMr5VsPHwRYtyKpnKYlmQSQ== - dependencies: - chokidar ">=3.0.0 <4.0.0" - -sass@^1.42.1, sass@^1.49.9: - version "1.49.9" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.49.9.tgz#b15a189ecb0ca9e24634bae5d1ebc191809712f9" - integrity sha512-YlYWkkHP9fbwaFRZQRXgDi3mXZShslVmmo+FVK3kHLUELHHEYrCmL1x6IUjC7wLS6VuJSAFXRQS/DxdsC4xL1A== +sass@^1.42.1, sass@^1.49.11, sass@^1.49.9: + version "1.50.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.50.0.tgz#3e407e2ebc53b12f1e35ce45efb226ea6063c7c8" + integrity sha512-cLsD6MEZ5URXHStxApajEh7gW189kkjn4Rc8DQweMyF+o5HF5nfEz8QYLMlPsTOD88DknatTmBWkOcw5/LnJLQ== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" @@ -18467,7 +18530,7 @@ select-hose@^2.0.0: resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= -selfsigned@^2.0.0: +selfsigned@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.0.1.tgz#8b2df7fa56bf014d19b6007655fff209c0ef0a56" integrity sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ== @@ -18497,11 +18560,11 @@ semver@7.3.4: lru-cache "^6.0.0" semver@7.x, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + version "7.3.6" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.6.tgz#5d73886fb9c0c6602e79440b97165c29581cbb2b" + integrity sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w== dependencies: - lru-cache "^6.0.0" + lru-cache "^7.4.0" semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: version "6.3.0" @@ -19361,7 +19424,7 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-ansi@^7.0.0, strip-ansi@^7.0.1: +strip-ansi@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== @@ -19500,7 +19563,7 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^5.0.0, supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0: +supports-color@^5.3.0, supports-color@^5.4.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -19526,14 +19589,6 @@ supports-color@^9.2.1: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.2.2.tgz#502acaf82f2b7ee78eb7c83dcac0f89694e5a7bb" integrity sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA== -supports-hyperlinks@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz#71daedf36cc1060ac5100c351bb3da48c29c0ef7" - integrity sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw== - dependencies: - has-flag "^2.0.0" - supports-color "^5.0.0" - supports-hyperlinks@^2.0.0, supports-hyperlinks@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" @@ -19621,10 +19676,10 @@ syntax-error@^1.1.1: dependencies: acorn-node "^1.2.0" -table@6.7.3: - version "6.7.3" - resolved "https://registry.yarnpkg.com/table/-/table-6.7.3.tgz#255388439715a738391bd2ee4cbca89a4d05a9b7" - integrity sha512-5DkIxeA7XERBqMwJq0aHZOdMadBx4e6eDoFRuyT5VR82J0Ycg2DwM6GfA/EQAhJ+toRTaS1lIdSQCqgrmhPnlw== +table@6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" + integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== dependencies: ajv "^8.0.1" lodash.truncate "^4.4.2" @@ -19669,6 +19724,17 @@ tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== +tar-stream@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + tar@6.1.11, tar@^6.0.2: version "6.1.11" resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" @@ -19963,11 +20029,6 @@ tree-kill@1.2.2: resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== -treeify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" - integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== - trim-trailing-lines@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0" @@ -20063,7 +20124,7 @@ tsconfig-paths-webpack-plugin@3.5.2: enhanced-resolve "^5.7.0" tsconfig-paths "^3.9.0" -tsconfig-paths@^3.11.0, tsconfig-paths@^3.12.0, tsconfig-paths@^3.14.1, tsconfig-paths@^3.9.0: +tsconfig-paths@^3.11.0, tsconfig-paths@^3.14.1, tsconfig-paths@^3.9.0: version "3.14.1" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== @@ -20199,6 +20260,11 @@ typed-assert@^1.0.8: resolved "https://registry.yarnpkg.com/typed-assert/-/typed-assert-1.0.9.tgz#8af9d4f93432c4970ec717e3006f33f135b06213" integrity sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg== +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, 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" @@ -20222,9 +20288,9 @@ typescript@~4.5.2: integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA== uglify-js@^3.1.4: - version "3.15.3" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.15.3.tgz#9aa82ca22419ba4c0137642ba0df800cb06e0471" - integrity sha512-6iCVm2omGJbsu3JWac+p6kUiOpg3wFO2f8lIXjfEb8RrmLjzog1wTPMmwKB7swfzzqxj9YM+sGUM++u1qN4qJg== + version "3.15.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.15.4.tgz#fa95c257e88f85614915b906204b9623d4fa340d" + integrity sha512-vMOPGDuvXecPs34V74qDKk4iJ/SN4vL3Ow/23ixafENYvtrNvtbcgUeugTcUGRGsOF/5fU8/NYSL5Hyb3l1OJA== umd@^3.0.0: version "3.0.3" @@ -20517,9 +20583,9 @@ use-composed-ref@^1.0.0: integrity sha512-6+X1FLlIcjvFMAeAD/hcxDT8tmyrWnbSPMU0EnxQuDLIxokuFzWliXBiYZuGIx+mrAMLBw0WFfCkaPw8ebzAhw== use-isomorphic-layout-effect@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.1.tgz#7bb6589170cd2987a152042f9084f9effb75c225" - integrity sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ== + version "1.1.2" + resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb" + integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== use-latest@^1.0.0: version "1.2.0" @@ -20550,10 +20616,10 @@ use-subscription@1.5.1: dependencies: object-assign "^4.1.1" -use-sync-external-store@1.0.0-rc.1-next-629036a9c-20220224: - version "1.0.0-rc.1-next-629036a9c-20220224" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.0.0-rc.1-next-629036a9c-20220224.tgz#40cf472454789403c2de6c8471d177459d184dc1" - integrity sha512-IhuMl0apVVYsT3XPfV+0nuwf0T6+3d4YxQXV4tDRsGpSQcYVG4zoWwfX4zdtouUfuelYg4t2SEmFifIMrxPfIw== +use-sync-external-store@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.0.0.tgz#d98f4a9c2e73d0f958e7e2d2c2bfb5f618cbd8fd" + integrity sha512-AFVsxg5GkFg8GDcxnl+Z0lMAz9rE8DGJCc28qnBuQF7lac57B5smLcT37aXpXIIPz75rW4g3eXHPjhHwdGskOw== use@^3.1.0: version "3.1.1" @@ -20730,6 +20796,11 @@ vm-browserify@1.1.2, vm-browserify@^1.0.0, vm-browserify@^1.0.1: resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== +void-elements@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" + integrity sha1-YU9/v42AHwu18GYfWy9XhXUOTwk= + vscode-jsonrpc@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-4.0.0.tgz#a7bf74ef3254d0a0c272fab15c82128e378b3be9" @@ -20787,7 +20858,7 @@ walker@^1.0.7, walker@~1.0.5: dependencies: makeerror "1.0.12" -warning@^4.0.2: +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== @@ -20913,38 +20984,37 @@ webpack-dev-middleware@^5.3.1: schema-utils "^4.0.0" webpack-dev-server@^4.3.1: - version "4.7.4" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.7.4.tgz#d0ef7da78224578384e795ac228d8efb63d5f945" - integrity sha512-nfdsb02Zi2qzkNmgtZjkrMOcXnYZ6FLKcQwpxT7MvmHKc+oTtDsBju8j+NMyAygZ9GW1jMEUpy3itHtqgEhe1A== + version "4.8.1" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.8.1.tgz#58f9d797710d6e25fa17d6afab8708f958c11a29" + integrity sha512-dwld70gkgNJa33czmcj/PlKY/nOy/BimbrgZRaR9vDATBQAYgLzggR0nxDtPLJiLrMgZwbE6RRfJ5vnBBasTyg== dependencies: "@types/bonjour" "^3.5.9" "@types/connect-history-api-fallback" "^1.3.5" "@types/express" "^4.17.13" "@types/serve-index" "^1.9.1" "@types/sockjs" "^0.3.33" - "@types/ws" "^8.2.2" + "@types/ws" "^8.5.1" ansi-html-community "^0.0.8" - bonjour "^3.5.0" + bonjour-service "^1.0.11" chokidar "^3.5.3" colorette "^2.0.10" compression "^1.7.4" connect-history-api-fallback "^1.6.0" default-gateway "^6.0.3" - del "^6.0.0" - express "^4.17.1" + express "^4.17.3" graceful-fs "^4.2.6" html-entities "^2.3.2" - http-proxy-middleware "^2.0.0" + http-proxy-middleware "^2.0.3" ipaddr.js "^2.0.1" open "^8.0.9" p-retry "^4.5.0" portfinder "^1.0.28" + rimraf "^3.0.2" schema-utils "^4.0.0" - selfsigned "^2.0.0" + selfsigned "^2.0.1" serve-index "^1.9.1" sockjs "^0.3.21" spdy "^4.0.2" - strip-ansi "^7.0.0" webpack-dev-middleware "^5.3.1" ws "^8.4.2" @@ -21053,9 +21123,9 @@ webpack@4: webpack-sources "^1.4.1" webpack@^5.58.1, webpack@^5.9.0: - version "5.70.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.70.0.tgz#3461e6287a72b5e6e2f4872700bc8de0d7500e6d" - integrity sha512-ZMWWy8CeuTTjCxbeaQI21xSswseF2oNOwc70QSKNePvmxE7XW36i7vpBMYZFAUHPwQiEbNGCEYIOOlyRbdGmxw== + version "5.72.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.72.0.tgz#f8bc40d9c6bb489a4b7a8a685101d6022b8b6e28" + integrity sha512-qmSmbspI0Qo5ld49htys8GY9XhS9CGqFoHTsOVAnjBdg0Zn79y135R+k4IR4rKK6+eKaabMhJwiVB7xw0SJu5w== dependencies: "@types/eslint-scope" "^3.7.3" "@types/estree" "^0.0.51" @@ -21239,15 +21309,6 @@ wrap-ansi@^3.0.1: string-width "^2.1.1" strip-ansi "^4.0.0" -wrap-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-4.0.0.tgz#b3570d7c70156159a2d42be5cc942e957f7b1131" - integrity sha512-uMTsj9rDb0/7kk1PbcbCcwvHUxp60fGDB/NNXpVa0Q+ic/e7y5+BwTxKfQ33VYgDppSwi/FBzpetYzo8s6tfbg== - dependencies: - ansi-styles "^3.2.0" - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" @@ -21360,6 +21421,11 @@ yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.7: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@21.0.1, yargs-parser@^21.0.0: + version "21.0.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35" + integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== + yargs-parser@^13.1.2: version "13.1.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" @@ -21422,6 +21488,19 @@ yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" +yargs@^17.4.0: + version "17.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.4.1.tgz#ebe23284207bb75cee7c408c33e722bfb27b5284" + integrity sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.0.0" + yarn@^1.21.1: version "1.22.18" resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.18.tgz#05b822ade8c672987bab8858635145da0850f78a" @@ -21466,11 +21545,11 @@ zen-observable@0.8.15, zen-observable@^0.8.0: integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ== zustand@^4.0.0-beta.2: - version "4.0.0-beta.2" - resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.0.0-beta.2.tgz#27fdc32b62225cc18976c0cf8866ecee9a9f4a98" - integrity sha512-aJ5ypnOwPIa/uSjdZv/oHChTWPplpFOG/hvWwzkR5ahFiPI5R6ifyObf8Fz1Vi6Obz2wY1N32fT2pNrpT2hzPw== + version "4.0.0-beta.3" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.0.0-beta.3.tgz#16dc82b48b65ed61fe2bae5dea4501f49bd450c7" + integrity sha512-cVDcspaK0CXgVmGcXB/oenhT7EFaKqD46pTmg30ciMsOoQN0ZuxEuHzpNIy9ejah0gzBL8aqHN89IMT2uFNOaA== dependencies: - use-sync-external-store "1.0.0-rc.1-next-629036a9c-20220224" + use-sync-external-store "1.0.0" zwitch@^1.0.0: version "1.0.5"