From 61556a0915674e2c446870ea464d958d4b5ec774 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 16 May 2024 11:53:33 +0300 Subject: [PATCH 001/464] wip --- .../app/UI/pages/Gouvernance/Gouvernance.js | 9 +++++++++ .../yoroi-extension/app/UI/pages/Gouvernance/index.js | 1 + packages/yoroi-extension/jsconfig.json | 9 +++++++++ 3 files changed, 19 insertions(+) create mode 100644 packages/yoroi-extension/app/UI/pages/Gouvernance/Gouvernance.js create mode 100644 packages/yoroi-extension/app/UI/pages/Gouvernance/index.js create mode 100644 packages/yoroi-extension/jsconfig.json diff --git a/packages/yoroi-extension/app/UI/pages/Gouvernance/Gouvernance.js b/packages/yoroi-extension/app/UI/pages/Gouvernance/Gouvernance.js new file mode 100644 index 0000000000..670c5d0689 --- /dev/null +++ b/packages/yoroi-extension/app/UI/pages/Gouvernance/Gouvernance.js @@ -0,0 +1,9 @@ +import React from 'react' + +const Gouvernance = () => { + return ( +
Gouvernance
+ ) +} + +export default Gouvernance \ No newline at end of file diff --git a/packages/yoroi-extension/app/UI/pages/Gouvernance/index.js b/packages/yoroi-extension/app/UI/pages/Gouvernance/index.js new file mode 100644 index 0000000000..b13bb4eb87 --- /dev/null +++ b/packages/yoroi-extension/app/UI/pages/Gouvernance/index.js @@ -0,0 +1 @@ +export * from './'; diff --git a/packages/yoroi-extension/jsconfig.json b/packages/yoroi-extension/jsconfig.json new file mode 100644 index 0000000000..93b6ecd1ea --- /dev/null +++ b/packages/yoroi-extension/jsconfig.json @@ -0,0 +1,9 @@ + +{ + "compilerOptions": { + "module": "ES6", + "jsx": "preserve", + "checkJs": true + }, + "exclude": ["node_modules", "**/node_modules/*"] + } \ No newline at end of file From 801cea4575d6ae5d4e9fdcc683f773523d4f26a3 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Fri, 17 May 2024 12:31:29 +0300 Subject: [PATCH 002/464] refactor --- packages/yoroi-extension/app/Routes.js | 37 ++++++++++++--- .../app/UI/layout/GeneralPageLayout.js | 45 +++++++++++++++++++ .../app/UI/pages/Gouvernance/Gouvernance.js | 9 ---- .../UI/pages/Gouvernance/GouvernancePage.js | 22 +++++++++ .../app/UI/pages/Gouvernance/index.js | 1 - packages/yoroi-extension/app/routes-config.js | 5 +++ 6 files changed, 104 insertions(+), 15 deletions(-) create mode 100644 packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js delete mode 100644 packages/yoroi-extension/app/UI/pages/Gouvernance/Gouvernance.js create mode 100644 packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernancePage.js delete mode 100644 packages/yoroi-extension/app/UI/pages/Gouvernance/index.js diff --git a/packages/yoroi-extension/app/Routes.js b/packages/yoroi-extension/app/Routes.js index 1f2f97ffa8..1759f3b14f 100644 --- a/packages/yoroi-extension/app/Routes.js +++ b/packages/yoroi-extension/app/Routes.js @@ -33,6 +33,9 @@ import { Stack } from '@mui/material'; import LoadingSpinner from './components/widgets/LoadingSpinner'; import FullscreenLayout from './components/layout/FullscreenLayout'; +// New UI pages +import GouvernancePage from './UI/pages/Gouvernance/GouvernancePage'; + // PAGES const LanguageSelectionPagePromise = () => import('./containers/profile/LanguageSelectionPage'); const LanguageSelectionPage = React.lazy(LanguageSelectionPagePromise); @@ -284,7 +287,6 @@ export const Routes = (stores: StoresMap, actions: ActionsMap): Node => ( wrapSettings({ ...props, stores, actions }, SettingsSubpages(stores, actions)) } /> - wrapSwap({ ...props, stores, actions }, SwapSubpages(stores, actions))} @@ -318,6 +320,14 @@ export const Routes = (stores: StoresMap, actions: ActionsMap): Node => ( path={ROUTES.EXCHANGE_END} component={props => } /> + + {/* NEW UI Routes */} + + wrapGouvernance({ ...props, stores, actions }, GouvernanceSubpages(stores, actions)) + } + /> @@ -474,6 +484,17 @@ const NFTsSubPages = (stores, actions) => ( ); +const GouvernanceSubpages = (stores, actions) => ( + + } + /> + + +); + export function wrapSwap(swapProps: StoresAndActionsProps, children: Node): Node { const queryClient = new QueryClient(); const loader = ( @@ -494,10 +515,7 @@ export function wrapSwap(swapProps: StoresAndActionsProps, children: Node): Node ); } -export function wrapSettings( - settingsProps: StoresAndActionsProps, - children: Node -): Node { +export function wrapSettings(settingsProps: StoresAndActionsProps, children: Node): Node { return ( {children} @@ -532,3 +550,12 @@ export function wrapWallet(walletProps: StoresAndActionsProps, children: Node): export function wrapReceive(receiveProps: StoresAndActionsProps, children: Node): Node { return {children}; } + +// NEW UI - TODO: to be refactred +export function wrapGouvernance(gouvernanceProps: StoresAndActionsProps, children: Node): Node { + return ( + + {children} + + ); +} diff --git a/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js b/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js new file mode 100644 index 0000000000..057a66e017 --- /dev/null +++ b/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js @@ -0,0 +1,45 @@ +// @flow +import { Component } from 'react'; +import type { Node, ComponentType } from 'react'; +import type { StoresAndActionsProps } from '../../types/injectedProps.types'; +import { observer } from 'mobx-react'; +import { intlShape, injectIntl } from 'react-intl'; +import TopBarLayout from '../../components/layout/TopBarLayout'; +import BannerContainer from '../../containers/banners/BannerContainer'; +import { Box, Typography } from '@mui/material'; +import { withLayout } from '../../styles/context/layout'; +import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; + +type Props = {| + ...StoresAndActionsProps, + +children?: Node, +|}; + +type LayoutProps = {| + stores: any, + actions: any, + children?: Node, + intl: $npm$ReactIntl$IntlFormat, +|}; + +@observer +class GeneralPageLayout extends Component { + render() { + const { children, actions, stores, intl } = this.props; + // const sidebarContainer = ; + + return ( + } + // sidebar={sidebarContainer} + // showInContainer + // showAsCard + // withPadding={false} + > + {children} + + ); + } +} + +export default (withLayout(GeneralPageLayout): ComponentType); diff --git a/packages/yoroi-extension/app/UI/pages/Gouvernance/Gouvernance.js b/packages/yoroi-extension/app/UI/pages/Gouvernance/Gouvernance.js deleted file mode 100644 index 670c5d0689..0000000000 --- a/packages/yoroi-extension/app/UI/pages/Gouvernance/Gouvernance.js +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react' - -const Gouvernance = () => { - return ( -
Gouvernance
- ) -} - -export default Gouvernance \ No newline at end of file diff --git a/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernancePage.js b/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernancePage.js new file mode 100644 index 0000000000..646fe282b0 --- /dev/null +++ b/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernancePage.js @@ -0,0 +1,22 @@ +// @flow +import GeneralPageLayout from '../../layout/GeneralPageLayout'; +import { Box } from '@mui/material'; +import { Typography } from '@mui/material'; + +type Props = {| + stores: any, + actions: any, + children?: React$Node, +|}; + +const GouvernancePage = ({ stores, actions, children }: Props): any => { + return ( + + + Gouvernace page content + + + ); +}; + +export default GouvernancePage; diff --git a/packages/yoroi-extension/app/UI/pages/Gouvernance/index.js b/packages/yoroi-extension/app/UI/pages/Gouvernance/index.js deleted file mode 100644 index b13bb4eb87..0000000000 --- a/packages/yoroi-extension/app/UI/pages/Gouvernance/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from './'; diff --git a/packages/yoroi-extension/app/routes-config.js b/packages/yoroi-extension/app/routes-config.js index 7193aeb7db..94fbfc3f9d 100644 --- a/packages/yoroi-extension/app/routes-config.js +++ b/packages/yoroi-extension/app/routes-config.js @@ -77,4 +77,9 @@ export const ROUTES = { ORDERS: '/swap/orders', }, EXCHANGE_END: '/exchange-end', + + // NEW UI ROUTES + Gouvernance: { + ROOT: '/gouvernance', + }, }; From c1cd8291631a313592e5d68d066c560152666a43 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Fri, 17 May 2024 12:59:20 +0300 Subject: [PATCH 003/464] add new theme colors --- .../app/styles/themes/common-theme.js | 4 +- .../revamp/base-palettes/dark-palette.js | 58 +++++++++++++++++++ .../revamp/base-palettes/light-palette.js | 56 ++++++++++++++++++ .../styles/themes/revamp/dark-theme-base.js | 4 ++ .../styles/themes/revamp/light-theme-base.js | 4 ++ .../themes/revamp/themed-palettes/dark.js | 31 ++++++++++ .../themes/revamp/themed-palettes/light.js | 31 ++++++++++ 7 files changed, 186 insertions(+), 2 deletions(-) create mode 100644 packages/yoroi-extension/app/styles/themes/revamp/base-palettes/dark-palette.js create mode 100644 packages/yoroi-extension/app/styles/themes/revamp/base-palettes/light-palette.js create mode 100644 packages/yoroi-extension/app/styles/themes/revamp/themed-palettes/dark.js create mode 100644 packages/yoroi-extension/app/styles/themes/revamp/themed-palettes/light.js diff --git a/packages/yoroi-extension/app/styles/themes/common-theme.js b/packages/yoroi-extension/app/styles/themes/common-theme.js index 599e563c58..3cd482b0ab 100644 --- a/packages/yoroi-extension/app/styles/themes/common-theme.js +++ b/packages/yoroi-extension/app/styles/themes/common-theme.js @@ -18,7 +18,7 @@ export const commonTheme: Object = createTheme({ '100': '#59B1F4', }, gray: { - min: '#ffffff', + min: '#ffffff', '50': '#F0F3F5', '100': '#EAEDF2', '200': '#DCE0E9', @@ -29,7 +29,7 @@ export const commonTheme: Object = createTheme({ '700': '#4A5065', '800': '#383E54', '900': '#242838', - max: '#000000', + max: '#000000', }, background: { overlay: '#060d23cc', // dialogs, diff --git a/packages/yoroi-extension/app/styles/themes/revamp/base-palettes/dark-palette.js b/packages/yoroi-extension/app/styles/themes/revamp/base-palettes/dark-palette.js new file mode 100644 index 0000000000..c523d50a7e --- /dev/null +++ b/packages/yoroi-extension/app/styles/themes/revamp/base-palettes/dark-palette.js @@ -0,0 +1,58 @@ +export const darkPalette = { + primary_c900: '#E4E8F7', + primary_c800: '#C4CFF5', + primary_c700: '#A0B3F2', + primary_c600: '#7892E8', + primary_c500: '#4B6DDE', + primary_c400: '#2E4BB0', + primary_c300: '#304489', + primary_c200: '#142049', + primary_c100: '#171B28', + + secondary_c900: '#E4F7F3', + secondary_c800: '#C6F7ED', + secondary_c700: '#93F5E1', + secondary_c600: '#66F2D6', + secondary_c500: '#16E3BA', + secondary_c400: '#08C29D', + secondary_c300: '#0B997D', + secondary_c200: '#12705D', + secondary_c100: '#17453C', + + gray_cmax: '#FFFFFF', + gray_c900: '#E1E6F5', + gray_c800: '#BCC5E0', + gray_c700: '#9BA4C2', + gray_c600: '#7C85A3', + gray_c500: '#656C85', + gray_c400: '#4B5266', + gray_c300: '#3E4457', + gray_c200: '#262A38', + gray_c100: '#1F232E', + gray_c50: '#15171F', + gray_cmin: '#0B0B0F', + + black_static: '#000000', + white_static: '#FFFFFF', + + sys_magenta_c700: '#FF6B92', + sys_magenta_c600: '#FD3468', + sys_magenta_c500: '#FF7196', + sys_magenta_c300: '#572835', + sys_magenta_c100: '#2F171D', + + sys_cyan_c500: '#59B1F4', + sys_cyan_c100: '#112333', + + sys_yellow_c500: '#ECBA09', + sys_yellow_c100: '#31290E', + + sys_orange_c500: '#FAB357', + sys_orange_c100: '#291802', + + bg_gradient_1: + 'linear-gradient(195.39deg, rgba(26, 227, 187, 0.26) 0.57%, rgba(75, 109, 222, 0.1) 41.65%, rgba(75, 109, 222, 0.16) 100%)', + bg_gradient_2: + 'linear-gradient(205.51deg, rgba(11, 153, 125, 0.49) -10.43%, rgba(8, 194, 157, 0.08) 100%)', + bg_gradient_3: 'linear-gradient(30.09deg, #244ABF 0%, #4760FF 176.73%)', +}; diff --git a/packages/yoroi-extension/app/styles/themes/revamp/base-palettes/light-palette.js b/packages/yoroi-extension/app/styles/themes/revamp/base-palettes/light-palette.js new file mode 100644 index 0000000000..665db5944a --- /dev/null +++ b/packages/yoroi-extension/app/styles/themes/revamp/base-palettes/light-palette.js @@ -0,0 +1,56 @@ +export const lightPalette = { + primary_c900: '#121F4D', + primary_c800: '#122770', + primary_c700: '#1737A3', + primary_c600: '#3154CB', + primary_c500: '#4B6DDE', + primary_c400: '#7892E8', + primary_c300: '#A0B3F2', + primary_c200: '#C4CFF5', + primary_c100: '#E4E8F7', + + secondary_c900: '#17453C', + secondary_c800: '#12705D', + secondary_c700: '#0B997D', + secondary_c600: '#08C29D', + secondary_c500: '#16E3BA', + secondary_c400: '#66F2D6', + secondary_c300: '#93F5E1', + secondary_c200: '#C6F7ED', + secondary_c100: '#E4F7F3', + + gray_cmax: '#000000', + gray_c900: '#242838', + gray_c800: '#383E54', + gray_c700: '#4A5065', + gray_c600: '#6B7384', + gray_c500: '#8A92A3', + gray_c400: '#A7AFC0', + gray_c300: '#C4CAD7', + gray_c200: '#DCE0E9', + gray_c100: '#EAEDF2', + gray_c50: '#F0F3F5', + gray_cmin: '#FFFFFF', + + black_static: '#000000', + white_static: '#FFFFFF', + + sys_magenta_c700: '#CF053A', + sys_magenta_c600: '#E80742', + sys_magenta_c500: '#FF1351', + sys_magenta_c300: '#FBCBD7', + sys_magenta_c100: '#FFF1F5', + + sys_cyan_c500: '#59B1F4', + sys_cyan_c100: '#E8F4FF', + + sys_yellow_c500: '#ECBA09', + sys_yellow_c100: '#FDF7E2', + + sys_orange_c500: '#ED8600', + sys_orange_c100: '#FFF2E2', + + bg_gradient_1: 'linear-gradient(312.19deg, #C6F7ED 0%, #E4E8F7 100%)', + bg_gradient_2: 'linear-gradient(180deg, #93F5E1 0%, #C6F7ED 100%)', + bg_gradient_3: 'linear-gradient(30.09deg, #244ABF 0%, #4760FF 176.73%)', +}; diff --git a/packages/yoroi-extension/app/styles/themes/revamp/dark-theme-base.js b/packages/yoroi-extension/app/styles/themes/revamp/dark-theme-base.js index 989a5df0b6..015bb91039 100644 --- a/packages/yoroi-extension/app/styles/themes/revamp/dark-theme-base.js +++ b/packages/yoroi-extension/app/styles/themes/revamp/dark-theme-base.js @@ -1,4 +1,5 @@ //@flow +import { dark } from './themed-palettes/dark'; const cyan = { '400': '#59B1F4', '100': '#F2F9FF' }; const yellow = { '500': '#ECBA09', '100': '#FDF7E2' }; @@ -16,6 +17,9 @@ export const darkTheme = { palette: { mode: 'dark', /* `main` is added since MUI required it but we don't use it at all */ + ds: { + ...dark, + }, primary: { main: '#17D1AA', '900': '#17453C', diff --git a/packages/yoroi-extension/app/styles/themes/revamp/light-theme-base.js b/packages/yoroi-extension/app/styles/themes/revamp/light-theme-base.js index 2261eb531b..43f1d9a465 100644 --- a/packages/yoroi-extension/app/styles/themes/revamp/light-theme-base.js +++ b/packages/yoroi-extension/app/styles/themes/revamp/light-theme-base.js @@ -1,4 +1,5 @@ // @flow +import { light } from './themed-palettes/light'; const cyan = { '400': '#59B1F4', '100': '#F2F9FF' }; const yellow = { '500': '#ECBA09', '100': '#FDF7E2' }; @@ -16,6 +17,9 @@ export const lightTheme = { palette: { mode: 'light', /* `main` is added since MUI required it but we don't use it at all */ + ds: { + ...light, + }, primary: { main: '#4B6DDE', '900': '#121F4D', diff --git a/packages/yoroi-extension/app/styles/themes/revamp/themed-palettes/dark.js b/packages/yoroi-extension/app/styles/themes/revamp/themed-palettes/dark.js new file mode 100644 index 0000000000..dacaf2bd02 --- /dev/null +++ b/packages/yoroi-extension/app/styles/themes/revamp/themed-palettes/dark.js @@ -0,0 +1,31 @@ +import { darkPalette } from '../base-palettes/dark-palette'; + +export const dark = { + ...darkPalette, + + text_primary_high: darkPalette.primary_c700, // hover, text, button, links, text in tabs, chips + text_primary_medium: darkPalette.primary_c600, // links, tabs, chips, special cases + text_primary_low: darkPalette.primary_c300, // disabled, buttons, links + text_primary_on: darkPalette.white_static, // primary color surfaces + text_gray_max: darkPalette.gray_cmax, // hover and pressed + text_gray_normal: darkPalette.gray_c900, // draws attention + text_gray_medium: darkPalette.gray_c600, // accent or additional text + text_gray_low: darkPalette.gray_c400, // disabled text + text_error: darkPalette.sys_magenta_c500, // error messages + text_warning: darkPalette.sys_orange_c500, // warning messages + text_success: darkPalette.secondary_c500, // success messages + text_info: darkPalette.sys_cyan_c500, // info messages + + bg_color_high: darkPalette.gray_cmin, // bottom surface + bg_color_low: darkPalette.gray_c100, // upper surface + + el_primary_high: darkPalette.primary_c700, // hover'nd pressed state, actianable elements + el_primary_medium: darkPalette.primary_c600, // actionable elements + el_primary_low: darkPalette.primary_c300, // disabled elements, icons + el_gray_high: darkPalette.gray_cmax, // hover and pressed, icons, shapes, lines in buttons, icons in banners + el_gray_normal: darkPalette.gray_c900, // icons, shapes, lines in buttons, chips, tabs, checkboxes, readio, switch + el_gray_medium: darkPalette.gray_c600, // icons, shapes, inputs, bottom navigation bar + el_gray_low: darkPalette.gray_c400, // input stroke, disabled state for most components + el_secondary_medium: darkPalette.secondary_c600, // success state + el_static_white: darkPalette.white_static, // text and icons buttons and chips +}; diff --git a/packages/yoroi-extension/app/styles/themes/revamp/themed-palettes/light.js b/packages/yoroi-extension/app/styles/themes/revamp/themed-palettes/light.js new file mode 100644 index 0000000000..dea38afa46 --- /dev/null +++ b/packages/yoroi-extension/app/styles/themes/revamp/themed-palettes/light.js @@ -0,0 +1,31 @@ +import { lightPalette } from '../base-palettes/light-palette'; + +export const light = { + ...lightPalette, + + text_primary_high: lightPalette.primary_c600, // hover, text, button, links, text in tabs, chips + text_primary_medium: lightPalette.primary_c500, // links, tabs, chips, special cases + text_primary_low: lightPalette.primary_c300, // disabled, buttons, links + text_primary_on: lightPalette.white_static, // primary color surfaces + text_gray_max: lightPalette.gray_cmax, // hover and pressed + text_gray_normal: lightPalette.gray_c900, // draws attention + text_gray_medium: lightPalette.gray_c600, // accent or additional text + text_gray_low: lightPalette.gray_c400, // disabled text + text_error: lightPalette.sys_magenta_c500, // error messages + text_warning: lightPalette.sys_orange_c500, // warning messages + text_success: lightPalette.secondary_c500, // success messages + text_info: lightPalette.sys_cyan_c500, // info messages + + bg_color_high: lightPalette.gray_cmin, // bottom surface + bg_color_low: lightPalette.gray_c100, // upper surface + + el_primary_high: lightPalette.primary_c600, // hover'nd pressed state, actianable elements + el_primary_medium: lightPalette.primary_c500, // actionable elements + el_primary_low: lightPalette.primary_c300, // disabled elements, icons + el_gray_high: lightPalette.gray_cmax, // hover and pressed, icons, shapes, lines in buttons, icons in banners + el_gray_normal: lightPalette.gray_c900, // icons, shapes, lines in buttons, chips, tabs, checkboxes, readio, switch + el_gray_medium: lightPalette.gray_c600, // icons, shapes, inputs, bottom navigation bar + el_gray_low: lightPalette.gray_c400, // input stroke, disabled state for most components + el_secondary_medium: lightPalette.secondary_c400, // success state + el_static_white: lightPalette.white_static, // text and icons buttons and chips +}; From fb99c8e7a740d246d33ac6503e667bac684fa27c Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 22 May 2024 11:16:29 +0300 Subject: [PATCH 004/464] add basic structure --- packages/yoroi-extension/app/Routes.js | 6 +- .../app/UI/components/readme.md | 1 + .../gouvernace/common/ilustrations/Abstein.js | 334 ++++++++++++++++ .../common/ilustrations/DRepIlustration.js | 293 ++++++++++++++ .../common/ilustrations/NoConfidance.js | 361 ++++++++++++++++++ .../module/GouvernanceContextProvider.js | 55 +++ .../UI/features/gouvernace/module/state.js | 48 +++ .../GouvernanceStatusSelection.js | 124 ++++++ .../app/UI/layout/GeneralPageLayout.js | 22 +- .../UI/pages/Gouvernance/GouvernancePage.js | 30 +- packages/yoroi-extension/package-lock.json | 25 +- packages/yoroi-extension/package.json | 3 +- 12 files changed, 1268 insertions(+), 34 deletions(-) create mode 100644 packages/yoroi-extension/app/UI/components/readme.md create mode 100644 packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/Abstein.js create mode 100644 packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/DRepIlustration.js create mode 100644 packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/NoConfidance.js create mode 100644 packages/yoroi-extension/app/UI/features/gouvernace/module/GouvernanceContextProvider.js create mode 100644 packages/yoroi-extension/app/UI/features/gouvernace/module/state.js create mode 100644 packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js diff --git a/packages/yoroi-extension/app/Routes.js b/packages/yoroi-extension/app/Routes.js index 1759f3b14f..4cb41da033 100644 --- a/packages/yoroi-extension/app/Routes.js +++ b/packages/yoroi-extension/app/Routes.js @@ -553,9 +553,5 @@ export function wrapReceive(receiveProps: StoresAndActionsProps, children: Node) // NEW UI - TODO: to be refactred export function wrapGouvernance(gouvernanceProps: StoresAndActionsProps, children: Node): Node { - return ( - - {children} - - ); + return {children}; } diff --git a/packages/yoroi-extension/app/UI/components/readme.md b/packages/yoroi-extension/app/UI/components/readme.md new file mode 100644 index 0000000000..1440801e3b --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/readme.md @@ -0,0 +1 @@ +** General UI components used across features. EG: Tooptips, Buttons, INputs(form elements), etc... \ No newline at end of file diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/Abstein.js b/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/Abstein.js new file mode 100644 index 0000000000..00bda051ee --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/Abstein.js @@ -0,0 +1,334 @@ +import React from 'react'; + +export const Abstein = () => { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +}; diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/DRepIlustration.js b/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/DRepIlustration.js new file mode 100644 index 0000000000..dc315cc784 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/DRepIlustration.js @@ -0,0 +1,293 @@ +import React from 'react'; + +export const DRepIlustration = () => { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +}; diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/NoConfidance.js b/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/NoConfidance.js new file mode 100644 index 0000000000..830537d258 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/NoConfidance.js @@ -0,0 +1,361 @@ +import React from 'react'; + +export const NoConfidance = () => { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +}; diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/module/GouvernanceContextProvider.js b/packages/yoroi-extension/app/UI/features/gouvernace/module/GouvernanceContextProvider.js new file mode 100644 index 0000000000..34a3d83d39 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/gouvernace/module/GouvernanceContextProvider.js @@ -0,0 +1,55 @@ +// flow +import * as React from 'react'; + +import { + GouvernanceAction, + GouvernanceActionType, + GouvernanceReducer, + defaultGouvernanceActions, + defaultGouvernanceState, + GouvernanceState, + GouvernanceActions, +} from './state'; + +const initialGouvernanceProvider = { + ...defaultGouvernanceState, + ...defaultGouvernanceActions, +}; +const GouvernanceContext = React.createContext(initialGouvernanceProvider); + +type GouvernanceProviderProps = any; + +export const GouvernanceContextProvider = ({ + children, + // gouvernanceApi, + initialState, +}: GouvernanceProviderProps) => { + const [state, dispatch] = React.useReducer(GouvernanceReducer, { + ...defaultGouvernanceState, + ...initialState, + }); + + const actions = + React.useRef < + GouvernanceActions > + { + gouvernanceStatusChanged: (status: any) => { + dispatch({ type: GouvernanceActionType.GouvernanceStatusChanged, gouvernanceStatus }); + }, + }.current; + + const context = React.useMemo( + () => ({ + ...state, + // ...gouvernanceApi, + ...actions, + }), + [state, actions] + ); + + return {children}; +}; + +export const useGouvernance = () => + React.useContext(GouvernanceContext) ?? + invalid('useGouvernance: needs to be wrapped in a GouvernanceManagerProvider'); diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/module/state.js b/packages/yoroi-extension/app/UI/features/gouvernace/module/state.js new file mode 100644 index 0000000000..6277ddb91d --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/gouvernace/module/state.js @@ -0,0 +1,48 @@ +// @flow +import { invalid } from '@yoroi/common'; +import { produce } from 'immer'; + +// Define types +export type GouvernanceActions = {| + +gouvernanceStatusChanged: (status: any) => void, +|}; + +export const GouvernanceActionType = Object.freeze({ + GouvernanceStatusChanged: 'gouvernanceStatusChanged', +}); + +export type GouvernanceAction = {| + type: typeof GouvernanceActionType.GouvernanceStatusChanged, + gouvernanceStatus: 'none' | 'drep' | 'abstain' | 'noConfidence', +|}; + +// Define state type +export type GouvernanceState = {| + gouvernanceStatus?: 'none' | 'drep' | 'abstain' | 'noConfidence', +|}; + +// Define default state +export const defaultGouvernanceState: GouvernanceState = { + gouvernanceStatus: 'none', +}; + +// Define action handlers +export const defaultGouvernanceActions: GouvernanceActions = { + gouvernanceStatusChanged: () => invalid('missing init'), +}; + +// Reducer function +export const GouvernanceReducer = ( + state: GouvernanceState, + action: GouvernanceAction +): GouvernanceState => { + return produce(state, draft => { + switch (action.type) { + case GouvernanceActionType.GouvernanceStatusChanged: + draft.gouvernanceStatus = action.gouvernanceStatus; + break; + default: + (action: empty); // Ensure all cases are handled + } + }); +}; diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js b/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js new file mode 100644 index 0000000000..74d53d7b6c --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js @@ -0,0 +1,124 @@ +// @flow +import * as React from 'react'; +import type { Node } from 'react'; +import { useState } from 'react'; +import { styled } from '@mui/material/styles'; +import Card from '@mui/material/Card'; +import CardContent from '@mui/material/CardContent'; +import Typography from '@mui/material/Typography'; +import Box from '@mui/material/Box'; +import { useGouvernance } from '../../module/GouvernanceContextProvider'; +import { DRepIlustration } from '../../common/ilustrations/DRepIlustration'; +import { Abstein } from '../../common/ilustrations/Abstein'; +import { NoConfidance } from '../../common/ilustrations/NoConfidance'; +import { Stack } from '@mui/material'; + +type Props = {| + title: string, + description: string, + icon: React.Node, + selected: boolean, + onClick: () => void, +|}; + +const Container = styled(Box)(({ theme }) => ({ + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + textAlign: 'center', + paddingBottom: '24px', +})); + +const Description = styled(Typography)(({ theme }) => ({ + color: theme.palette.ds.gray_c800, + marginTop: theme.spacing(1), +})); + +const StyledCard = styled(Stack)(({ theme, selected }) => ({ + width: '294px', + borderRadius: '16px', + backgroundImage: theme.palette.ds?.bg_gradient_1, + backgroundOrigin: 'border-box', + boxShadow: 'inset 0 100vw white', + border: '2px solid transparent', +})); + +const IconContainer = styled(Box)(({ theme }) => ({ + display: 'flex', + justifyContent: 'center', +})); + +const mapStatus = { + drep: 'Delegate to a Drep', + abstain: 'Abstaining', + noConfidence: 'No confidence', +}; + +const GovernanceCard = ({ title, description, icon, selected, onClick }: Props) => ( + + + {icon} + + {title} + + {description} + + +); + +export const GouvernanceStatusSelection = (): Node => { + const [selectedCard, setSelectedCard] = useState(null); + const { gouvernanceStatus } = useGouvernance(); + + console.log('Test gouvernanceStatus', gouvernanceStatus); + + const pageTitle = gouvernanceStatus === 'none' ? 'Governance Status' : 'Governance status'; + const status = mapStatus[gouvernanceStatus]; + const pageSubtitle = + gouvernanceStatus === 'none' + ? 'Review the selections carefully to assign yourself a Governance Status' + : `You have selected ${status} as your governance status. You can change it at any time by clicking in the card bellow`; + + const handleCardClick = card => { + setSelectedCard(card); + }; + + return ( + + + {pageTitle} + + + {pageSubtitle} + + + } + selected={selectedCard === 'drep'} + onClick={() => handleCardClick('drep')} + /> + } + selected={selectedCard === 'no-vote'} + onClick={() => handleCardClick('no-vote')} + /> + } + selected={selectedCard === 'lack-of-trust'} + onClick={() => handleCardClick('lack-of-trust')} + /> + + {selectedCard && ( + + Drep ID: drep1c93a2zvs3aw8e4naez0ynpmc48jbc7yaa3n2k8ljhwfdt70yscts + + )} + + ); +}; diff --git a/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js b/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js index 057a66e017..d6e7aa039e 100644 --- a/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js +++ b/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js @@ -6,9 +6,12 @@ import { observer } from 'mobx-react'; import { intlShape, injectIntl } from 'react-intl'; import TopBarLayout from '../../components/layout/TopBarLayout'; import BannerContainer from '../../containers/banners/BannerContainer'; +import SidebarContainer from '../../containers/SidebarContainer'; import { Box, Typography } from '@mui/material'; import { withLayout } from '../../styles/context/layout'; import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; +import NavBarContainerRevamp from '../../containers/NavBarContainerRevamp'; +import NavBarTitle from '../../components/topbar/NavBarTitle'; type Props = {| ...StoresAndActionsProps, @@ -19,22 +22,27 @@ type LayoutProps = {| stores: any, actions: any, children?: Node, + navbar?: Node, intl: $npm$ReactIntl$IntlFormat, |}; @observer class GeneralPageLayout extends Component { render() { - const { children, actions, stores, intl } = this.props; - // const sidebarContainer = ; + const { children, actions, navbar, stores, intl } = this.props; + const sidebarContainer = ; return ( } - // sidebar={sidebarContainer} - // showInContainer - // showAsCard - // withPadding={false} + banner={} + sidebar={sidebarContainer} + navbar={ + } + /> + } > {children} diff --git a/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernancePage.js b/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernancePage.js index 646fe282b0..36d7d7e7ef 100644 --- a/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernancePage.js +++ b/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernancePage.js @@ -1,7 +1,10 @@ // @flow import GeneralPageLayout from '../../layout/GeneralPageLayout'; -import { Box } from '@mui/material'; -import { Typography } from '@mui/material'; +import { GouvernanceStatusSelection } from '../../features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection'; +import { GouvernanceContextProvider } from '../../features/gouvernace/module/GouvernanceContextProvider'; +import NavBarContainerRevamp from '../../../containers/NavBarContainerRevamp'; +import NavBar from '../../../components/topbar/NavBar'; +import NavBarTitle from '../../../components/topbar/NavBarTitle'; type Props = {| stores: any, @@ -11,10 +14,25 @@ type Props = {| const GouvernancePage = ({ stores, actions, children }: Props): any => { return ( - - - Gouvernace page content - + } + /> + } + menu={menu} // ADD a menu if needed (see example in SwapPageContainer) + > + + + ); }; diff --git a/packages/yoroi-extension/package-lock.json b/packages/yoroi-extension/package-lock.json index b554ce2e2b..e84a5a424b 100644 --- a/packages/yoroi-extension/package-lock.json +++ b/packages/yoroi-extension/package-lock.json @@ -55,6 +55,7 @@ "dropbox": "4.0.30", "es6-error": "4.1.1", "file-saver": "2.0.5", + "immer": "^10.1.1", "jdenticon": "3.2.0", "lodash": "4.17.21", "lottie-react": "2.4.0", @@ -532,7 +533,6 @@ "version": "7.12.17", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.17.tgz", "integrity": "sha512-V3CuX1aBywbJvV2yzJScRxeiiw0v2KZZYYE3giywxzFJL13RiyPjaaDwhDnxmgFTTS7FgvM2ijr4QmKNIu0AtQ==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", "@babel/generator": "^7.12.17", @@ -562,7 +562,6 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, "bin": { "semver": "bin/semver" } @@ -6079,7 +6078,6 @@ "version": "1.21.0", "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.21.0.tgz", "integrity": "sha512-JL0w36KuFHFCvnbOXRekqVAUplmOyT/OuCQkogo6X98MtpSaJOKEAeZnYO8JB0U/RIEixZaGI5px73YbRm/oag==", - "optional": true, "dependencies": { "merge-options": "^3.0.4" }, @@ -7877,15 +7875,6 @@ "nanoassert": "^1.0.0" } }, - "node_modules/@yoroi/swap/node_modules/immer": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/immer/-/immer-10.0.3.tgz", - "integrity": "sha512-pwupu3eWfouuaowscykeckFmVTpqbzW+rXFCX8rQLkZzM9ftBmU/++Ra+o+L27mz03zJTlyV4UUr+fdKNffo4A==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, "node_modules/@yoroi/swap/node_modules/nanoassert": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-1.1.0.tgz", @@ -12967,7 +12956,6 @@ "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, "optional": true, "dependencies": { "iconv-lite": "^0.6.2" @@ -12977,7 +12965,6 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -16786,6 +16773,15 @@ "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", "dev": true }, + "node_modules/immer": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.1.1.tgz", + "integrity": "sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -21477,7 +21473,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", - "optional": true, "dependencies": { "is-plain-obj": "^2.1.0" }, diff --git a/packages/yoroi-extension/package.json b/packages/yoroi-extension/package.json index 12bfde4901..bf9c5a18f8 100644 --- a/packages/yoroi-extension/package.json +++ b/packages/yoroi-extension/package.json @@ -187,6 +187,7 @@ "dropbox": "4.0.30", "es6-error": "4.1.1", "file-saver": "2.0.5", + "immer": "^10.1.1", "jdenticon": "3.2.0", "lodash": "4.17.21", "lottie-react": "2.4.0", @@ -221,7 +222,7 @@ "util": "0.12.5" }, "overrides": { - "@babel/helpers": "7.16.0" + "@babel/helpers": "7.16.0" }, "engineStrict": true, "engine": { From 2df3a835d133cbc8b231d644770382544edbbe0f Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 22 May 2024 11:16:45 +0300 Subject: [PATCH 005/464] move navbar --- .../yoroi-extension/app/UI/layout/GeneralPageLayout.js | 10 +--------- .../app/UI/pages/Gouvernance/GouvernancePage.js | 2 +- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js b/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js index d6e7aa039e..3cdfd4ca50 100644 --- a/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js +++ b/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js @@ -10,8 +10,6 @@ import SidebarContainer from '../../containers/SidebarContainer'; import { Box, Typography } from '@mui/material'; import { withLayout } from '../../styles/context/layout'; import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; -import NavBarContainerRevamp from '../../containers/NavBarContainerRevamp'; -import NavBarTitle from '../../components/topbar/NavBarTitle'; type Props = {| ...StoresAndActionsProps, @@ -36,13 +34,7 @@ class GeneralPageLayout extends Component { } sidebar={sidebarContainer} - navbar={ - } - /> - } + navbar={navbar} > {children} diff --git a/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernancePage.js b/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernancePage.js index 36d7d7e7ef..ca574de6b1 100644 --- a/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernancePage.js +++ b/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernancePage.js @@ -24,7 +24,7 @@ const GouvernancePage = ({ stores, actions, children }: Props): any => { title={} /> } - menu={menu} // ADD a menu if needed (see example in SwapPageContainer) + // menu={menu} // ADD a menu if needed (see example in SwapPageContainer) > Date: Wed, 22 May 2024 12:08:13 +0300 Subject: [PATCH 006/464] fix styles --- .../gouvernace/common/ilustrations/Abstein.js | 504 ++++++++----- .../common/ilustrations/DRepIlustration.js | 426 +++++++---- .../common/ilustrations/NoConfidance.js | 701 +++++++++++++----- .../GouvernanceStatusSelection.js | 40 +- .../app/UI/layout/GeneralPageLayout.js | 1 + 5 files changed, 1108 insertions(+), 564 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/Abstein.js b/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/Abstein.js index 00bda051ee..c6e173a75c 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/Abstein.js +++ b/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/Abstein.js @@ -2,191 +2,276 @@ import React from 'react'; export const Abstein = () => { return ( - + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + - - + + + + + + - - - - - - + + + + + @@ -200,11 +285,11 @@ export const Abstein = () => { @@ -218,116 +303,143 @@ export const Abstein = () => { - - - - - - - + + + + + + + + + - - - - - - + + + + - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + - - - - - - + + + + + - - + + + + + + - ); diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/DRepIlustration.js b/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/DRepIlustration.js index dc315cc784..1769ee31a8 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/DRepIlustration.js +++ b/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/DRepIlustration.js @@ -2,172 +2,184 @@ import React from 'react'; export const DRepIlustration = () => { return ( - + - - - - - + + + + + + + - - - - - - + + + + + - - + + + + + + + + + - - - - - - - + + + + + + + + + @@ -181,11 +193,11 @@ export const DRepIlustration = () => { @@ -199,27 +211,71 @@ export const DRepIlustration = () => { - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -233,60 +289,110 @@ export const DRepIlustration = () => { - - - - - - - + + + + + + + + + - - + + + + + + + + + - - - - - - - + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - ); diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/NoConfidance.js b/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/NoConfidance.js index 830537d258..e4fe4757c7 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/NoConfidance.js +++ b/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/NoConfidance.js @@ -2,229 +2,270 @@ import React from 'react'; export const NoConfidance = () => { return ( - - + + - + - - - - - - + + + - - - + + + + + + + - - - - - - + + + + + - - + + + + + + + + + - - - - - - - + + + + + + + + + - - + + + + + + + + + @@ -238,27 +279,71 @@ export const NoConfidance = () => { - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -272,89 +357,305 @@ export const NoConfidance = () => { - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + - - + + + + + + - ); diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js b/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js index 74d53d7b6c..ac83eb5d1e 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js +++ b/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js @@ -12,6 +12,8 @@ import { DRepIlustration } from '../../common/ilustrations/DRepIlustration'; import { Abstein } from '../../common/ilustrations/Abstein'; import { NoConfidance } from '../../common/ilustrations/NoConfidance'; import { Stack } from '@mui/material'; +import { Button } from '@mui/material'; +import Link from '@mui/material/Link'; type Props = {| title: string, @@ -26,7 +28,7 @@ const Container = styled(Box)(({ theme }) => ({ flexDirection: 'column', alignItems: 'center', textAlign: 'center', - paddingBottom: '24px', + paddingTop: '24px', })); const Description = styled(Typography)(({ theme }) => ({ @@ -35,12 +37,16 @@ const Description = styled(Typography)(({ theme }) => ({ })); const StyledCard = styled(Stack)(({ theme, selected }) => ({ + display: 'flex', + flexDirection: 'column', + alignItems: 'center', width: '294px', - borderRadius: '16px', + borderRadius: '8px', backgroundImage: theme.palette.ds?.bg_gradient_1, backgroundOrigin: 'border-box', boxShadow: 'inset 0 100vw white', border: '2px solid transparent', + cursor: 'pointer', })); const IconContainer = styled(Box)(({ theme }) => ({ @@ -73,11 +79,13 @@ export const GouvernanceStatusSelection = (): Node => { console.log('Test gouvernanceStatus', gouvernanceStatus); const pageTitle = gouvernanceStatus === 'none' ? 'Governance Status' : 'Governance status'; - const status = mapStatus[gouvernanceStatus]; + const statusRawText = mapStatus[gouvernanceStatus]; const pageSubtitle = gouvernanceStatus === 'none' ? 'Review the selections carefully to assign yourself a Governance Status' - : `You have selected ${status} as your governance status. You can change it at any time by clicking in the card bellow`; + : `You have selected ${statusRawText} as your governance status. You can change it at any time by clicking in the card bellow`; + + const hasDRep = gouvernanceStatus === 'drep'; const handleCardClick = card => { setSelectedCard(card); @@ -114,10 +122,26 @@ export const GouvernanceStatusSelection = (): Node => { onClick={() => handleCardClick('lack-of-trust')} /> - {selectedCard && ( - - Drep ID: drep1c93a2zvs3aw8e4naez0ynpmc48jbc7yaa3n2k8ljhwfdt70yscts - + {gouvernanceStatus === 'none' && ( + + + Want to became a Drep? + + + Learn more About Governance + + + )} + + {hasDRep && ( + + + Drep ID: drep1c93a2zvs3aw8e4naez0ynpmc48jbc7yaa3n2k8ljhwfdt70yscts + + + Learn more About Governance + + )} ); diff --git a/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js b/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js index 3cdfd4ca50..3b90cc2203 100644 --- a/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js +++ b/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js @@ -14,6 +14,7 @@ import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; type Props = {| ...StoresAndActionsProps, +children?: Node, + navbar?: Node, |}; type LayoutProps = {| From de1234475a8d8e4c751e67d4f7a2e49dade16205 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 22 May 2024 12:56:10 +0300 Subject: [PATCH 007/464] fix warnings --- .../UI/components/modals/ChooseDRepModal.js | 59 +++ .../app/UI/components/modals/Modal.js | 75 +++ .../app/UI/components/modals/ModalManager.js | 17 + .../app/UI/context/ModalContext.js | 21 + .../gouvernace/common/ilustrations/Abstein.js | 312 ++++++------ .../common/ilustrations/DRepIlustration.js | 264 +++++----- .../common/ilustrations/NoConfidance.js | 456 +++++++++--------- .../GouvernanceStatusSelection.js | 15 +- .../app/UI/layout/GeneralPageLayout.js | 18 +- .../add-wallet-bg-modern.inline.svg | 42 +- .../add-wallet/connect-hw-modern.inline.svg | 2 +- .../add-wallet/connect-hw-revamp.inline.svg | 244 +++++----- .../create-wallet-modern.inline.svg | 2 +- .../create-wallet-revamp.inline.svg | 214 ++++---- .../connect-ledger-modern.inline.svg | 2 +- .../connect-trezor-modern.inline.svg | 2 +- .../restore-normal-wallet-modern.inline.svg | 2 +- .../restore-paper-wallet-modern.inline.svg | 2 +- .../restore-wallet-modern.inline.svg | 2 +- .../restore-wallet-revamp.inline.svg | 406 ++++++++-------- .../add-wallet/restore/15-word.inline.svg | 114 ++--- .../add-wallet/restore/24-word.inline.svg | 74 +-- .../images/analytics-illustration.inline.svg | 174 +++---- .../assets-page/no-nft-found.inline.svg | 116 ++--- .../images/assets-page/no-nfts.inline.svg | 116 ++--- .../images/assets-page/no-tokens.inline.svg | 182 +++---- .../advanced-level.inline.svg | 220 ++++----- .../beginner-level.inline.svg | 102 ++-- .../dapp-connector/add-collateral.inline.svg | 248 +++++----- .../no-dapps-connected.inline.svg | 28 +- .../dashboard/empty-dashboard.inline.svg | 2 +- .../dashboard/staking-illustration.inline.svg | 220 ++++----- .../app/assets/images/error-info.inline.svg | 8 +- .../images/exchange-end-illustration.svg | 158 +++--- .../images/google-play-badge.inline.svg | 34 +- .../ledger/check-modern.inline.svg | 10 +- .../ledger/connect-error-modern.inline.svg | 14 +- .../ledger/save-error-modern.inline.svg | 14 +- .../ledger/save-load-modern.inline.svg | 14 +- .../trezor/check-modern.inline.svg | 4 +- .../trezor/connect-error-modern.inline.svg | 4 +- .../trezor/save-error-modern.inline.svg | 4 +- .../trezor/save-load-modern.inline.svg | 4 +- .../images/pic-catalyst-step1.inline.svg | 2 +- .../images/pic-catalyst-step2.inline.svg | 2 +- .../pic-catalyst-step3-ledger.inline.svg | 118 ++--- .../pic-catalyst-step3-trezor.inline.svg | 126 ++--- .../assets/images/recovery-phrase.inline.svg | 88 ++-- .../images/recovery-watching.inline.svg | 88 ++-- .../images/revamp/catalyst-step1.inline.svg | 40 +- .../images/revamp/catalyst-step2.inline.svg | 32 +- .../images/revamp/no-assets-found.inline.svg | 182 +++---- .../revamp/no-dapps-connected.inline.svg | 198 ++++---- .../registration-is-not-available.inline.svg | 12 +- .../images/revamp/tx-failure.inline.svg | 8 +- .../images/revamp/tx-successful.inline.svg | 12 +- .../assets/images/select-language-shelley.svg | 112 ++--- .../app/assets/images/select-language.svg | 2 +- .../app/assets/images/spinner-dark.svg | 4 +- .../app/assets/images/spinner-light.svg | 4 +- .../no-transactions-yet.modern.inline.svg | 28 +- .../wallet-empty-banner.inline.svg | 214 ++++---- .../transfer-success-shelley.inline.svg | 12 +- .../assets/images/transfer-success.inline.svg | 12 +- .../assets/images/uri/about-url.inline.svg | 90 ++-- .../assets/images/uri/invalid-uri.inline.svg | 4 +- .../images/uri/perform-tx-uri.inline.svg | 12 +- .../app/assets/images/yes.inline.svg | 4 +- .../assets/images/yoroi-logo-blue.inline.svg | 2 +- .../images/yoroi-logo-nightly.inline.svg | 88 ++-- .../images/yoroi-logo-revamp-blue.inline.svg | 4 +- .../yoroi-logo-revamp-nightly-blue.inline.svg | 20 +- .../images/yoroi-logo-shape-blue.inline.svg | 2 +- .../images/yoroi-nightly-icon-dark.inline.svg | 20 +- .../images/yoroi-nightly-icon.inline.svg | 8 +- .../images/no-websites-connected.inline.svg | 28 +- .../assets/img/nano-s/hint-catalyst-1.svg | 2 +- .../assets/img/nano-s/hint-catalyst-11.svg | 2 +- .../assets/img/nano-s/hint-catalyst-3.svg | 2 +- .../assets/img/nano-s/hint-catalyst-4.svg | 2 +- .../assets/img/nano-s/hint-catalyst-5.svg | 2 +- .../assets/img/nano-s/hint-catalyst-6.svg | 2 +- .../assets/img/nano-s/hint-catalyst-7.svg | 2 +- .../assets/img/nano-s/hint-catalyst-8.svg | 2 +- .../assets/img/nano-s/hint-catalyst-9.svg | 2 +- .../assets/img/nano-s/hint-connect-2-keys.svg | 2 +- .../assets/img/nano-x/hint-catalyst-1.svg | 2 +- .../assets/img/nano-x/hint-catalyst-11.svg | 2 +- .../assets/img/nano-x/hint-catalyst-3.svg | 2 +- .../assets/img/nano-x/hint-catalyst-4.svg | 2 +- .../assets/img/nano-x/hint-catalyst-5.svg | 2 +- .../assets/img/nano-x/hint-catalyst-6.svg | 2 +- .../assets/img/nano-x/hint-catalyst-7.svg | 2 +- .../assets/img/nano-x/hint-catalyst-8.svg | 2 +- .../assets/img/nano-x/hint-catalyst-9.svg | 2 +- .../assets/img/nano-x/hint-connect-2-keys.svg | 2 +- 96 files changed, 2912 insertions(+), 2727 deletions(-) create mode 100644 packages/yoroi-extension/app/UI/components/modals/ChooseDRepModal.js create mode 100644 packages/yoroi-extension/app/UI/components/modals/Modal.js create mode 100644 packages/yoroi-extension/app/UI/components/modals/ModalManager.js create mode 100644 packages/yoroi-extension/app/UI/context/ModalContext.js diff --git a/packages/yoroi-extension/app/UI/components/modals/ChooseDRepModal.js b/packages/yoroi-extension/app/UI/components/modals/ChooseDRepModal.js new file mode 100644 index 0000000000..ea20470b8b --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/modals/ChooseDRepModal.js @@ -0,0 +1,59 @@ +import * as React from 'react'; +import Button from '@mui/material/Button'; +import { styled } from '@mui/material/styles'; +import Dialog from '@mui/material/Dialog'; +import DialogTitle from '@mui/material/DialogTitle'; +import DialogContent from '@mui/material/DialogContent'; +import DialogActions from '@mui/material/DialogActions'; +import IconButton from '@mui/material/IconButton'; +import CloseIcon from '@mui/icons-material/Close'; +import Typography from '@mui/material/Typography'; + +const BootstrapDialog = styled(Dialog)(({ theme }) => ({ + '& .MuiDialogContent-root': { + padding: theme.spacing(2), + }, + '& .MuiDialogActions-root': { + padding: theme.spacing(1), + }, +})); + +export const ChooseDRepModal = ({ onClose, title, ChooseDRepModal }) => { + const [open, setOpen] = React.useState(false); + + return ( + + + + + {title} + + theme.palette.grey[500], + }} + > + + + + + Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis + in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. + + + + + + + + ); +}; diff --git a/packages/yoroi-extension/app/UI/components/modals/Modal.js b/packages/yoroi-extension/app/UI/components/modals/Modal.js new file mode 100644 index 0000000000..9bebb34e06 --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/modals/Modal.js @@ -0,0 +1,75 @@ +import * as React from 'react'; +import Button from '@mui/material/Button'; +import { styled } from '@mui/material/styles'; +import Dialog from '@mui/material/Dialog'; +import DialogTitle from '@mui/material/DialogTitle'; +import DialogContent from '@mui/material/DialogContent'; +import DialogActions from '@mui/material/DialogActions'; +import IconButton from '@mui/material/IconButton'; +import CloseIcon from '@mui/icons-material/Close'; +import Typography from '@mui/material/Typography'; + +const BootstrapDialog = styled(Dialog)(({ theme }) => ({ + '& .MuiDialogContent-root': { + padding: theme.spacing(2), + }, + '& .MuiDialogActions-root': { + padding: theme.spacing(1), + }, +})); + +export default function CustomizedDialogs() { + const [open, setOpen] = React.useState(false); + + const handleClickOpen = () => { + setOpen(true); + }; + const handleClose = () => { + setOpen(false); + }; + + return ( + + + + + Modal title + + theme.palette.grey[500], + }} + > + + + + + Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis + in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. + + + Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis + lacus vel augue laoreet rutrum faucibus dolor auctor. + + + Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel + scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus + auctor fringilla. + + + + + + + + ); +} diff --git a/packages/yoroi-extension/app/UI/components/modals/ModalManager.js b/packages/yoroi-extension/app/UI/components/modals/ModalManager.js new file mode 100644 index 0000000000..882871cbf5 --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/modals/ModalManager.js @@ -0,0 +1,17 @@ +import { useModal } from '../../context/ModalContext'; +import UploadModal from './ChooseDRepModal'; + +const ModalLookup = { + ChooseDRepModal: ChooseDRepModal, +}; + +const ModalManager = () => { + const { modal, closeModal } = useModal(); + + if (!modal) return null; + const Modal = ModalLookup[modal.name]; + + return ; +}; + +export default ModalManager; diff --git a/packages/yoroi-extension/app/UI/context/ModalContext.js b/packages/yoroi-extension/app/UI/context/ModalContext.js new file mode 100644 index 0000000000..bec5b08a8c --- /dev/null +++ b/packages/yoroi-extension/app/UI/context/ModalContext.js @@ -0,0 +1,21 @@ +import { createContext, useState, useContext } from 'react'; + +const ModalContext = createContext(); + +export const ModalProvider = ({ children }) => { + const [modal, setModal] = useState(null); + + const openModal = (name, props = {}) => { + setModal({ name, props }); + }; + + const closeModal = () => setModal(null); + + return ( + + {children} + + ); +}; + +export const useModal = () => useContext(ModalContext); diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/Abstein.js b/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/Abstein.js index c6e173a75c..66761b0cfe 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/Abstein.js +++ b/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/Abstein.js @@ -112,12 +112,12 @@ export const Abstein = () => { y2="186.972" gradientUnits="userSpaceOnUse" > - - - - - - + + + + + + { y2="226.98" gradientUnits="userSpaceOnUse" > - - - - - - + + + + + + { y2="180.271" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="29.1708" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="91.6786" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="29.6355" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="183.776" gradientUnits="userSpaceOnUse" > - - - - - - + + + + + + { y2="213.557" gradientUnits="userSpaceOnUse" > - - - - - - + + + + + + { y2="215.301" gradientUnits="userSpaceOnUse" > - - - - - - + + + + + + { y2="234.931" gradientUnits="userSpaceOnUse" > - - - - - - + + + + + + { y2="102.414" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="102.414" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="102.414" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="102.414" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="102.414" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="102.414" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="102.414" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="102.414" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="188.328" gradientUnits="userSpaceOnUse" > - - - - - - + + + + + + { y2="188.328" gradientUnits="userSpaceOnUse" > - - - - - - + + + + + + diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/DRepIlustration.js b/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/DRepIlustration.js index 1769ee31a8..aa90d5a060 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/DRepIlustration.js +++ b/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/DRepIlustration.js @@ -116,12 +116,12 @@ export const DRepIlustration = () => { y2="186.972" gradientUnits="userSpaceOnUse" > - - - - - - + + + + + + { y2="226.98" gradientUnits="userSpaceOnUse" > - - - - - - + + + + + + { y2="180.271" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="29.1708" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="91.6786" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="29.6355" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="183.776" gradientUnits="userSpaceOnUse" > - - - - - - + + + + + + { y2="213.557" gradientUnits="userSpaceOnUse" > - - - - - - + + + + + + { y2="215.301" gradientUnits="userSpaceOnUse" > - - - - - - + + + + + + { y2="234.931" gradientUnits="userSpaceOnUse" > - - - - - - + + + + + + { y2="144.326" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="144.326" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="144.326" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="144.326" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="144.326" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="144.326" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="162.176" gradientUnits="userSpaceOnUse" > - - - - - - + + + + + + diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/NoConfidance.js b/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/NoConfidance.js index e4fe4757c7..44584be125 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/NoConfidance.js +++ b/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/NoConfidance.js @@ -184,12 +184,12 @@ export const NoConfidance = () => { y2="186.972" gradientUnits="userSpaceOnUse" > - - - - - - + + + + + + { y2="226.98" gradientUnits="userSpaceOnUse" > - - - - - - + + + + + + { y2="180.271" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="29.1708" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="91.6786" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="29.6355" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="183.776" gradientUnits="userSpaceOnUse" > - - - - - - + + + + + + { y2="213.557" gradientUnits="userSpaceOnUse" > - - - - - - + + + + + + { y2="215.301" gradientUnits="userSpaceOnUse" > - - - - - - + + + + + + { y2="234.931" gradientUnits="userSpaceOnUse" > - - - - - - + + + + + + { y2="141.894" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="141.894" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="141.894" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="141.894" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="141.894" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="141.894" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="141.894" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="141.894" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="141.894" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="141.894" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="141.894" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="141.894" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="141.894" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="141.894" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="141.894" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="141.894" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + { y2="156.321" gradientUnits="userSpaceOnUse" > - - - - - - + + + + + + { y2="156.321" gradientUnits="userSpaceOnUse" > - - - - - - + + + + + + diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js b/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js index ac83eb5d1e..954f5a1c5d 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js +++ b/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js @@ -14,6 +14,7 @@ import { NoConfidance } from '../../common/ilustrations/NoConfidance'; import { Stack } from '@mui/material'; import { Button } from '@mui/material'; import Link from '@mui/material/Link'; +import { useModal } from '../../../../context/ModalContext'; type Props = {| title: string, @@ -75,6 +76,7 @@ const GovernanceCard = ({ title, description, icon, selected, onClick }: Props) export const GouvernanceStatusSelection = (): Node => { const [selectedCard, setSelectedCard] = useState(null); const { gouvernanceStatus } = useGouvernance(); + const { openModal } = useModal(); console.log('Test gouvernanceStatus', gouvernanceStatus); @@ -87,6 +89,13 @@ export const GouvernanceStatusSelection = (): Node => { const hasDRep = gouvernanceStatus === 'drep'; + const confirmDRep = drep => { + console.log('TEST', drep); + }; + + const onChoosDRepClick = () => { + openModal('UploadModal', { title: 'avatar', confirmDRep }); + }; const handleCardClick = card => { setSelectedCard(card); }; @@ -105,17 +114,17 @@ export const GouvernanceStatusSelection = (): Node => { description="You are designating someone else to cast your vote on your behalf for all proposals now and in the future." icon={} selected={selectedCard === 'drep'} - onClick={() => handleCardClick('drep')} + onClick={() => onChoosDRepClick()} /> } selected={selectedCard === 'no-vote'} onClick={() => handleCardClick('no-vote')} /> } selected={selectedCard === 'lack-of-trust'} diff --git a/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js b/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js index 3b90cc2203..5cae1361f2 100644 --- a/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js +++ b/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js @@ -10,6 +10,7 @@ import SidebarContainer from '../../containers/SidebarContainer'; import { Box, Typography } from '@mui/material'; import { withLayout } from '../../styles/context/layout'; import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; +import { ModalProvider } from '../context/ModalContext'; type Props = {| ...StoresAndActionsProps, @@ -32,13 +33,16 @@ class GeneralPageLayout extends Component { const sidebarContainer = ; return ( - } - sidebar={sidebarContainer} - navbar={navbar} - > - {children} - + // TODO ModalProvider to be moved into APP after finish refactoring and bring everything in UI + + } + sidebar={sidebarContainer} + navbar={navbar} + > + {children} + + ); } } diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/add-wallet-bg-modern.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/add-wallet-bg-modern.inline.svg index afa7fbabbf..edbda47a77 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/add-wallet-bg-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/add-wallet-bg-modern.inline.svg @@ -21,36 +21,36 @@ - - - - + + + + - - - - - - - + + + + + + + - - - - - - - - - - + + + + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-modern.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-modern.inline.svg index eddc9a80fb..001a796ab8 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-modern.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-revamp.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-revamp.inline.svg index e58d57e12b..9498b9a766 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-revamp.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-revamp.inline.svg @@ -27,172 +27,172 @@ - - - - - - - + + + + + + + - - - - + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/create-wallet-modern.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/create-wallet-modern.inline.svg index 35135ee283..dc8c878223 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/create-wallet-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/create-wallet-modern.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/create-wallet-revamp.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/create-wallet-revamp.inline.svg index eefbf42ba1..a08b0a6d30 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/create-wallet-revamp.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/create-wallet-revamp.inline.svg @@ -50,145 +50,145 @@ - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - + + + - - - + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - + + + + + + + + + - - - + + + - - - - - - - + + + + + + + - - - - - - - - - + + + + + + + + + - - - + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-ledger-modern.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-ledger-modern.inline.svg index 83fa9d2b06..a9c358492c 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-ledger-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-ledger-modern.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-trezor-modern.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-trezor-modern.inline.svg index 2d74b66356..0e29fdda6e 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-trezor-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-trezor-modern.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-normal-wallet-modern.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-normal-wallet-modern.inline.svg index 359a8d964b..a5bbd7996c 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-normal-wallet-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-normal-wallet-modern.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-paper-wallet-modern.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-paper-wallet-modern.inline.svg index 11fab786db..6ceb2d4237 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-paper-wallet-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-paper-wallet-modern.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/restore-wallet-modern.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/restore-wallet-modern.inline.svg index 44e803a777..e9a4f3200a 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/restore-wallet-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/restore-wallet-modern.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/restore-wallet-revamp.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/restore-wallet-revamp.inline.svg index 6ecaa5e6fb..cee2dec550 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/restore-wallet-revamp.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/restore-wallet-revamp.inline.svg @@ -99,273 +99,273 @@ - - - + + + - - - + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - + + + - - - - - - - + + + + + + + - - - + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - + + - - - - - - - - - + + + + + + + + + - - - + + + - - - + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - + + + + + + + + + - - - + + + - - - - - - - + + + + + + + - - - - - - - - - + + + + + + + + + - - - + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/restore/15-word.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/restore/15-word.inline.svg index 0542bae470..2c0cc88050 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/restore/15-word.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/restore/15-word.inline.svg @@ -114,75 +114,75 @@ - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/restore/24-word.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/restore/24-word.inline.svg index a2c3f063ac..a78fe58ee0 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/restore/24-word.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/restore/24-word.inline.svg @@ -115,55 +115,55 @@ - - - - + + + + - - + + - - + + - - + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/analytics-illustration.inline.svg b/packages/yoroi-extension/app/assets/images/analytics-illustration.inline.svg index 21493be9de..8e071f8bbb 100644 --- a/packages/yoroi-extension/app/assets/images/analytics-illustration.inline.svg +++ b/packages/yoroi-extension/app/assets/images/analytics-illustration.inline.svg @@ -43,131 +43,131 @@ - - - - - - - - - + + + + + + + + + - - + + - - - - - - - + + + + + + + - - + + - - - - - - - + + + + + + + - - + + - - - - - - - + + + + + + + - - + + - - - - - - - + + + + + + + - - + + - - + + - - + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - + + - - + + - - + + - - + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/assets-page/no-nft-found.inline.svg b/packages/yoroi-extension/app/assets/images/assets-page/no-nft-found.inline.svg index 7eac287347..e9f047e627 100644 --- a/packages/yoroi-extension/app/assets/images/assets-page/no-nft-found.inline.svg +++ b/packages/yoroi-extension/app/assets/images/assets-page/no-nft-found.inline.svg @@ -31,82 +31,82 @@ - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - - + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - + + - - + + - - - - - - - + + + + + + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/assets-page/no-nfts.inline.svg b/packages/yoroi-extension/app/assets/images/assets-page/no-nfts.inline.svg index 6c8f7ee3e0..9e9d6c0819 100644 --- a/packages/yoroi-extension/app/assets/images/assets-page/no-nfts.inline.svg +++ b/packages/yoroi-extension/app/assets/images/assets-page/no-nfts.inline.svg @@ -31,82 +31,82 @@ - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - - + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - + + - - + + - - - - - - - + + + + + + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/assets-page/no-tokens.inline.svg b/packages/yoroi-extension/app/assets/images/assets-page/no-tokens.inline.svg index 1e0f972cc6..eb9c50a0f4 100644 --- a/packages/yoroi-extension/app/assets/images/assets-page/no-tokens.inline.svg +++ b/packages/yoroi-extension/app/assets/images/assets-page/no-tokens.inline.svg @@ -40,123 +40,123 @@ - - - - - - - - - + + + + + + + + + - - + + - - - - - - - + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - + + - - + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/complexity-level/advanced-level.inline.svg b/packages/yoroi-extension/app/assets/images/complexity-level/advanced-level.inline.svg index 93e8a8df56..e404d3b116 100644 --- a/packages/yoroi-extension/app/assets/images/complexity-level/advanced-level.inline.svg +++ b/packages/yoroi-extension/app/assets/images/complexity-level/advanced-level.inline.svg @@ -5,148 +5,148 @@ Created with Sketch. - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/complexity-level/beginner-level.inline.svg b/packages/yoroi-extension/app/assets/images/complexity-level/beginner-level.inline.svg index 8d92c9766d..c432679811 100644 --- a/packages/yoroi-extension/app/assets/images/complexity-level/beginner-level.inline.svg +++ b/packages/yoroi-extension/app/assets/images/complexity-level/beginner-level.inline.svg @@ -5,69 +5,69 @@ Created with Sketch. - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/dapp-connector/add-collateral.inline.svg b/packages/yoroi-extension/app/assets/images/dapp-connector/add-collateral.inline.svg index 85ce4fe451..f40c124439 100644 --- a/packages/yoroi-extension/app/assets/images/dapp-connector/add-collateral.inline.svg +++ b/packages/yoroi-extension/app/assets/images/dapp-connector/add-collateral.inline.svg @@ -33,168 +33,168 @@ - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - - + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - - + + - - + + - - + + - - + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/dapp-connector/no-dapps-connected.inline.svg b/packages/yoroi-extension/app/assets/images/dapp-connector/no-dapps-connected.inline.svg index ec19d5888f..f2dc4163b9 100644 --- a/packages/yoroi-extension/app/assets/images/dapp-connector/no-dapps-connected.inline.svg +++ b/packages/yoroi-extension/app/assets/images/dapp-connector/no-dapps-connected.inline.svg @@ -5,24 +5,24 @@ Created with Sketch. - - - - - - + + + + + + - - - - - - + + + + + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/dashboard/empty-dashboard.inline.svg b/packages/yoroi-extension/app/assets/images/dashboard/empty-dashboard.inline.svg index 7e0e2c7d8c..2d1414e5c0 100644 --- a/packages/yoroi-extension/app/assets/images/dashboard/empty-dashboard.inline.svg +++ b/packages/yoroi-extension/app/assets/images/dashboard/empty-dashboard.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/dashboard/staking-illustration.inline.svg b/packages/yoroi-extension/app/assets/images/dashboard/staking-illustration.inline.svg index 7893b4a2da..dd5e1a2f9a 100644 --- a/packages/yoroi-extension/app/assets/images/dashboard/staking-illustration.inline.svg +++ b/packages/yoroi-extension/app/assets/images/dashboard/staking-illustration.inline.svg @@ -36,162 +36,162 @@ - - - - - - - + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - - - + + + + + + + - - + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - - + + - - - - - - - - - + + + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/error-info.inline.svg b/packages/yoroi-extension/app/assets/images/error-info.inline.svg index cc90977bec..bc0f8cad23 100644 --- a/packages/yoroi-extension/app/assets/images/error-info.inline.svg +++ b/packages/yoroi-extension/app/assets/images/error-info.inline.svg @@ -6,13 +6,13 @@ - - + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/exchange-end-illustration.svg b/packages/yoroi-extension/app/assets/images/exchange-end-illustration.svg index 43f46784ff..a46c2f8d81 100644 --- a/packages/yoroi-extension/app/assets/images/exchange-end-illustration.svg +++ b/packages/yoroi-extension/app/assets/images/exchange-end-illustration.svg @@ -45,125 +45,125 @@ - + - - + + - - + + - - + + - - - - - - - - - + + + + + + + + + - + - - - - - - + + + + + + - - - - - - + + + + + + - - + + - - - - - - + + + + + + - - - - - - + + + + + + - - + + - - - - - - + + + + + + - - - - - - + + + + + + - - + + - - - - - - + + + + + + - - - - - - + + + + + + - - + + - - - - - - + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/google-play-badge.inline.svg b/packages/yoroi-extension/app/assets/images/google-play-badge.inline.svg index 379b23da7c..e51c32a159 100644 --- a/packages/yoroi-extension/app/assets/images/google-play-badge.inline.svg +++ b/packages/yoroi-extension/app/assets/images/google-play-badge.inline.svg @@ -3,29 +3,29 @@ A2FB9804-6156-474B-B654-0BFD9715383C - - - - - - + + + + + + - - - - + + + + - - + + - - - - - + + + + + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/check-modern.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/check-modern.inline.svg index a1fa37ad88..287f52f5dd 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/check-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/check-modern.inline.svg @@ -5,13 +5,13 @@ Created with Sketch. - - - + + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/connect-error-modern.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/connect-error-modern.inline.svg index 3bd1b09804..117d1809b7 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/connect-error-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/connect-error-modern.inline.svg @@ -7,17 +7,17 @@ - - + + - - - + + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-error-modern.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-error-modern.inline.svg index ad07504207..08df77ea3f 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-error-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-error-modern.inline.svg @@ -7,18 +7,18 @@ - - + + - - - + + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-load-modern.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-load-modern.inline.svg index d6badb2f22..e2384f271c 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-load-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-load-modern.inline.svg @@ -6,18 +6,18 @@ - - + + - - - + + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/check-modern.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/check-modern.inline.svg index 0e343ea005..b517c97911 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/check-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/check-modern.inline.svg @@ -5,8 +5,8 @@ Created with Sketch. - - + + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/connect-error-modern.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/connect-error-modern.inline.svg index 5bdd3af607..51f7ceed61 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/connect-error-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/connect-error-modern.inline.svg @@ -7,8 +7,8 @@ - - + + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-error-modern.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-error-modern.inline.svg index 5f20ae0fb7..22e34315d1 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-error-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-error-modern.inline.svg @@ -7,8 +7,8 @@ - - + + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-load-modern.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-load-modern.inline.svg index 2f7fce66ba..f6d8d98fc6 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-load-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-load-modern.inline.svg @@ -6,8 +6,8 @@ - - + + diff --git a/packages/yoroi-extension/app/assets/images/pic-catalyst-step1.inline.svg b/packages/yoroi-extension/app/assets/images/pic-catalyst-step1.inline.svg index 4d7fac6aa0..efd8ec9a49 100644 --- a/packages/yoroi-extension/app/assets/images/pic-catalyst-step1.inline.svg +++ b/packages/yoroi-extension/app/assets/images/pic-catalyst-step1.inline.svg @@ -1 +1 @@ -pic \ No newline at end of file +pic \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/pic-catalyst-step2.inline.svg b/packages/yoroi-extension/app/assets/images/pic-catalyst-step2.inline.svg index d900556cac..aae4bbca4e 100644 --- a/packages/yoroi-extension/app/assets/images/pic-catalyst-step2.inline.svg +++ b/packages/yoroi-extension/app/assets/images/pic-catalyst-step2.inline.svg @@ -1 +1 @@ -pic \ No newline at end of file +pic \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/pic-catalyst-step3-ledger.inline.svg b/packages/yoroi-extension/app/assets/images/pic-catalyst-step3-ledger.inline.svg index f32b21d348..2353ccca95 100644 --- a/packages/yoroi-extension/app/assets/images/pic-catalyst-step3-ledger.inline.svg +++ b/packages/yoroi-extension/app/assets/images/pic-catalyst-step3-ledger.inline.svg @@ -3,85 +3,85 @@ ledger-voting - - - - - - - + + + + + + + - - - - + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/pic-catalyst-step3-trezor.inline.svg b/packages/yoroi-extension/app/assets/images/pic-catalyst-step3-trezor.inline.svg index 5b9c5d9c17..493f3ea07e 100644 --- a/packages/yoroi-extension/app/assets/images/pic-catalyst-step3-trezor.inline.svg +++ b/packages/yoroi-extension/app/assets/images/pic-catalyst-step3-trezor.inline.svg @@ -3,91 +3,91 @@ trezor-voting - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + diff --git a/packages/yoroi-extension/app/assets/images/recovery-phrase.inline.svg b/packages/yoroi-extension/app/assets/images/recovery-phrase.inline.svg index 53c97925a4..5b890cdfe3 100644 --- a/packages/yoroi-extension/app/assets/images/recovery-phrase.inline.svg +++ b/packages/yoroi-extension/app/assets/images/recovery-phrase.inline.svg @@ -5,72 +5,72 @@ .cls-2{fill:none;stroke:#1d45ba;stroke-miterlimit:10;stroke-width:0.5px;} - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - + + - - - - + + + + recovery phrase diff --git a/packages/yoroi-extension/app/assets/images/recovery-watching.inline.svg b/packages/yoroi-extension/app/assets/images/recovery-watching.inline.svg index e99acc080f..219baadeb0 100644 --- a/packages/yoroi-extension/app/assets/images/recovery-watching.inline.svg +++ b/packages/yoroi-extension/app/assets/images/recovery-watching.inline.svg @@ -5,80 +5,80 @@ .cls-2{fill:none;stroke:#1d45ba;stroke-miterlimit:10;stroke-width:0.5px;} - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + + + - - - - + + + + - - - - + + + + - - + + - - - - + + + + - - - - + + + + - - - - + + + + - - + + - - + + - - + + watching diff --git a/packages/yoroi-extension/app/assets/images/revamp/catalyst-step1.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/catalyst-step1.inline.svg index d5ac59cede..2f087e983e 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/catalyst-step1.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/catalyst-step1.inline.svg @@ -13,34 +13,34 @@ - - - - + + + + - - - - - - - - - + + + + + + + + + - - - + + + - - + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/revamp/catalyst-step2.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/catalyst-step2.inline.svg index 78907ccb07..407f738565 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/catalyst-step2.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/catalyst-step2.inline.svg @@ -15,26 +15,26 @@ - - - - + + + + - - - - - - - - - + + + + + + + + + - - - + + + diff --git a/packages/yoroi-extension/app/assets/images/revamp/no-assets-found.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/no-assets-found.inline.svg index ee5f18697a..ede6e03d92 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/no-assets-found.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/no-assets-found.inline.svg @@ -39,123 +39,123 @@ - - - - - - - - - + + + + + + + + + - - + + - - - - - - - + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - + + - - + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/revamp/no-dapps-connected.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/no-dapps-connected.inline.svg index 86148a421d..224366fe51 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/no-dapps-connected.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/no-dapps-connected.inline.svg @@ -42,153 +42,153 @@ - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - - - + + + + + + + - - + + - - + + - - + + - - - - - - - - - + + + + + + + + + - - + + - - - - - - - - - + + + + + + + + + - - + + - - + + - - + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - + + - - - - - - - + + + + + + + - - + + - - - - - - - + + + + + + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/revamp/registration-is-not-available.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/registration-is-not-available.inline.svg index 3129df4b1e..dc3b2890db 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/registration-is-not-available.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/registration-is-not-available.inline.svg @@ -14,12 +14,12 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/revamp/tx-failure.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/tx-failure.inline.svg index 3899119ff3..99b322beaa 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/tx-failure.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/tx-failure.inline.svg @@ -13,12 +13,12 @@ - - + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/revamp/tx-successful.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/tx-successful.inline.svg index f6c2616321..dffdfa3d7a 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/tx-successful.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/tx-successful.inline.svg @@ -12,16 +12,16 @@ - - + + - - + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/select-language-shelley.svg b/packages/yoroi-extension/app/assets/images/select-language-shelley.svg index 0747c84435..ee2d7e30f0 100644 --- a/packages/yoroi-extension/app/assets/images/select-language-shelley.svg +++ b/packages/yoroi-extension/app/assets/images/select-language-shelley.svg @@ -48,8 +48,8 @@ - - + + @@ -57,8 +57,8 @@ c3.3-1.9,9.2-1.7,13,0.5l30,17.3C952.7,891.1,953.1,894.4,949.8,896.3z"/> - - + + - - + + - - + + @@ -87,59 +87,59 @@ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + @@ -164,8 +164,8 @@ c0,0-4.4-4-4.4-8.3v-6.2l-4.6-2.7C1010.6,403,1009.6,401.5,1009.5,400.1z"/> - - + + @@ -175,8 +175,8 @@ - - + + - - + + - - + + - - + + - - + + @@ -223,8 +223,8 @@ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/select-language.svg b/packages/yoroi-extension/app/assets/images/select-language.svg index c1598ea5d9..4d896479bb 100644 --- a/packages/yoroi-extension/app/assets/images/select-language.svg +++ b/packages/yoroi-extension/app/assets/images/select-language.svg @@ -1 +1 @@ -trezor not connected技術 \ No newline at end of file +trezor not connected技術 \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/spinner-dark.svg b/packages/yoroi-extension/app/assets/images/spinner-dark.svg index bb56eda05c..02529fdd9b 100644 --- a/packages/yoroi-extension/app/assets/images/spinner-dark.svg +++ b/packages/yoroi-extension/app/assets/images/spinner-dark.svg @@ -4,8 +4,8 @@ fill="url(#paint0_linear_12921_42008)" /> - - + + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/spinner-light.svg b/packages/yoroi-extension/app/assets/images/spinner-light.svg index bb56eda05c..02529fdd9b 100644 --- a/packages/yoroi-extension/app/assets/images/spinner-light.svg +++ b/packages/yoroi-extension/app/assets/images/spinner-light.svg @@ -4,8 +4,8 @@ fill="url(#paint0_linear_12921_42008)" /> - - + + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/transaction/no-transactions-yet.modern.inline.svg b/packages/yoroi-extension/app/assets/images/transaction/no-transactions-yet.modern.inline.svg index ec19d5888f..f2dc4163b9 100644 --- a/packages/yoroi-extension/app/assets/images/transaction/no-transactions-yet.modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/transaction/no-transactions-yet.modern.inline.svg @@ -5,24 +5,24 @@ Created with Sketch. - - - - - - + + + + + + - - - - - - + + + + + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/transaction/wallet-empty-banner.inline.svg b/packages/yoroi-extension/app/assets/images/transaction/wallet-empty-banner.inline.svg index 0f19d79a53..6b770e3255 100644 --- a/packages/yoroi-extension/app/assets/images/transaction/wallet-empty-banner.inline.svg +++ b/packages/yoroi-extension/app/assets/images/transaction/wallet-empty-banner.inline.svg @@ -3,145 +3,145 @@ Create wallet - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - + + + - - - + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - + + + + + + + + + - - - + + + - - - - - - - + + + + + + + - - - - - - - - - + + + + + + + + + - - - + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/transfer-success-shelley.inline.svg b/packages/yoroi-extension/app/assets/images/transfer-success-shelley.inline.svg index 18a346dc52..8ea8238e20 100644 --- a/packages/yoroi-extension/app/assets/images/transfer-success-shelley.inline.svg +++ b/packages/yoroi-extension/app/assets/images/transfer-success-shelley.inline.svg @@ -5,16 +5,16 @@ Created with Sketch. - - + + - - + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/transfer-success.inline.svg b/packages/yoroi-extension/app/assets/images/transfer-success.inline.svg index ba04071e15..32a2e4177f 100644 --- a/packages/yoroi-extension/app/assets/images/transfer-success.inline.svg +++ b/packages/yoroi-extension/app/assets/images/transfer-success.inline.svg @@ -6,17 +6,17 @@ - - + + - - + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/uri/about-url.inline.svg b/packages/yoroi-extension/app/assets/images/uri/about-url.inline.svg index dc92528ff0..b4e6dee1a0 100644 --- a/packages/yoroi-extension/app/assets/images/uri/about-url.inline.svg +++ b/packages/yoroi-extension/app/assets/images/uri/about-url.inline.svg @@ -5,67 +5,67 @@ Created with Sketch. - - - - + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - - - - + + + + + + + - - - - + + + + - - - - + + + + diff --git a/packages/yoroi-extension/app/assets/images/uri/invalid-uri.inline.svg b/packages/yoroi-extension/app/assets/images/uri/invalid-uri.inline.svg index 1bad1829ee..5d8b6471e9 100644 --- a/packages/yoroi-extension/app/assets/images/uri/invalid-uri.inline.svg +++ b/packages/yoroi-extension/app/assets/images/uri/invalid-uri.inline.svg @@ -6,8 +6,8 @@ - - + + diff --git a/packages/yoroi-extension/app/assets/images/uri/perform-tx-uri.inline.svg b/packages/yoroi-extension/app/assets/images/uri/perform-tx-uri.inline.svg index 767a6a3616..1bc1c5b618 100644 --- a/packages/yoroi-extension/app/assets/images/uri/perform-tx-uri.inline.svg +++ b/packages/yoroi-extension/app/assets/images/uri/perform-tx-uri.inline.svg @@ -6,18 +6,18 @@ - - + + - - + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/yes.inline.svg b/packages/yoroi-extension/app/assets/images/yes.inline.svg index caa778a4f0..a4b7b07231 100644 --- a/packages/yoroi-extension/app/assets/images/yes.inline.svg +++ b/packages/yoroi-extension/app/assets/images/yes.inline.svg @@ -2,8 +2,8 @@ - - + + diff --git a/packages/yoroi-extension/app/assets/images/yoroi-logo-blue.inline.svg b/packages/yoroi-extension/app/assets/images/yoroi-logo-blue.inline.svg index ccee841188..2a39e9ca8b 100644 --- a/packages/yoroi-extension/app/assets/images/yoroi-logo-blue.inline.svg +++ b/packages/yoroi-extension/app/assets/images/yoroi-logo-blue.inline.svg @@ -1 +1 @@ -yoroi logo \ No newline at end of file +yoroi logo \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/yoroi-logo-nightly.inline.svg b/packages/yoroi-extension/app/assets/images/yoroi-logo-nightly.inline.svg index 6f92d71b7a..a339b0b087 100644 --- a/packages/yoroi-extension/app/assets/images/yoroi-logo-nightly.inline.svg +++ b/packages/yoroi-extension/app/assets/images/yoroi-logo-nightly.inline.svg @@ -113,8 +113,8 @@ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/yoroi-logo-revamp-blue.inline.svg b/packages/yoroi-extension/app/assets/images/yoroi-logo-revamp-blue.inline.svg index 4df8f151a3..e1f2dc24ac 100644 --- a/packages/yoroi-extension/app/assets/images/yoroi-logo-revamp-blue.inline.svg +++ b/packages/yoroi-extension/app/assets/images/yoroi-logo-revamp-blue.inline.svg @@ -2,8 +2,8 @@ - - + + diff --git a/packages/yoroi-extension/app/assets/images/yoroi-logo-revamp-nightly-blue.inline.svg b/packages/yoroi-extension/app/assets/images/yoroi-logo-revamp-nightly-blue.inline.svg index bc22bcc925..ed97a216d6 100644 --- a/packages/yoroi-extension/app/assets/images/yoroi-logo-revamp-nightly-blue.inline.svg +++ b/packages/yoroi-extension/app/assets/images/yoroi-logo-revamp-nightly-blue.inline.svg @@ -6,24 +6,24 @@ - - + + - - + + - - + + - - + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/yoroi-logo-shape-blue.inline.svg b/packages/yoroi-extension/app/assets/images/yoroi-logo-shape-blue.inline.svg index 5bf948f869..cc14b928b3 100644 --- a/packages/yoroi-extension/app/assets/images/yoroi-logo-shape-blue.inline.svg +++ b/packages/yoroi-extension/app/assets/images/yoroi-logo-shape-blue.inline.svg @@ -1 +1 @@ -yoroi logo \ No newline at end of file +yoroi logo \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/yoroi-nightly-icon-dark.inline.svg b/packages/yoroi-extension/app/assets/images/yoroi-nightly-icon-dark.inline.svg index 6f70d51889..4eb0e472c9 100644 --- a/packages/yoroi-extension/app/assets/images/yoroi-nightly-icon-dark.inline.svg +++ b/packages/yoroi-extension/app/assets/images/yoroi-nightly-icon-dark.inline.svg @@ -6,24 +6,24 @@ - - + + - - + + - - + + - - + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/yoroi-nightly-icon.inline.svg b/packages/yoroi-extension/app/assets/images/yoroi-nightly-icon.inline.svg index c53a77e1c0..8851cc3017 100644 --- a/packages/yoroi-extension/app/assets/images/yoroi-nightly-icon.inline.svg +++ b/packages/yoroi-extension/app/assets/images/yoroi-nightly-icon.inline.svg @@ -113,8 +113,8 @@ - - + + - - + + - - - - - - + + + + + + - - - - - - + + + + + + - - + + diff --git a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-1.svg b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-1.svg index 94a33ad2f1..b95ae045d7 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-1.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-1.svg @@ -1 +1 @@ -New transaction network id 0 / pr \ No newline at end of file +New transaction network id 0 / pr \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-11.svg b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-11.svg index c45132c07f..3bd23af141 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-11.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-11.svg @@ -1 +1 @@ -____________Transaction TTL____________ \ No newline at end of file +____________Transaction TTL____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-3.svg b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-3.svg index ee5423fefc..9cb6a2f43b 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-3.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-3.svg @@ -1 +1 @@ -Register Catalyst voting key? \ No newline at end of file +Register Catalyst voting key? \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-4.svg b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-4.svg index 8314960353..7c2b0ef47b 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-4.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-4.svg @@ -1 +1 @@ -Voting public key____________ \ No newline at end of file +Voting public key____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-5.svg b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-5.svg index ce68042fb0..a7c491fbac 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-5.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-5.svg @@ -1 +1 @@ -Staking key____________ \ No newline at end of file +Staking key____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-6.svg b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-6.svg index e4458dfbd6..06f9f9a101 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-6.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-6.svg @@ -1 +1 @@ -Rewards go to____________ \ No newline at end of file +Rewards go to____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-7.svg b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-7.svg index cc93108f0e..e1c12a507e 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-7.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-7.svg @@ -1 +1 @@ -Nonce____________ \ No newline at end of file +Nonce____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-8.svg b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-8.svg index c1a542b0ec..37481fbecc 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-8.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-8.svg @@ -1 +1 @@ -Confirm voting keyregistration? \ No newline at end of file +Confirm voting keyregistration? \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-9.svg b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-9.svg index a95e4b54b9..68be1bca56 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-9.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-9.svg @@ -1 +1 @@ -Auxiliary data hash____________ \ No newline at end of file +Auxiliary data hash____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-connect-2-keys.svg b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-connect-2-keys.svg index e0c78f0917..6b8937e421 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-connect-2-keys.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-connect-2-keys.svg @@ -1 +1 @@ -Confirm export2 public keys +Confirm export2 public keys diff --git a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-1.svg b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-1.svg index 849885baf3..ce84bac0a4 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-1.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-1.svg @@ -1 +1 @@ -New transaction network id 0 / pr \ No newline at end of file +New transaction network id 0 / pr \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-11.svg b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-11.svg index 2a275ea283..4eb694788d 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-11.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-11.svg @@ -1 +1 @@ -Transaction TTL____________ \ No newline at end of file +Transaction TTL____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-3.svg b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-3.svg index 84048368ee..99ecdd2416 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-3.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-3.svg @@ -1 +1 @@ -Register Catalyst voting key? \ No newline at end of file +Register Catalyst voting key? \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-4.svg b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-4.svg index 472f0a0091..7a3e79f210 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-4.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-4.svg @@ -1 +1 @@ -Voting public key____________ \ No newline at end of file +Voting public key____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-5.svg b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-5.svg index 4689d8f223..007ffa31d1 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-5.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-5.svg @@ -1 +1 @@ -Staking key____________ \ No newline at end of file +Staking key____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-6.svg b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-6.svg index 441d70e6eb..4fd130a7bf 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-6.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-6.svg @@ -1 +1 @@ -Rewards go to____________ \ No newline at end of file +Rewards go to____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-7.svg b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-7.svg index a21699a877..12711e2194 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-7.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-7.svg @@ -1 +1 @@ -Nonce____________ \ No newline at end of file +Nonce____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-8.svg b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-8.svg index c7628b4ba7..6f97863056 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-8.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-8.svg @@ -1 +1 @@ -Confirm voting keyregistration? \ No newline at end of file +Confirm voting keyregistration? \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-9.svg b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-9.svg index 2f38677aa4..1bacf84d8b 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-9.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-9.svg @@ -1 +1 @@ -Auxiliary data hash____________ \ No newline at end of file +Auxiliary data hash____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-connect-2-keys.svg b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-connect-2-keys.svg index 1b94eda90e..9b640a87af 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-connect-2-keys.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-connect-2-keys.svg @@ -1 +1 @@ -Confirm export2 public keys +Confirm export2 public keys From 38b7b17c0b6f164a616b24b86bb0138a064de252 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 22 May 2024 12:56:22 +0300 Subject: [PATCH 008/464] fix warnings --- .../common/ilustrations/NoConfidance.js | 20 ++-- .../app/assets/images/add-label.inline.svg | 4 +- .../app/assets/images/add-memo.inline.svg | 4 +- .../add-wallet/connect-hw-classic.inline.svg | 12 +-- .../add-wallet/connect-hw-modern.inline.svg | 2 +- .../add-wallet/connect-hw-revamp.inline.svg | 30 +++--- .../create-wallet-classic.inline.svg | 6 +- .../connect-ledger-classic.inline.svg | 2 +- .../connect-ledger-modern.inline.svg | 2 +- .../connect-trezor-classic.inline.svg | 8 +- .../connect-trezor-modern.inline.svg | 2 +- .../restore-normal-wallet-classic.inline.svg | 4 +- .../restore-paper-wallet-classic.inline.svg | 2 +- .../restore-wallet-classic.inline.svg | 6 +- .../add-wallet/restore/15-word.inline.svg | 102 +++++++++--------- .../add-wallet/restore/24-word.inline.svg | 102 +++++++++--------- .../images/add-wallet/step-mark.inline.svg | 2 +- .../add-wallet/wallet-list/drag.inline.svg | 2 +- .../assets/images/app-store-badge.inline.svg | 26 ++--- .../app/assets/images/arrow-down.inline.svg | 4 +- .../app/assets/images/arrow-up.inline.svg | 4 +- .../images/assets-page/asset-no.inline.svg | 4 +- .../images/assets-page/assets.inline.svg | 2 +- .../assets-page/chevron-right.inline.svg | 2 +- .../images/assets-page/grid-2x2.inline.svg | 8 +- .../images/assets-page/grid-3x3.inline.svg | 18 ++-- .../assets-page/no-nft-found.inline.svg | 2 +- .../images/assets-page/no-nfts.inline.svg | 2 +- .../images/assets-page/no-tokens.inline.svg | 12 +-- .../images/assets-page/search.inline.svg | 2 +- .../images/attention-big-light.inline.svg | 2 +- .../images/attention-classic.inline.svg | 4 +- .../assets/images/attention-modern.inline.svg | 4 +- .../assets/images/back-arrow-ic.inline.svg | 2 +- .../advanced-level.inline.svg | 36 +++---- .../beginner-level.inline.svg | 24 ++--- .../app/assets/images/copied.inline.svg | 2 +- .../app/assets/images/copy.inline.svg | 2 +- .../app/assets/images/cross-dark.inline.svg | 2 +- .../assets/images/currencies/ADA.inline.svg | 2 +- .../assets/images/currencies/BRL.inline.svg | 18 ++-- .../assets/images/currencies/CNY.inline.svg | 12 +-- .../assets/images/currencies/EUR.inline.svg | 28 ++--- .../assets/images/currencies/JPY.inline.svg | 4 +- .../assets/images/currencies/KRW.inline.svg | 44 ++++---- .../dapp-connector/add-collateral.inline.svg | 2 +- .../dapp-connector/dapp-connector.inline.svg | 4 +- .../images/dapp-connector/delete.inline.svg | 4 +- .../images/dapp-connector/no-dapp.inline.svg | 4 +- .../no-dapps-connected.inline.svg | 4 +- .../dashboard/empty-dashboard.inline.svg | 2 +- .../dashboard/grey-total-ada.inline.svg | 2 +- .../dashboard/grey-total-reward.inline.svg | 2 +- .../dashboard/staking-active.inline.svg | 2 +- .../dashboard/staking-illustration.inline.svg | 4 +- .../dashboard/total-delegated.inline.svg | 2 +- .../app/assets/images/default-nft.inline.svg | 46 ++++---- .../app/assets/images/edit.inline.svg | 4 +- .../app/assets/images/error-info.inline.svg | 2 +- .../images/exchange-end-illustration.svg | 62 +++++------ .../images/expand-arrow-grey.inline.svg | 6 +- .../app/assets/images/flags/brazil.inline.svg | 68 ++++++------ .../assets/images/flags/chinese.inline.svg | 2 +- .../app/assets/images/flags/czech.inline.svg | 4 +- .../app/assets/images/flags/dutch.inline.svg | 8 +- .../assets/images/flags/english.inline.svg | 2 +- .../app/assets/images/flags/french.inline.svg | 2 +- .../app/assets/images/flags/german.inline.svg | 2 +- .../assets/images/flags/indonesian.inline.svg | 2 +- .../assets/images/flags/italian.inline.svg | 2 +- .../assets/images/flags/japanese.inline.svg | 2 +- .../app/assets/images/flags/korean.inline.svg | 2 +- .../assets/images/flags/russian.inline.svg | 2 +- .../app/assets/images/flags/slovak.inline.svg | 16 +-- .../assets/images/flags/spanish.inline.svg | 2 +- .../assets/images/flags/turkish.inline.svg | 4 +- .../assets/images/flags/vietnamese.inline.svg | 4 +- .../app/assets/images/forms/close.inline.svg | 2 +- .../app/assets/images/forms/done.inline.svg | 2 +- .../app/assets/images/forms/error.inline.svg | 2 +- .../images/forms/password-eye.inline.svg | 4 +- .../app/assets/images/generate-uri.inline.svg | 2 +- .../images/google-play-badge.inline.svg | 6 +- .../check-prerequisite-header-icon.inline.svg | 2 +- .../ledger/check-modern.inline.svg | 2 +- .../hardware-wallet/ledger/check.inline.svg | 2 +- .../ledger/connect-error-modern.inline.svg | 4 +- .../ledger/connect-error.inline.svg | 4 +- .../ledger/save-error-modern.inline.svg | 4 +- .../ledger/save-error.inline.svg | 4 +- .../ledger/save-load-modern.inline.svg | 2 +- .../ledger/save-load.inline.svg | 2 +- .../trezor/check-modern.inline.svg | 8 +- .../hardware-wallet/trezor/check.inline.svg | 16 +-- .../trezor/connect-error-modern.inline.svg | 26 ++--- .../trezor/connect-error.inline.svg | 26 ++--- .../trezor/save-error-modern.inline.svg | 10 +- .../trezor/save-error.inline.svg | 4 +- .../trezor/save-load-modern.inline.svg | 2 +- .../trezor/save-load.inline.svg | 2 +- .../images/info-icon-primary.inline.svg | 2 +- .../assets/images/info-icon-revamp.inline.svg | 2 +- .../app/assets/images/info-icon.inline.svg | 4 +- .../app/assets/images/info-warning.inline.svg | 2 +- .../assets/images/link-external.inline.svg | 2 +- .../images/my-wallets/arrow_down.inline.svg | 2 +- .../my-wallets/icon_eye_closed.inline.svg | 2 +- .../my-wallets/icon_eye_open.inline.svg | 2 +- .../icon_eye_opened_revamp.inline.svg | 4 +- .../images/my-wallets/symbol_ada.inline.svg | 2 +- .../my-wallets/symbol_adaTestnet.inline.svg | 4 +- .../my-wallets/symbol_bitcoin.inline.svg | 2 +- .../my-wallets/symbol_ethereum.inline.svg | 2 +- .../images/new-theme-illustration.inline.svg | 10 +- .../app/assets/images/nft-no.inline.svg | 4 +- .../assets/images/open-eye-primary.inline.svg | 4 +- .../pic-catalyst-step3-ledger.inline.svg | 10 +- .../pic-catalyst-step3-trezor.inline.svg | 14 +-- .../app/assets/images/qr-code.inline.svg | 4 +- .../assets/images/question-mark.inline.svg | 2 +- .../assets/images/revamp/add-memo.inline.svg | 2 +- .../images/revamp/asset-default.inline.svg | 2 +- .../assets/images/revamp/delete.inline.svg | 2 +- .../assets/images/revamp/dex/spec.inline.svg | 2 +- .../assets/images/revamp/dex/vyfi.inline.svg | 2 +- .../assets/images/revamp/error.triangle.svg | 2 +- .../images/revamp/exclamation.circle.svg | 2 +- .../revamp/icons/chevron-down.inline.svg | 2 +- .../images/revamp/icons/edit.inline.svg | 2 +- .../icons/exclamation-circle.inline.svg | 2 +- .../images/revamp/icons/info.inline.svg | 2 +- .../images/revamp/icons/search.inline.svg | 2 +- .../app/assets/images/revamp/info.inline.svg | 2 +- .../images/revamp/no-assets-found.inline.svg | 12 +-- .../registration-is-not-available.inline.svg | 6 +- .../images/revamp/tx-failure.inline.svg | 6 +- .../images/revamp/verify-icon.inline.svg | 2 +- .../images/shelley-testnet-warning.inline.svg | 2 +- .../images/sidebar/my_wallets.inline.svg | 2 +- .../images/sidebar/open-sidebar.inline.svg | 2 +- .../images/sidebar/revamp/assets.inline.svg | 2 +- .../images/sidebar/revamp/nfts.inline.svg | 2 +- .../images/sidebar/revamp/setting.inline.svg | 2 +- .../images/sidebar/revamp/staking.inline.svg | 2 +- .../images/sidebar/revamp/voting.inline.svg | 2 +- .../images/sidebar/revamp/wallet.inline.svg | 2 +- .../sidebar/revamp/yoroi-logo.inline.svg | 2 +- .../sidebar/transfer_wallets.inline.svg | 2 +- .../sidebar/wallet-settings-2-ic.inline.svg | 4 +- .../sidebar/yoroi-logo-expanded.inline.svg | 2 +- .../images/sidebar/yoroi-logo.inline.svg | 2 +- .../assets/images/social/facebook.inline.svg | 2 +- .../assets/images/social/github.inline.svg | 2 +- .../assets/images/social/medium.inline.svg | 2 +- .../images/social/revamp/facebook.inline.svg | 2 +- .../social/revamp/github-24x24.inline.svg | 2 +- .../images/social/revamp/github.inline.svg | 2 +- .../images/social/revamp/telegram.inline.svg | 2 +- .../images/social/revamp/twitch.inline.svg | 2 +- .../images/social/revamp/twitter.inline.svg | 2 +- .../images/social/revamp/youtube.inline.svg | 2 +- .../assets/images/social/telegram.inline.svg | 2 +- .../assets/images/social/twitter.inline.svg | 2 +- .../assets/images/social/youtube.inline.svg | 2 +- .../assets/images/success-small.inline.svg | 2 +- .../app/assets/images/support.inline.svg | 2 +- .../top-bar/back-arrow-white.inline.svg | 2 +- .../images/transaction/error.inline.svg | 2 +- .../transaction/export-tx-to-file.inline.svg | 4 +- .../images/transaction/export.inline.svg | 2 +- .../no-transactions-yet.modern.inline.svg | 4 +- .../images/transaction/receive.inline.svg | 2 +- .../images/transaction/reward.inline.svg | 2 +- .../assets/images/transaction/send.inline.svg | 2 +- .../images/transaction/stake.inline.svg | 2 +- .../wallet-empty-banner.inline.svg | 46 ++++---- .../transfer-success-shelley.inline.svg | 4 +- .../assets/images/transfer-success.inline.svg | 4 +- .../images/uri/about-url-classic.inline.svg | 10 +- .../assets/images/uri/about-url.inline.svg | 8 +- .../assets/images/uri/invalid-uri.inline.svg | 2 +- .../images/uri/perform-tx-uri.inline.svg | 2 +- .../images/verify-icon-green.inline.svg | 2 +- .../app/assets/images/verify-icon.inline.svg | 4 +- .../images/wallet-nav/back-arrow.inline.svg | 2 +- .../images/wallet-nav/caret-down.inline.svg | 2 +- .../wallet-nav/conceptual-wallet.inline.svg | 2 +- .../wallet-nav/ledger-wallet.inline.svg | 4 +- .../wallet-nav/tab-dashboard.inline.svg | 2 +- .../wallet-nav/tab-delegation_list.inline.svg | 4 +- .../images/wallet-nav/tab-receive.inline.svg | 2 +- .../images/wallet-nav/tab-send.inline.svg | 2 +- .../wallet-nav/tab-transactions.inline.svg | 2 +- .../wallet-nav/trezor-wallet.inline.svg | 2 +- .../images/wallet-nav/voting.inline.svg | 4 +- .../app/assets/images/warning.inline.svg | 2 +- .../images/widget/cross-green.inline.svg | 2 +- .../app/assets/images/widget/cross.inline.svg | 2 +- .../images/widget/tick-green.inline.svg | 4 +- .../app/assets/images/widget/tick.inline.svg | 4 +- .../app/assets/images/yes.inline.svg | 2 +- .../images/yoroi-classic-theme.inline.svg | 10 +- .../assets/images/yoroi-logo-blue.inline.svg | 2 +- .../images/yoroi-logo-revamp-blue.inline.svg | 2 +- .../images/yoroi-logo-shape-blue.inline.svg | 2 +- .../images/yoroi-logo-shape-white.inline.svg | 2 +- .../images/yoroi-modern-theme.inline.svg | 10 +- .../images/no-websites-connected.inline.svg | 4 +- .../ledger/assets/img/external-link.svg | 2 +- .../assets/img/nano-s/hint-catalyst-1.svg | 2 +- .../assets/img/nano-s/hint-catalyst-11.svg | 2 +- .../assets/img/nano-s/hint-catalyst-3.svg | 2 +- .../assets/img/nano-s/hint-catalyst-4.svg | 2 +- .../assets/img/nano-s/hint-catalyst-5.svg | 2 +- .../assets/img/nano-s/hint-catalyst-6.svg | 2 +- .../assets/img/nano-s/hint-catalyst-7.svg | 2 +- .../assets/img/nano-s/hint-catalyst-8.svg | 2 +- .../assets/img/nano-s/hint-catalyst-9.svg | 2 +- .../assets/img/nano-s/hint-connect-2-keys.svg | 2 +- .../assets/img/nano-x/hint-catalyst-1.svg | 2 +- .../assets/img/nano-x/hint-catalyst-11.svg | 2 +- .../assets/img/nano-x/hint-catalyst-3.svg | 2 +- .../assets/img/nano-x/hint-catalyst-4.svg | 2 +- .../assets/img/nano-x/hint-catalyst-5.svg | 2 +- .../assets/img/nano-x/hint-catalyst-6.svg | 2 +- .../assets/img/nano-x/hint-catalyst-7.svg | 2 +- .../assets/img/nano-x/hint-catalyst-8.svg | 2 +- .../assets/img/nano-x/hint-catalyst-9.svg | 2 +- .../assets/img/nano-x/hint-connect-2-keys.svg | 2 +- .../ledger/assets/img/spinner-dark.svg | 2 +- .../ledger/assets/img/warning-icon.svg | 4 +- 231 files changed, 709 insertions(+), 709 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/NoConfidance.js b/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/NoConfidance.js index 44584be125..2e4801af4a 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/NoConfidance.js +++ b/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/NoConfidance.js @@ -90,8 +90,8 @@ export const NoConfidance = () => { fill="url(#paint14_linear_1598_4401)" /> @@ -144,14 +144,14 @@ export const NoConfidance = () => { fill="url(#paint27_linear_1598_4401)" /> @@ -164,14 +164,14 @@ export const NoConfidance = () => { fill="#E80742" /> diff --git a/packages/yoroi-extension/app/assets/images/add-label.inline.svg b/packages/yoroi-extension/app/assets/images/add-label.inline.svg index f8e8ae55e1..c9839ef15e 100644 --- a/packages/yoroi-extension/app/assets/images/add-label.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-label.inline.svg @@ -3,8 +3,8 @@ icon/label Created with Sketch. - - + + diff --git a/packages/yoroi-extension/app/assets/images/add-memo.inline.svg b/packages/yoroi-extension/app/assets/images/add-memo.inline.svg index a325e42d4e..909681db97 100644 --- a/packages/yoroi-extension/app/assets/images/add-memo.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-memo.inline.svg @@ -3,8 +3,8 @@ icon/add-memo.inline Created with Sketch. - + - + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-classic.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-classic.inline.svg index bf03fc227c..2630518044 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-classic.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-classic.inline.svg @@ -8,17 +8,17 @@ - + - - + + - - - + + + diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-modern.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-modern.inline.svg index 001a796ab8..d826bc4eae 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-modern.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-revamp.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-revamp.inline.svg index 9498b9a766..f8ee6ab1c9 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-revamp.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-revamp.inline.svg @@ -1,14 +1,14 @@ - + - - - - - - + + + + + + @@ -17,14 +17,14 @@ - - - - - - - - + + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/create-wallet-classic.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/create-wallet-classic.inline.svg index f1b14aaaf5..0472346788 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/create-wallet-classic.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/create-wallet-classic.inline.svg @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-ledger-classic.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-ledger-classic.inline.svg index 1e7dd60d1f..82c033ffc6 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-ledger-classic.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-ledger-classic.inline.svg @@ -3,7 +3,7 @@ ledger_wallet.inline Created with Sketch. - + diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-ledger-modern.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-ledger-modern.inline.svg index a9c358492c..0f2c214d75 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-ledger-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-ledger-modern.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-trezor-classic.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-trezor-classic.inline.svg index 3f8daec6c6..58e558cf3e 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-trezor-classic.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-trezor-classic.inline.svg @@ -6,12 +6,12 @@ - + - - - + + + diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-trezor-modern.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-trezor-modern.inline.svg index 0e29fdda6e..67aa8aa7c6 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-trezor-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-trezor-modern.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-normal-wallet-classic.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-normal-wallet-classic.inline.svg index 8c0f34d98b..e7506b269f 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-normal-wallet-classic.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-normal-wallet-classic.inline.svg @@ -3,7 +3,7 @@ mnemonimic_words_wallet.inline copy 2 Created with Sketch. - + @@ -25,7 +25,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-paper-wallet-classic.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-paper-wallet-classic.inline.svg index d423e017c8..ebe56a3db2 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-paper-wallet-classic.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-paper-wallet-classic.inline.svg @@ -7,7 +7,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/restore-wallet-classic.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/restore-wallet-classic.inline.svg index d10eb9d418..66ab26824a 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/restore-wallet-classic.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/restore-wallet-classic.inline.svg @@ -7,7 +7,7 @@ - + @@ -53,13 +53,13 @@ - + - + diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/restore/15-word.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/restore/15-word.inline.svg index 2c0cc88050..7fd10144a0 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/restore/15-word.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/restore/15-word.inline.svg @@ -56,60 +56,60 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - + + + diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/restore/24-word.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/restore/24-word.inline.svg index a78fe58ee0..bdbc07fc2c 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/restore/24-word.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/restore/24-word.inline.svg @@ -35,60 +35,60 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - + + + diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/step-mark.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/step-mark.inline.svg index cb3d081c1c..04ed10afe9 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/step-mark.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/step-mark.inline.svg @@ -1,4 +1,4 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/wallet-list/drag.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/wallet-list/drag.inline.svg index 87945494eb..c2686090d8 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/wallet-list/drag.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/wallet-list/drag.inline.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/app-store-badge.inline.svg b/packages/yoroi-extension/app/assets/images/app-store-badge.inline.svg index b46cb95552..32a109a907 100644 --- a/packages/yoroi-extension/app/assets/images/app-store-badge.inline.svg +++ b/packages/yoroi-extension/app/assets/images/app-store-badge.inline.svg @@ -1,33 +1,33 @@ 0610BB62-2ED0-4D93-90E0-F15EFC3EC178 - + - - - + + + - + - - - + + + - - - - + + + + - + diff --git a/packages/yoroi-extension/app/assets/images/arrow-down.inline.svg b/packages/yoroi-extension/app/assets/images/arrow-down.inline.svg index a0c520975c..8e1dc6b812 100644 --- a/packages/yoroi-extension/app/assets/images/arrow-down.inline.svg +++ b/packages/yoroi-extension/app/assets/images/arrow-down.inline.svg @@ -1,9 +1,9 @@ icon / arrow down - + - + diff --git a/packages/yoroi-extension/app/assets/images/arrow-up.inline.svg b/packages/yoroi-extension/app/assets/images/arrow-up.inline.svg index b5e65216e5..41bd760436 100644 --- a/packages/yoroi-extension/app/assets/images/arrow-up.inline.svg +++ b/packages/yoroi-extension/app/assets/images/arrow-up.inline.svg @@ -1,8 +1,8 @@ icon / arrow up - - + + diff --git a/packages/yoroi-extension/app/assets/images/assets-page/asset-no.inline.svg b/packages/yoroi-extension/app/assets/images/assets-page/asset-no.inline.svg index 0bf2f8ef47..218b1c86b0 100644 --- a/packages/yoroi-extension/app/assets/images/assets-page/asset-no.inline.svg +++ b/packages/yoroi-extension/app/assets/images/assets-page/asset-no.inline.svg @@ -1,8 +1,8 @@ icon/asset-no image - + - + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/assets-page/assets.inline.svg b/packages/yoroi-extension/app/assets/images/assets-page/assets.inline.svg index d45e5a002a..701745b244 100644 --- a/packages/yoroi-extension/app/assets/images/assets-page/assets.inline.svg +++ b/packages/yoroi-extension/app/assets/images/assets-page/assets.inline.svg @@ -1,7 +1,7 @@ icon/assets-grey - + diff --git a/packages/yoroi-extension/app/assets/images/assets-page/chevron-right.inline.svg b/packages/yoroi-extension/app/assets/images/assets-page/chevron-right.inline.svg index 737b86de86..c75aa644b5 100644 --- a/packages/yoroi-extension/app/assets/images/assets-page/chevron-right.inline.svg +++ b/packages/yoroi-extension/app/assets/images/assets-page/chevron-right.inline.svg @@ -1,3 +1,3 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/assets-page/grid-2x2.inline.svg b/packages/yoroi-extension/app/assets/images/assets-page/grid-2x2.inline.svg index 91ae38082b..d28faae903 100644 --- a/packages/yoroi-extension/app/assets/images/assets-page/grid-2x2.inline.svg +++ b/packages/yoroi-extension/app/assets/images/assets-page/grid-2x2.inline.svg @@ -1,6 +1,6 @@ - - - - + + + + diff --git a/packages/yoroi-extension/app/assets/images/assets-page/grid-3x3.inline.svg b/packages/yoroi-extension/app/assets/images/assets-page/grid-3x3.inline.svg index 23b8120519..0346c47a2c 100644 --- a/packages/yoroi-extension/app/assets/images/assets-page/grid-3x3.inline.svg +++ b/packages/yoroi-extension/app/assets/images/assets-page/grid-3x3.inline.svg @@ -1,11 +1,11 @@ - - - - - - - - - + + + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/assets-page/no-nft-found.inline.svg b/packages/yoroi-extension/app/assets/images/assets-page/no-nft-found.inline.svg index e9f047e627..075407371f 100644 --- a/packages/yoroi-extension/app/assets/images/assets-page/no-nft-found.inline.svg +++ b/packages/yoroi-extension/app/assets/images/assets-page/no-nft-found.inline.svg @@ -12,7 +12,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/assets-page/no-nfts.inline.svg b/packages/yoroi-extension/app/assets/images/assets-page/no-nfts.inline.svg index 9e9d6c0819..6846bdbe5f 100644 --- a/packages/yoroi-extension/app/assets/images/assets-page/no-nfts.inline.svg +++ b/packages/yoroi-extension/app/assets/images/assets-page/no-nfts.inline.svg @@ -12,7 +12,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/assets-page/no-tokens.inline.svg b/packages/yoroi-extension/app/assets/images/assets-page/no-tokens.inline.svg index eb9c50a0f4..88516c249d 100644 --- a/packages/yoroi-extension/app/assets/images/assets-page/no-tokens.inline.svg +++ b/packages/yoroi-extension/app/assets/images/assets-page/no-tokens.inline.svg @@ -13,19 +13,19 @@ - + - + - + - + @@ -33,8 +33,8 @@ - - + + diff --git a/packages/yoroi-extension/app/assets/images/assets-page/search.inline.svg b/packages/yoroi-extension/app/assets/images/assets-page/search.inline.svg index 2a8441b50e..76350d463e 100644 --- a/packages/yoroi-extension/app/assets/images/assets-page/search.inline.svg +++ b/packages/yoroi-extension/app/assets/images/assets-page/search.inline.svg @@ -4,7 +4,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/attention-big-light.inline.svg b/packages/yoroi-extension/app/assets/images/attention-big-light.inline.svg index 1602e4e08a..abd23b3035 100644 --- a/packages/yoroi-extension/app/assets/images/attention-big-light.inline.svg +++ b/packages/yoroi-extension/app/assets/images/attention-big-light.inline.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/attention-classic.inline.svg b/packages/yoroi-extension/app/assets/images/attention-classic.inline.svg index c2ab17c56c..2b821028b5 100644 --- a/packages/yoroi-extension/app/assets/images/attention-classic.inline.svg +++ b/packages/yoroi-extension/app/assets/images/attention-classic.inline.svg @@ -3,10 +3,10 @@ icon/attention.inline Created with Sketch. - + - + diff --git a/packages/yoroi-extension/app/assets/images/attention-modern.inline.svg b/packages/yoroi-extension/app/assets/images/attention-modern.inline.svg index dc6aa9b285..f480695ce8 100644 --- a/packages/yoroi-extension/app/assets/images/attention-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/attention-modern.inline.svg @@ -3,10 +3,10 @@ icon/attention.inline Created with Sketch. - + - + diff --git a/packages/yoroi-extension/app/assets/images/back-arrow-ic.inline.svg b/packages/yoroi-extension/app/assets/images/back-arrow-ic.inline.svg index 202e459f35..53b148091f 100644 --- a/packages/yoroi-extension/app/assets/images/back-arrow-ic.inline.svg +++ b/packages/yoroi-extension/app/assets/images/back-arrow-ic.inline.svg @@ -1 +1 @@ -D3D7852F-EF60-41C7-BDB2-B25B249B24F3 \ No newline at end of file +D3D7852F-EF60-41C7-BDB2-B25B249B24F3 \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/complexity-level/advanced-level.inline.svg b/packages/yoroi-extension/app/assets/images/complexity-level/advanced-level.inline.svg index e404d3b116..bfedb4c099 100644 --- a/packages/yoroi-extension/app/assets/images/complexity-level/advanced-level.inline.svg +++ b/packages/yoroi-extension/app/assets/images/complexity-level/advanced-level.inline.svg @@ -149,29 +149,29 @@ - + - - + + - - + + - + - - - - + + + + @@ -186,22 +186,22 @@ - - - - - + + + + + - + - - + + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/complexity-level/beginner-level.inline.svg b/packages/yoroi-extension/app/assets/images/complexity-level/beginner-level.inline.svg index c432679811..6e63acf695 100644 --- a/packages/yoroi-extension/app/assets/images/complexity-level/beginner-level.inline.svg +++ b/packages/yoroi-extension/app/assets/images/complexity-level/beginner-level.inline.svg @@ -70,22 +70,22 @@ - + - - - - - - - - - - - + + + + + + + + + + + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/copied.inline.svg b/packages/yoroi-extension/app/assets/images/copied.inline.svg index 9a9eff855e..e5402cfabb 100644 --- a/packages/yoroi-extension/app/assets/images/copied.inline.svg +++ b/packages/yoroi-extension/app/assets/images/copied.inline.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/copy.inline.svg b/packages/yoroi-extension/app/assets/images/copy.inline.svg index 2425b226ca..eb7dac3d1d 100644 --- a/packages/yoroi-extension/app/assets/images/copy.inline.svg +++ b/packages/yoroi-extension/app/assets/images/copy.inline.svg @@ -1,4 +1,4 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/cross-dark.inline.svg b/packages/yoroi-extension/app/assets/images/cross-dark.inline.svg index a3871260e5..4dd19fba72 100644 --- a/packages/yoroi-extension/app/assets/images/cross-dark.inline.svg +++ b/packages/yoroi-extension/app/assets/images/cross-dark.inline.svg @@ -3,7 +3,7 @@ close Created with Sketch. - + diff --git a/packages/yoroi-extension/app/assets/images/currencies/ADA.inline.svg b/packages/yoroi-extension/app/assets/images/currencies/ADA.inline.svg index 5c312b81ba..2e92235c48 100644 --- a/packages/yoroi-extension/app/assets/images/currencies/ADA.inline.svg +++ b/packages/yoroi-extension/app/assets/images/currencies/ADA.inline.svg @@ -1,4 +1,4 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/currencies/BRL.inline.svg b/packages/yoroi-extension/app/assets/images/currencies/BRL.inline.svg index 237c06b0bd..da069779b5 100644 --- a/packages/yoroi-extension/app/assets/images/currencies/BRL.inline.svg +++ b/packages/yoroi-extension/app/assets/images/currencies/BRL.inline.svg @@ -9,26 +9,26 @@ - - + + - + - - + + - - + + - + - + diff --git a/packages/yoroi-extension/app/assets/images/currencies/CNY.inline.svg b/packages/yoroi-extension/app/assets/images/currencies/CNY.inline.svg index 53dc39c0b0..0432493796 100644 --- a/packages/yoroi-extension/app/assets/images/currencies/CNY.inline.svg +++ b/packages/yoroi-extension/app/assets/images/currencies/CNY.inline.svg @@ -8,12 +8,12 @@ - - - - - - + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/currencies/EUR.inline.svg b/packages/yoroi-extension/app/assets/images/currencies/EUR.inline.svg index 0563ce8901..431ff735dd 100644 --- a/packages/yoroi-extension/app/assets/images/currencies/EUR.inline.svg +++ b/packages/yoroi-extension/app/assets/images/currencies/EUR.inline.svg @@ -1,17 +1,17 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/currencies/JPY.inline.svg b/packages/yoroi-extension/app/assets/images/currencies/JPY.inline.svg index dd5ab907d0..6dc5a8abde 100644 --- a/packages/yoroi-extension/app/assets/images/currencies/JPY.inline.svg +++ b/packages/yoroi-extension/app/assets/images/currencies/JPY.inline.svg @@ -5,7 +5,7 @@ - - + + diff --git a/packages/yoroi-extension/app/assets/images/currencies/KRW.inline.svg b/packages/yoroi-extension/app/assets/images/currencies/KRW.inline.svg index ad037f90bc..2c7578b107 100644 --- a/packages/yoroi-extension/app/assets/images/currencies/KRW.inline.svg +++ b/packages/yoroi-extension/app/assets/images/currencies/KRW.inline.svg @@ -4,28 +4,28 @@ - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/dapp-connector/add-collateral.inline.svg b/packages/yoroi-extension/app/assets/images/dapp-connector/add-collateral.inline.svg index f40c124439..0dabf4c8b6 100644 --- a/packages/yoroi-extension/app/assets/images/dapp-connector/add-collateral.inline.svg +++ b/packages/yoroi-extension/app/assets/images/dapp-connector/add-collateral.inline.svg @@ -21,7 +21,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/dapp-connector/dapp-connector.inline.svg b/packages/yoroi-extension/app/assets/images/dapp-connector/dapp-connector.inline.svg index f773aa9edf..65d993ac88 100644 --- a/packages/yoroi-extension/app/assets/images/dapp-connector/dapp-connector.inline.svg +++ b/packages/yoroi-extension/app/assets/images/dapp-connector/dapp-connector.inline.svg @@ -1,8 +1,8 @@ icon/dapp connector - - + + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/dapp-connector/delete.inline.svg b/packages/yoroi-extension/app/assets/images/dapp-connector/delete.inline.svg index e66c61d793..2e34d96ebd 100644 --- a/packages/yoroi-extension/app/assets/images/dapp-connector/delete.inline.svg +++ b/packages/yoroi-extension/app/assets/images/dapp-connector/delete.inline.svg @@ -1,10 +1,10 @@ icon/delete - + - + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/dapp-connector/no-dapp.inline.svg b/packages/yoroi-extension/app/assets/images/dapp-connector/no-dapp.inline.svg index f400d9c213..1dec0c5e41 100644 --- a/packages/yoroi-extension/app/assets/images/dapp-connector/no-dapp.inline.svg +++ b/packages/yoroi-extension/app/assets/images/dapp-connector/no-dapp.inline.svg @@ -1,7 +1,7 @@ icon/dapp-no image - + @@ -9,7 +9,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/dapp-connector/no-dapps-connected.inline.svg b/packages/yoroi-extension/app/assets/images/dapp-connector/no-dapps-connected.inline.svg index f2dc4163b9..e092aa7e63 100644 --- a/packages/yoroi-extension/app/assets/images/dapp-connector/no-dapps-connected.inline.svg +++ b/packages/yoroi-extension/app/assets/images/dapp-connector/no-dapps-connected.inline.svg @@ -25,7 +25,7 @@ - + @@ -33,7 +33,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/dashboard/empty-dashboard.inline.svg b/packages/yoroi-extension/app/assets/images/dashboard/empty-dashboard.inline.svg index 2d1414e5c0..89e54da6ee 100644 --- a/packages/yoroi-extension/app/assets/images/dashboard/empty-dashboard.inline.svg +++ b/packages/yoroi-extension/app/assets/images/dashboard/empty-dashboard.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/dashboard/grey-total-ada.inline.svg b/packages/yoroi-extension/app/assets/images/dashboard/grey-total-ada.inline.svg index f3d6005aa2..832a6aa535 100644 --- a/packages/yoroi-extension/app/assets/images/dashboard/grey-total-ada.inline.svg +++ b/packages/yoroi-extension/app/assets/images/dashboard/grey-total-ada.inline.svg @@ -1,7 +1,7 @@ icon/total-ada - + diff --git a/packages/yoroi-extension/app/assets/images/dashboard/grey-total-reward.inline.svg b/packages/yoroi-extension/app/assets/images/dashboard/grey-total-reward.inline.svg index afc134451c..e5d4fe8ddb 100644 --- a/packages/yoroi-extension/app/assets/images/dashboard/grey-total-reward.inline.svg +++ b/packages/yoroi-extension/app/assets/images/dashboard/grey-total-reward.inline.svg @@ -1,7 +1,7 @@ icon/total-reward - + diff --git a/packages/yoroi-extension/app/assets/images/dashboard/staking-active.inline.svg b/packages/yoroi-extension/app/assets/images/dashboard/staking-active.inline.svg index bbcd8cc68d..3b4564afeb 100644 --- a/packages/yoroi-extension/app/assets/images/dashboard/staking-active.inline.svg +++ b/packages/yoroi-extension/app/assets/images/dashboard/staking-active.inline.svg @@ -1,6 +1,6 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/dashboard/staking-illustration.inline.svg b/packages/yoroi-extension/app/assets/images/dashboard/staking-illustration.inline.svg index dd5e1a2f9a..d5f526d60f 100644 --- a/packages/yoroi-extension/app/assets/images/dashboard/staking-illustration.inline.svg +++ b/packages/yoroi-extension/app/assets/images/dashboard/staking-illustration.inline.svg @@ -27,12 +27,12 @@ - + - + diff --git a/packages/yoroi-extension/app/assets/images/dashboard/total-delegated.inline.svg b/packages/yoroi-extension/app/assets/images/dashboard/total-delegated.inline.svg index 0cbb5c3c80..2659a4f15c 100644 --- a/packages/yoroi-extension/app/assets/images/dashboard/total-delegated.inline.svg +++ b/packages/yoroi-extension/app/assets/images/dashboard/total-delegated.inline.svg @@ -1,4 +1,4 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/default-nft.inline.svg b/packages/yoroi-extension/app/assets/images/default-nft.inline.svg index 33ffcb85da..bb57de9d73 100644 --- a/packages/yoroi-extension/app/assets/images/default-nft.inline.svg +++ b/packages/yoroi-extension/app/assets/images/default-nft.inline.svg @@ -1,28 +1,28 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/edit.inline.svg b/packages/yoroi-extension/app/assets/images/edit.inline.svg index 8dc7d718f1..b2391d9baa 100644 --- a/packages/yoroi-extension/app/assets/images/edit.inline.svg +++ b/packages/yoroi-extension/app/assets/images/edit.inline.svg @@ -3,10 +3,10 @@ edit.inline Created with Sketch. - + - + diff --git a/packages/yoroi-extension/app/assets/images/error-info.inline.svg b/packages/yoroi-extension/app/assets/images/error-info.inline.svg index bc0f8cad23..129f7f8966 100644 --- a/packages/yoroi-extension/app/assets/images/error-info.inline.svg +++ b/packages/yoroi-extension/app/assets/images/error-info.inline.svg @@ -15,7 +15,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/exchange-end-illustration.svg b/packages/yoroi-extension/app/assets/images/exchange-end-illustration.svg index a46c2f8d81..5891345967 100644 --- a/packages/yoroi-extension/app/assets/images/exchange-end-illustration.svg +++ b/packages/yoroi-extension/app/assets/images/exchange-end-illustration.svg @@ -1,48 +1,48 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - + - - - - - - - + + + + + + + - - - + + + - - - + + + - + diff --git a/packages/yoroi-extension/app/assets/images/expand-arrow-grey.inline.svg b/packages/yoroi-extension/app/assets/images/expand-arrow-grey.inline.svg index 46a7cf9b69..66a40ace62 100644 --- a/packages/yoroi-extension/app/assets/images/expand-arrow-grey.inline.svg +++ b/packages/yoroi-extension/app/assets/images/expand-arrow-grey.inline.svg @@ -3,8 +3,8 @@ icon/arrow Created with Sketch. - - - + + + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/flags/brazil.inline.svg b/packages/yoroi-extension/app/assets/images/flags/brazil.inline.svg index 21fb619338..939acd6951 100644 --- a/packages/yoroi-extension/app/assets/images/flags/brazil.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/brazil.inline.svg @@ -5,7 +5,7 @@ - + @@ -13,40 +13,40 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/flags/chinese.inline.svg b/packages/yoroi-extension/app/assets/images/flags/chinese.inline.svg index d3a63956fd..c8e9fdfff9 100644 --- a/packages/yoroi-extension/app/assets/images/flags/chinese.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/chinese.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/flags/czech.inline.svg b/packages/yoroi-extension/app/assets/images/flags/czech.inline.svg index 543ba5d5ab..75f9aff55b 100644 --- a/packages/yoroi-extension/app/assets/images/flags/czech.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/czech.inline.svg @@ -4,14 +4,14 @@ - + - + diff --git a/packages/yoroi-extension/app/assets/images/flags/dutch.inline.svg b/packages/yoroi-extension/app/assets/images/flags/dutch.inline.svg index c5f5712242..d941a99af7 100644 --- a/packages/yoroi-extension/app/assets/images/flags/dutch.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/dutch.inline.svg @@ -6,7 +6,7 @@ - + @@ -17,9 +17,9 @@ - - - + + + diff --git a/packages/yoroi-extension/app/assets/images/flags/english.inline.svg b/packages/yoroi-extension/app/assets/images/flags/english.inline.svg index 7131ae6ed3..9f09c083c6 100644 --- a/packages/yoroi-extension/app/assets/images/flags/english.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/english.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/flags/french.inline.svg b/packages/yoroi-extension/app/assets/images/flags/french.inline.svg index 43fd73ea36..c91f76a93f 100644 --- a/packages/yoroi-extension/app/assets/images/flags/french.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/french.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/flags/german.inline.svg b/packages/yoroi-extension/app/assets/images/flags/german.inline.svg index 1f6e5ee522..cce6ef02e3 100644 --- a/packages/yoroi-extension/app/assets/images/flags/german.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/german.inline.svg @@ -6,7 +6,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/flags/indonesian.inline.svg b/packages/yoroi-extension/app/assets/images/flags/indonesian.inline.svg index 43ceba0003..00d61d765b 100644 --- a/packages/yoroi-extension/app/assets/images/flags/indonesian.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/indonesian.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/flags/italian.inline.svg b/packages/yoroi-extension/app/assets/images/flags/italian.inline.svg index 1abb0ce2f2..e4cc2b9065 100644 --- a/packages/yoroi-extension/app/assets/images/flags/italian.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/italian.inline.svg @@ -6,7 +6,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/flags/japanese.inline.svg b/packages/yoroi-extension/app/assets/images/flags/japanese.inline.svg index be157e873a..cbf9800cfd 100644 --- a/packages/yoroi-extension/app/assets/images/flags/japanese.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/japanese.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/flags/korean.inline.svg b/packages/yoroi-extension/app/assets/images/flags/korean.inline.svg index eb75c14fc3..77ffef7981 100644 --- a/packages/yoroi-extension/app/assets/images/flags/korean.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/korean.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/flags/russian.inline.svg b/packages/yoroi-extension/app/assets/images/flags/russian.inline.svg index 9c6cd54c0f..6b22eec790 100644 --- a/packages/yoroi-extension/app/assets/images/flags/russian.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/russian.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/flags/slovak.inline.svg b/packages/yoroi-extension/app/assets/images/flags/slovak.inline.svg index 50ca6f21a2..b2a6aeb9c5 100644 --- a/packages/yoroi-extension/app/assets/images/flags/slovak.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/slovak.inline.svg @@ -5,7 +5,7 @@ - + @@ -13,13 +13,13 @@ - - - - + + + + - + @@ -27,8 +27,8 @@ - - + + diff --git a/packages/yoroi-extension/app/assets/images/flags/spanish.inline.svg b/packages/yoroi-extension/app/assets/images/flags/spanish.inline.svg index 11b366ffa1..6f93383cdd 100644 --- a/packages/yoroi-extension/app/assets/images/flags/spanish.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/spanish.inline.svg @@ -6,7 +6,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/flags/turkish.inline.svg b/packages/yoroi-extension/app/assets/images/flags/turkish.inline.svg index 896c5f0309..64b56fef0b 100644 --- a/packages/yoroi-extension/app/assets/images/flags/turkish.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/turkish.inline.svg @@ -6,7 +6,7 @@ - + @@ -14,7 +14,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/flags/vietnamese.inline.svg b/packages/yoroi-extension/app/assets/images/flags/vietnamese.inline.svg index 868caa51ba..d69278e824 100644 --- a/packages/yoroi-extension/app/assets/images/flags/vietnamese.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/vietnamese.inline.svg @@ -26,7 +26,7 @@ - @@ -39,7 +39,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/forms/close.inline.svg b/packages/yoroi-extension/app/assets/images/forms/close.inline.svg index 87eda4d678..35c8c328a3 100644 --- a/packages/yoroi-extension/app/assets/images/forms/close.inline.svg +++ b/packages/yoroi-extension/app/assets/images/forms/close.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/forms/done.inline.svg b/packages/yoroi-extension/app/assets/images/forms/done.inline.svg index b243ba8ff8..43bf108e60 100644 --- a/packages/yoroi-extension/app/assets/images/forms/done.inline.svg +++ b/packages/yoroi-extension/app/assets/images/forms/done.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/forms/error.inline.svg b/packages/yoroi-extension/app/assets/images/forms/error.inline.svg index 43f2c0c66a..8a520304c2 100644 --- a/packages/yoroi-extension/app/assets/images/forms/error.inline.svg +++ b/packages/yoroi-extension/app/assets/images/forms/error.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/forms/password-eye.inline.svg b/packages/yoroi-extension/app/assets/images/forms/password-eye.inline.svg index 9dbe97e92f..b50ba27608 100644 --- a/packages/yoroi-extension/app/assets/images/forms/password-eye.inline.svg +++ b/packages/yoroi-extension/app/assets/images/forms/password-eye.inline.svg @@ -1,4 +1,4 @@ - - + + diff --git a/packages/yoroi-extension/app/assets/images/generate-uri.inline.svg b/packages/yoroi-extension/app/assets/images/generate-uri.inline.svg index 2e1114d7fb..78c0ef8f35 100644 --- a/packages/yoroi-extension/app/assets/images/generate-uri.inline.svg +++ b/packages/yoroi-extension/app/assets/images/generate-uri.inline.svg @@ -3,7 +3,7 @@ icon/generate-url.inline Created with Sketch. - + diff --git a/packages/yoroi-extension/app/assets/images/google-play-badge.inline.svg b/packages/yoroi-extension/app/assets/images/google-play-badge.inline.svg index e51c32a159..d74a00bcf5 100644 --- a/packages/yoroi-extension/app/assets/images/google-play-badge.inline.svg +++ b/packages/yoroi-extension/app/assets/images/google-play-badge.inline.svg @@ -28,7 +28,7 @@ - + @@ -38,10 +38,10 @@ - + - + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/check-prerequisite-header-icon.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/check-prerequisite-header-icon.inline.svg index d69809b757..f1c8f5a491 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/check-prerequisite-header-icon.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/check-prerequisite-header-icon.inline.svg @@ -3,7 +3,7 @@ Group Created with Sketch. - + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/check-modern.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/check-modern.inline.svg index 287f52f5dd..b59bf6283a 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/check-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/check-modern.inline.svg @@ -14,7 +14,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/check.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/check.inline.svg index 597f5f3f74..5b04123454 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/check.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/check.inline.svg @@ -1,6 +1,6 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/connect-error-modern.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/connect-error-modern.inline.svg index 117d1809b7..f96c68f6cb 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/connect-error-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/connect-error-modern.inline.svg @@ -20,7 +20,7 @@ - + @@ -50,7 +50,7 @@ - + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/connect-error.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/connect-error.inline.svg index 8747134e23..c885ddc0a5 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/connect-error.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/connect-error.inline.svg @@ -4,7 +4,7 @@ - + @@ -35,6 +35,6 @@ - + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-error-modern.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-error-modern.inline.svg index 08df77ea3f..511c5ad8b0 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-error-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-error-modern.inline.svg @@ -21,7 +21,7 @@ - + @@ -54,7 +54,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-error.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-error.inline.svg index 718835a6a9..c86f99a7b1 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-error.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-error.inline.svg @@ -8,7 +8,7 @@ - + @@ -44,7 +44,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-load-modern.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-load-modern.inline.svg index e2384f271c..1e55dd9d31 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-load-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-load-modern.inline.svg @@ -20,7 +20,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-load.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-load.inline.svg index 70bce40350..87da47a3de 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-load.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-load.inline.svg @@ -8,7 +8,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/check-modern.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/check-modern.inline.svg index b517c97911..7b939b9a0e 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/check-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/check-modern.inline.svg @@ -10,7 +10,7 @@ - + @@ -20,9 +20,9 @@ - - - + + + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/check.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/check.inline.svg index b4d1899bb6..74e4026e80 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/check.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/check.inline.svg @@ -3,21 +3,21 @@ - + - - - - + + + + - - - + + + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/connect-error-modern.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/connect-error-modern.inline.svg index 51f7ceed61..c35cebdc0f 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/connect-error-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/connect-error-modern.inline.svg @@ -11,7 +11,7 @@ - + @@ -19,24 +19,24 @@ - + - - - - - - - - - - - + + + + + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/connect-error.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/connect-error.inline.svg index fbf3f139e6..fa7d4575fa 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/connect-error.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/connect-error.inline.svg @@ -7,7 +7,7 @@ - + @@ -15,24 +15,24 @@ - + - - - - - - - - - - - + + + + + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-error-modern.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-error-modern.inline.svg index 22e34315d1..fe84fa0983 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-error-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-error-modern.inline.svg @@ -13,7 +13,7 @@ - + @@ -21,7 +21,7 @@ - + @@ -36,7 +36,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -58,7 +58,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-error.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-error.inline.svg index 4e19983a60..849dabe73b 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-error.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-error.inline.svg @@ -9,7 +9,7 @@ - + @@ -54,7 +54,7 @@ - + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-load-modern.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-load-modern.inline.svg index f6d8d98fc6..5e4fa2a7f4 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-load-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-load-modern.inline.svg @@ -12,7 +12,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-load.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-load.inline.svg index 18fda8e491..121135e852 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-load.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-load.inline.svg @@ -9,7 +9,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/info-icon-primary.inline.svg b/packages/yoroi-extension/app/assets/images/info-icon-primary.inline.svg index 87dff0b1c4..17077361f4 100644 --- a/packages/yoroi-extension/app/assets/images/info-icon-primary.inline.svg +++ b/packages/yoroi-extension/app/assets/images/info-icon-primary.inline.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/info-icon-revamp.inline.svg b/packages/yoroi-extension/app/assets/images/info-icon-revamp.inline.svg index 890c6157cc..29357793ed 100644 --- a/packages/yoroi-extension/app/assets/images/info-icon-revamp.inline.svg +++ b/packages/yoroi-extension/app/assets/images/info-icon-revamp.inline.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/info-icon.inline.svg b/packages/yoroi-extension/app/assets/images/info-icon.inline.svg index be3c304679..b7456bdef2 100644 --- a/packages/yoroi-extension/app/assets/images/info-icon.inline.svg +++ b/packages/yoroi-extension/app/assets/images/info-icon.inline.svg @@ -3,10 +3,10 @@ icon/info Created with Sketch. - + - + diff --git a/packages/yoroi-extension/app/assets/images/info-warning.inline.svg b/packages/yoroi-extension/app/assets/images/info-warning.inline.svg index c9f3cec9b3..d22675c691 100644 --- a/packages/yoroi-extension/app/assets/images/info-warning.inline.svg +++ b/packages/yoroi-extension/app/assets/images/info-warning.inline.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/link-external.inline.svg b/packages/yoroi-extension/app/assets/images/link-external.inline.svg index b12890521b..d9896c5baf 100644 --- a/packages/yoroi-extension/app/assets/images/link-external.inline.svg +++ b/packages/yoroi-extension/app/assets/images/link-external.inline.svg @@ -6,7 +6,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/my-wallets/arrow_down.inline.svg b/packages/yoroi-extension/app/assets/images/my-wallets/arrow_down.inline.svg index c1e6bf5971..332fa912c0 100644 --- a/packages/yoroi-extension/app/assets/images/my-wallets/arrow_down.inline.svg +++ b/packages/yoroi-extension/app/assets/images/my-wallets/arrow_down.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/my-wallets/icon_eye_closed.inline.svg b/packages/yoroi-extension/app/assets/images/my-wallets/icon_eye_closed.inline.svg index df24322292..4f5cb573a5 100644 --- a/packages/yoroi-extension/app/assets/images/my-wallets/icon_eye_closed.inline.svg +++ b/packages/yoroi-extension/app/assets/images/my-wallets/icon_eye_closed.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/my-wallets/icon_eye_open.inline.svg b/packages/yoroi-extension/app/assets/images/my-wallets/icon_eye_open.inline.svg index 8dcf46e710..5c0e55ea02 100644 --- a/packages/yoroi-extension/app/assets/images/my-wallets/icon_eye_open.inline.svg +++ b/packages/yoroi-extension/app/assets/images/my-wallets/icon_eye_open.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/my-wallets/icon_eye_opened_revamp.inline.svg b/packages/yoroi-extension/app/assets/images/my-wallets/icon_eye_opened_revamp.inline.svg index 0dcdec1ecb..3379b6ec0f 100644 --- a/packages/yoroi-extension/app/assets/images/my-wallets/icon_eye_opened_revamp.inline.svg +++ b/packages/yoroi-extension/app/assets/images/my-wallets/icon_eye_opened_revamp.inline.svg @@ -1,4 +1,4 @@ - - + + diff --git a/packages/yoroi-extension/app/assets/images/my-wallets/symbol_ada.inline.svg b/packages/yoroi-extension/app/assets/images/my-wallets/symbol_ada.inline.svg index 7ea7f6e5da..728fb5a075 100644 --- a/packages/yoroi-extension/app/assets/images/my-wallets/symbol_ada.inline.svg +++ b/packages/yoroi-extension/app/assets/images/my-wallets/symbol_ada.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/my-wallets/symbol_adaTestnet.inline.svg b/packages/yoroi-extension/app/assets/images/my-wallets/symbol_adaTestnet.inline.svg index a4f8d1f3cc..0d4b43c4e5 100644 --- a/packages/yoroi-extension/app/assets/images/my-wallets/symbol_adaTestnet.inline.svg +++ b/packages/yoroi-extension/app/assets/images/my-wallets/symbol_adaTestnet.inline.svg @@ -6,9 +6,9 @@ Layer 1 - + - + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/my-wallets/symbol_bitcoin.inline.svg b/packages/yoroi-extension/app/assets/images/my-wallets/symbol_bitcoin.inline.svg index a9843d99a8..78f9203f54 100644 --- a/packages/yoroi-extension/app/assets/images/my-wallets/symbol_bitcoin.inline.svg +++ b/packages/yoroi-extension/app/assets/images/my-wallets/symbol_bitcoin.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/my-wallets/symbol_ethereum.inline.svg b/packages/yoroi-extension/app/assets/images/my-wallets/symbol_ethereum.inline.svg index 5897651b34..fea48a4dfc 100644 --- a/packages/yoroi-extension/app/assets/images/my-wallets/symbol_ethereum.inline.svg +++ b/packages/yoroi-extension/app/assets/images/my-wallets/symbol_ethereum.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/new-theme-illustration.inline.svg b/packages/yoroi-extension/app/assets/images/new-theme-illustration.inline.svg index 921d5d97b1..b7377a8554 100644 --- a/packages/yoroi-extension/app/assets/images/new-theme-illustration.inline.svg +++ b/packages/yoroi-extension/app/assets/images/new-theme-illustration.inline.svg @@ -1,11 +1,11 @@ - - - - - + + + + + diff --git a/packages/yoroi-extension/app/assets/images/nft-no.inline.svg b/packages/yoroi-extension/app/assets/images/nft-no.inline.svg index fbe5b6cb1e..d1a59939cb 100644 --- a/packages/yoroi-extension/app/assets/images/nft-no.inline.svg +++ b/packages/yoroi-extension/app/assets/images/nft-no.inline.svg @@ -1,7 +1,7 @@ icon/nft-no image - + @@ -27,7 +27,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/open-eye-primary.inline.svg b/packages/yoroi-extension/app/assets/images/open-eye-primary.inline.svg index 6721e0aee8..4d18864607 100644 --- a/packages/yoroi-extension/app/assets/images/open-eye-primary.inline.svg +++ b/packages/yoroi-extension/app/assets/images/open-eye-primary.inline.svg @@ -1,4 +1,4 @@ - - + + diff --git a/packages/yoroi-extension/app/assets/images/pic-catalyst-step3-ledger.inline.svg b/packages/yoroi-extension/app/assets/images/pic-catalyst-step3-ledger.inline.svg index 2353ccca95..bb8a0f6e19 100644 --- a/packages/yoroi-extension/app/assets/images/pic-catalyst-step3-ledger.inline.svg +++ b/packages/yoroi-extension/app/assets/images/pic-catalyst-step3-ledger.inline.svg @@ -84,7 +84,7 @@ - + @@ -96,17 +96,17 @@ - + - - + + - + diff --git a/packages/yoroi-extension/app/assets/images/pic-catalyst-step3-trezor.inline.svg b/packages/yoroi-extension/app/assets/images/pic-catalyst-step3-trezor.inline.svg index 493f3ea07e..e9988fe92c 100644 --- a/packages/yoroi-extension/app/assets/images/pic-catalyst-step3-trezor.inline.svg +++ b/packages/yoroi-extension/app/assets/images/pic-catalyst-step3-trezor.inline.svg @@ -90,7 +90,7 @@ - + @@ -103,12 +103,12 @@ - - - - - - + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/qr-code.inline.svg b/packages/yoroi-extension/app/assets/images/qr-code.inline.svg index c9ce430eed..89bc75c4b9 100644 --- a/packages/yoroi-extension/app/assets/images/qr-code.inline.svg +++ b/packages/yoroi-extension/app/assets/images/qr-code.inline.svg @@ -1,7 +1,7 @@ 5A8618A8-D7D1-4842-95F4-1BB58CCC0C7D - + @@ -10,7 +10,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/question-mark.inline.svg b/packages/yoroi-extension/app/assets/images/question-mark.inline.svg index 9806c07e0c..4986edf101 100644 --- a/packages/yoroi-extension/app/assets/images/question-mark.inline.svg +++ b/packages/yoroi-extension/app/assets/images/question-mark.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/revamp/add-memo.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/add-memo.inline.svg index 2126e688df..65e8a67135 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/add-memo.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/add-memo.inline.svg @@ -1,4 +1,4 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/revamp/asset-default.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/asset-default.inline.svg index 6b1e21464d..f41c058280 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/asset-default.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/asset-default.inline.svg @@ -1,4 +1,4 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/revamp/delete.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/delete.inline.svg index 75036a7532..eefd00e144 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/delete.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/delete.inline.svg @@ -1,3 +1,3 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/revamp/dex/spec.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/dex/spec.inline.svg index 6e7ac4058f..4760e93cc7 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/dex/spec.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/dex/spec.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/revamp/dex/vyfi.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/dex/vyfi.inline.svg index d3a6af90e7..5c001a642c 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/dex/vyfi.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/dex/vyfi.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/revamp/error.triangle.svg b/packages/yoroi-extension/app/assets/images/revamp/error.triangle.svg index 5ed00fb004..2b65bcfcbf 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/error.triangle.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/error.triangle.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/revamp/exclamation.circle.svg b/packages/yoroi-extension/app/assets/images/revamp/exclamation.circle.svg index 94cbff8baa..f5b25788d6 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/exclamation.circle.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/exclamation.circle.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/revamp/icons/chevron-down.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/icons/chevron-down.inline.svg index 8f20fcc172..cbde6bd57e 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/icons/chevron-down.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/icons/chevron-down.inline.svg @@ -1,3 +1,3 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/revamp/icons/edit.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/icons/edit.inline.svg index 330f53347b..a950738361 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/icons/edit.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/icons/edit.inline.svg @@ -1,4 +1,4 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/revamp/icons/exclamation-circle.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/icons/exclamation-circle.inline.svg index 9203ed1d3e..d512d95be1 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/icons/exclamation-circle.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/icons/exclamation-circle.inline.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/revamp/icons/info.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/icons/info.inline.svg index 9df6509f1d..f4abbe9285 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/icons/info.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/icons/info.inline.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/revamp/icons/search.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/icons/search.inline.svg index 0f11886845..6b5b2db56a 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/icons/search.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/icons/search.inline.svg @@ -1,3 +1,3 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/revamp/info.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/info.inline.svg index 890c6157cc..29357793ed 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/info.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/info.inline.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/revamp/no-assets-found.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/no-assets-found.inline.svg index ede6e03d92..efb9075c7c 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/no-assets-found.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/no-assets-found.inline.svg @@ -13,19 +13,19 @@ - + - + - + - + @@ -33,8 +33,8 @@ - - + + diff --git a/packages/yoroi-extension/app/assets/images/revamp/registration-is-not-available.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/registration-is-not-available.inline.svg index dc3b2890db..30f07a9b09 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/registration-is-not-available.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/registration-is-not-available.inline.svg @@ -2,13 +2,13 @@ - - - diff --git a/packages/yoroi-extension/app/assets/images/revamp/tx-failure.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/tx-failure.inline.svg index 99b322beaa..06e7efe216 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/tx-failure.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/tx-failure.inline.svg @@ -8,9 +8,9 @@ - - - + + + diff --git a/packages/yoroi-extension/app/assets/images/revamp/verify-icon.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/verify-icon.inline.svg index 3f7bea4817..cebfb0747f 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/verify-icon.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/verify-icon.inline.svg @@ -1,3 +1,3 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/shelley-testnet-warning.inline.svg b/packages/yoroi-extension/app/assets/images/shelley-testnet-warning.inline.svg index 6da2790b21..7f202fd836 100644 --- a/packages/yoroi-extension/app/assets/images/shelley-testnet-warning.inline.svg +++ b/packages/yoroi-extension/app/assets/images/shelley-testnet-warning.inline.svg @@ -3,7 +3,7 @@ icon/warning Created with Sketch. - + diff --git a/packages/yoroi-extension/app/assets/images/sidebar/my_wallets.inline.svg b/packages/yoroi-extension/app/assets/images/sidebar/my_wallets.inline.svg index 904bbf0b17..df395f8740 100644 --- a/packages/yoroi-extension/app/assets/images/sidebar/my_wallets.inline.svg +++ b/packages/yoroi-extension/app/assets/images/sidebar/my_wallets.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/sidebar/open-sidebar.inline.svg b/packages/yoroi-extension/app/assets/images/sidebar/open-sidebar.inline.svg index 3a67705315..fe08a18e14 100644 --- a/packages/yoroi-extension/app/assets/images/sidebar/open-sidebar.inline.svg +++ b/packages/yoroi-extension/app/assets/images/sidebar/open-sidebar.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/sidebar/revamp/assets.inline.svg b/packages/yoroi-extension/app/assets/images/sidebar/revamp/assets.inline.svg index fd5644d3bb..d333e2683e 100644 --- a/packages/yoroi-extension/app/assets/images/sidebar/revamp/assets.inline.svg +++ b/packages/yoroi-extension/app/assets/images/sidebar/revamp/assets.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/sidebar/revamp/nfts.inline.svg b/packages/yoroi-extension/app/assets/images/sidebar/revamp/nfts.inline.svg index d3ba617d37..92cab2a637 100644 --- a/packages/yoroi-extension/app/assets/images/sidebar/revamp/nfts.inline.svg +++ b/packages/yoroi-extension/app/assets/images/sidebar/revamp/nfts.inline.svg @@ -1,4 +1,4 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/sidebar/revamp/setting.inline.svg b/packages/yoroi-extension/app/assets/images/sidebar/revamp/setting.inline.svg index e55a8d4bc0..cbd991516c 100644 --- a/packages/yoroi-extension/app/assets/images/sidebar/revamp/setting.inline.svg +++ b/packages/yoroi-extension/app/assets/images/sidebar/revamp/setting.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/sidebar/revamp/staking.inline.svg b/packages/yoroi-extension/app/assets/images/sidebar/revamp/staking.inline.svg index 66a08dc9ed..754bb5fbb6 100644 --- a/packages/yoroi-extension/app/assets/images/sidebar/revamp/staking.inline.svg +++ b/packages/yoroi-extension/app/assets/images/sidebar/revamp/staking.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/sidebar/revamp/voting.inline.svg b/packages/yoroi-extension/app/assets/images/sidebar/revamp/voting.inline.svg index c2c36c6a38..54250586bd 100644 --- a/packages/yoroi-extension/app/assets/images/sidebar/revamp/voting.inline.svg +++ b/packages/yoroi-extension/app/assets/images/sidebar/revamp/voting.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/sidebar/revamp/wallet.inline.svg b/packages/yoroi-extension/app/assets/images/sidebar/revamp/wallet.inline.svg index 916409450b..ee02d0ff88 100644 --- a/packages/yoroi-extension/app/assets/images/sidebar/revamp/wallet.inline.svg +++ b/packages/yoroi-extension/app/assets/images/sidebar/revamp/wallet.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/sidebar/revamp/yoroi-logo.inline.svg b/packages/yoroi-extension/app/assets/images/sidebar/revamp/yoroi-logo.inline.svg index 23525eab44..aab8fd4950 100644 --- a/packages/yoroi-extension/app/assets/images/sidebar/revamp/yoroi-logo.inline.svg +++ b/packages/yoroi-extension/app/assets/images/sidebar/revamp/yoroi-logo.inline.svg @@ -1,3 +1,3 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/sidebar/transfer_wallets.inline.svg b/packages/yoroi-extension/app/assets/images/sidebar/transfer_wallets.inline.svg index 91ecf1089f..386e34c9fa 100644 --- a/packages/yoroi-extension/app/assets/images/sidebar/transfer_wallets.inline.svg +++ b/packages/yoroi-extension/app/assets/images/sidebar/transfer_wallets.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/sidebar/wallet-settings-2-ic.inline.svg b/packages/yoroi-extension/app/assets/images/sidebar/wallet-settings-2-ic.inline.svg index 93bebc9667..5b088c386e 100644 --- a/packages/yoroi-extension/app/assets/images/sidebar/wallet-settings-2-ic.inline.svg +++ b/packages/yoroi-extension/app/assets/images/sidebar/wallet-settings-2-ic.inline.svg @@ -3,9 +3,9 @@ icon/wallet-settings-2-ic.inline Created with Sketch. - + - + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/sidebar/yoroi-logo-expanded.inline.svg b/packages/yoroi-extension/app/assets/images/sidebar/yoroi-logo-expanded.inline.svg index 561ef95b88..15a56c89ff 100644 --- a/packages/yoroi-extension/app/assets/images/sidebar/yoroi-logo-expanded.inline.svg +++ b/packages/yoroi-extension/app/assets/images/sidebar/yoroi-logo-expanded.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/sidebar/yoroi-logo.inline.svg b/packages/yoroi-extension/app/assets/images/sidebar/yoroi-logo.inline.svg index d479106fbe..b1a39407e8 100644 --- a/packages/yoroi-extension/app/assets/images/sidebar/yoroi-logo.inline.svg +++ b/packages/yoroi-extension/app/assets/images/sidebar/yoroi-logo.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/social/facebook.inline.svg b/packages/yoroi-extension/app/assets/images/social/facebook.inline.svg index aca22c4305..9e692313b2 100644 --- a/packages/yoroi-extension/app/assets/images/social/facebook.inline.svg +++ b/packages/yoroi-extension/app/assets/images/social/facebook.inline.svg @@ -1,3 +1,3 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/social/github.inline.svg b/packages/yoroi-extension/app/assets/images/social/github.inline.svg index 95ce3f9bd5..7c2e0938fd 100644 --- a/packages/yoroi-extension/app/assets/images/social/github.inline.svg +++ b/packages/yoroi-extension/app/assets/images/social/github.inline.svg @@ -1,3 +1,3 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/social/medium.inline.svg b/packages/yoroi-extension/app/assets/images/social/medium.inline.svg index 420065d227..bda1f8be8b 100644 --- a/packages/yoroi-extension/app/assets/images/social/medium.inline.svg +++ b/packages/yoroi-extension/app/assets/images/social/medium.inline.svg @@ -1,3 +1,3 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/social/revamp/facebook.inline.svg b/packages/yoroi-extension/app/assets/images/social/revamp/facebook.inline.svg index f6fd20492d..c31d302e35 100644 --- a/packages/yoroi-extension/app/assets/images/social/revamp/facebook.inline.svg +++ b/packages/yoroi-extension/app/assets/images/social/revamp/facebook.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/social/revamp/github-24x24.inline.svg b/packages/yoroi-extension/app/assets/images/social/revamp/github-24x24.inline.svg index 6f6f5e5306..37241eca49 100644 --- a/packages/yoroi-extension/app/assets/images/social/revamp/github-24x24.inline.svg +++ b/packages/yoroi-extension/app/assets/images/social/revamp/github-24x24.inline.svg @@ -1,3 +1,3 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/social/revamp/github.inline.svg b/packages/yoroi-extension/app/assets/images/social/revamp/github.inline.svg index 59264e3b86..5beb251280 100644 --- a/packages/yoroi-extension/app/assets/images/social/revamp/github.inline.svg +++ b/packages/yoroi-extension/app/assets/images/social/revamp/github.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/social/revamp/telegram.inline.svg b/packages/yoroi-extension/app/assets/images/social/revamp/telegram.inline.svg index 5060bf9fa4..62ef03a2db 100644 --- a/packages/yoroi-extension/app/assets/images/social/revamp/telegram.inline.svg +++ b/packages/yoroi-extension/app/assets/images/social/revamp/telegram.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/social/revamp/twitch.inline.svg b/packages/yoroi-extension/app/assets/images/social/revamp/twitch.inline.svg index 64b05a04e8..c4345de05c 100644 --- a/packages/yoroi-extension/app/assets/images/social/revamp/twitch.inline.svg +++ b/packages/yoroi-extension/app/assets/images/social/revamp/twitch.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/social/revamp/twitter.inline.svg b/packages/yoroi-extension/app/assets/images/social/revamp/twitter.inline.svg index c4143b923c..0fa2f8b99f 100644 --- a/packages/yoroi-extension/app/assets/images/social/revamp/twitter.inline.svg +++ b/packages/yoroi-extension/app/assets/images/social/revamp/twitter.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/social/revamp/youtube.inline.svg b/packages/yoroi-extension/app/assets/images/social/revamp/youtube.inline.svg index ef9863bf2d..8f5212cb33 100644 --- a/packages/yoroi-extension/app/assets/images/social/revamp/youtube.inline.svg +++ b/packages/yoroi-extension/app/assets/images/social/revamp/youtube.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/social/telegram.inline.svg b/packages/yoroi-extension/app/assets/images/social/telegram.inline.svg index 0fa9e6251c..e43ff43e1c 100644 --- a/packages/yoroi-extension/app/assets/images/social/telegram.inline.svg +++ b/packages/yoroi-extension/app/assets/images/social/telegram.inline.svg @@ -2,7 +2,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/social/twitter.inline.svg b/packages/yoroi-extension/app/assets/images/social/twitter.inline.svg index 29f8996d41..fe654e5704 100644 --- a/packages/yoroi-extension/app/assets/images/social/twitter.inline.svg +++ b/packages/yoroi-extension/app/assets/images/social/twitter.inline.svg @@ -1,3 +1,3 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/social/youtube.inline.svg b/packages/yoroi-extension/app/assets/images/social/youtube.inline.svg index 0e0cd9e092..7f99ae558a 100644 --- a/packages/yoroi-extension/app/assets/images/social/youtube.inline.svg +++ b/packages/yoroi-extension/app/assets/images/social/youtube.inline.svg @@ -1,3 +1,3 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/success-small.inline.svg b/packages/yoroi-extension/app/assets/images/success-small.inline.svg index b8d76a069d..1c9f1527a0 100644 --- a/packages/yoroi-extension/app/assets/images/success-small.inline.svg +++ b/packages/yoroi-extension/app/assets/images/success-small.inline.svg @@ -1 +1 @@ -C1A491E1-87A9-4229-AF18-5B141E6D99B6 \ No newline at end of file +C1A491E1-87A9-4229-AF18-5B141E6D99B6 \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/support.inline.svg b/packages/yoroi-extension/app/assets/images/support.inline.svg index c3b1254f3c..abdeb8bea6 100644 --- a/packages/yoroi-extension/app/assets/images/support.inline.svg +++ b/packages/yoroi-extension/app/assets/images/support.inline.svg @@ -1,4 +1,4 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/top-bar/back-arrow-white.inline.svg b/packages/yoroi-extension/app/assets/images/top-bar/back-arrow-white.inline.svg index 90c40efc2b..b70034f6cc 100644 --- a/packages/yoroi-extension/app/assets/images/top-bar/back-arrow-white.inline.svg +++ b/packages/yoroi-extension/app/assets/images/top-bar/back-arrow-white.inline.svg @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/transaction/error.inline.svg b/packages/yoroi-extension/app/assets/images/transaction/error.inline.svg index 0b0cdcc57c..4ac632b5d6 100644 --- a/packages/yoroi-extension/app/assets/images/transaction/error.inline.svg +++ b/packages/yoroi-extension/app/assets/images/transaction/error.inline.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/transaction/export-tx-to-file.inline.svg b/packages/yoroi-extension/app/assets/images/transaction/export-tx-to-file.inline.svg index 19dff8a1dd..013578a089 100644 --- a/packages/yoroi-extension/app/assets/images/transaction/export-tx-to-file.inline.svg +++ b/packages/yoroi-extension/app/assets/images/transaction/export-tx-to-file.inline.svg @@ -3,11 +3,11 @@ export.inline copy Created with Sketch. - + - + diff --git a/packages/yoroi-extension/app/assets/images/transaction/export.inline.svg b/packages/yoroi-extension/app/assets/images/transaction/export.inline.svg index 2528c4184a..e66eea3583 100644 --- a/packages/yoroi-extension/app/assets/images/transaction/export.inline.svg +++ b/packages/yoroi-extension/app/assets/images/transaction/export.inline.svg @@ -1,4 +1,4 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/transaction/no-transactions-yet.modern.inline.svg b/packages/yoroi-extension/app/assets/images/transaction/no-transactions-yet.modern.inline.svg index f2dc4163b9..e092aa7e63 100644 --- a/packages/yoroi-extension/app/assets/images/transaction/no-transactions-yet.modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/transaction/no-transactions-yet.modern.inline.svg @@ -25,7 +25,7 @@ - + @@ -33,7 +33,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/transaction/receive.inline.svg b/packages/yoroi-extension/app/assets/images/transaction/receive.inline.svg index d4c98a39a7..1c802c48a0 100644 --- a/packages/yoroi-extension/app/assets/images/transaction/receive.inline.svg +++ b/packages/yoroi-extension/app/assets/images/transaction/receive.inline.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/transaction/reward.inline.svg b/packages/yoroi-extension/app/assets/images/transaction/reward.inline.svg index 3958c0d33b..9029aa4286 100644 --- a/packages/yoroi-extension/app/assets/images/transaction/reward.inline.svg +++ b/packages/yoroi-extension/app/assets/images/transaction/reward.inline.svg @@ -1,6 +1,6 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/transaction/send.inline.svg b/packages/yoroi-extension/app/assets/images/transaction/send.inline.svg index d9b7cfeb80..2d667738c3 100644 --- a/packages/yoroi-extension/app/assets/images/transaction/send.inline.svg +++ b/packages/yoroi-extension/app/assets/images/transaction/send.inline.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/transaction/stake.inline.svg b/packages/yoroi-extension/app/assets/images/transaction/stake.inline.svg index 46ed101875..a72c2321af 100644 --- a/packages/yoroi-extension/app/assets/images/transaction/stake.inline.svg +++ b/packages/yoroi-extension/app/assets/images/transaction/stake.inline.svg @@ -1,6 +1,6 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/transaction/wallet-empty-banner.inline.svg b/packages/yoroi-extension/app/assets/images/transaction/wallet-empty-banner.inline.svg index 6b770e3255..4713752cc1 100644 --- a/packages/yoroi-extension/app/assets/images/transaction/wallet-empty-banner.inline.svg +++ b/packages/yoroi-extension/app/assets/images/transaction/wallet-empty-banner.inline.svg @@ -144,7 +144,7 @@ - + @@ -162,13 +162,13 @@ - - - + + + - + @@ -188,13 +188,13 @@ - - - + + + - + @@ -226,13 +226,13 @@ - - - + + + - + @@ -243,15 +243,15 @@ - - - + + + - + - + @@ -287,15 +287,15 @@ - + - - + + - + - + diff --git a/packages/yoroi-extension/app/assets/images/transfer-success-shelley.inline.svg b/packages/yoroi-extension/app/assets/images/transfer-success-shelley.inline.svg index 8ea8238e20..60f8c2fec3 100644 --- a/packages/yoroi-extension/app/assets/images/transfer-success-shelley.inline.svg +++ b/packages/yoroi-extension/app/assets/images/transfer-success-shelley.inline.svg @@ -17,7 +17,7 @@ - + @@ -25,7 +25,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/transfer-success.inline.svg b/packages/yoroi-extension/app/assets/images/transfer-success.inline.svg index 32a2e4177f..51445a4787 100644 --- a/packages/yoroi-extension/app/assets/images/transfer-success.inline.svg +++ b/packages/yoroi-extension/app/assets/images/transfer-success.inline.svg @@ -19,7 +19,7 @@ - + @@ -46,7 +46,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/uri/about-url-classic.inline.svg b/packages/yoroi-extension/app/assets/images/uri/about-url-classic.inline.svg index 895130a540..bfb4e3cd71 100644 --- a/packages/yoroi-extension/app/assets/images/uri/about-url-classic.inline.svg +++ b/packages/yoroi-extension/app/assets/images/uri/about-url-classic.inline.svg @@ -7,7 +7,7 @@ - + @@ -41,8 +41,8 @@ - - + + @@ -51,8 +51,8 @@ - - + + diff --git a/packages/yoroi-extension/app/assets/images/uri/about-url.inline.svg b/packages/yoroi-extension/app/assets/images/uri/about-url.inline.svg index b4e6dee1a0..144fde49f8 100644 --- a/packages/yoroi-extension/app/assets/images/uri/about-url.inline.svg +++ b/packages/yoroi-extension/app/assets/images/uri/about-url.inline.svg @@ -68,7 +68,7 @@ - + @@ -80,7 +80,7 @@ - + @@ -105,8 +105,8 @@ - - + + diff --git a/packages/yoroi-extension/app/assets/images/uri/invalid-uri.inline.svg b/packages/yoroi-extension/app/assets/images/uri/invalid-uri.inline.svg index 5d8b6471e9..2e28bd8141 100644 --- a/packages/yoroi-extension/app/assets/images/uri/invalid-uri.inline.svg +++ b/packages/yoroi-extension/app/assets/images/uri/invalid-uri.inline.svg @@ -10,7 +10,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/uri/perform-tx-uri.inline.svg b/packages/yoroi-extension/app/assets/images/uri/perform-tx-uri.inline.svg index 1bc1c5b618..414d22185f 100644 --- a/packages/yoroi-extension/app/assets/images/uri/perform-tx-uri.inline.svg +++ b/packages/yoroi-extension/app/assets/images/uri/perform-tx-uri.inline.svg @@ -20,7 +20,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/verify-icon-green.inline.svg b/packages/yoroi-extension/app/assets/images/verify-icon-green.inline.svg index 8c69f50cdf..9c4fa9d597 100644 --- a/packages/yoroi-extension/app/assets/images/verify-icon-green.inline.svg +++ b/packages/yoroi-extension/app/assets/images/verify-icon-green.inline.svg @@ -1,3 +1,3 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/verify-icon.inline.svg b/packages/yoroi-extension/app/assets/images/verify-icon.inline.svg index eaffcaa010..b67c084263 100644 --- a/packages/yoroi-extension/app/assets/images/verify-icon.inline.svg +++ b/packages/yoroi-extension/app/assets/images/verify-icon.inline.svg @@ -3,8 +3,8 @@ icon/verify Created with Sketch. - - + + diff --git a/packages/yoroi-extension/app/assets/images/wallet-nav/back-arrow.inline.svg b/packages/yoroi-extension/app/assets/images/wallet-nav/back-arrow.inline.svg index af0beccc38..cd472fa1ec 100644 --- a/packages/yoroi-extension/app/assets/images/wallet-nav/back-arrow.inline.svg +++ b/packages/yoroi-extension/app/assets/images/wallet-nav/back-arrow.inline.svg @@ -3,7 +3,7 @@ Artboard Created with Sketch. - + diff --git a/packages/yoroi-extension/app/assets/images/wallet-nav/caret-down.inline.svg b/packages/yoroi-extension/app/assets/images/wallet-nav/caret-down.inline.svg index 1996b088a2..592bc76a6e 100644 --- a/packages/yoroi-extension/app/assets/images/wallet-nav/caret-down.inline.svg +++ b/packages/yoroi-extension/app/assets/images/wallet-nav/caret-down.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/wallet-nav/conceptual-wallet.inline.svg b/packages/yoroi-extension/app/assets/images/wallet-nav/conceptual-wallet.inline.svg index 20a7a26c48..d58fd7aba2 100644 --- a/packages/yoroi-extension/app/assets/images/wallet-nav/conceptual-wallet.inline.svg +++ b/packages/yoroi-extension/app/assets/images/wallet-nav/conceptual-wallet.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/wallet-nav/ledger-wallet.inline.svg b/packages/yoroi-extension/app/assets/images/wallet-nav/ledger-wallet.inline.svg index 6e0fa24b84..5570ee335e 100644 --- a/packages/yoroi-extension/app/assets/images/wallet-nav/ledger-wallet.inline.svg +++ b/packages/yoroi-extension/app/assets/images/wallet-nav/ledger-wallet.inline.svg @@ -3,8 +3,8 @@ icon/ledger Created with Sketch. - - + + diff --git a/packages/yoroi-extension/app/assets/images/wallet-nav/tab-dashboard.inline.svg b/packages/yoroi-extension/app/assets/images/wallet-nav/tab-dashboard.inline.svg index 467cfc39f1..e9248adc51 100644 --- a/packages/yoroi-extension/app/assets/images/wallet-nav/tab-dashboard.inline.svg +++ b/packages/yoroi-extension/app/assets/images/wallet-nav/tab-dashboard.inline.svg @@ -1,7 +1,7 @@ icon/dashboard active - + diff --git a/packages/yoroi-extension/app/assets/images/wallet-nav/tab-delegation_list.inline.svg b/packages/yoroi-extension/app/assets/images/wallet-nav/tab-delegation_list.inline.svg index 0986b08f29..abeb8cc5b9 100644 --- a/packages/yoroi-extension/app/assets/images/wallet-nav/tab-delegation_list.inline.svg +++ b/packages/yoroi-extension/app/assets/images/wallet-nav/tab-delegation_list.inline.svg @@ -1,9 +1,9 @@ icon/delegation_list active - + - + diff --git a/packages/yoroi-extension/app/assets/images/wallet-nav/tab-receive.inline.svg b/packages/yoroi-extension/app/assets/images/wallet-nav/tab-receive.inline.svg index 57aa03ee1d..41e654a6fe 100644 --- a/packages/yoroi-extension/app/assets/images/wallet-nav/tab-receive.inline.svg +++ b/packages/yoroi-extension/app/assets/images/wallet-nav/tab-receive.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/wallet-nav/tab-send.inline.svg b/packages/yoroi-extension/app/assets/images/wallet-nav/tab-send.inline.svg index ec84b912c4..6ad780588b 100644 --- a/packages/yoroi-extension/app/assets/images/wallet-nav/tab-send.inline.svg +++ b/packages/yoroi-extension/app/assets/images/wallet-nav/tab-send.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/wallet-nav/tab-transactions.inline.svg b/packages/yoroi-extension/app/assets/images/wallet-nav/tab-transactions.inline.svg index 13e3278327..7a31760031 100644 --- a/packages/yoroi-extension/app/assets/images/wallet-nav/tab-transactions.inline.svg +++ b/packages/yoroi-extension/app/assets/images/wallet-nav/tab-transactions.inline.svg @@ -1,7 +1,7 @@ icon / transactions@1x - + diff --git a/packages/yoroi-extension/app/assets/images/wallet-nav/trezor-wallet.inline.svg b/packages/yoroi-extension/app/assets/images/wallet-nav/trezor-wallet.inline.svg index 52dbd5f864..625441cc7c 100644 --- a/packages/yoroi-extension/app/assets/images/wallet-nav/trezor-wallet.inline.svg +++ b/packages/yoroi-extension/app/assets/images/wallet-nav/trezor-wallet.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/wallet-nav/voting.inline.svg b/packages/yoroi-extension/app/assets/images/wallet-nav/voting.inline.svg index 20235c8b31..540be9314f 100644 --- a/packages/yoroi-extension/app/assets/images/wallet-nav/voting.inline.svg +++ b/packages/yoroi-extension/app/assets/images/wallet-nav/voting.inline.svg @@ -1,8 +1,8 @@ icon/voting - + - + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/warning.inline.svg b/packages/yoroi-extension/app/assets/images/warning.inline.svg index 46d89d4703..5c06ec547f 100644 --- a/packages/yoroi-extension/app/assets/images/warning.inline.svg +++ b/packages/yoroi-extension/app/assets/images/warning.inline.svg @@ -3,7 +3,7 @@ warning.inline Created with Sketch. - + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/widget/cross-green.inline.svg b/packages/yoroi-extension/app/assets/images/widget/cross-green.inline.svg index cb21bb4d60..25425b7657 100644 --- a/packages/yoroi-extension/app/assets/images/widget/cross-green.inline.svg +++ b/packages/yoroi-extension/app/assets/images/widget/cross-green.inline.svg @@ -3,7 +3,7 @@ cross.green.inline copy Created with Sketch. - + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/widget/cross.inline.svg b/packages/yoroi-extension/app/assets/images/widget/cross.inline.svg index c4915c5799..e0cc2f3edb 100644 --- a/packages/yoroi-extension/app/assets/images/widget/cross.inline.svg +++ b/packages/yoroi-extension/app/assets/images/widget/cross.inline.svg @@ -3,7 +3,7 @@ Shape Copy Created with Sketch. - + diff --git a/packages/yoroi-extension/app/assets/images/widget/tick-green.inline.svg b/packages/yoroi-extension/app/assets/images/widget/tick-green.inline.svg index 2894eff395..4afb9d6d19 100644 --- a/packages/yoroi-extension/app/assets/images/widget/tick-green.inline.svg +++ b/packages/yoroi-extension/app/assets/images/widget/tick-green.inline.svg @@ -3,8 +3,8 @@ tick.inline Created with Sketch. - - + + diff --git a/packages/yoroi-extension/app/assets/images/widget/tick.inline.svg b/packages/yoroi-extension/app/assets/images/widget/tick.inline.svg index 9e392c1010..9fa6e05f6d 100644 --- a/packages/yoroi-extension/app/assets/images/widget/tick.inline.svg +++ b/packages/yoroi-extension/app/assets/images/widget/tick.inline.svg @@ -3,8 +3,8 @@ Shape Created with Sketch. - - + + diff --git a/packages/yoroi-extension/app/assets/images/yes.inline.svg b/packages/yoroi-extension/app/assets/images/yes.inline.svg index a4b7b07231..d779638977 100644 --- a/packages/yoroi-extension/app/assets/images/yes.inline.svg +++ b/packages/yoroi-extension/app/assets/images/yes.inline.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/yoroi-classic-theme.inline.svg b/packages/yoroi-extension/app/assets/images/yoroi-classic-theme.inline.svg index 28fb0fedbc..2b3a1ce152 100644 --- a/packages/yoroi-extension/app/assets/images/yoroi-classic-theme.inline.svg +++ b/packages/yoroi-extension/app/assets/images/yoroi-classic-theme.inline.svg @@ -1,11 +1,11 @@ - - - - - + + + + + diff --git a/packages/yoroi-extension/app/assets/images/yoroi-logo-blue.inline.svg b/packages/yoroi-extension/app/assets/images/yoroi-logo-blue.inline.svg index 2a39e9ca8b..34297d2d5c 100644 --- a/packages/yoroi-extension/app/assets/images/yoroi-logo-blue.inline.svg +++ b/packages/yoroi-extension/app/assets/images/yoroi-logo-blue.inline.svg @@ -1 +1 @@ -yoroi logo \ No newline at end of file +yoroi logo \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/yoroi-logo-revamp-blue.inline.svg b/packages/yoroi-extension/app/assets/images/yoroi-logo-revamp-blue.inline.svg index e1f2dc24ac..86844610ea 100644 --- a/packages/yoroi-extension/app/assets/images/yoroi-logo-revamp-blue.inline.svg +++ b/packages/yoroi-extension/app/assets/images/yoroi-logo-revamp-blue.inline.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/yoroi-logo-shape-blue.inline.svg b/packages/yoroi-extension/app/assets/images/yoroi-logo-shape-blue.inline.svg index cc14b928b3..fb780dba7a 100644 --- a/packages/yoroi-extension/app/assets/images/yoroi-logo-shape-blue.inline.svg +++ b/packages/yoroi-extension/app/assets/images/yoroi-logo-shape-blue.inline.svg @@ -1 +1 @@ -yoroi logo \ No newline at end of file +yoroi logo \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/yoroi-logo-shape-white.inline.svg b/packages/yoroi-extension/app/assets/images/yoroi-logo-shape-white.inline.svg index 372eeef1d7..8c91839222 100644 --- a/packages/yoroi-extension/app/assets/images/yoroi-logo-shape-white.inline.svg +++ b/packages/yoroi-extension/app/assets/images/yoroi-logo-shape-white.inline.svg @@ -3,7 +3,7 @@ - - - - - - + + + + + diff --git a/packages/yoroi-extension/app/connector/assets/images/no-websites-connected.inline.svg b/packages/yoroi-extension/app/connector/assets/images/no-websites-connected.inline.svg index f2dc4163b9..e092aa7e63 100644 --- a/packages/yoroi-extension/app/connector/assets/images/no-websites-connected.inline.svg +++ b/packages/yoroi-extension/app/connector/assets/images/no-websites-connected.inline.svg @@ -25,7 +25,7 @@ - + @@ -33,7 +33,7 @@ - + diff --git a/packages/yoroi-extension/ledger/assets/img/external-link.svg b/packages/yoroi-extension/ledger/assets/img/external-link.svg index 7ad04c93d3..bbdf4c7ccb 100644 --- a/packages/yoroi-extension/ledger/assets/img/external-link.svg +++ b/packages/yoroi-extension/ledger/assets/img/external-link.svg @@ -6,7 +6,7 @@ - + diff --git a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-1.svg b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-1.svg index b95ae045d7..2cf0d706ad 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-1.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-1.svg @@ -1 +1 @@ -New transaction network id 0 / pr \ No newline at end of file +New transaction network id 0 / pr \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-11.svg b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-11.svg index 3bd23af141..5484b8a23e 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-11.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-11.svg @@ -1 +1 @@ -____________Transaction TTL____________ \ No newline at end of file +____________Transaction TTL____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-3.svg b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-3.svg index 9cb6a2f43b..636fd0872a 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-3.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-3.svg @@ -1 +1 @@ -Register Catalyst voting key? \ No newline at end of file +Register Catalyst voting key? \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-4.svg b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-4.svg index 7c2b0ef47b..b0df9cb0b1 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-4.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-4.svg @@ -1 +1 @@ -Voting public key____________ \ No newline at end of file +Voting public key____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-5.svg b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-5.svg index a7c491fbac..e8a7e47d0f 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-5.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-5.svg @@ -1 +1 @@ -Staking key____________ \ No newline at end of file +Staking key____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-6.svg b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-6.svg index 06f9f9a101..875103bd5e 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-6.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-6.svg @@ -1 +1 @@ -Rewards go to____________ \ No newline at end of file +Rewards go to____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-7.svg b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-7.svg index e1c12a507e..72970c4217 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-7.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-7.svg @@ -1 +1 @@ -Nonce____________ \ No newline at end of file +Nonce____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-8.svg b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-8.svg index 37481fbecc..0ff3e0769d 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-8.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-8.svg @@ -1 +1 @@ -Confirm voting keyregistration? \ No newline at end of file +Confirm voting keyregistration? \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-9.svg b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-9.svg index 68be1bca56..841679090c 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-9.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-9.svg @@ -1 +1 @@ -Auxiliary data hash____________ \ No newline at end of file +Auxiliary data hash____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-connect-2-keys.svg b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-connect-2-keys.svg index 6b8937e421..ea3c74e82b 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-connect-2-keys.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-connect-2-keys.svg @@ -1 +1 @@ -Confirm export2 public keys +Confirm export2 public keys diff --git a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-1.svg b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-1.svg index ce84bac0a4..5740b15160 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-1.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-1.svg @@ -1 +1 @@ -New transaction network id 0 / pr \ No newline at end of file +New transaction network id 0 / pr \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-11.svg b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-11.svg index 4eb694788d..2e26191ecd 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-11.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-11.svg @@ -1 +1 @@ -Transaction TTL____________ \ No newline at end of file +Transaction TTL____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-3.svg b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-3.svg index 99ecdd2416..14c113de70 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-3.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-3.svg @@ -1 +1 @@ -Register Catalyst voting key? \ No newline at end of file +Register Catalyst voting key? \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-4.svg b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-4.svg index 7a3e79f210..3f62a644bc 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-4.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-4.svg @@ -1 +1 @@ -Voting public key____________ \ No newline at end of file +Voting public key____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-5.svg b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-5.svg index 007ffa31d1..53ec11d242 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-5.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-5.svg @@ -1 +1 @@ -Staking key____________ \ No newline at end of file +Staking key____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-6.svg b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-6.svg index 4fd130a7bf..d7c6fa5bf6 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-6.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-6.svg @@ -1 +1 @@ -Rewards go to____________ \ No newline at end of file +Rewards go to____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-7.svg b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-7.svg index 12711e2194..b71bef45e9 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-7.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-7.svg @@ -1 +1 @@ -Nonce____________ \ No newline at end of file +Nonce____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-8.svg b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-8.svg index 6f97863056..278376764f 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-8.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-8.svg @@ -1 +1 @@ -Confirm voting keyregistration? \ No newline at end of file +Confirm voting keyregistration? \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-9.svg b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-9.svg index 1bacf84d8b..4630289b57 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-9.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-9.svg @@ -1 +1 @@ -Auxiliary data hash____________ \ No newline at end of file +Auxiliary data hash____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-connect-2-keys.svg b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-connect-2-keys.svg index 9b640a87af..2120033c96 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-connect-2-keys.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-connect-2-keys.svg @@ -1 +1 @@ -Confirm export2 public keys +Confirm export2 public keys diff --git a/packages/yoroi-extension/ledger/assets/img/spinner-dark.svg b/packages/yoroi-extension/ledger/assets/img/spinner-dark.svg index 25690d70a4..367e624f57 100644 --- a/packages/yoroi-extension/ledger/assets/img/spinner-dark.svg +++ b/packages/yoroi-extension/ledger/assets/img/spinner-dark.svg @@ -4,7 +4,7 @@ 689D1EC6-CFD1-4DB8-8399-D10FD29322A1 Created with sketchtool. - + diff --git a/packages/yoroi-extension/ledger/assets/img/warning-icon.svg b/packages/yoroi-extension/ledger/assets/img/warning-icon.svg index dc6aa9b285..f480695ce8 100644 --- a/packages/yoroi-extension/ledger/assets/img/warning-icon.svg +++ b/packages/yoroi-extension/ledger/assets/img/warning-icon.svg @@ -3,10 +3,10 @@ icon/attention.inline Created with Sketch. - + - + From a9510c8db30c5a9a27db211a0bc0b6567f8718c4 Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Wed, 22 May 2024 17:49:13 +0700 Subject: [PATCH 009/464] feat: create portfolio pages --- packages/yoroi-extension/app/Routes.js | 30 +- .../yoroi-extension/app/UI/components/card.js | 11 + .../app/UI/components/copy-button.js | 26 ++ .../app/UI/components/index.js | 5 + .../app/UI/components/search-input.js | 14 + .../app/UI/components/skeleton.js | 12 + .../app/UI/components/tooltip.js | 13 + .../UI/features/portfolio/PortfolioMenu.js | 64 +++ .../UI/features/portfolio/PortfolioWrapper.js | 120 ++++++ .../UI/features/portfolio/TokenDetailChart.js | 114 +++++ .../UI/features/portfolio/TokenDetailsPage.js | 406 ++++++++++++++++++ .../features/portfolio/TransactionHistory.js | 212 +++++++++ .../app/UI/features/portfolio/WalletPage.js | 288 +++++++++++++ .../portfolio/images/down-arrow.inline.svg | 6 + .../portfolio/images/table-sort.inline.svg | 4 + .../transaction-history/arrow-icon.inline.svg | 14 + .../transaction-history/error-icon.inline.svg | 4 + .../expand-arrow.inline.svg | 3 + .../withdraw-icon.inline.svg | 5 + .../portfolio/images/up-arrow.inline.svg | 2 + .../UI/pages/portfolio/PortfolioDappsPage.js | 7 + .../UI/pages/portfolio/PortfolioDetailPage.js | 110 +++++ .../app/UI/pages/portfolio/PortfolioPage.js | 153 +++++++ .../app/i18n/global-messages.js | 14 +- .../app/i18n/locales/en-US.json | 8 +- packages/yoroi-extension/app/routes-config.js | 5 + .../app/stores/stateless/sidebarCategories.js | 6 +- 27 files changed, 1638 insertions(+), 18 deletions(-) create mode 100644 packages/yoroi-extension/app/UI/components/card.js create mode 100644 packages/yoroi-extension/app/UI/components/copy-button.js create mode 100644 packages/yoroi-extension/app/UI/components/index.js create mode 100644 packages/yoroi-extension/app/UI/components/search-input.js create mode 100644 packages/yoroi-extension/app/UI/components/skeleton.js create mode 100644 packages/yoroi-extension/app/UI/components/tooltip.js create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/PortfolioMenu.js create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/PortfolioWrapper.js create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/TokenDetailChart.js create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/TokenDetailsPage.js create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/TransactionHistory.js create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/WalletPage.js create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/images/down-arrow.inline.svg create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/images/table-sort.inline.svg create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/arrow-icon.inline.svg create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/error-icon.inline.svg create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/expand-arrow.inline.svg create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/withdraw-icon.inline.svg create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/images/up-arrow.inline.svg create mode 100644 packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDappsPage.js create mode 100644 packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js create mode 100644 packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js diff --git a/packages/yoroi-extension/app/Routes.js b/packages/yoroi-extension/app/Routes.js index 1759f3b14f..e3b6af994d 100644 --- a/packages/yoroi-extension/app/Routes.js +++ b/packages/yoroi-extension/app/Routes.js @@ -35,6 +35,7 @@ import FullscreenLayout from './components/layout/FullscreenLayout'; // New UI pages import GouvernancePage from './UI/pages/Gouvernance/GouvernancePage'; +import PortfolioWrapper from './UI/features/portfolio/PortfolioWrapper'; // PAGES const LanguageSelectionPagePromise = () => import('./containers/profile/LanguageSelectionPage'); @@ -140,6 +141,14 @@ const SwapOrdersPage = React.lazy(SwapOrdersPagePromise); const ExchangeEndPagePromise = () => import('./containers/ExchangeEndPage'); const ExchangeEndPage = React.lazy(ExchangeEndPagePromise); +// PORTFOLIO +const PortfolioPagePromise = () => import('./UI/pages/portfolio/PortfolioPage'); +const PortfolioPage = React.lazy(PortfolioPagePromise); +const PortfolioDappsPagePromise = () => import('./UI/pages/portfolio/PortfolioDappsPage'); +const PortfolioDappsPage = React.lazy(PortfolioDappsPagePromise); +const PortfolioDetailPagePromise = () => import('./UI/pages/portfolio/PortfolioDetailPage'); +const PortfolioDetailPage = React.lazy(PortfolioDetailPagePromise); + export const LazyLoadPromises: Array<() => any> = [ AddAnotherWalletPromise, StakingPageContentPromise, @@ -236,9 +245,9 @@ export const Routes = (stores: StoresMap, actions: ActionsMap): Node => ( component={props => } /> - wrapAssets({ ...props, stores, actions }, AssetsSubpages(stores, actions)) + wrapPortfolio({ ...props, stores, actions }, PortfolioSubpages(stores, actions)) } /> ( ); -const AssetsSubpages = (stores, actions) => ( +const PortfolioSubpages = (stores, actions) => ( + } /> } + path={ROUTES.PORTFOLIO.DAPPS} + component={props => } /> } + path={ROUTES.PORTFOLIO.DETAILS} + component={props => } /> ); @@ -523,11 +533,11 @@ export function wrapSettings(settingsProps: StoresAndActionsProps, children: Nod ); } -export function wrapAssets(assetsProps: StoresAndActionsProps, children: Node): Node { +export function wrapPortfolio(portfolioProps: StoresAndActionsProps, children: Node): Node { return ( - + {children} - + ); } diff --git a/packages/yoroi-extension/app/UI/components/card.js b/packages/yoroi-extension/app/UI/components/card.js new file mode 100644 index 0000000000..935732e2f6 --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/card.js @@ -0,0 +1,11 @@ +import { Box, styled } from '@mui/material'; + +export const Card = styled(Box)(({ theme }) => ({ + borderRadius: '8px', + flex: '1 1 100%', + display: 'flex', + flexDirection: 'column', + border: '1px solid', + borderColor: theme.palette.grayscale['200'], + bgcolor: 'background.card', +})); diff --git a/packages/yoroi-extension/app/UI/components/copy-button.js b/packages/yoroi-extension/app/UI/components/copy-button.js new file mode 100644 index 0000000000..3f529208e3 --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/copy-button.js @@ -0,0 +1,26 @@ +import React, { useState } from 'react'; +import { IconButton } from '@mui/material'; +import { ReactComponent as CopyIcon } from '../../assets/images/copy.inline.svg'; +import { CopyToClipboard } from 'react-copy-to-clipboard'; +import { StyledTooltip } from './tooltip'; + +export const CopyButton = ({ textToCopy }) => { + const [copied, setCopied] = useState(false); + + const handleCopy = () => { + setCopied(true); + setTimeout(() => { + setCopied(false); + }, 2000); // Reset tooltip after 2 seconds + }; + + return ( + + + + + + + + ); +}; diff --git a/packages/yoroi-extension/app/UI/components/index.js b/packages/yoroi-extension/app/UI/components/index.js new file mode 100644 index 0000000000..c4a9213593 --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/index.js @@ -0,0 +1,5 @@ +export * from './card'; +export * from './search-input'; +export * from './tooltip'; +export * from './skeleton'; +export * from './copy-button'; diff --git a/packages/yoroi-extension/app/UI/components/search-input.js b/packages/yoroi-extension/app/UI/components/search-input.js new file mode 100644 index 0000000000..e516c2a313 --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/search-input.js @@ -0,0 +1,14 @@ +import { Input, styled } from '@mui/material'; + +export const SearchInput = styled(Input)(({ theme }) => ({ + borderRadius: '8px', + width: '370px', + height: '40px', + padding: '10px 12px', + backgroundColor: theme.palette.grayscale['50'], + border: '1px solid', + borderColor: theme.palette.grayscale['400'], + 'input::placeholder': { + color: theme.palette.grayscale['600'], + }, +})); diff --git a/packages/yoroi-extension/app/UI/components/skeleton.js b/packages/yoroi-extension/app/UI/components/skeleton.js new file mode 100644 index 0000000000..3ae2e68af0 --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/skeleton.js @@ -0,0 +1,12 @@ +import { Skeleton } from '@mui/material'; + +export const StyledSkeleton = props => { + return ( + + ); +}; diff --git a/packages/yoroi-extension/app/UI/components/tooltip.js b/packages/yoroi-extension/app/UI/components/tooltip.js new file mode 100644 index 0000000000..b2b9fe4f6a --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/tooltip.js @@ -0,0 +1,13 @@ +import { styled } from '@mui/material'; +import Tooltip, { TooltipProps, tooltipClasses } from '@mui/material/Tooltip'; + +export const StyledTooltip = styled(({ className, ...props }: TooltipProps) => ( + +))(({ theme }) => ({ + [`& .${tooltipClasses.arrow}`]: { + color: theme.palette.common.black, + }, + [`& .${tooltipClasses.tooltip}`]: { + backgroundColor: theme.palette.common.black, + }, +})); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/PortfolioMenu.js b/packages/yoroi-extension/app/UI/features/portfolio/PortfolioMenu.js new file mode 100644 index 0000000000..982dcc0433 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/PortfolioMenu.js @@ -0,0 +1,64 @@ +// @flow +import { Component } from 'react'; +import type { Node, ComponentType } from 'react'; +import { observer } from 'mobx-react'; +import { defineMessages, intlShape } from 'react-intl'; +import environmnent from '../../../environment'; +import { ROUTES } from '../../../routes-config'; +import globalMessages from '../../../i18n/global-messages'; +import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; +import { withLayout } from '../../../styles/context/layout'; +import type { InjectedLayoutProps } from '../../styles/context/layout'; +import type { SubMenuOption } from '../topbar/SubMenu'; +import SubMenu from '../../../components/topbar/SubMenu'; + +export const portfolioMenuMessages: Object = defineMessages({ + wallet: { + id: 'portfolio.menu.wallet.link.label', + defaultMessage: '!!!Wallet', + }, + dapps: { + id: 'portfolio.menu.dapps.link.label', + defaultMessage: '!!!Dapps', + }, +}); + +type Props = {| + +isActiveItem: string => boolean, + +onItemClick: string => void, +|}; +@observer +class PortfolioMenu extends Component { + static contextTypes: {| intl: $npm$ReactIntl$IntlFormat |} = { + intl: intlShape.isRequired, + }; + + render(): Node { + const { intl } = this.context; + const { onItemClick, isActiveItem, isRevampLayout } = this.props; + const isProduction = environmnent.isProduction(); + const portfolioOptions: Array = [ + { + label: `${intl.formatMessage(portfolioMenuMessages.wallet)} (6)`, + route: ROUTES.PORTFOLIO.ROOT, + className: 'wallet', + }, + { + label: `${intl.formatMessage(portfolioMenuMessages.dapps)} (10)`, + route: ROUTES.PORTFOLIO.DAPPS, + className: 'dapps', + }, + ]; + + return ( + + ); + } +} + +export default (withLayout(PortfolioMenu): ComponentType); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/PortfolioWrapper.js b/packages/yoroi-extension/app/UI/features/portfolio/PortfolioWrapper.js new file mode 100644 index 0000000000..9f72fd8265 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/PortfolioWrapper.js @@ -0,0 +1,120 @@ +// @flow +import { Component } from 'react'; +import type { Node, ComponentType } from 'react'; +import { observer } from 'mobx-react'; +import { intlShape } from 'react-intl'; +import globalMessages from '../../../i18n/global-messages'; +import SettingsLayout from '../../../components/settings/SettingsLayout'; +import { buildRoute } from '../../../utils/routing'; +import type { StoresAndActionsProps } from '../../../types/injectedProps.types'; + +import TopBarLayout from '../../../components/layout/TopBarLayout'; +import NavBarTitle from '../../../components/topbar/NavBarTitle'; +import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; +import { withLayout, type LayoutComponentMap } from '../../../styles/context/layout'; +import PortfolioMenu from './PortfolioMenu'; +import NavBarContainer from '../../../containers/NavBarContainer'; +import BannerContainer from '../../../containers/banners/BannerContainer'; +import SidebarContainer from '../../../containers/SidebarContainer'; +import NavBarContainerRevamp from '../../../containers/NavBarContainerRevamp'; +import { ROUTES } from '../../../routes-config'; + +type Props = {| + ...StoresAndActionsProps, + +children?: Node, +|}; +type InjectedLayoutProps = {| + +renderLayoutComponent: LayoutComponentMap => Node, +|}; + +type AllProps = {| ...Props, ...InjectedLayoutProps |}; +@observer +class PortfolioWrapper extends Component { + static defaultProps: {| children: void |} = { + children: undefined, + }; + + static contextTypes: {| intl: $npm$ReactIntl$IntlFormat |} = { + intl: intlShape.isRequired, + }; + + isActivePage: string => boolean = route => { + const { location } = this.props.stores.router; + if (route && location) { + return location.pathname === buildRoute(route); + } + return false; + }; + + render(): Node { + const { location } = this.props.stores.router; + const isDetailPage = location.pathname.startsWith(`${ROUTES.PORTFOLIO.ROOT}/details`); + const { actions, stores } = this.props; + const { children } = this.props; + const sidebarContainer = ; + + const menu = isDetailPage ? null : ( + actions.router.goToRoute.trigger({ route })} + isActiveItem={this.isActivePage} + /> + ); + + const PortfolioLayoutClassic = ( + } + sidebar={sidebarContainer} + navbar={ + + } + /> + } + showInContainer + showAsCard + > + {children != null ? children : null} + + ); + const PortfolioLayoutRevamp = ( + } + sidebar={sidebarContainer} + navbar={ + + } + menu={menu} + /> + } + showInContainer + showAsCard + > + {children} + + ); + return this.props.renderLayoutComponent({ + CLASSIC: PortfolioLayoutClassic, + REVAMP: PortfolioLayoutRevamp, + }); + } +} +export default (withLayout(PortfolioWrapper): ComponentType); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/TokenDetailChart.js b/packages/yoroi-extension/app/UI/features/portfolio/TokenDetailChart.js new file mode 100644 index 0000000000..345ae6fb1a --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/TokenDetailChart.js @@ -0,0 +1,114 @@ +import { Box, Button, Stack, styled } from '@mui/material'; +import React, { useState } from 'react'; +import { + LineChart, + Line, + CartesianGrid, + XAxis, + YAxis, + Tooltip, + ResponsiveContainer, + Label, +} from 'recharts'; + +// Sample data +const sampleData = [ + { name: 'Page A', value: 0.1 }, + { name: 'Page B', value: 0.15 }, + { name: 'Page C', value: 0.05 }, + { name: 'Page D', value: 0.35 }, + { name: 'Page E', value: 0.6 }, + { name: 'Page F', value: 0.45 }, + { name: 'Page G', value: 0.3 }, + { name: 'Page H', value: 0.2 }, + { name: 'Page I', value: 0.35 }, + { name: 'Page J', value: 0.55 }, +]; + +const timePeriods = [ + { label: '24H', active: true }, + { label: '1W', active: false }, + { label: '1M', active: false }, + { label: '6M', active: false }, + { label: '1Y', active: false }, + { label: 'ALL', active: false }, +]; + +const TokenDetailChart = ({ isLoading }) => { + const [data, setData] = useState(sampleData); + + const CustomYAxisTick = props => { + const { x, y, payload } = props; + + return isLoading ? ( + + ) : ( + + {payload.value} + + ); + }; + + return ( + + + + + + + {!isLoading && } + + + + + + + {timePeriods.map(period => ( + + {period.label} + + ))} + + + ); +}; + +const SkeletonLabel = ({ x, y, width = 19, height = 13, borderRadius = 8, marginRight = 10 }) => { + return ( + + ); +}; + +const StyledButton = styled(Button)({ + fontWeight: 500, + fontSize: '0.75rem', + lineHeight: '1.125rem', + width: '36px', + height: '30px', +}); + +export default TokenDetailChart; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/TokenDetailsPage.js b/packages/yoroi-extension/app/UI/features/portfolio/TokenDetailsPage.js new file mode 100644 index 0000000000..c09253cb9a --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/TokenDetailsPage.js @@ -0,0 +1,406 @@ +import React, { useEffect, useState } from 'react'; +import { + Badge, + Box, + Button, + Chip, + Divider, + IconButton, + Link, + Skeleton, + Stack, + Typography, +} from '@mui/material'; +import { ReactComponent as ArrowLeft } from '../../../assets/images/assets-page/back-arrow.inline.svg'; +import { ReactComponent as ArrowDown } from './images/down-arrow.inline.svg'; +import { ReactComponent as ArrowUp } from './images/up-arrow.inline.svg'; +import { styled } from '@mui/material/styles'; +import { StyledTooltip, StyledSkeleton, CopyButton, Card } from '../../components'; +import { TxInputsBuilder } from '@emurgo/cardano-serialization-lib-browser'; +import { tableCellClasses } from '@mui/material/TableCell'; +import { useHistory } from 'react-router-dom'; +import TransactionHistory from './TransactionHistory'; +import TokenDetailChart from './TokenDetailChart'; +import SubMenu from '../../../components/topbar/SubMenu'; + +const performanceItemList = [ + { id: 'tokenPriceChange', label: 'Token price change' }, + { id: 'tokenPrice', label: 'Token price' }, + { id: 'marketCap', label: 'Market cap' }, + { id: 'volumn', label: '24h volumn' }, + { id: 'rank', label: 'Rank' }, + { id: 'circulating', label: 'Circulating' }, + { id: 'totalSupply', label: 'Total supply' }, + { id: 'maxSupply', label: 'Max supply' }, + { id: 'allTimeHigh', label: 'All time high' }, + { id: 'allTimeLow', label: 'All time low' }, +]; + +const TokenDetailsPage = ({ tokenInfo, subMenuOptions, mockHistory }) => { + const history = useHistory(); + const [selectedTab, setSelectedTab] = useState(subMenuOptions[0].route); + const [isLoading, setIsLoading] = useState(false); + + const isActiveItem: string => boolean = route => { + if (route === selectedTab) { + return true; + } else { + return false; + } + }; + + useEffect(() => { + setIsLoading(true); + + const timer = setTimeout(() => { + setIsLoading(false); + }, 2000); + + return () => clearTimeout(timer); + }, []); + + return ( + +
+ + + SWAP + + SEND + + + RECEIVE + + +
+ + + + + + {isLoading ? ( + + ) : ( + `${tokenInfo.overview.tokenName} balance` + )} + + + {isLoading ? ( + + ) : ( + + + 200000,00 + + + {tokenInfo.overview.tokenName} + + + )} + + {isLoading ? ( + + ) : ( + 680,00 USD + )} + + + + + + + {isLoading ? ( + + ) : ( + + Market price + + )} + + {isLoading ? ( + + ) : ( + + + 0,48 + +  USD + + )} + + Token price change + in 24 hours + + } + placement="top" + > + + {isLoading ? ( + + ) : ( + + + 0,03% + + } + sx={{ + backgroundColor: 'rgba(228, 247, 243, 1)', + color: 'rgba(18, 112, 93, 1)', + }} + > + )} + + {isLoading ? ( + + ) : ( + +0,03 USD} + sx={{ + backgroundColor: 'rgba(228, 247, 243, 1)', + color: 'rgba(18, 112, 93, 1)', + }} + > + )} + + + + + + + + + + + setSelectedTab(route)} + isActiveItem={isActiveItem} + locationId="token-details" + /> + + + + {selectedTab === subMenuOptions[0].route ? ( + + + + {isLoading ? ( + + ) : ( + + )} + {isLoading ? ( + + ) : ( + + {tokenInfo.overview.tokenName} + + )} + + + + {isLoading ? ( + + ) : ( + + Description + + )} + {isLoading ? ( + <> + + + + + ) : ( + + {tokenInfo.overview.description} + + )} + + + + {isLoading ? ( + + ) : ( + + Website + + )} + {isLoading ? ( + + ) : ( + + cardano.org + + )} + + + + {isLoading ? ( + + ) : ( + + Policy ID + + )} + + + {isLoading ? ( + + + + + ) : ( + + {tokenInfo.overview.policyId} + + )} + + + + + + {isLoading ? ( + + ) : ( + + Fingerprint + + )} + + + {isLoading ? ( + + + + + ) : ( + + {tokenInfo.overview.fingerprint} + + )} + + + + + + {isLoading ? ( + + ) : ( + + Details on + + )} + + {isLoading ? ( + + ) : ( + + Cardanoscan + + )} + {isLoading ? ( + + ) : ( + + )} + + + + + ) : null} + + {selectedTab === subMenuOptions[1].route ? ( + + + Market data + + + {performanceItemList.map((item, index) => ( + + {item.label} + {tokenInfo.performance[index].value} + + ))} + + + ) : null} + + + + + +
+ ); +}; + +const Header = styled(Box)({ + display: 'flex', + justifyContent: 'space-between', +}); + +const TokenInfo = styled(Stack)({ + width: '100%', + marginTop: '25px', +}); + +const StyledButton = styled(Button)({ + maxHeight: '40px', +}); + +const TabContent = styled(Box)({ + flex: 1, +}); + +const InfoText = styled(Typography)({ + fontWeight: 400, + fontSize: '1rem', + color: 'rgba(0, 0, 0, 1)', +}); + +export default TokenDetailsPage; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/TransactionHistory.js b/packages/yoroi-extension/app/UI/features/portfolio/TransactionHistory.js new file mode 100644 index 0000000000..1b8110d6e3 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/TransactionHistory.js @@ -0,0 +1,212 @@ +import React, { useMemo } from 'react'; +import { + Box, + Stack, + Typography, + IconButton, + Table, + TableCell, + TableHead, + TableBody, + TableRow, + styled, +} from '@mui/material'; +import { Card } from '../../components'; +import { ReactComponent as ArrowIcon } from './images/transaction-history/arrow-icon.inline.svg'; +import { ReactComponent as ExpandArrow } from './images/transaction-history/expand-arrow.inline.svg'; +import { ReactComponent as ErrorIcon } from './images/transaction-history/error-icon.inline.svg'; +import { ReactComponent as WithdrawIcon } from './images/transaction-history/withdraw-icon.inline.svg'; + +const timestamps = ['Today', 'Yesterday', 'In the past']; +const categorizeByDate = data => { + const today = new Date(); + const yesterday = new Date(today); + yesterday.setDate(yesterday.getDate() - 1); + + return data.reduce( + (acc, item) => { + const itemDate = new Date(item.date); + if (itemDate.toDateString() === today.toDateString()) { + acc['Today'].push(item); + } else if (itemDate.toDateString() === yesterday.toDateString()) { + acc['Yesterday'].push(item); + } else { + acc['In the past'].push(item); + } + return acc; + }, + { + Today: [], + Yesterday: [], + 'In the past': [], + } + ); +}; + +const TransactionHistory = ({ mockHistory }) => { + const categorizedData = useMemo(() => categorizeByDate(mockHistory), [mockHistory]); + return ( + + + + + Transaction history + +
+ + + + Transaction type + + + Status + + + Fee + + + Amount + + + + + {timestamps.map((timestamp, index) => ( + <> + {timestamp} + {categorizedData[timestamp].map((row, index) => ( + + + + + {row.type === 'Sent' && ( + + )} + {row.type === 'Received' && ( + + )} + {row.type === 'Transaction error' && ( + + )} + + + + {row.type} + + + {row.time} + + + + + + + {row.status} + + + + + + {row.fee ? row.fee.amount : '-'} + + + {row.fee ? row.fee.usd : '-'} + + + + + + + + {row.type === 'Received' && '+'} + {row.amount.total} + + + {row.type === 'Received' && '+'} + {row.amount.usd} + + {row.type === 'Received' && ( + + + {row.amount.asset} assets + + )} + {row.type === 'Sent' && ( + + {row.amount.asset} + + )} + + + + + + ))} + + ))} + +
+ + + + ); +}; + +const Container = styled(Box)({ + width: '100%', + margin: '30px 0 100px', +}); + +export default TransactionHistory; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/WalletPage.js b/packages/yoroi-extension/app/UI/features/portfolio/WalletPage.js new file mode 100644 index 0000000000..187055bfa4 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/WalletPage.js @@ -0,0 +1,288 @@ +import { + Table, + TableBody, + TableCell, + TableHead, + TableRow, + TableSortLabel, + Typography, + Stack, + Chip, + Box, + Input, + InputAdornment, + styled, +} from '@mui/material'; +import { ReactComponent as Search } from '../../../assets/images/assets-page/search.inline.svg'; +import { ReactComponent as ArrowUp } from './images/up-arrow.inline.svg'; +import { ReactComponent as ArrowDown } from './images/down-arrow.inline.svg'; +import { ReactComponent as TableSortIcon } from './images/table-sort.inline.svg'; +import React, { useState } from 'react'; +import { useHistory } from 'react-router-dom'; +import { StyledTooltip, SearchInput } from '../../components'; + +const WalletPage = ({ headCells, mockData }) => { + const history = useHistory(); + const [keyword, setKeyword] = useState(''); + const [order, setOrder] = useState('asc'); + const [orderBy, setOrderBy] = useState(''); + + const handleRequestSort = property => { + const isAsc = orderBy === property && order === 'asc'; + setOrder(isAsc ? 'desc' : 'asc'); + setOrderBy(property); + }; + + return ( + + + + + + 200000,00 + + + ADA + + /USD + + + + + + 10000,00 USD + + % Balance performance + +/- Balance change + in 24 hours + + } + placement="right" + > + + + + 0,03% + + } + sx={{ backgroundColor: 'rgba(228, 247, 243, 1)', color: 'rgba(18, 112, 93, 1)' }} + > + +0,03 USD} + sx={{ backgroundColor: 'rgba(228, 247, 243, 1)', color: 'rgba(18, 112, 93, 1)' }} + > + + + + + + setKeyword(e.target.value)} + placeholder={'Search by asset name or ID'} + startAdornment={ + svg > use': { + fill: 'grayscale.600', + }, + }} + position="start" + > + + + } + /> + + + + + + {headCells.map(({ label, align, id }) => ( + handleRequestSort(id)}> + + {label} + + + + ))} + + + + {mockData.map(row => ( + history.push(`/portfolio/details/${row.id}`)} + sx={{ + cursor: 'pointer', + transition: 'all 0.3s ease-in-out', + '& td, & th': { border: 0 }, + '&:hover': { + backgroundColor: '#f8f8f8', + boxShadow: '0px 2px 10px rgba(0, 0, 0, 0.1)', + borderRadius: '8px', + }, + }} + > + + + + + {row.name} + {row.id} + + + + + + {row.price} + + + + + {row['24h'].active ? ( + + ) : ( + + )} + {row['24h'].percents} + + } + sx={{ + cursor: 'pointer', + backgroundColor: row['24h'].active + ? 'rgba(228, 247, 243, 1)' + : 'rgba(255, 241, 245, 1)', + color: row['24h'].active ? 'rgba(18, 112, 93, 1)' : 'rgba(207, 5, 58, 1)', + }} + > + + + + + {row['1W'].active ? ( + + ) : ( + + )} + {row['1W'].percents} + + } + sx={{ + cursor: 'pointer', + backgroundColor: row['1W'].active + ? 'rgba(228, 247, 243, 1)' + : 'rgba(255, 241, 245, 1)', + color: row['1W'].active ? 'rgba(18, 112, 93, 1)' : 'rgba(207, 5, 58, 1)', + }} + > + + + + + {row['1M'].active ? ( + + ) : ( + + )} + {row['1M'].percents} + + } + sx={{ + cursor: 'pointer', + backgroundColor: row['1M'].active + ? 'rgba(228, 247, 243, 1)' + : 'rgba(255, 241, 245, 1)', + color: row['1M'].active ? 'rgba(18, 112, 93, 1)' : 'rgba(207, 5, 58, 1)', + }} + > + + + + {row.portfolioPercents} % + + + + + + + {row.totalAmount.amount} + + {row.totalAmount.usd} + + + + + ))} + +
+
+ ); +}; + +export default WalletPage; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/images/down-arrow.inline.svg b/packages/yoroi-extension/app/UI/features/portfolio/images/down-arrow.inline.svg new file mode 100644 index 0000000000..951c295e25 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/images/down-arrow.inline.svg @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/packages/yoroi-extension/app/UI/features/portfolio/images/table-sort.inline.svg b/packages/yoroi-extension/app/UI/features/portfolio/images/table-sort.inline.svg new file mode 100644 index 0000000000..863482d2c8 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/images/table-sort.inline.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/arrow-icon.inline.svg b/packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/arrow-icon.inline.svg new file mode 100644 index 0000000000..1f8f79e660 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/arrow-icon.inline.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/error-icon.inline.svg b/packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/error-icon.inline.svg new file mode 100644 index 0000000000..c39eef4539 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/error-icon.inline.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/expand-arrow.inline.svg b/packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/expand-arrow.inline.svg new file mode 100644 index 0000000000..5710e4fcdb --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/expand-arrow.inline.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/withdraw-icon.inline.svg b/packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/withdraw-icon.inline.svg new file mode 100644 index 0000000000..1e2872e96d --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/withdraw-icon.inline.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/yoroi-extension/app/UI/features/portfolio/images/up-arrow.inline.svg b/packages/yoroi-extension/app/UI/features/portfolio/images/up-arrow.inline.svg new file mode 100644 index 0000000000..5b7f365760 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/images/up-arrow.inline.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDappsPage.js b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDappsPage.js new file mode 100644 index 0000000000..2d952d3131 --- /dev/null +++ b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDappsPage.js @@ -0,0 +1,7 @@ +import React from 'react'; + +const PortfolioDappsPage = () => { + return
PortfolioDappsPage
; +}; + +export default PortfolioDappsPage; diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js new file mode 100644 index 0000000000..691769aafc --- /dev/null +++ b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js @@ -0,0 +1,110 @@ +import React from 'react'; +import TokenDetailsPage from '../../features/portfolio/TokenDetailsPage'; + +const subMenuOptions = [ + { + label: 'Overview', + className: 'overview', + route: 'overview', + }, + { + label: 'Performance', + className: 'performance', + route: 'performance', + }, +]; + +const mockHistory = [ + { + type: 'Sent', + time: '11:30 PM', + date: '05/22/2024', + status: 'Low', + fee: { + amount: '0.17 ADA', + usd: '0.03 USD', + }, + amount: { + total: '1,169,789.34432 ADA', + usd: '0.03 USD', + asset: '200 MILK', + }, + }, + { + type: 'Received', + time: '9:12 PM', + date: '05/22/2024', + status: 'Low', + amount: { + total: '1,169,789.34432 ADA', + usd: '312,323.33 USD', + asset: 2, + }, + }, + { + type: 'Transaction error', + time: '9:12 PM', + date: '05/21/2024', + status: 'Failed', + amount: { + total: '1,169,789.34432 ADA', + usd: '312,323.33 USD', + asset: 2, + }, + }, + { + type: 'Sent', + time: '4:20 PM', + date: '05/20/2024', + status: 'Low', + fee: { + amount: '0.17 ADA', + usd: '0.03 USD', + }, + amount: { + total: '1,169,789.34432 ADA', + usd: '0.03 USD', + asset: '200 MILK', + }, + }, +]; + +const PortfolioDetailPage = ({ match }) => { + const tokenId = match.params.tokenId; + + const tokenInfo = { + overview: { + tokenName: tokenId, + description: + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", + website: 'https://www.cardano.org', + detailOn: 'https://www.yoroiwallet.com', + policyId: + 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + fingerprint: + 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', + }, + performance: [ + { value: '0,277 USD' }, + { value: '0,48 USD' }, + { value: '557M USD' }, + { value: '34M USD' }, + { value: '#55' }, + { value: '67,00 ADA' }, + { value: '100,67 ADA' }, + { value: '400,60 ADA' }, + { value: '3,01 USD' }, + { value: '0,00002 USD' }, + ], + }; + + return ( + + ); +}; + +export default PortfolioDetailPage; diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js new file mode 100644 index 0000000000..a398a2eae2 --- /dev/null +++ b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js @@ -0,0 +1,153 @@ +import React from 'react'; +import WalletPage from '../../features/portfolio/WalletPage'; + +const headCells = [ + { id: 'name', label: 'Name', align: 'left' }, + { id: 'price', label: 'Price', align: 'left' }, + { id: '24h', label: '24H', align: 'left' }, + { id: '1w', label: '1W', align: 'left' }, + { id: '1m', label: '1M', align: 'left' }, + { id: 'portfolioPercents', label: 'Portfolio %', align: 'left' }, + { id: 'totalAmount', label: 'Total amount', align: 'right' }, +]; + +const mockData = [ + { + name: 'Token name', + id: 'Policy ID', + price: '0,48 USD', + portfolioPercents: '75,00', + '24h': { + active: true, + percents: '0,03%', + }, + '1W': { + active: false, + percents: '0,07%', + }, + '1M': { + active: true, + percents: '0,07%', + }, + totalAmount: { + amount: '1,019,243 ADA', + usd: '372,561 USD', + }, + }, + { + name: 'AGIX', + id: 'Agix', + price: '0,08 USD', + portfolioPercents: '5,00', + '24h': { + active: false, + percents: '0,03%', + }, + '1W': { + active: false, + percents: '0,07%', + }, + '1M': { + active: false, + percents: '0,07%', + }, + totalAmount: { + amount: '4990,00 AGIX', + usd: '400,00 USD', + }, + }, + { + name: 'MILK', + id: 'Milk', + price: '0,05 USD', + portfolioPercents: '5,00', + '24h': { + active: true, + percents: '0,03%', + }, + '1W': { + active: false, + percents: '0,07%', + }, + '1M': { + active: true, + percents: '0,03%', + }, + totalAmount: { + amount: '1000,00 MILK', + usd: '372,561 USD', + }, + }, + { + name: 'TKN', + id: 'Tkn', + price: '0,08 USD', + portfolioPercents: '5,00', + '24h': { + active: true, + percents: '0,03%', + }, + '1W': { + active: true, + percents: '0,07%', + }, + '1M': { + active: false, + percents: '0,07%', + }, + totalAmount: { + amount: '4990,00 AGIX', + usd: '400,00 USD', + }, + }, + { + name: 'TKN', + id: 'Tkn', + price: '0,08 USD', + portfolioPercents: '5,00', + '24h': { + active: false, + percents: '0,03%', + }, + '1W': { + active: true, + percents: '0,07%', + }, + '1M': { + active: true, + percents: '0,07%', + }, + totalAmount: { + amount: '4990,00 AGIX', + usd: '400,00 USD', + }, + }, + { + name: 'TKN', + id: 'Tkn', + price: '0,08 USD', + portfolioPercents: '5,00', + '24h': { + active: false, + percents: '0,03%', + }, + '1W': { + active: false, + percents: '0,07%', + }, + '1M': { + active: false, + percents: '0,07%', + }, + totalAmount: { + amount: '4990,00 AGIX', + usd: '400,00 USD', + }, + }, +]; + +const PortfolioPage = () => { + return ; +}; + +export default PortfolioPage; diff --git a/packages/yoroi-extension/app/i18n/global-messages.js b/packages/yoroi-extension/app/i18n/global-messages.js index 6e12a44724..38b156c807 100644 --- a/packages/yoroi-extension/app/i18n/global-messages.js +++ b/packages/yoroi-extension/app/i18n/global-messages.js @@ -688,9 +688,9 @@ const globalMessages: * = defineMessages({ id: 'sidebar.staking', defaultMessage: '!!!Staking', }, - sidebarAssets: { - id: 'sidebar.assets', - defaultMessage: '!!!Assets', + sidebarPortfolio: { + id: 'sidebar.portfolio', + defaultMessage: '!!!Portfolio', }, sidebarNfts: { id: 'sidebar.nfts', @@ -973,6 +973,14 @@ const globalMessages: * = defineMessages({ id: 'buysell.dialog.provider', defaultMessage: '!!!Provider', }, + portfolioHeaderText: { + id: 'portfolio.main.header.text', + defaultMessage: '!!!Tokens', + }, + portfolioDetailHeaderText: { + id: 'portfolio.detail.header.text', + defaultMessage: '!!!Token details', + }, }); export default globalMessages; diff --git a/packages/yoroi-extension/app/i18n/locales/en-US.json b/packages/yoroi-extension/app/i18n/locales/en-US.json index 9bbb073034..5d70736996 100644 --- a/packages/yoroi-extension/app/i18n/locales/en-US.json +++ b/packages/yoroi-extension/app/i18n/locales/en-US.json @@ -326,7 +326,7 @@ "settings.unitOfAccount.note": "Note: coin price is approximate and may not match the price of any given trading platform. Any transactions based on these price approximates are done at your own risk.", "settings.unitOfAccount.revamp.label": "Select currency", "settings.unitOfAccount.title": "Fiat pairing", - "sidebar.assets": "Assets", + "sidebar.portfolio": "Portfolio", "sidebar.faq": "Faq", "sidebar.feedback": "Feedback", "sidebar.newUpdates": "New updates", @@ -1008,5 +1008,9 @@ "yoroiTransfer.waiting.checkingAddresses.generatingTx": "Generating transfer transaction", "yoroiTransfer.waiting.progressInfo.checkingAddresses": "Checking addresses funds", "yoroiTransfer.waiting.progressInfo.restoringAddresses": "Fetching addresses", - "yoroiTransfer.waiting.title.label": "Wallet is being restored" + "yoroiTransfer.waiting.title.label": "Wallet is being restored", + "portfolio.main.header.text": "Tokens", + "portfolio.detail.header.text": "Token details", + "portfolio.menu.wallet.link.label": "Wallet", + "portfolio.menu.dapps.link.label": "Dapps" } diff --git a/packages/yoroi-extension/app/routes-config.js b/packages/yoroi-extension/app/routes-config.js index 94fbfc3f9d..5547ce0c26 100644 --- a/packages/yoroi-extension/app/routes-config.js +++ b/packages/yoroi-extension/app/routes-config.js @@ -82,4 +82,9 @@ export const ROUTES = { Gouvernance: { ROOT: '/gouvernance', }, + PORTFOLIO: { + ROOT: '/portfolio', + DAPPS: '/portfolio/dapps', + DETAILS: '/portfolio/details/:tokenId', + }, }; diff --git a/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js b/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js index eff6da966e..3cface1473 100644 --- a/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js +++ b/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js @@ -136,10 +136,10 @@ export const allCategoriesRevamp: Array = [ isVisible: ({ selected }) => (environment.isDev() || environment.isNightly()) && !!selected?.isMainnet(), }, { - className: 'assets', - route: ROUTES.ASSETS.ROOT, + className: 'portfolio', + route: ROUTES.PORTFOLIO.ROOT, icon: assetsIcon, - label: globalMessages.sidebarAssets, + label: globalMessages.sidebarPortfolio, isVisible: _request => _request.selected !== null, }, { From 9871238b4c6bc86878222eabf24d5807e2ac51a5 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 22 May 2024 16:08:38 +0300 Subject: [PATCH 010/464] add modal context --- packages/yoroi-extension/app/Routes.js | 8 ++ .../app/UI/components/icons/CloseIcon.js | 12 +++ .../app/UI/components/icons/index.js | 5 ++ .../UI/components/modals/ChooseDRepModal.js | 59 -------------- .../app/UI/components/modals/CustomModal.js | 75 ++++++++++++++++++ .../app/UI/components/modals/Modal.js | 75 ------------------ .../app/UI/components/modals/ModalManager.js | 2 +- .../gouvernace/common/ChooseDRepModal.js | 59 ++++++++++++++ .../module/GouvernanceContextProvider.js | 19 +++-- .../UI/features/gouvernace/module/state.js | 31 ++++++-- .../useCases/DelagationForm/DelagationForm.js | 77 +++++++++++++++++++ .../GouvernanceStatusSelection.js | 11 +-- .../app/UI/layout/GeneralPageLayout.js | 30 +++++--- .../GouvernanceDelegationFormPage.js | 32 ++++++++ .../UI/pages/Gouvernance/GouvernancePage.js | 9 +-- packages/yoroi-extension/app/routes-config.js | 1 + .../app/stores/stateless/sidebarCategories.js | 14 +++- 17 files changed, 339 insertions(+), 180 deletions(-) create mode 100644 packages/yoroi-extension/app/UI/components/icons/CloseIcon.js create mode 100644 packages/yoroi-extension/app/UI/components/icons/index.js delete mode 100644 packages/yoroi-extension/app/UI/components/modals/ChooseDRepModal.js create mode 100644 packages/yoroi-extension/app/UI/components/modals/CustomModal.js delete mode 100644 packages/yoroi-extension/app/UI/components/modals/Modal.js create mode 100644 packages/yoroi-extension/app/UI/features/gouvernace/common/ChooseDRepModal.js create mode 100644 packages/yoroi-extension/app/UI/features/gouvernace/useCases/DelagationForm/DelagationForm.js create mode 100644 packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernanceDelegationFormPage.js diff --git a/packages/yoroi-extension/app/Routes.js b/packages/yoroi-extension/app/Routes.js index 4cb41da033..74d95333fe 100644 --- a/packages/yoroi-extension/app/Routes.js +++ b/packages/yoroi-extension/app/Routes.js @@ -35,6 +35,7 @@ import FullscreenLayout from './components/layout/FullscreenLayout'; // New UI pages import GouvernancePage from './UI/pages/Gouvernance/GouvernancePage'; +import GouvernanceDelegationFormPage from './UI/pages/Gouvernance/GouvernanceDelegationFormPage'; // PAGES const LanguageSelectionPagePromise = () => import('./containers/profile/LanguageSelectionPage'); @@ -491,6 +492,13 @@ const GouvernanceSubpages = (stores, actions) => ( path={ROUTES.Gouvernance.ROOT} component={props => } /> + ( + + )} + /> ); diff --git a/packages/yoroi-extension/app/UI/components/icons/CloseIcon.js b/packages/yoroi-extension/app/UI/components/icons/CloseIcon.js new file mode 100644 index 0000000000..06c70d7cef --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/icons/CloseIcon.js @@ -0,0 +1,12 @@ +import React from 'react'; + +export const CloseIcon = () => { + return ( + + + + ); +}; diff --git a/packages/yoroi-extension/app/UI/components/icons/index.js b/packages/yoroi-extension/app/UI/components/icons/index.js new file mode 100644 index 0000000000..0f8ba5a81b --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/icons/index.js @@ -0,0 +1,5 @@ +import { CloseIcon } from './CloseIcon'; + +export const Icon = { + CloseIcon, +}; diff --git a/packages/yoroi-extension/app/UI/components/modals/ChooseDRepModal.js b/packages/yoroi-extension/app/UI/components/modals/ChooseDRepModal.js deleted file mode 100644 index ea20470b8b..0000000000 --- a/packages/yoroi-extension/app/UI/components/modals/ChooseDRepModal.js +++ /dev/null @@ -1,59 +0,0 @@ -import * as React from 'react'; -import Button from '@mui/material/Button'; -import { styled } from '@mui/material/styles'; -import Dialog from '@mui/material/Dialog'; -import DialogTitle from '@mui/material/DialogTitle'; -import DialogContent from '@mui/material/DialogContent'; -import DialogActions from '@mui/material/DialogActions'; -import IconButton from '@mui/material/IconButton'; -import CloseIcon from '@mui/icons-material/Close'; -import Typography from '@mui/material/Typography'; - -const BootstrapDialog = styled(Dialog)(({ theme }) => ({ - '& .MuiDialogContent-root': { - padding: theme.spacing(2), - }, - '& .MuiDialogActions-root': { - padding: theme.spacing(1), - }, -})); - -export const ChooseDRepModal = ({ onClose, title, ChooseDRepModal }) => { - const [open, setOpen] = React.useState(false); - - return ( - - - - - {title} - - theme.palette.grey[500], - }} - > - - - - - Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis - in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. - - - - - - - - ); -}; diff --git a/packages/yoroi-extension/app/UI/components/modals/CustomModal.js b/packages/yoroi-extension/app/UI/components/modals/CustomModal.js new file mode 100644 index 0000000000..06e807f7a6 --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/modals/CustomModal.js @@ -0,0 +1,75 @@ +// @flow + +import * as React from 'react'; +import type { Node } from 'react'; +import Button from '@mui/material/Button'; +import { styled } from '@mui/material/styles'; +import Dialog from '@mui/material/Dialog'; +import DialogTitle from '@mui/material/DialogTitle'; +import DialogContent from '@mui/material/DialogContent'; +import DialogActions from '@mui/material/DialogActions'; +import IconButton from '@mui/material/IconButton'; +import Typography from '@mui/material/Typography'; +import Box from '@mui/material/Box'; +import { Icon } from '../icons/index'; + +const BootstrapDialog = styled(Dialog)(({ theme, width }) => ({ + '& .MuiDialogContent-root': { + padding: '24px', + }, + '& .MuiDialog-root': { + maxWidth: '648px', + margin: 0, + }, + '& .MuiPaper-root': { + maxWidth: '648px', + margin: 0, + }, + '& .MuiDialogActions-root': { + padding: '24px', + }, +})); + +type CustomModalProps = {| + onClose: () => void, + title: string, + confirmDRep: () => void, + dividers?: boolean, + width?: string, + content: Node, + actions: Node, +|}; + +export const CustomModal = ({ + onClose, + title, + confirmDRep, + dividers = false, + width = '648px', + content, + actions, +}: CustomModalProps): Node => { + return ( + + + + {title} + + + theme.palette.ds.gray_c500, + }} + > + + + {content} + {actions} + + ); +}; diff --git a/packages/yoroi-extension/app/UI/components/modals/Modal.js b/packages/yoroi-extension/app/UI/components/modals/Modal.js deleted file mode 100644 index 9bebb34e06..0000000000 --- a/packages/yoroi-extension/app/UI/components/modals/Modal.js +++ /dev/null @@ -1,75 +0,0 @@ -import * as React from 'react'; -import Button from '@mui/material/Button'; -import { styled } from '@mui/material/styles'; -import Dialog from '@mui/material/Dialog'; -import DialogTitle from '@mui/material/DialogTitle'; -import DialogContent from '@mui/material/DialogContent'; -import DialogActions from '@mui/material/DialogActions'; -import IconButton from '@mui/material/IconButton'; -import CloseIcon from '@mui/icons-material/Close'; -import Typography from '@mui/material/Typography'; - -const BootstrapDialog = styled(Dialog)(({ theme }) => ({ - '& .MuiDialogContent-root': { - padding: theme.spacing(2), - }, - '& .MuiDialogActions-root': { - padding: theme.spacing(1), - }, -})); - -export default function CustomizedDialogs() { - const [open, setOpen] = React.useState(false); - - const handleClickOpen = () => { - setOpen(true); - }; - const handleClose = () => { - setOpen(false); - }; - - return ( - - - - - Modal title - - theme.palette.grey[500], - }} - > - - - - - Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis - in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. - - - Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis - lacus vel augue laoreet rutrum faucibus dolor auctor. - - - Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel - scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus - auctor fringilla. - - - - - - - - ); -} diff --git a/packages/yoroi-extension/app/UI/components/modals/ModalManager.js b/packages/yoroi-extension/app/UI/components/modals/ModalManager.js index 882871cbf5..6d5adce114 100644 --- a/packages/yoroi-extension/app/UI/components/modals/ModalManager.js +++ b/packages/yoroi-extension/app/UI/components/modals/ModalManager.js @@ -1,5 +1,5 @@ import { useModal } from '../../context/ModalContext'; -import UploadModal from './ChooseDRepModal'; +import { ChooseDRepModal } from '../../features/gouvernace/common/ChooseDRepModal'; const ModalLookup = { ChooseDRepModal: ChooseDRepModal, diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/common/ChooseDRepModal.js b/packages/yoroi-extension/app/UI/features/gouvernace/common/ChooseDRepModal.js new file mode 100644 index 0000000000..f4efcbda03 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/gouvernace/common/ChooseDRepModal.js @@ -0,0 +1,59 @@ +// @flow + +import * as React from 'react'; +import type { Node } from 'react'; +import Button from '@mui/material/Button'; +import Typography from '@mui/material/Typography'; +import TextField from '@mui/material/TextField'; +import Box from '@mui/material/Box'; +import Stack from '@mui/material/Stack'; +import { CustomModal } from '../../../components/modals/CustomModal'; +import { useGouvernance } from '../module/GouvernanceContextProvider'; + +type ChooseDRepModallProps = {| + onClose: () => void, + title: string, + confirmDRep: () => void, + setDrepId: (id: string) => void, + drepId: string, +|}; + +export const ChooseDRepModal = ({ onClose, title }: ChooseDRepModallProps): Node => { + const [drepId, setDrepId] = React.useState(''); + const { dRepIdChanged, gouvernanceStatusChanged } = useGouvernance(); + + const confirmDRep = () => { + // TODO add spcecific validation if needed + dRepIdChanged(drepId); + }; + + return ( + + + Identify your preferred DRep and enter their ID below to delegate your vote + + { + console.log('event.target.value', event.target.value); + setDrepId(event.target.value); + }} + value={drepId} + /> + + } + actions={ + + } + /> + ); +}; diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/module/GouvernanceContextProvider.js b/packages/yoroi-extension/app/UI/features/gouvernace/module/GouvernanceContextProvider.js index 34a3d83d39..475eb6404a 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/module/GouvernanceContextProvider.js +++ b/packages/yoroi-extension/app/UI/features/gouvernace/module/GouvernanceContextProvider.js @@ -29,14 +29,17 @@ export const GouvernanceContextProvider = ({ ...initialState, }); - const actions = - React.useRef < - GouvernanceActions > - { - gouvernanceStatusChanged: (status: any) => { - dispatch({ type: GouvernanceActionType.GouvernanceStatusChanged, gouvernanceStatus }); - }, - }.current; + const actions = React.useRef({ + gouvernanceStatusChanged: (status: any) => { + dispatch({ + type: GouvernanceActionType.GouvernanceStatusChanged, + gouvernanceStatus: status, + }); + }, + dRepIdChanged: (id: string) => { + dispatch({ type: GouvernanceActionType.DRepIdChanged, dRepId: id }); + }, + }).current; const context = React.useMemo( () => ({ diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/module/state.js b/packages/yoroi-extension/app/UI/features/gouvernace/module/state.js index 6277ddb91d..29c8cfbb6c 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/module/state.js +++ b/packages/yoroi-extension/app/UI/features/gouvernace/module/state.js @@ -2,33 +2,45 @@ import { invalid } from '@yoroi/common'; import { produce } from 'immer'; +type status = 'none' | 'drep' | 'abstain' | 'noConfidence'; + // Define types export type GouvernanceActions = {| - +gouvernanceStatusChanged: (status: any) => void, + +gouvernanceStatusChanged: (status: status) => void, + +dRepIdChanged: (id: string) => void, |}; export const GouvernanceActionType = Object.freeze({ GouvernanceStatusChanged: 'gouvernanceStatusChanged', + DRepIdChanged: 'dRepIdChanged', }); -export type GouvernanceAction = {| - type: typeof GouvernanceActionType.GouvernanceStatusChanged, - gouvernanceStatus: 'none' | 'drep' | 'abstain' | 'noConfidence', -|}; +export type GouvernanceAction = + | {| + type: typeof GouvernanceActionType.GouvernanceStatusChanged, + gouvernanceStatus: status, + |} + | {| + type: typeof GouvernanceActionType.DRepIdChanged, + dRepId: '', + |}; // Define state type export type GouvernanceState = {| - gouvernanceStatus?: 'none' | 'drep' | 'abstain' | 'noConfidence', + gouvernanceStatus: status, + dRepId: string, |}; // Define default state export const defaultGouvernanceState: GouvernanceState = { gouvernanceStatus: 'none', + dRepId: '', }; // Define action handlers export const defaultGouvernanceActions: GouvernanceActions = { - gouvernanceStatusChanged: () => invalid('missing init'), + gouvernanceStatusChanged: () => invalid('missing init gouvernanceStatusChanged'), + dRepIdChanged: () => invalid('missing init dRepIdChanged'), }; // Reducer function @@ -41,8 +53,11 @@ export const GouvernanceReducer = ( case GouvernanceActionType.GouvernanceStatusChanged: draft.gouvernanceStatus = action.gouvernanceStatus; break; + case GouvernanceActionType.DRepIdChanged: + draft.dRepId = action.dRepId; + break; default: - (action: empty); // Ensure all cases are handled + return; } }); }; diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/useCases/DelagationForm/DelagationForm.js b/packages/yoroi-extension/app/UI/features/gouvernace/useCases/DelagationForm/DelagationForm.js new file mode 100644 index 0000000000..ff755760a4 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/gouvernace/useCases/DelagationForm/DelagationForm.js @@ -0,0 +1,77 @@ +// @flow +import * as React from 'react'; +import { styled } from '@mui/material/styles'; +import Typography from '@mui/material/Typography'; +import Box from '@mui/material/Box'; +import TextField from '@mui/material/TextField'; +import type { Node } from 'react'; + +const DetailsContainer = styled(Box)(({ theme }) => ({ + marginTop: theme.spacing(4), + textAlign: 'left', + width: '100%', + maxWidth: '500px', + backgroundColor: theme.palette.background.paper, + padding: theme.spacing(2), + borderRadius: theme.shape.borderRadius, + boxShadow: theme.shadows[1], +})); + +const TotalBox = styled(Box)(({ theme }) => ({ + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + backgroundColor: theme.palette.primary.main, + color: theme.palette.primary.contrastText, + padding: theme.spacing(2), + borderRadius: theme.shape.borderRadius, + marginBottom: theme.spacing(2), +})); + +const TransactionDetails = styled(Box)(({ theme }) => ({ + padding: theme.spacing(2), + backgroundColor: theme.palette.background.default, + borderRadius: theme.shape.borderRadius, + boxShadow: theme.shadows[1], + marginBottom: theme.spacing(2), +})); + +const PasswordField = styled(TextField)(({ theme }) => ({ + marginTop: theme.spacing(2), +})); + +export const DelagationForm = (): Node => { + return ( + + + Delegate to a DRep + + + You are designating someone else to cast your vote on your behalf for all proposals now and + in the future. + + + Total + + 0.5 ADA + 0.15 USD + + + + Transaction Details + + + + Operations + + + Delegate voting to drep1e93a2zvs3aw8e4naez0ynpmc48jbc7yaa3n2k8ljhwfdt70yscts + + + Transaction fee: 0.5 ADA + + + + + ); +}; diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js b/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js index 954f5a1c5d..61555d3a86 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js +++ b/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js @@ -75,10 +75,11 @@ const GovernanceCard = ({ title, description, icon, selected, onClick }: Props) export const GouvernanceStatusSelection = (): Node => { const [selectedCard, setSelectedCard] = useState(null); - const { gouvernanceStatus } = useGouvernance(); + const { gouvernanceStatus, dRepId } = useGouvernance(); const { openModal } = useModal(); - console.log('Test gouvernanceStatus', gouvernanceStatus); + console.log('gouvernanceStatus', gouvernanceStatus); + console.log('dRepId', dRepId); const pageTitle = gouvernanceStatus === 'none' ? 'Governance Status' : 'Governance status'; const statusRawText = mapStatus[gouvernanceStatus]; @@ -89,12 +90,8 @@ export const GouvernanceStatusSelection = (): Node => { const hasDRep = gouvernanceStatus === 'drep'; - const confirmDRep = drep => { - console.log('TEST', drep); - }; - const onChoosDRepClick = () => { - openModal('UploadModal', { title: 'avatar', confirmDRep }); + openModal('ChooseDRepModal', { title: 'Choose your Drep' }); }; const handleCardClick = card => { setSelectedCard(card); diff --git a/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js b/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js index 5cae1361f2..d125c47ab5 100644 --- a/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js +++ b/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js @@ -11,6 +11,8 @@ import { Box, Typography } from '@mui/material'; import { withLayout } from '../../styles/context/layout'; import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; import { ModalProvider } from '../context/ModalContext'; +import ModalManager from '../components/modals/ModalManager'; +import { GouvernanceContextProvider } from '../features/gouvernace/module/GouvernanceContextProvider'; type Props = {| ...StoresAndActionsProps, @@ -33,16 +35,24 @@ class GeneralPageLayout extends Component { const sidebarContainer = ; return ( - // TODO ModalProvider to be moved into APP after finish refactoring and bring everything in UI - - } - sidebar={sidebarContainer} - navbar={navbar} - > - {children} - - + + // TODO ModalProvider to be moved into APP after finish refactoring and bring everything in + UI + + + } + sidebar={sidebarContainer} + navbar={navbar} + > + {children} + + + ); } } diff --git a/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernanceDelegationFormPage.js b/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernanceDelegationFormPage.js new file mode 100644 index 0000000000..91c2ddfdd6 --- /dev/null +++ b/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernanceDelegationFormPage.js @@ -0,0 +1,32 @@ +// @flow +import GeneralPageLayout from '../../layout/GeneralPageLayout'; +import { DelagationForm } from '../../features/gouvernace/useCases/DelagationForm/DelagationForm'; +import NavBarContainerRevamp from '../../../containers/NavBarContainerRevamp'; +import NavBar from '../../../components/topbar/NavBar'; +import NavBarTitle from '../../../components/topbar/NavBarTitle'; + +type Props = {| + stores: any, + actions: any, + children?: React$Node, +|}; + +const GouvernanceDelegationFormPage = ({ stores, actions, children }: Props): any => { + return ( + } + /> + } + > + + + ); +}; + +export default GouvernanceDelegationFormPage; diff --git a/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernancePage.js b/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernancePage.js index ca574de6b1..054c8cddc4 100644 --- a/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernancePage.js +++ b/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernancePage.js @@ -1,7 +1,6 @@ // @flow import GeneralPageLayout from '../../layout/GeneralPageLayout'; import { GouvernanceStatusSelection } from '../../features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection'; -import { GouvernanceContextProvider } from '../../features/gouvernace/module/GouvernanceContextProvider'; import NavBarContainerRevamp from '../../../containers/NavBarContainerRevamp'; import NavBar from '../../../components/topbar/NavBar'; import NavBarTitle from '../../../components/topbar/NavBarTitle'; @@ -26,13 +25,7 @@ const GouvernancePage = ({ stores, actions, children }: Props): any => { } // menu={menu} // ADD a menu if needed (see example in SwapPageContainer) > - - - +
); }; diff --git a/packages/yoroi-extension/app/routes-config.js b/packages/yoroi-extension/app/routes-config.js index 94fbfc3f9d..d9c03803a3 100644 --- a/packages/yoroi-extension/app/routes-config.js +++ b/packages/yoroi-extension/app/routes-config.js @@ -81,5 +81,6 @@ export const ROUTES = { // NEW UI ROUTES Gouvernance: { ROOT: '/gouvernance', + DELEGATE: '/gouvernance-delagation', }, }; diff --git a/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js b/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js index eff6da966e..a5437472c8 100644 --- a/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js +++ b/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js @@ -42,9 +42,7 @@ export const MY_WALLETS: SidebarCategory = registerCategory({ route: ROUTES.MY_WALLETS, icon: walletsIcon, label: globalMessages.sidebarWallets, - isVisible: request => - request.hasAnyWallets && - request.selected == null, + isVisible: request => request.hasAnyWallets && request.selected == null, }); export const WALLETS_ROOT: SidebarCategory = registerCategory({ @@ -133,7 +131,8 @@ export const allCategoriesRevamp: Array = [ route: ROUTES.SWAP.ROOT, icon: swapIcon, label: globalMessages.sidebarSwap, - isVisible: ({ selected }) => (environment.isDev() || environment.isNightly()) && !!selected?.isMainnet(), + isVisible: ({ selected }) => + (environment.isDev() || environment.isNightly()) && !!selected?.isMainnet(), }, { className: 'assets', @@ -178,6 +177,13 @@ export const allCategoriesRevamp: Array = [ label: globalMessages.sidebarSettings, isVisible: _request => true, }, + { + className: 'settings', + route: '/gouvernance', + icon: settingIcon, + label: globalMessages.sidebarSettings, + isVisible: _request => true, + }, // { // className: 'new-updates', // route: '/new-updates', From e03e3e72168458c085c86aac3d82b210dfc37528 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 22 May 2024 17:15:32 +0300 Subject: [PATCH 011/464] add delegation form --- packages/yoroi-extension/app/Routes.js | 1 - .../app/UI/components/icons/VisibilityOff.js | 12 ++ .../app/UI/components/icons/VisibilityOn.js | 20 ++++ .../app/UI/components/icons/index.js | 4 + .../gouvernace/common/ChooseDRepModal.js | 4 + .../useCases/DelagationForm/DelagationForm.js | 107 ++++++++++++------ .../app/UI/layout/GeneralPageLayout.js | 3 +- .../topbar/SideBarCategoryRevamp.js | 6 +- packages/yoroi-extension/app/routes-config.js | 2 +- 9 files changed, 117 insertions(+), 42 deletions(-) create mode 100644 packages/yoroi-extension/app/UI/components/icons/VisibilityOff.js create mode 100644 packages/yoroi-extension/app/UI/components/icons/VisibilityOn.js diff --git a/packages/yoroi-extension/app/Routes.js b/packages/yoroi-extension/app/Routes.js index 74d95333fe..aa1908de67 100644 --- a/packages/yoroi-extension/app/Routes.js +++ b/packages/yoroi-extension/app/Routes.js @@ -499,7 +499,6 @@ const GouvernanceSubpages = (stores, actions) => ( )} /> - ); diff --git a/packages/yoroi-extension/app/UI/components/icons/VisibilityOff.js b/packages/yoroi-extension/app/UI/components/icons/VisibilityOff.js new file mode 100644 index 0000000000..bc313de9d9 --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/icons/VisibilityOff.js @@ -0,0 +1,12 @@ +import React from 'react'; + +export const VisibilityOff = () => { + return ( + + + + ); +}; diff --git a/packages/yoroi-extension/app/UI/components/icons/VisibilityOn.js b/packages/yoroi-extension/app/UI/components/icons/VisibilityOn.js new file mode 100644 index 0000000000..0b0abfa009 --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/icons/VisibilityOn.js @@ -0,0 +1,20 @@ +import React from 'react'; + +export const VisibilityOn = () => { + return ( + + + + + ); +}; diff --git a/packages/yoroi-extension/app/UI/components/icons/index.js b/packages/yoroi-extension/app/UI/components/icons/index.js index 0f8ba5a81b..4a9b51a196 100644 --- a/packages/yoroi-extension/app/UI/components/icons/index.js +++ b/packages/yoroi-extension/app/UI/components/icons/index.js @@ -1,5 +1,9 @@ import { CloseIcon } from './CloseIcon'; +import { VisibilityOff } from './VisibilityOff'; +import { VisibilityOn } from './VisibilityOn'; export const Icon = { CloseIcon, + VisibilityOn, + VisibilityOff, }; diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/common/ChooseDRepModal.js b/packages/yoroi-extension/app/UI/features/gouvernace/common/ChooseDRepModal.js index f4efcbda03..a3e4ed54a5 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/common/ChooseDRepModal.js +++ b/packages/yoroi-extension/app/UI/features/gouvernace/common/ChooseDRepModal.js @@ -9,6 +9,8 @@ import Box from '@mui/material/Box'; import Stack from '@mui/material/Stack'; import { CustomModal } from '../../../components/modals/CustomModal'; import { useGouvernance } from '../module/GouvernanceContextProvider'; +import { useHistory } from 'react-router-dom'; +import { ROUTES } from '../../../../routes-config'; type ChooseDRepModallProps = {| onClose: () => void, @@ -21,10 +23,12 @@ type ChooseDRepModallProps = {| export const ChooseDRepModal = ({ onClose, title }: ChooseDRepModallProps): Node => { const [drepId, setDrepId] = React.useState(''); const { dRepIdChanged, gouvernanceStatusChanged } = useGouvernance(); + const history = useHistory(); const confirmDRep = () => { // TODO add spcecific validation if needed dRepIdChanged(drepId); + history.push('/gouvernance/delagation'); }; return ( diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/useCases/DelagationForm/DelagationForm.js b/packages/yoroi-extension/app/UI/features/gouvernace/useCases/DelagationForm/DelagationForm.js index ff755760a4..45f6a437ec 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/useCases/DelagationForm/DelagationForm.js +++ b/packages/yoroi-extension/app/UI/features/gouvernace/useCases/DelagationForm/DelagationForm.js @@ -4,74 +4,107 @@ import { styled } from '@mui/material/styles'; import Typography from '@mui/material/Typography'; import Box from '@mui/material/Box'; import TextField from '@mui/material/TextField'; +import Stack from '@mui/material/Stack'; import type { Node } from 'react'; +import OutlinedInput from '@mui/material/OutlinedInput'; +import InputAdornment from '@mui/material/InputAdornment'; +import IconButton from '@mui/material/IconButton'; +import { Icon } from '../../../../components/icons/index'; +import { VisibilityOff } from '../../../../components/icons/VisibilityOff'; +import { VisibilityOn } from '../../../../components/icons/VisibilityOn'; +import InputLabel from '@mui/material/InputLabel'; +import FormControl from '@mui/material/FormControl'; -const DetailsContainer = styled(Box)(({ theme }) => ({ - marginTop: theme.spacing(4), - textAlign: 'left', - width: '100%', - maxWidth: '500px', - backgroundColor: theme.palette.background.paper, - padding: theme.spacing(2), - borderRadius: theme.shape.borderRadius, - boxShadow: theme.shadows[1], +const Container = styled(Box)(({ theme }) => ({ + paddingTop: '48px', + maxWidth: '506px', + margin: '0 auto', })); const TotalBox = styled(Box)(({ theme }) => ({ display: 'flex', justifyContent: 'space-between', - alignItems: 'center', - backgroundColor: theme.palette.primary.main, - color: theme.palette.primary.contrastText, - padding: theme.spacing(2), - borderRadius: theme.shape.borderRadius, - marginBottom: theme.spacing(2), + background: theme.palette.ds.bg_gradient_3, + padding: '16px', + borderRadius: '8px', + marginBottom: '24px', })); -const TransactionDetails = styled(Box)(({ theme }) => ({ - padding: theme.spacing(2), - backgroundColor: theme.palette.background.default, - borderRadius: theme.shape.borderRadius, - boxShadow: theme.shadows[1], - marginBottom: theme.spacing(2), -})); - -const PasswordField = styled(TextField)(({ theme }) => ({ - marginTop: theme.spacing(2), +const TransactionDetails = styled(Stack)(({ theme }) => ({ + marginBottom: '24px', + gap: '16px', })); export const DelagationForm = (): Node => { + const [showPassword, setShowPassword] = React.useState(false); + + const handleClickShowPassword = () => setShowPassword(show => !show); + + const handleMouseDownPassword = event => { + event.preventDefault(); + }; + return ( - - + + Delegate to a DRep - + You are designating someone else to cast your vote on your behalf for all proposals now and in the future. - Total + + Total + - 0.5 ADA - 0.15 USD + + 0.5 ADA + + + 0.15 USD + - + Transaction Details - + Operations - + Delegate voting to drep1e93a2zvs3aw8e4naez0ynpmc48jbc7yaa3n2k8ljhwfdt70yscts - + Transaction fee: 0.5 ADA - - + + {/* // TODO to be extracted in a reusable component for all features */} + + Password + + + {showPassword ? : } + + + } + label="Password" + sx={{ color: 'black' }} + /> + + ); }; diff --git a/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js b/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js index d125c47ab5..33d27a4d89 100644 --- a/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js +++ b/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js @@ -40,8 +40,7 @@ class GeneralPageLayout extends Component { gouvernanceStatus: 'none', }} > - // TODO ModalProvider to be moved into APP after finish refactoring and bring everything in - UI + {/* TODO ModalProvider to be moved into APP after finish refactoring and bring everything in UI */} { - {label ? {intl.formatMessage(label)} : null} + {label ? ( + + {intl.formatMessage(label)} + + ) : null} ); } diff --git a/packages/yoroi-extension/app/routes-config.js b/packages/yoroi-extension/app/routes-config.js index d9c03803a3..27af8b494e 100644 --- a/packages/yoroi-extension/app/routes-config.js +++ b/packages/yoroi-extension/app/routes-config.js @@ -81,6 +81,6 @@ export const ROUTES = { // NEW UI ROUTES Gouvernance: { ROOT: '/gouvernance', - DELEGATE: '/gouvernance-delagation', + DELEGATE: '/gouvernance/delagation', }, }; From dab593275e4a5a99c7b6296d8f54df3bf6ebf4a8 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 22 May 2024 17:18:40 +0300 Subject: [PATCH 012/464] add string --- packages/yoroi-extension/app/i18n/global-messages.js | 4 ++++ packages/yoroi-extension/app/i18n/locales/en-US.json | 1 + .../yoroi-extension/app/stores/stateless/sidebarCategories.js | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/i18n/global-messages.js b/packages/yoroi-extension/app/i18n/global-messages.js index 6e12a44724..dc54d7760f 100644 --- a/packages/yoroi-extension/app/i18n/global-messages.js +++ b/packages/yoroi-extension/app/i18n/global-messages.js @@ -675,6 +675,10 @@ const globalMessages: * = defineMessages({ id: 'sidebar.settings', defaultMessage: '!!!Settings', }, + sidebarGouvernance: { + id: 'sidebar.gouvernance', + defaultMessage: '!!!Gouvernance', + }, sidebarTransfer: { id: 'sidebar.transfer', defaultMessage: '!!!Claim or transfer wallet', diff --git a/packages/yoroi-extension/app/i18n/locales/en-US.json b/packages/yoroi-extension/app/i18n/locales/en-US.json index 9bbb073034..0383a748fe 100644 --- a/packages/yoroi-extension/app/i18n/locales/en-US.json +++ b/packages/yoroi-extension/app/i18n/locales/en-US.json @@ -332,6 +332,7 @@ "sidebar.newUpdates": "New updates", "sidebar.nfts": "NFTs", "sidebar.settings": "Settings", + "sidebar.gouvernance": "Gouvernance", "sidebar.staking": "Staking", "sidebar.stakingDashboard": "Staking Dashboard", "sidebar.swap": "Swap", diff --git a/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js b/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js index a5437472c8..414bc64339 100644 --- a/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js +++ b/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js @@ -181,7 +181,7 @@ export const allCategoriesRevamp: Array = [ className: 'settings', route: '/gouvernance', icon: settingIcon, - label: globalMessages.sidebarSettings, + label: globalMessages.sidebarGouvernance, isVisible: _request => true, }, // { From 9f13d6ddbe1699b8bcf7f2899bfbdd78972e63d9 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 22 May 2024 17:39:32 +0300 Subject: [PATCH 013/464] refactor --- .../GouvernanceStatusSelection.js | 61 +++++++++++-------- 1 file changed, 37 insertions(+), 24 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js b/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js index 61555d3a86..3f8f63f99e 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js +++ b/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js @@ -78,9 +78,6 @@ export const GouvernanceStatusSelection = (): Node => { const { gouvernanceStatus, dRepId } = useGouvernance(); const { openModal } = useModal(); - console.log('gouvernanceStatus', gouvernanceStatus); - console.log('dRepId', dRepId); - const pageTitle = gouvernanceStatus === 'none' ? 'Governance Status' : 'Governance status'; const statusRawText = mapStatus[gouvernanceStatus]; const pageSubtitle = @@ -97,6 +94,31 @@ export const GouvernanceStatusSelection = (): Node => { setSelectedCard(card); }; + const optionsList = [ + { + title: 'Delegate to a Drep', + description: + 'You are designating someone else to cast your vote on your behalf for all proposals now and in the future.', + icon: , + selected: selectedCard === 'drep', + onClick: onChoosDRepClick, + }, + { + title: 'Abstain', + description: 'You are choosing not to cast a vote on all proposals now and in the future.', + icon: , + selected: selectedCard === 'no-vote', + onClick: () => handleCardClick('no-vote'), + }, + { + title: 'No Confidence', + description: 'You are expressing a lack of trust for all proposals now and in the future.', + icon: , + selected: selectedCard === 'lack-of-trust', + onClick: () => handleCardClick('lack-of-trust'), + }, + ]; + return ( @@ -106,27 +128,18 @@ export const GouvernanceStatusSelection = (): Node => { {pageSubtitle} - } - selected={selectedCard === 'drep'} - onClick={() => onChoosDRepClick()} - /> - } - selected={selectedCard === 'no-vote'} - onClick={() => handleCardClick('no-vote')} - /> - } - selected={selectedCard === 'lack-of-trust'} - onClick={() => handleCardClick('lack-of-trust')} - /> + {optionsList.map((option, index) => { + return ( + + ); + })} {gouvernanceStatus === 'none' && ( From 95b0c298ff910883ffe75d4858222a9a775394c6 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 22 May 2024 17:42:43 +0300 Subject: [PATCH 014/464] fix width in modal --- .../app/UI/components/modals/CustomModal.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/yoroi-extension/app/UI/components/modals/CustomModal.js b/packages/yoroi-extension/app/UI/components/modals/CustomModal.js index 06e807f7a6..256905b4ea 100644 --- a/packages/yoroi-extension/app/UI/components/modals/CustomModal.js +++ b/packages/yoroi-extension/app/UI/components/modals/CustomModal.js @@ -18,11 +18,11 @@ const BootstrapDialog = styled(Dialog)(({ theme, width }) => ({ padding: '24px', }, '& .MuiDialog-root': { - maxWidth: '648px', + maxWidth: width, margin: 0, }, '& .MuiPaper-root': { - maxWidth: '648px', + maxWidth: width, margin: 0, }, '& .MuiDialogActions-root': { @@ -50,7 +50,13 @@ export const CustomModal = ({ actions, }: CustomModalProps): Node => { return ( - + {title} From ade8d7cbdec50ddf709dbde572ea731cca2ded02 Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Thu, 23 May 2024 16:33:57 +0700 Subject: [PATCH 015/464] feat: update --- packages/yoroi-extension/app/Routes.js | 33 +- .../yoroi-extension/app/UI/components/card.js | 2 +- .../UI/components/icons/portfolio/Arrow.js | 17 + .../app/UI/components/icons/portfolio/Sort.js | 25 ++ .../portfolio/transaction-history/Arrow.js | 26 ++ .../portfolio/transaction-history/Error.js | 20 ++ .../portfolio/transaction-history/Expand.js | 22 ++ .../portfolio/transaction-history/Withdraw.js | 24 ++ .../app/UI/components/search-input.js | 6 +- .../app/UI/components/skeleton.js | 5 +- .../app/UI/components/tooltip.js | 4 +- .../app/UI/features/portfolio/WalletPage.js | 288 ---------------- .../portfolio/{ => common}/PortfolioMenu.js | 10 +- .../{ => common}/TokenDetailChart.js | 82 ++--- .../{ => common}/TransactionHistory.js | 110 +++--- .../portfolio/images/down-arrow.inline.svg | 6 - .../portfolio/images/table-sort.inline.svg | 4 - .../transaction-history/arrow-icon.inline.svg | 14 - .../transaction-history/error-icon.inline.svg | 4 - .../expand-arrow.inline.svg | 3 - .../withdraw-icon.inline.svg | 5 - .../portfolio/images/up-arrow.inline.svg | 2 - .../TokenDetails/TokenDetails.js} | 193 +++++------ .../useCases/Wallet/PortfolioWallet.js | 322 ++++++++++++++++++ .../yoroi-extension/app/UI/hooks/index.js | 1 + .../app/UI/hooks/useNavigateTo.js | 0 .../app/UI/hooks/useStrings.js | 20 ++ .../PortfolioPageLayout.js} | 34 +- .../UI/pages/portfolio/PortfolioDappsPage.js | 15 +- .../UI/pages/portfolio/PortfolioDetailPage.js | 91 +---- .../app/UI/pages/portfolio/PortfolioPage.js | 163 +-------- .../app/UI/pages/portfolio/mockData.js | 247 ++++++++++++++ 32 files changed, 1001 insertions(+), 797 deletions(-) create mode 100644 packages/yoroi-extension/app/UI/components/icons/portfolio/Arrow.js create mode 100644 packages/yoroi-extension/app/UI/components/icons/portfolio/Sort.js create mode 100644 packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Arrow.js create mode 100644 packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Error.js create mode 100644 packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Expand.js create mode 100644 packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Withdraw.js delete mode 100644 packages/yoroi-extension/app/UI/features/portfolio/WalletPage.js rename packages/yoroi-extension/app/UI/features/portfolio/{ => common}/PortfolioMenu.js (82%) rename packages/yoroi-extension/app/UI/features/portfolio/{ => common}/TokenDetailChart.js (57%) rename packages/yoroi-extension/app/UI/features/portfolio/{ => common}/TransactionHistory.js (60%) delete mode 100644 packages/yoroi-extension/app/UI/features/portfolio/images/down-arrow.inline.svg delete mode 100644 packages/yoroi-extension/app/UI/features/portfolio/images/table-sort.inline.svg delete mode 100644 packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/arrow-icon.inline.svg delete mode 100644 packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/error-icon.inline.svg delete mode 100644 packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/expand-arrow.inline.svg delete mode 100644 packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/withdraw-icon.inline.svg delete mode 100644 packages/yoroi-extension/app/UI/features/portfolio/images/up-arrow.inline.svg rename packages/yoroi-extension/app/UI/features/portfolio/{TokenDetailsPage.js => useCases/TokenDetails/TokenDetails.js} (67%) create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js create mode 100644 packages/yoroi-extension/app/UI/hooks/index.js create mode 100644 packages/yoroi-extension/app/UI/hooks/useNavigateTo.js create mode 100644 packages/yoroi-extension/app/UI/hooks/useStrings.js rename packages/yoroi-extension/app/UI/{features/portfolio/PortfolioWrapper.js => layout/PortfolioPageLayout.js} (71%) create mode 100644 packages/yoroi-extension/app/UI/pages/portfolio/mockData.js diff --git a/packages/yoroi-extension/app/Routes.js b/packages/yoroi-extension/app/Routes.js index 300cea1512..842f80a2f0 100644 --- a/packages/yoroi-extension/app/Routes.js +++ b/packages/yoroi-extension/app/Routes.js @@ -35,8 +35,10 @@ import FullscreenLayout from './components/layout/FullscreenLayout'; // New UI pages import GouvernancePage from './UI/pages/Gouvernance/GouvernancePage'; -import PortfolioWrapper from './UI/features/portfolio/PortfolioWrapper'; import GouvernanceDelegationFormPage from './UI/pages/Gouvernance/GouvernanceDelegationFormPage'; +import PortfolioPage from './UI/pages/portfolio/PortfolioPage'; +import PortfolioDappsPage from './UI/pages/portfolio/PortfolioDappsPage'; +import PortfolioDetailPage from './UI/pages/portfolio/PortfolioDetailPage'; // PAGES const LanguageSelectionPagePromise = () => import('./containers/profile/LanguageSelectionPage'); @@ -142,14 +144,6 @@ const SwapOrdersPage = React.lazy(SwapOrdersPagePromise); const ExchangeEndPagePromise = () => import('./containers/ExchangeEndPage'); const ExchangeEndPage = React.lazy(ExchangeEndPagePromise); -// PORTFOLIO -const PortfolioPagePromise = () => import('./UI/pages/portfolio/PortfolioPage'); -const PortfolioPage = React.lazy(PortfolioPagePromise); -const PortfolioDappsPagePromise = () => import('./UI/pages/portfolio/PortfolioDappsPage'); -const PortfolioDappsPage = React.lazy(PortfolioDappsPagePromise); -const PortfolioDetailPagePromise = () => import('./UI/pages/portfolio/PortfolioDetailPage'); -const PortfolioDetailPage = React.lazy(PortfolioDetailPagePromise); - export const LazyLoadPromises: Array<() => any> = [ AddAnotherWalletPromise, StakingPageContentPromise, @@ -466,16 +460,20 @@ const SettingsSubpages = (stores, actions) => ( const PortfolioSubpages = (stores, actions) => ( - } /> + } + /> } + component={props => } /> } + component={props => } /> ); @@ -540,14 +538,6 @@ export function wrapSettings(settingsProps: StoresAndActionsProps, children: Nod ); } -export function wrapPortfolio(portfolioProps: StoresAndActionsProps, children: Node): Node { - return ( - - {children} - - ); -} - export function wrapNFTs(assetsProps: StoresAndActionsProps, children: Node): Node { return ( @@ -572,3 +562,6 @@ export function wrapReceive(receiveProps: StoresAndActionsProps, children: Node) export function wrapGouvernance(gouvernanceProps: StoresAndActionsProps, children: Node): Node { return {children}; } +export function wrapPortfolio(portfolioProps: StoresAndActionsProps, children: Node): Node { + return {children}; +} diff --git a/packages/yoroi-extension/app/UI/components/card.js b/packages/yoroi-extension/app/UI/components/card.js index 935732e2f6..26a809e746 100644 --- a/packages/yoroi-extension/app/UI/components/card.js +++ b/packages/yoroi-extension/app/UI/components/card.js @@ -6,6 +6,6 @@ export const Card = styled(Box)(({ theme }) => ({ display: 'flex', flexDirection: 'column', border: '1px solid', - borderColor: theme.palette.grayscale['200'], + borderColor: theme.palette.ds.gray_c200, bgcolor: 'background.card', })); diff --git a/packages/yoroi-extension/app/UI/components/icons/portfolio/Arrow.js b/packages/yoroi-extension/app/UI/components/icons/portfolio/Arrow.js new file mode 100644 index 0000000000..2598524250 --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/icons/portfolio/Arrow.js @@ -0,0 +1,17 @@ +import React from 'react'; + +const Arrow = props => { + return ( + + + + ); +}; + +export default Arrow; diff --git a/packages/yoroi-extension/app/UI/components/icons/portfolio/Sort.js b/packages/yoroi-extension/app/UI/components/icons/portfolio/Sort.js new file mode 100644 index 0000000000..77a4e9c7f5 --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/icons/portfolio/Sort.js @@ -0,0 +1,25 @@ +import React from 'react'; + +const Sort = props => { + return ( + + + + + ); +}; + +export default Sort; diff --git a/packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Arrow.js b/packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Arrow.js new file mode 100644 index 0000000000..d002455690 --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Arrow.js @@ -0,0 +1,26 @@ +import React from 'react'; + +const Arrow = props => { + return ( + + + + + + ); +}; + +export default Arrow; diff --git a/packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Error.js b/packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Error.js new file mode 100644 index 0000000000..d9775e796b --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Error.js @@ -0,0 +1,20 @@ +import React from 'react'; + +const Error = props => { + return ( + + + + + ); +}; + +export default Error; diff --git a/packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Expand.js b/packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Expand.js new file mode 100644 index 0000000000..d02d82de75 --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Expand.js @@ -0,0 +1,22 @@ +import React from 'react'; + +const Expand = props => { + return ( + + + + ); +}; + +export default Expand; diff --git a/packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Withdraw.js b/packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Withdraw.js new file mode 100644 index 0000000000..aeaf772ae9 --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Withdraw.js @@ -0,0 +1,24 @@ +import React from 'react'; + +const Withdraw = (props) => { + return ( + + + + + + ); +}; + +export default Withdraw; diff --git a/packages/yoroi-extension/app/UI/components/search-input.js b/packages/yoroi-extension/app/UI/components/search-input.js index e516c2a313..50deb84a45 100644 --- a/packages/yoroi-extension/app/UI/components/search-input.js +++ b/packages/yoroi-extension/app/UI/components/search-input.js @@ -5,10 +5,10 @@ export const SearchInput = styled(Input)(({ theme }) => ({ width: '370px', height: '40px', padding: '10px 12px', - backgroundColor: theme.palette.grayscale['50'], + backgroundColor: theme.palette.ds.white_static, border: '1px solid', - borderColor: theme.palette.grayscale['400'], + borderColor: theme.palette.ds.gray_c300, 'input::placeholder': { - color: theme.palette.grayscale['600'], + color: theme.palette.ds.text_gray_medium, }, })); diff --git a/packages/yoroi-extension/app/UI/components/skeleton.js b/packages/yoroi-extension/app/UI/components/skeleton.js index 3ae2e68af0..8d3dd38883 100644 --- a/packages/yoroi-extension/app/UI/components/skeleton.js +++ b/packages/yoroi-extension/app/UI/components/skeleton.js @@ -1,12 +1,15 @@ import { Skeleton } from '@mui/material'; +import { useTheme } from '@mui/material/styles'; export const StyledSkeleton = props => { + const theme = useTheme(); + return ( ); }; diff --git a/packages/yoroi-extension/app/UI/components/tooltip.js b/packages/yoroi-extension/app/UI/components/tooltip.js index b2b9fe4f6a..41471ffb22 100644 --- a/packages/yoroi-extension/app/UI/components/tooltip.js +++ b/packages/yoroi-extension/app/UI/components/tooltip.js @@ -5,9 +5,9 @@ export const StyledTooltip = styled(({ className, ...props }: TooltipProps) => ( ))(({ theme }) => ({ [`& .${tooltipClasses.arrow}`]: { - color: theme.palette.common.black, + color: theme.palette.ds.black_static, }, [`& .${tooltipClasses.tooltip}`]: { - backgroundColor: theme.palette.common.black, + backgroundColor: theme.palette.ds.black_static, }, })); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/WalletPage.js b/packages/yoroi-extension/app/UI/features/portfolio/WalletPage.js deleted file mode 100644 index 187055bfa4..0000000000 --- a/packages/yoroi-extension/app/UI/features/portfolio/WalletPage.js +++ /dev/null @@ -1,288 +0,0 @@ -import { - Table, - TableBody, - TableCell, - TableHead, - TableRow, - TableSortLabel, - Typography, - Stack, - Chip, - Box, - Input, - InputAdornment, - styled, -} from '@mui/material'; -import { ReactComponent as Search } from '../../../assets/images/assets-page/search.inline.svg'; -import { ReactComponent as ArrowUp } from './images/up-arrow.inline.svg'; -import { ReactComponent as ArrowDown } from './images/down-arrow.inline.svg'; -import { ReactComponent as TableSortIcon } from './images/table-sort.inline.svg'; -import React, { useState } from 'react'; -import { useHistory } from 'react-router-dom'; -import { StyledTooltip, SearchInput } from '../../components'; - -const WalletPage = ({ headCells, mockData }) => { - const history = useHistory(); - const [keyword, setKeyword] = useState(''); - const [order, setOrder] = useState('asc'); - const [orderBy, setOrderBy] = useState(''); - - const handleRequestSort = property => { - const isAsc = orderBy === property && order === 'asc'; - setOrder(isAsc ? 'desc' : 'asc'); - setOrderBy(property); - }; - - return ( - - - - - - 200000,00 - - - ADA - - /USD - - - - - - 10000,00 USD - - % Balance performance - +/- Balance change - in 24 hours - - } - placement="right" - > - - - - 0,03% - - } - sx={{ backgroundColor: 'rgba(228, 247, 243, 1)', color: 'rgba(18, 112, 93, 1)' }} - > - +0,03 USD} - sx={{ backgroundColor: 'rgba(228, 247, 243, 1)', color: 'rgba(18, 112, 93, 1)' }} - > - - - - - - setKeyword(e.target.value)} - placeholder={'Search by asset name or ID'} - startAdornment={ - svg > use': { - fill: 'grayscale.600', - }, - }} - position="start" - > - - - } - /> - - - - - - {headCells.map(({ label, align, id }) => ( - handleRequestSort(id)}> - - {label} - - - - ))} - - - - {mockData.map(row => ( - history.push(`/portfolio/details/${row.id}`)} - sx={{ - cursor: 'pointer', - transition: 'all 0.3s ease-in-out', - '& td, & th': { border: 0 }, - '&:hover': { - backgroundColor: '#f8f8f8', - boxShadow: '0px 2px 10px rgba(0, 0, 0, 0.1)', - borderRadius: '8px', - }, - }} - > - - - - - {row.name} - {row.id} - - - - - - {row.price} - - - - - {row['24h'].active ? ( - - ) : ( - - )} - {row['24h'].percents} - - } - sx={{ - cursor: 'pointer', - backgroundColor: row['24h'].active - ? 'rgba(228, 247, 243, 1)' - : 'rgba(255, 241, 245, 1)', - color: row['24h'].active ? 'rgba(18, 112, 93, 1)' : 'rgba(207, 5, 58, 1)', - }} - > - - - - - {row['1W'].active ? ( - - ) : ( - - )} - {row['1W'].percents} - - } - sx={{ - cursor: 'pointer', - backgroundColor: row['1W'].active - ? 'rgba(228, 247, 243, 1)' - : 'rgba(255, 241, 245, 1)', - color: row['1W'].active ? 'rgba(18, 112, 93, 1)' : 'rgba(207, 5, 58, 1)', - }} - > - - - - - {row['1M'].active ? ( - - ) : ( - - )} - {row['1M'].percents} - - } - sx={{ - cursor: 'pointer', - backgroundColor: row['1M'].active - ? 'rgba(228, 247, 243, 1)' - : 'rgba(255, 241, 245, 1)', - color: row['1M'].active ? 'rgba(18, 112, 93, 1)' : 'rgba(207, 5, 58, 1)', - }} - > - - - - {row.portfolioPercents} % - - - - - - - {row.totalAmount.amount} - - {row.totalAmount.usd} - - - - - ))} - -
- - ); -}; - -export default WalletPage; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/PortfolioMenu.js b/packages/yoroi-extension/app/UI/features/portfolio/common/PortfolioMenu.js similarity index 82% rename from packages/yoroi-extension/app/UI/features/portfolio/PortfolioMenu.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/PortfolioMenu.js index 982dcc0433..1836498898 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/PortfolioMenu.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/PortfolioMenu.js @@ -3,14 +3,14 @@ import { Component } from 'react'; import type { Node, ComponentType } from 'react'; import { observer } from 'mobx-react'; import { defineMessages, intlShape } from 'react-intl'; -import environmnent from '../../../environment'; -import { ROUTES } from '../../../routes-config'; -import globalMessages from '../../../i18n/global-messages'; +import environmnent from '../../../../environment'; +import { ROUTES } from '../../../../routes-config'; +import globalMessages from '../../../../i18n/global-messages'; import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; -import { withLayout } from '../../../styles/context/layout'; +import { withLayout } from '../../../../styles/context/layout'; import type { InjectedLayoutProps } from '../../styles/context/layout'; import type { SubMenuOption } from '../topbar/SubMenu'; -import SubMenu from '../../../components/topbar/SubMenu'; +import SubMenu from '../../../../components/topbar/SubMenu'; export const portfolioMenuMessages: Object = defineMessages({ wallet: { diff --git a/packages/yoroi-extension/app/UI/features/portfolio/TokenDetailChart.js b/packages/yoroi-extension/app/UI/features/portfolio/common/TokenDetailChart.js similarity index 57% rename from packages/yoroi-extension/app/UI/features/portfolio/TokenDetailChart.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/TokenDetailChart.js index 345ae6fb1a..1769531f1b 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/TokenDetailChart.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/TokenDetailChart.js @@ -10,32 +10,42 @@ import { ResponsiveContainer, Label, } from 'recharts'; +import { useTheme } from '@mui/material/styles'; +import mockData from '../../../pages/portfolio/mockData'; -// Sample data -const sampleData = [ - { name: 'Page A', value: 0.1 }, - { name: 'Page B', value: 0.15 }, - { name: 'Page C', value: 0.05 }, - { name: 'Page D', value: 0.35 }, - { name: 'Page E', value: 0.6 }, - { name: 'Page F', value: 0.45 }, - { name: 'Page G', value: 0.3 }, - { name: 'Page H', value: 0.2 }, - { name: 'Page I', value: 0.35 }, - { name: 'Page J', value: 0.55 }, -]; - -const timePeriods = [ - { label: '24H', active: true }, - { label: '1W', active: false }, - { label: '1M', active: false }, - { label: '6M', active: false }, - { label: '1Y', active: false }, - { label: 'ALL', active: false }, -]; +const StyledButton = styled(Button)(({ theme }) => ({ + fontWeight: 500, + fontSize: '0.75rem', + lineHeight: '1.125rem', + width: '36px', + height: '30px', +})); const TokenDetailChart = ({ isLoading }) => { - const [data, setData] = useState(sampleData); + const timePeriods = [ + { label: '24H', active: true }, + { label: '1W', active: false }, + { label: '1M', active: false }, + { label: '6M', active: false }, + { label: '1Y', active: false }, + { label: 'ALL', active: false }, + ]; + const theme = useTheme(); + const [data, setData] = useState(mockData.Chart.data); + + const SkeletonLabel = ({ x, y, width = 19, height = 13, borderRadius = 8, marginRight = 10 }) => { + return ( + + ); + }; const CustomYAxisTick = props => { const { x, y, payload } = props; @@ -43,7 +53,7 @@ const TokenDetailChart = ({ isLoading }) => { return isLoading ? ( ) : ( - + {payload.value} ); @@ -67,7 +77,7 @@ const TokenDetailChart = ({ isLoading }) => { type="monotone" dataKey="value" strokeWidth={2} - stroke="primary_c500" + stroke={isLoading ? theme.palette.ds.gray_c50 : theme.palette.ds.primary_c500} dot={false} /> @@ -89,26 +99,4 @@ const TokenDetailChart = ({ isLoading }) => { ); }; -const SkeletonLabel = ({ x, y, width = 19, height = 13, borderRadius = 8, marginRight = 10 }) => { - return ( - - ); -}; - -const StyledButton = styled(Button)({ - fontWeight: 500, - fontSize: '0.75rem', - lineHeight: '1.125rem', - width: '36px', - height: '30px', -}); - export default TokenDetailChart; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/TransactionHistory.js b/packages/yoroi-extension/app/UI/features/portfolio/common/TransactionHistory.js similarity index 60% rename from packages/yoroi-extension/app/UI/features/portfolio/TransactionHistory.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/TransactionHistory.js index 1b8110d6e3..e584e83ef7 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/TransactionHistory.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/TransactionHistory.js @@ -11,11 +11,11 @@ import { TableRow, styled, } from '@mui/material'; -import { Card } from '../../components'; -import { ReactComponent as ArrowIcon } from './images/transaction-history/arrow-icon.inline.svg'; -import { ReactComponent as ExpandArrow } from './images/transaction-history/expand-arrow.inline.svg'; -import { ReactComponent as ErrorIcon } from './images/transaction-history/error-icon.inline.svg'; -import { ReactComponent as WithdrawIcon } from './images/transaction-history/withdraw-icon.inline.svg'; +import { useTheme } from '@mui/material/styles'; +import { Card } from '../../../components'; +import { default as ArrowIcon } from '../../../components/icons/portfolio/transaction-history/Arrow'; +import { default as ExpandIcon } from '../../../components/icons/portfolio/transaction-history/Expand'; +import { default as ErrorIcon } from '../../../components/icons/portfolio/transaction-history/Error'; const timestamps = ['Today', 'Yesterday', 'In the past']; const categorizeByDate = data => { @@ -43,13 +43,15 @@ const categorizeByDate = data => { ); }; -const TransactionHistory = ({ mockHistory }) => { - const categorizedData = useMemo(() => categorizeByDate(mockHistory), [mockHistory]); +const TransactionHistory = ({ history }) => { + const theme = useTheme(); + + const categorizedData = useMemo(() => categorizeByDate(history), [history]); return ( - + Transaction history { - Transaction type + + Transaction type + - Status + + Status + - Fee + + Fee + - Amount + + Amount + {timestamps.map((timestamp, index) => ( <> - {timestamp} + + {timestamp} + {categorizedData[timestamp].map((row, index) => ( - + - + {row.type === 'Sent' && ( )} {row.type === 'Received' && ( )} {row.type === 'Transaction error' && ( - + )} + {row.type} - {row.type} - - {row.time} @@ -138,10 +148,12 @@ const TransactionHistory = ({ mockHistory }) => { {row.status} @@ -149,19 +161,17 @@ const TransactionHistory = ({ mockHistory }) => { - + {row.fee ? row.fee.amount : '-'} - - {row.fee ? row.fee.usd : '-'} - + {row.fee ? row.fee.usd : '-'} - + {row.type === 'Received' && '+'} @@ -173,23 +183,19 @@ const TransactionHistory = ({ mockHistory }) => { {row.type === 'Received' && ( + {row.amount.asset} assets )} {row.type === 'Sent' && ( - + {row.amount.asset} )} - + diff --git a/packages/yoroi-extension/app/UI/features/portfolio/images/down-arrow.inline.svg b/packages/yoroi-extension/app/UI/features/portfolio/images/down-arrow.inline.svg deleted file mode 100644 index 951c295e25..0000000000 --- a/packages/yoroi-extension/app/UI/features/portfolio/images/down-arrow.inline.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/packages/yoroi-extension/app/UI/features/portfolio/images/table-sort.inline.svg b/packages/yoroi-extension/app/UI/features/portfolio/images/table-sort.inline.svg deleted file mode 100644 index 863482d2c8..0000000000 --- a/packages/yoroi-extension/app/UI/features/portfolio/images/table-sort.inline.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/arrow-icon.inline.svg b/packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/arrow-icon.inline.svg deleted file mode 100644 index 1f8f79e660..0000000000 --- a/packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/arrow-icon.inline.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/error-icon.inline.svg b/packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/error-icon.inline.svg deleted file mode 100644 index c39eef4539..0000000000 --- a/packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/error-icon.inline.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/expand-arrow.inline.svg b/packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/expand-arrow.inline.svg deleted file mode 100644 index 5710e4fcdb..0000000000 --- a/packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/expand-arrow.inline.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/withdraw-icon.inline.svg b/packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/withdraw-icon.inline.svg deleted file mode 100644 index 1e2872e96d..0000000000 --- a/packages/yoroi-extension/app/UI/features/portfolio/images/transaction-history/withdraw-icon.inline.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/packages/yoroi-extension/app/UI/features/portfolio/images/up-arrow.inline.svg b/packages/yoroi-extension/app/UI/features/portfolio/images/up-arrow.inline.svg deleted file mode 100644 index 5b7f365760..0000000000 --- a/packages/yoroi-extension/app/UI/features/portfolio/images/up-arrow.inline.svg +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/packages/yoroi-extension/app/UI/features/portfolio/TokenDetailsPage.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js similarity index 67% rename from packages/yoroi-extension/app/UI/features/portfolio/TokenDetailsPage.js rename to packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js index c09253cb9a..5b4dd0d0ec 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/TokenDetailsPage.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js @@ -11,32 +11,38 @@ import { Stack, Typography, } from '@mui/material'; -import { ReactComponent as ArrowLeft } from '../../../assets/images/assets-page/back-arrow.inline.svg'; -import { ReactComponent as ArrowDown } from './images/down-arrow.inline.svg'; -import { ReactComponent as ArrowUp } from './images/up-arrow.inline.svg'; +import { ReactComponent as BackIcon } from '../../../../../assets/images/assets-page/back-arrow.inline.svg'; import { styled } from '@mui/material/styles'; -import { StyledTooltip, StyledSkeleton, CopyButton, Card } from '../../components'; -import { TxInputsBuilder } from '@emurgo/cardano-serialization-lib-browser'; +import { StyledTooltip, StyledSkeleton, CopyButton, Card } from '../../../../components'; import { tableCellClasses } from '@mui/material/TableCell'; import { useHistory } from 'react-router-dom'; -import TransactionHistory from './TransactionHistory'; -import TokenDetailChart from './TokenDetailChart'; -import SubMenu from '../../../components/topbar/SubMenu'; +import TransactionHistory from '../../common/TransactionHistory'; +import TokenDetailChart from '../../common/TokenDetailChart'; +import SubMenu from '../../../../../components/topbar/SubMenu'; +import Arrow from '../../../../components/icons/portfolio/Arrow'; +import { useTheme } from '@mui/material/styles'; +import mockData from '../../../../pages/portfolio/mockData'; -const performanceItemList = [ - { id: 'tokenPriceChange', label: 'Token price change' }, - { id: 'tokenPrice', label: 'Token price' }, - { id: 'marketCap', label: 'Market cap' }, - { id: 'volumn', label: '24h volumn' }, - { id: 'rank', label: 'Rank' }, - { id: 'circulating', label: 'Circulating' }, - { id: 'totalSupply', label: 'Total supply' }, - { id: 'maxSupply', label: 'Max supply' }, - { id: 'allTimeHigh', label: 'All time high' }, - { id: 'allTimeLow', label: 'All time low' }, -]; +const Header = styled(Box)({ + display: 'flex', + justifyContent: 'space-between', +}); -const TokenDetailsPage = ({ tokenInfo, subMenuOptions, mockHistory }) => { +const TokenInfo = styled(Stack)({ + width: '100%', + marginTop: '25px', +}); + +const StyledButton = styled(Button)({ + maxHeight: '40px', +}); + +const TabContent = styled(Box)({ + flex: 1, +}); + +const TokenDetails = ({ tokenInfo, subMenuOptions, mockHistory }) => { + const theme = useTheme(); const history = useHistory(); const [selectedTab, setSelectedTab] = useState(subMenuOptions[0].route); const [isLoading, setIsLoading] = useState(false); @@ -50,6 +56,7 @@ const TokenDetailsPage = ({ tokenInfo, subMenuOptions, mockHistory }) => { }; useEffect(() => { + // FAKE FETCHING DATA TO SEE SKELETON setIsLoading(true); const timer = setTimeout(() => { @@ -64,28 +71,24 @@ const TokenDetailsPage = ({ tokenInfo, subMenuOptions, mockHistory }) => {
- + SWAP - - SEND - - - RECEIVE - + SEND + RECEIVE
- + - + {isLoading ? ( ) : ( @@ -96,15 +99,14 @@ const TokenDetailsPage = ({ tokenInfo, subMenuOptions, mockHistory }) => { {isLoading ? ( ) : ( - - + + 200000,00 @@ -116,7 +118,9 @@ const TokenDetailsPage = ({ tokenInfo, subMenuOptions, mockHistory }) => { {isLoading ? ( ) : ( - 680,00 USD + + 680,00 USD + )} @@ -127,7 +131,7 @@ const TokenDetailsPage = ({ tokenInfo, subMenuOptions, mockHistory }) => { {isLoading ? ( ) : ( - + Market price )} @@ -136,7 +140,7 @@ const TokenDetailsPage = ({ tokenInfo, subMenuOptions, mockHistory }) => { ) : ( - + 0,48  USD @@ -151,25 +155,23 @@ const TokenDetailsPage = ({ tokenInfo, subMenuOptions, mockHistory }) => { } placement="top" > - + {isLoading ? ( ) : ( - 0,03% } sx={{ - backgroundColor: 'rgba(228, 247, 243, 1)', - color: 'rgba(18, 112, 93, 1)', + backgroundColor: theme.palette.ds.secondary_c100, + color: theme.palette.ds.secondary_c800, }} > )} @@ -180,8 +182,8 @@ const TokenDetailsPage = ({ tokenInfo, subMenuOptions, mockHistory }) => { +0,03 USD} sx={{ - backgroundColor: 'rgba(228, 247, 243, 1)', - color: 'rgba(18, 112, 93, 1)', + backgroundColor: theme.palette.ds.secondary_c100, + color: theme.palette.ds.secondary_c800, }} > )} @@ -206,34 +208,39 @@ const TokenDetailsPage = ({ tokenInfo, subMenuOptions, mockHistory }) => { {selectedTab === subMenuOptions[0].route ? ( - - + + {isLoading ? ( ) : ( )} {isLoading ? ( ) : ( - + {tokenInfo.overview.tokenName} )} - + {isLoading ? ( ) : ( - + Description )} @@ -244,17 +251,17 @@ const TokenDetailsPage = ({ tokenInfo, subMenuOptions, mockHistory }) => { ) : ( - + {tokenInfo.overview.description} )} - + {isLoading ? ( ) : ( - + Website )} @@ -267,23 +274,26 @@ const TokenDetailsPage = ({ tokenInfo, subMenuOptions, mockHistory }) => { )} - + {isLoading ? ( ) : ( - + Policy ID )} - + {isLoading ? ( ) : ( - + {tokenInfo.overview.policyId} )} @@ -294,11 +304,11 @@ const TokenDetailsPage = ({ tokenInfo, subMenuOptions, mockHistory }) => { - + {isLoading ? ( ) : ( - + Fingerprint )} @@ -310,7 +320,10 @@ const TokenDetailsPage = ({ tokenInfo, subMenuOptions, mockHistory }) => { ) : ( - + {tokenInfo.overview.fingerprint} )} @@ -321,15 +334,15 @@ const TokenDetailsPage = ({ tokenInfo, subMenuOptions, mockHistory }) => { - + {isLoading ? ( ) : ( - + Details on )} - + {isLoading ? ( ) : ( @@ -352,19 +365,21 @@ const TokenDetailsPage = ({ tokenInfo, subMenuOptions, mockHistory }) => { {selectedTab === subMenuOptions[1].route ? ( - + Market data - {performanceItemList.map((item, index) => ( + {mockData.TokenDetails.performanceItemList.map((item, index) => ( - {item.label} - {tokenInfo.performance[index].value} + + {item.label} + + {tokenInfo.performance[index].value} ))} @@ -374,33 +389,9 @@ const TokenDetailsPage = ({ tokenInfo, subMenuOptions, mockHistory }) => { - + ); }; -const Header = styled(Box)({ - display: 'flex', - justifyContent: 'space-between', -}); - -const TokenInfo = styled(Stack)({ - width: '100%', - marginTop: '25px', -}); - -const StyledButton = styled(Button)({ - maxHeight: '40px', -}); - -const TabContent = styled(Box)({ - flex: 1, -}); - -const InfoText = styled(Typography)({ - fontWeight: 400, - fontSize: '1rem', - color: 'rgba(0, 0, 0, 1)', -}); - -export default TokenDetailsPage; +export default TokenDetails; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js new file mode 100644 index 0000000000..1897916047 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js @@ -0,0 +1,322 @@ +import { + Table, + TableBody, + TableCell, + TableHead, + TableRow, + TableSortLabel, + Typography, + Stack, + Chip, + Box, + Input, + InputAdornment, + styled, +} from '@mui/material'; +import { ReactComponent as Search } from '../../../../../assets/images/assets-page/search.inline.svg'; +import React, { useState } from 'react'; +import { useHistory } from 'react-router-dom'; +import { StyledTooltip, SearchInput } from '../../../../components'; +import Arrow from '../../../../components/icons/portfolio/Arrow'; +import { default as SortIcon } from '../../../../components/icons/portfolio/Sort'; +import { useTheme } from '@mui/material/styles'; +import { defineMessages } from 'react-intl'; + +// const messages = defineMessages({ +// search: { +// id: 'wallet.revamp.assets.search', +// defaultMessage: '!!!Search by asset name or ID', +// }, +// }); + +const PortfolioWallet = ({ headCells, data }) => { + const theme = useTheme(); + const history = useHistory(); + const [keyword, setKeyword] = useState(''); + const [order, setOrder] = useState('asc'); + const [orderBy, setOrderBy] = useState(''); + + const handleRequestSort = property => { + const isAsc = orderBy === property && order === 'asc'; + setOrder(isAsc ? 'desc' : 'asc'); + setOrderBy(property); + }; + + return ( + + + + + + 200000,00 + + + ADA + + /USD + + + + + + + 10000,00 USD + + + % Balance performance + +/- Balance change + in 24 hours + + } + placement="right" + > + + + + 0,03% + + } + sx={{ + backgroundColor: theme.palette.ds.secondary_c100, + color: theme.palette.ds.secondary_c800, + }} + > + +0,03 USD} + sx={{ + backgroundColor: theme.palette.ds.secondary_c100, + color: theme.palette.ds.secondary_c800, + }} + > + + + + + + setKeyword(e.target.value)} + placeholder={'111'} + startAdornment={ + svg > use': { + fill: 'ds.text_gray_medium', + }, + }} + position="start" + > + + + } + /> + + +
+ + + {headCells.map(({ label, align, id }) => ( + handleRequestSort(id)}> + + + {label} + + + + + ))} + + + + {data.map(row => ( + history.push(`/portfolio/details/${row.id}`)} + sx={{ + cursor: 'pointer', + transition: 'all 0.3s ease-in-out', + '& td, & th': { border: 0 }, + '&:hover': { + backgroundColor: theme.palette.ds.gray_c50, + boxShadow: `0px 2px 10px ${theme.palette.ds.gray_c200}`, + borderRadius: `${theme.shape.borderRadius}px`, + }, + }} + > + + + + + + {row.name} + + + {row.id} + + + + + + + + {row.price} + + + + + + + {row['24h'].percents} + + } + sx={{ + cursor: 'pointer', + backgroundColor: row['24h'].active + ? theme.palette.ds.secondary_c100 + : theme.palette.ds.sys_magenta_c100, + color: row['24h'].active + ? theme.palette.ds.secondary_c800 + : theme.palette.ds.sys_magenta_c700, + }} + > + + + + + + {row['1W'].percents} + + } + sx={{ + cursor: 'pointer', + backgroundColor: row['1W'].active + ? theme.palette.ds.secondary_c100 + : theme.palette.ds.sys_magenta_c100, + color: row['1W'].active + ? theme.palette.ds.secondary_c800 + : theme.palette.ds.sys_magenta_c700, + }} + > + + + + + + {row['1M'].percents} + + } + sx={{ + cursor: 'pointer', + backgroundColor: row['1M'].active + ? theme.palette.ds.secondary_c100 + : theme.palette.ds.sys_magenta_c100, + color: row['1M'].active + ? theme.palette.ds.secondary_c800 + : theme.palette.ds.sys_magenta_c700, + }} + > + + + + + {row.portfolioPercents} % + + + + + + + + {row.totalAmount.amount} + + + {row.totalAmount.usd} + + + + + + ))} + +
+
+ ); +}; + +export default PortfolioWallet; diff --git a/packages/yoroi-extension/app/UI/hooks/index.js b/packages/yoroi-extension/app/UI/hooks/index.js new file mode 100644 index 0000000000..f0e088f52a --- /dev/null +++ b/packages/yoroi-extension/app/UI/hooks/index.js @@ -0,0 +1 @@ +export * from './useStrings'; diff --git a/packages/yoroi-extension/app/UI/hooks/useNavigateTo.js b/packages/yoroi-extension/app/UI/hooks/useNavigateTo.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/yoroi-extension/app/UI/hooks/useStrings.js b/packages/yoroi-extension/app/UI/hooks/useStrings.js new file mode 100644 index 0000000000..69b592bbca --- /dev/null +++ b/packages/yoroi-extension/app/UI/hooks/useStrings.js @@ -0,0 +1,20 @@ +// import { useContext } from 'react'; +// import { defineMessages, IntlShape, useIntl } from 'react-intl'; + +// const messages = defineMessages({ +// search: { +// id: 'wallet.revamp.assets.search', +// defaultMessage: '!!!Search by asset name or ID', +// }, +// }); +// const useStrings = () => { +// const intl = useIntl(); + +// const getString = id => { +// return intl.formatMessage(messages[id]); +// }; + +// return { getString }; +// }; + +// export default useStrings; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/PortfolioWrapper.js b/packages/yoroi-extension/app/UI/layout/PortfolioPageLayout.js similarity index 71% rename from packages/yoroi-extension/app/UI/features/portfolio/PortfolioWrapper.js rename to packages/yoroi-extension/app/UI/layout/PortfolioPageLayout.js index 9f72fd8265..c5ef0937b4 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/PortfolioWrapper.js +++ b/packages/yoroi-extension/app/UI/layout/PortfolioPageLayout.js @@ -1,23 +1,23 @@ // @flow -import { Component } from 'react'; +import { Component, cloneElement } from 'react'; import type { Node, ComponentType } from 'react'; import { observer } from 'mobx-react'; import { intlShape } from 'react-intl'; -import globalMessages from '../../../i18n/global-messages'; -import SettingsLayout from '../../../components/settings/SettingsLayout'; -import { buildRoute } from '../../../utils/routing'; -import type { StoresAndActionsProps } from '../../../types/injectedProps.types'; +import globalMessages from '../../i18n/global-messages'; +import SettingsLayout from '../../components/settings/SettingsLayout'; +import { buildRoute } from '../../utils/routing'; +import type { StoresAndActionsProps } from '../../types/injectedProps.types'; -import TopBarLayout from '../../../components/layout/TopBarLayout'; -import NavBarTitle from '../../../components/topbar/NavBarTitle'; +import TopBarLayout from '../../components/layout/TopBarLayout'; +import NavBarTitle from '../../components/topbar/NavBarTitle'; import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; -import { withLayout, type LayoutComponentMap } from '../../../styles/context/layout'; -import PortfolioMenu from './PortfolioMenu'; -import NavBarContainer from '../../../containers/NavBarContainer'; -import BannerContainer from '../../../containers/banners/BannerContainer'; -import SidebarContainer from '../../../containers/SidebarContainer'; -import NavBarContainerRevamp from '../../../containers/NavBarContainerRevamp'; -import { ROUTES } from '../../../routes-config'; +import { withLayout, type LayoutComponentMap } from '../../styles/context/layout'; +import PortfolioMenu from '../features/portfolio/common/PortfolioMenu'; +import NavBarContainer from '../../containers/NavBarContainer'; +import BannerContainer from '../../containers/banners/BannerContainer'; +import SidebarContainer from '../../containers/SidebarContainer'; +import NavBarContainerRevamp from '../../containers/NavBarContainerRevamp'; +import { ROUTES } from '../../routes-config'; type Props = {| ...StoresAndActionsProps, @@ -29,7 +29,7 @@ type InjectedLayoutProps = {| type AllProps = {| ...Props, ...InjectedLayoutProps |}; @observer -class PortfolioWrapper extends Component { +class PortfolioPageLayout extends Component { static defaultProps: {| children: void |} = { children: undefined, }; @@ -82,7 +82,7 @@ class PortfolioWrapper extends Component { showInContainer showAsCard > - {children != null ? children : null} + {children}
); const PortfolioLayoutRevamp = ( @@ -117,4 +117,4 @@ class PortfolioWrapper extends Component { }); } } -export default (withLayout(PortfolioWrapper): ComponentType); +export default (withLayout(PortfolioPageLayout): ComponentType); diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDappsPage.js b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDappsPage.js index 2d952d3131..786b85f033 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDappsPage.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDappsPage.js @@ -1,7 +1,18 @@ +// @flow import React from 'react'; +import PortfolioPageLayout from '../../layout/PortfolioPageLayout'; -const PortfolioDappsPage = () => { - return
PortfolioDappsPage
; +type Props = {| + stores: any, + actions: any, +|}; + +const PortfolioDappsPage = ({ stores, actions }: Props) => { + return ( + +
PortfolioDappsPage
+
+ ); }; export default PortfolioDappsPage; diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js index 691769aafc..6d86411299 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js @@ -1,75 +1,16 @@ +// @flow import React from 'react'; -import TokenDetailsPage from '../../features/portfolio/TokenDetailsPage'; +import TokenDetails from '../../features/portfolio/useCases/TokenDetails/TokenDetails'; +import PortfolioPageLayout from '../../layout/PortfolioPageLayout'; +import mockData from './mockData'; -const subMenuOptions = [ - { - label: 'Overview', - className: 'overview', - route: 'overview', - }, - { - label: 'Performance', - className: 'performance', - route: 'performance', - }, -]; +type Props = {| + stores: any, + actions: any, + match: any, +|}; -const mockHistory = [ - { - type: 'Sent', - time: '11:30 PM', - date: '05/22/2024', - status: 'Low', - fee: { - amount: '0.17 ADA', - usd: '0.03 USD', - }, - amount: { - total: '1,169,789.34432 ADA', - usd: '0.03 USD', - asset: '200 MILK', - }, - }, - { - type: 'Received', - time: '9:12 PM', - date: '05/22/2024', - status: 'Low', - amount: { - total: '1,169,789.34432 ADA', - usd: '312,323.33 USD', - asset: 2, - }, - }, - { - type: 'Transaction error', - time: '9:12 PM', - date: '05/21/2024', - status: 'Failed', - amount: { - total: '1,169,789.34432 ADA', - usd: '312,323.33 USD', - asset: 2, - }, - }, - { - type: 'Sent', - time: '4:20 PM', - date: '05/20/2024', - status: 'Low', - fee: { - amount: '0.17 ADA', - usd: '0.03 USD', - }, - amount: { - total: '1,169,789.34432 ADA', - usd: '0.03 USD', - asset: '200 MILK', - }, - }, -]; - -const PortfolioDetailPage = ({ match }) => { +const PortfolioDetailPage = ({ stores, actions, match }: Props) => { const tokenId = match.params.tokenId; const tokenInfo = { @@ -99,11 +40,13 @@ const PortfolioDetailPage = ({ match }) => { }; return ( - + + + ); }; diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js index a398a2eae2..5d5bd37e58 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js @@ -1,153 +1,24 @@ +// @flow import React from 'react'; -import WalletPage from '../../features/portfolio/WalletPage'; +import PortfolioWallet from '../../features/portfolio/useCases/Wallet/PortfolioWallet'; +import PortfolioPageLayout from '../../layout/PortfolioPageLayout'; +import mockData from './mockData'; -const headCells = [ - { id: 'name', label: 'Name', align: 'left' }, - { id: 'price', label: 'Price', align: 'left' }, - { id: '24h', label: '24H', align: 'left' }, - { id: '1w', label: '1W', align: 'left' }, - { id: '1m', label: '1M', align: 'left' }, - { id: 'portfolioPercents', label: 'Portfolio %', align: 'left' }, - { id: 'totalAmount', label: 'Total amount', align: 'right' }, -]; +type Props = {| + stores: any, + actions: any, +|}; -const mockData = [ - { - name: 'Token name', - id: 'Policy ID', - price: '0,48 USD', - portfolioPercents: '75,00', - '24h': { - active: true, - percents: '0,03%', - }, - '1W': { - active: false, - percents: '0,07%', - }, - '1M': { - active: true, - percents: '0,07%', - }, - totalAmount: { - amount: '1,019,243 ADA', - usd: '372,561 USD', - }, - }, - { - name: 'AGIX', - id: 'Agix', - price: '0,08 USD', - portfolioPercents: '5,00', - '24h': { - active: false, - percents: '0,03%', - }, - '1W': { - active: false, - percents: '0,07%', - }, - '1M': { - active: false, - percents: '0,07%', - }, - totalAmount: { - amount: '4990,00 AGIX', - usd: '400,00 USD', - }, - }, - { - name: 'MILK', - id: 'Milk', - price: '0,05 USD', - portfolioPercents: '5,00', - '24h': { - active: true, - percents: '0,03%', - }, - '1W': { - active: false, - percents: '0,07%', - }, - '1M': { - active: true, - percents: '0,03%', - }, - totalAmount: { - amount: '1000,00 MILK', - usd: '372,561 USD', - }, - }, - { - name: 'TKN', - id: 'Tkn', - price: '0,08 USD', - portfolioPercents: '5,00', - '24h': { - active: true, - percents: '0,03%', - }, - '1W': { - active: true, - percents: '0,07%', - }, - '1M': { - active: false, - percents: '0,07%', - }, - totalAmount: { - amount: '4990,00 AGIX', - usd: '400,00 USD', - }, - }, - { - name: 'TKN', - id: 'Tkn', - price: '0,08 USD', - portfolioPercents: '5,00', - '24h': { - active: false, - percents: '0,03%', - }, - '1W': { - active: true, - percents: '0,07%', - }, - '1M': { - active: true, - percents: '0,07%', - }, - totalAmount: { - amount: '4990,00 AGIX', - usd: '400,00 USD', - }, - }, - { - name: 'TKN', - id: 'Tkn', - price: '0,08 USD', - portfolioPercents: '5,00', - '24h': { - active: false, - percents: '0,03%', - }, - '1W': { - active: false, - percents: '0,07%', - }, - '1M': { - active: false, - percents: '0,07%', - }, - totalAmount: { - amount: '4990,00 AGIX', - usd: '400,00 USD', - }, - }, -]; +const PortfolioPage = ({ stores, actions }: Props) => { -const PortfolioPage = () => { - return ; + return ( + + + + ); }; export default PortfolioPage; diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js b/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js new file mode 100644 index 0000000000..c16fe5a756 --- /dev/null +++ b/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js @@ -0,0 +1,247 @@ +// ALL THE MOCK DATA FOR RENDERING UI + +const mockData = { + PortfolioPage: { + headCells: [ + { id: 'name', label: 'Name', align: 'left' }, + { id: 'price', label: 'Price', align: 'left' }, + { id: '24h', label: '24H', align: 'left' }, + { id: '1w', label: '1W', align: 'left' }, + { id: '1m', label: '1M', align: 'left' }, + { id: 'portfolioPercents', label: 'Portfolio %', align: 'left' }, + { id: 'totalAmount', label: 'Total amount', align: 'right' }, + ], + data: [ + { + name: 'Token name', + id: 'Policy ID', + price: '0,48 USD', + portfolioPercents: '75,00', + '24h': { + active: true, + percents: '0,03%', + }, + '1W': { + active: false, + percents: '0,07%', + }, + '1M': { + active: true, + percents: '0,07%', + }, + totalAmount: { + amount: '1,019,243 ADA', + usd: '372,561 USD', + }, + }, + { + name: 'AGIX', + id: 'Agix', + price: '0,08 USD', + portfolioPercents: '5,00', + '24h': { + active: false, + percents: '0,03%', + }, + '1W': { + active: false, + percents: '0,07%', + }, + '1M': { + active: false, + percents: '0,07%', + }, + totalAmount: { + amount: '4990,00 AGIX', + usd: '400,00 USD', + }, + }, + { + name: 'MILK', + id: 'Milk', + price: '0,05 USD', + portfolioPercents: '5,00', + '24h': { + active: true, + percents: '0,03%', + }, + '1W': { + active: false, + percents: '0,07%', + }, + '1M': { + active: true, + percents: '0,03%', + }, + totalAmount: { + amount: '1000,00 MILK', + usd: '372,561 USD', + }, + }, + { + name: 'TKN', + id: 'Tkn', + price: '0,08 USD', + portfolioPercents: '5,00', + '24h': { + active: true, + percents: '0,03%', + }, + '1W': { + active: true, + percents: '0,07%', + }, + '1M': { + active: false, + percents: '0,07%', + }, + totalAmount: { + amount: '4990,00 AGIX', + usd: '400,00 USD', + }, + }, + { + name: 'TKN', + id: 'Tkn', + price: '0,08 USD', + portfolioPercents: '5,00', + '24h': { + active: false, + percents: '0,03%', + }, + '1W': { + active: true, + percents: '0,07%', + }, + '1M': { + active: true, + percents: '0,07%', + }, + totalAmount: { + amount: '4990,00 AGIX', + usd: '400,00 USD', + }, + }, + { + name: 'TKN', + id: 'Tkn', + price: '0,08 USD', + portfolioPercents: '5,00', + '24h': { + active: false, + percents: '0,03%', + }, + '1W': { + active: false, + percents: '0,07%', + }, + '1M': { + active: false, + percents: '0,07%', + }, + totalAmount: { + amount: '4990,00 AGIX', + usd: '400,00 USD', + }, + }, + ], + }, + PortfolioDetailPage: { + subMenuOptions: [ + { + label: 'Overview', + className: 'overview', + route: 'overview', + }, + { + label: 'Performance', + className: 'performance', + route: 'performance', + }, + ], + history: [ + { + type: 'Sent', + time: '11:30 PM', + date: '05/23/2024', + status: 'Low', + fee: { + amount: '0.17 ADA', + usd: '0.03 USD', + }, + amount: { + total: '1,169,789.34432 ADA', + usd: '0.03 USD', + asset: '200 MILK', + }, + }, + { + type: 'Received', + time: '9:12 PM', + date: '05/23/2024', + status: 'Low', + amount: { + total: '1,169,789.34432 ADA', + usd: '312,323.33 USD', + asset: 2, + }, + }, + { + type: 'Transaction error', + time: '9:12 PM', + date: '05/22/2024', + status: 'Failed', + amount: { + total: '1,169,789.34432 ADA', + usd: '312,323.33 USD', + asset: 2, + }, + }, + { + type: 'Sent', + time: '4:20 PM', + date: '05/20/2024', + status: 'Low', + fee: { + amount: '0.17 ADA', + usd: '0.03 USD', + }, + amount: { + total: '1,169,789.34432 ADA', + usd: '0.03 USD', + asset: '200 MILK', + }, + }, + ], + }, + TokenDetails: { + performanceItemList: [ + { id: 'tokenPriceChange', label: 'Token price change' }, + { id: 'tokenPrice', label: 'Token price' }, + { id: 'marketCap', label: 'Market cap' }, + { id: 'volumn', label: '24h volumn' }, + { id: 'rank', label: 'Rank' }, + { id: 'circulating', label: 'Circulating' }, + { id: 'totalSupply', label: 'Total supply' }, + { id: 'maxSupply', label: 'Max supply' }, + { id: 'allTimeHigh', label: 'All time high' }, + { id: 'allTimeLow', label: 'All time low' }, + ], + }, + Chart: { + data: [ + { name: 'Page A', value: 0.1 }, + { name: 'Page B', value: 0.15 }, + { name: 'Page C', value: 0.05 }, + { name: 'Page D', value: 0.35 }, + { name: 'Page E', value: 0.6 }, + { name: 'Page F', value: 0.45 }, + { name: 'Page G', value: 0.3 }, + { name: 'Page H', value: 0.2 }, + { name: 'Page I', value: 0.35 }, + { name: 'Page J', value: 0.55 }, + ], + }, +}; + +export default mockData; From 47c73dc7df692748c3f7247557d3a04096ecd050 Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Thu, 23 May 2024 17:31:49 +0700 Subject: [PATCH 016/464] update texts --- .../portfolio/common/TransactionHistory.js | 40 ++++----------- .../useCases/TokenDetails/TokenDetails.js | 50 +++++++------------ .../useCases/Wallet/PortfolioWallet.js | 31 ++++-------- .../app/UI/hooks/useNavigateTo.js | 0 4 files changed, 39 insertions(+), 82 deletions(-) delete mode 100644 packages/yoroi-extension/app/UI/hooks/useNavigateTo.js diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/TransactionHistory.js b/packages/yoroi-extension/app/UI/features/portfolio/common/TransactionHistory.js index e584e83ef7..b2c3b45a41 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/TransactionHistory.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/TransactionHistory.js @@ -51,9 +51,7 @@ const TransactionHistory = ({ history }) => { - - Transaction history - + Transaction history { - + Transaction type - - Status - + Status - - Fee - + Fee - - Amount - + Amount @@ -88,7 +80,6 @@ const TransactionHistory = ({ history }) => { {timestamps.map((timestamp, index) => ( <> { )} - {row.type} + {row.type} { { - - {row.fee ? row.fee.amount : '-'} - - {row.fee ? row.fee.usd : '-'} + {row.fee ? row.fee.amount : '-'} + {row.fee ? row.fee.usd : '-'} - + {row.type === 'Received' && '+'} {row.amount.total} @@ -182,15 +167,12 @@ const TransactionHistory = ({ history }) => { {row.amount.usd} {row.type === 'Received' && ( - + + {row.amount.asset} assets )} {row.type === 'Sent' && ( - + {row.amount.asset} )} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js index 5b4dd0d0ec..7622a580f5 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js @@ -74,7 +74,7 @@ const TokenDetails = ({ tokenInfo, subMenuOptions, mockHistory }) => { sx={{ color: theme.palette.ds.black_static, display: 'flex', gap: theme.spacing(2) }} > - + Back to Portfolio @@ -88,7 +88,7 @@ const TokenDetails = ({ tokenInfo, subMenuOptions, mockHistory }) => { - + {isLoading ? ( ) : ( @@ -100,13 +100,13 @@ const TokenDetails = ({ tokenInfo, subMenuOptions, mockHistory }) => { ) : ( - + 200000,00 @@ -118,9 +118,7 @@ const TokenDetails = ({ tokenInfo, subMenuOptions, mockHistory }) => { {isLoading ? ( ) : ( - - 680,00 USD - + 680,00 USD )} @@ -131,16 +129,14 @@ const TokenDetails = ({ tokenInfo, subMenuOptions, mockHistory }) => { {isLoading ? ( ) : ( - - Market price - + Market price )} {isLoading ? ( ) : ( - + 0,48  USD @@ -230,7 +226,7 @@ const TokenDetails = ({ tokenInfo, subMenuOptions, mockHistory }) => { {isLoading ? ( ) : ( - + {tokenInfo.overview.tokenName} )} @@ -240,9 +236,7 @@ const TokenDetails = ({ tokenInfo, subMenuOptions, mockHistory }) => { {isLoading ? ( ) : ( - - Description - + Description )} {isLoading ? ( <> @@ -251,7 +245,7 @@ const TokenDetails = ({ tokenInfo, subMenuOptions, mockHistory }) => { ) : ( - + {tokenInfo.overview.description} )} @@ -261,9 +255,7 @@ const TokenDetails = ({ tokenInfo, subMenuOptions, mockHistory }) => { {isLoading ? ( ) : ( - - Website - + Website )} {isLoading ? ( @@ -278,9 +270,7 @@ const TokenDetails = ({ tokenInfo, subMenuOptions, mockHistory }) => { {isLoading ? ( ) : ( - - Policy ID - + Policy ID )} @@ -291,7 +281,6 @@ const TokenDetails = ({ tokenInfo, subMenuOptions, mockHistory }) => { ) : ( {tokenInfo.overview.policyId} @@ -308,9 +297,7 @@ const TokenDetails = ({ tokenInfo, subMenuOptions, mockHistory }) => { {isLoading ? ( ) : ( - - Fingerprint - + Fingerprint )} @@ -321,7 +308,6 @@ const TokenDetails = ({ tokenInfo, subMenuOptions, mockHistory }) => { ) : ( {tokenInfo.overview.fingerprint} @@ -338,9 +324,7 @@ const TokenDetails = ({ tokenInfo, subMenuOptions, mockHistory }) => { {isLoading ? ( ) : ( - - Details on - + Details on )} {isLoading ? ( @@ -365,7 +349,7 @@ const TokenDetails = ({ tokenInfo, subMenuOptions, mockHistory }) => { {selectedTab === subMenuOptions[1].route ? ( - + Market data @@ -376,10 +360,10 @@ const TokenDetails = ({ tokenInfo, subMenuOptions, mockHistory }) => { justifyContent="space-between" alignItems="center" > - + {item.label} - {tokenInfo.performance[index].value} + {tokenInfo.performance[index].value} ))} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js index 1897916047..71485cbcca 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js @@ -47,16 +47,16 @@ const PortfolioWallet = ({ headCells, data }) => { - + 200000,00 - + ADA { - - 10000,00 USD - + 10000,00 USD @@ -116,7 +114,7 @@ const PortfolioWallet = ({ headCells, data }) => { setKeyword(e.target.value)} - placeholder={'111'} + placeholder={'Search by asset name or ID'} startAdornment={ { spacing={theme.spacing(1)} sx={{ float: align }} > - - {label} - + {label} @@ -184,10 +180,8 @@ const PortfolioWallet = ({ headCells, data }) => { }} > - - {row.name} - - + {row.name} + {row.id} @@ -195,7 +189,7 @@ const PortfolioWallet = ({ headCells, data }) => { - + {row.price} @@ -291,7 +285,7 @@ const PortfolioWallet = ({ headCells, data }) => { - + {row.portfolioPercents} % @@ -299,11 +293,8 @@ const PortfolioWallet = ({ headCells, data }) => { - - {row.totalAmount.amount} - + {row.totalAmount.amount} {row.totalAmount.usd} diff --git a/packages/yoroi-extension/app/UI/hooks/useNavigateTo.js b/packages/yoroi-extension/app/UI/hooks/useNavigateTo.js deleted file mode 100644 index e69de29bb2..0000000000 From b0823da8b990c81944795cfed5881035da077eed Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 23 May 2024 14:11:32 +0300 Subject: [PATCH 017/464] wip --- .../gouvernace/common/useNavigateTo.js | 0 .../useCases/DelagationForm/DelagationForm.js | 137 ++++++++++-------- 2 files changed, 80 insertions(+), 57 deletions(-) create mode 100644 packages/yoroi-extension/app/UI/features/gouvernace/common/useNavigateTo.js diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/common/useNavigateTo.js b/packages/yoroi-extension/app/UI/features/gouvernace/common/useNavigateTo.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/useCases/DelagationForm/DelagationForm.js b/packages/yoroi-extension/app/UI/features/gouvernace/useCases/DelagationForm/DelagationForm.js index 45f6a437ec..898b5ffd30 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/useCases/DelagationForm/DelagationForm.js +++ b/packages/yoroi-extension/app/UI/features/gouvernace/useCases/DelagationForm/DelagationForm.js @@ -14,11 +14,17 @@ import { VisibilityOff } from '../../../../components/icons/VisibilityOff'; import { VisibilityOn } from '../../../../components/icons/VisibilityOn'; import InputLabel from '@mui/material/InputLabel'; import FormControl from '@mui/material/FormControl'; +import { Button } from '@mui/material'; const Container = styled(Box)(({ theme }) => ({ - paddingTop: '48px', + paddingTop: '32px', maxWidth: '506px', margin: '0 auto', + height: '100%', + display: 'flex', + flexDirection: 'column', + justifyContent: 'space-between', + alignItems: 'center', })); const TotalBox = styled(Box)(({ theme }) => ({ @@ -31,12 +37,19 @@ const TotalBox = styled(Box)(({ theme }) => ({ })); const TransactionDetails = styled(Stack)(({ theme }) => ({ - marginBottom: '24px', + marginBottom: '34px', gap: '16px', })); +const Actions = styled(Stack)(({ theme }) => ({ + marginBottom: '24px', + '& .MuiButton-root': { + width: '128px', + }, +})); export const DelagationForm = (): Node => { const [showPassword, setShowPassword] = React.useState(false); + const [passwaord, setPassword] = React.useState(''); const handleClickShowPassword = () => setShowPassword(show => !show); @@ -46,65 +59,75 @@ export const DelagationForm = (): Node => { return ( - - Delegate to a DRep - - - You are designating someone else to cast your vote on your behalf for all proposals now and - in the future. - - - - Total - - - - 0.5 ADA - - - 0.15 USD - - - - - Transaction Details - - - - Operations + + + Delegate to a DRep - - Delegate voting to drep1e93a2zvs3aw8e4naez0ynpmc48jbc7yaa3n2k8ljhwfdt70yscts + + You are designating someone else to cast your vote on your behalf for all proposals now + and in the future. - - Transaction fee: 0.5 ADA + + + Total + + + + 0.5 ADA + + + 0.15 USD + + + + + Transaction Details - + + + Operations + + + Delegate voting to drep1e93a2zvs3aw8e4naez0ynpmc48jbc7yaa3n2k8ljhwfdt70yscts + + + Transaction fee: 0.5 ADA + + - {/* // TODO to be extracted in a reusable component for all features */} - - Password - - - {showPassword ? : } - - - } - label="Password" - sx={{ color: 'black' }} - /> - + {/* // TODO to be extracted in a reusable component for all features */} + + Password + setPassword(event.target.value)} + value={passwaord} + endAdornment={ + + + {showPassword ? : } + + + } + label="Password" + sx={{ color: 'black' }} + /> + + + + + + ); }; From b48253c9d56dadaeb65a7b6bc93baacae7c69493 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 23 May 2024 15:21:51 +0300 Subject: [PATCH 018/464] add intl in context for feature --- package-lock.json | 49 +++++++++++-------- .../features/gouvernace/common/useStrings.js | 23 +++++++++ .../module/GouvernanceContextProvider.js | 8 ++- .../GouvernanceStatusSelection.js | 7 ++- .../app/UI/layout/GeneralPageLayout.js | 24 ++++++--- .../app/i18n/locales/en-US.json | 4 +- packages/yoroi-extension/package-lock.json | 6 +++ 7 files changed, 89 insertions(+), 32 deletions(-) create mode 100644 packages/yoroi-extension/app/UI/features/gouvernace/common/useStrings.js diff --git a/package-lock.json b/package-lock.json index 2dcd4d4485..bbf9332713 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1645,6 +1645,7 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "deprecated": "This package is no longer supported.", "dev": true, "dependencies": { "delegates": "^1.0.0", @@ -1843,9 +1844,9 @@ } }, "node_modules/aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.0.tgz", + "integrity": "sha512-3AungXC4I8kKsS9PuS4JH2nc+0bVY/mjgrephHTIi8fpEeGsTHBUJeosp0Wc1myYMElmD0B3Oc4XL/HVJ4PV2g==", "dev": true }, "node_modules/balanced-match": { @@ -1880,12 +1881,12 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -3096,9 +3097,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -3252,6 +3253,7 @@ "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "deprecated": "This package is no longer supported.", "dev": true, "dependencies": { "aproba": "^1.0.3", @@ -4073,6 +4075,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, "dependencies": { "once": "^1.3.0", @@ -4113,6 +4116,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-4.1.2.tgz", "integrity": "sha512-Dqer4pqzamDE2O4M55xp1qZMuLPqi4ldk2ya648FOMHRjwMzFhuxVrG04wd0c38IsvkVdr3vgHI6z+QTPdAjrQ==", + "deprecated": "This package is no longer supported. Please use @npmcli/package-json instead.", "dev": true, "dependencies": { "glob": "^7.1.1", @@ -5182,12 +5186,12 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "dev": true, "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -5803,6 +5807,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "deprecated": "This package is no longer supported.", "dev": true, "dependencies": { "are-we-there-yet": "~1.1.2", @@ -5950,6 +5955,7 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "deprecated": "This package is no longer supported.", "dev": true, "dependencies": { "os-homedir": "^1.0.0", @@ -6298,9 +6304,9 @@ "dev": true }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", "dev": true }, "node_modules/picomatch": { @@ -6512,6 +6518,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-3.0.1.tgz", "integrity": "sha512-aLcPqxovhJTVJcsnROuuzQvv6oziQx4zd3JvG0vGCL5MjTONUc4uJ90zCBC6R7W7oUKBNoR/F8pkyfVwlbxqng==", + "deprecated": "This package is no longer supported. Please use @npmcli/package-json instead.", "dev": true, "dependencies": { "glob": "^7.1.1", @@ -6570,6 +6577,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz", "integrity": "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==", + "deprecated": "This package is no longer supported. Please use @npmcli/package-json instead.", "dev": true, "dependencies": { "glob": "^7.1.1", @@ -7077,9 +7085,9 @@ "dev": true }, "node_modules/semver": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz", - "integrity": "sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -7866,6 +7874,7 @@ "version": "0.0.6", "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", "integrity": "sha512-c461FXIljswCuscZn67xq9PpszkPT6RjheWFQTgCyabJrTUozElanb0YEqv2UGgk247YpcJkFBuSGNvBlpXM9w==", + "deprecated": "This package is no longer supported.", "dev": true, "engines": { "node": "*" diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/common/useStrings.js b/packages/yoroi-extension/app/UI/features/gouvernace/common/useStrings.js new file mode 100644 index 0000000000..fe2a5ab659 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/gouvernace/common/useStrings.js @@ -0,0 +1,23 @@ +import React from 'react'; +import { defineMessages } from 'react-intl'; + +export const messages = Object.freeze( + defineMessages({ + delegateToDRep: { + id: 'gouvernace.delegateToDRep', + defaultMessage: '!!!Delegate to a DRep', + }, + designatingSomeoneElse: { + id: 'gouvernace.designatingSomeoneElse', + defaultMessage: + '!!!You are designating someone else to cast your vote on your behalf for all proposals now and in the future.', + }, + }) +); + +export const getStrings = intl => { + return React.useRef({ + delegateToDRep: intl.formatMessage(messages.delegateToDRep), + designatingSomeoneElse: intl.formatMessage(messages.designatingSomeoneElse), + }).current; +}; diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/module/GouvernanceContextProvider.js b/packages/yoroi-extension/app/UI/features/gouvernace/module/GouvernanceContextProvider.js index 475eb6404a..2aed9cccf0 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/module/GouvernanceContextProvider.js +++ b/packages/yoroi-extension/app/UI/features/gouvernace/module/GouvernanceContextProvider.js @@ -11,6 +11,8 @@ import { GouvernanceActions, } from './state'; +import { getStrings } from '../common/useStrings'; + const initialGouvernanceProvider = { ...defaultGouvernanceState, ...defaultGouvernanceActions, @@ -22,7 +24,10 @@ type GouvernanceProviderProps = any; export const GouvernanceContextProvider = ({ children, // gouvernanceApi, - initialState, + initialState = { + gouvernanceStatus: 'none', + }, + intl, }: GouvernanceProviderProps) => { const [state, dispatch] = React.useReducer(GouvernanceReducer, { ...defaultGouvernanceState, @@ -46,6 +51,7 @@ export const GouvernanceContextProvider = ({ ...state, // ...gouvernanceApi, ...actions, + strings: getStrings(intl), }), [state, actions] ); diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js b/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js index 3f8f63f99e..1144072e5d 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js +++ b/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js @@ -75,7 +75,7 @@ const GovernanceCard = ({ title, description, icon, selected, onClick }: Props) export const GouvernanceStatusSelection = (): Node => { const [selectedCard, setSelectedCard] = useState(null); - const { gouvernanceStatus, dRepId } = useGouvernance(); + const { gouvernanceStatus, dRepId, strings } = useGouvernance(); const { openModal } = useModal(); const pageTitle = gouvernanceStatus === 'none' ? 'Governance Status' : 'Governance status'; @@ -96,9 +96,8 @@ export const GouvernanceStatusSelection = (): Node => { const optionsList = [ { - title: 'Delegate to a Drep', - description: - 'You are designating someone else to cast your vote on your behalf for all proposals now and in the future.', + title: strings.delegateToDRep, + description: strings.designatingSomeoneElse, icon: , selected: selectedCard === 'drep', onClick: onChoosDRepClick, diff --git a/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js b/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js index 33d27a4d89..dcd6eb202b 100644 --- a/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js +++ b/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js @@ -13,6 +13,7 @@ import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; import { ModalProvider } from '../context/ModalContext'; import ModalManager from '../components/modals/ModalManager'; import { GouvernanceContextProvider } from '../features/gouvernace/module/GouvernanceContextProvider'; +import globalMessages from '../../i18n/global-messages'; type Props = {| ...StoresAndActionsProps, @@ -28,18 +29,29 @@ type LayoutProps = {| intl: $npm$ReactIntl$IntlFormat, |}; +type InjectedLayoutProps = {| + +renderLayoutComponent: any => Node, +|}; + +type AllProps = {| ...Props, ...InjectedLayoutProps |}; + @observer class GeneralPageLayout extends Component { + static defaultProps: {| children: void |} = { + children: undefined, + }; + + static contextTypes: {| intl: $npm$ReactIntl$IntlFormat |} = { + intl: intlShape.isRequired, + }; + render() { - const { children, actions, navbar, stores, intl } = this.props; + const { children, actions, navbar, stores } = this.props; const sidebarContainer = ; + const { intl } = this.context; return ( - + {/* TODO ModalProvider to be moved into APP after finish refactoring and bring everything in UI */} diff --git a/packages/yoroi-extension/app/i18n/locales/en-US.json b/packages/yoroi-extension/app/i18n/locales/en-US.json index 0383a748fe..5021d14bc0 100644 --- a/packages/yoroi-extension/app/i18n/locales/en-US.json +++ b/packages/yoroi-extension/app/i18n/locales/en-US.json @@ -1009,5 +1009,7 @@ "yoroiTransfer.waiting.checkingAddresses.generatingTx": "Generating transfer transaction", "yoroiTransfer.waiting.progressInfo.checkingAddresses": "Checking addresses funds", "yoroiTransfer.waiting.progressInfo.restoringAddresses": "Fetching addresses", - "yoroiTransfer.waiting.title.label": "Wallet is being restored" + "yoroiTransfer.waiting.title.label": "Wallet is being restored", + "gouvernace.delegateToDRep":"Delegate to a DRep", + "gouvernace.designatingSomeoneElse":"You are designating someone else to cast your vote on your behalf for all proposals now and in the future." } diff --git a/packages/yoroi-extension/package-lock.json b/packages/yoroi-extension/package-lock.json index e84a5a424b..ae49989cb1 100644 --- a/packages/yoroi-extension/package-lock.json +++ b/packages/yoroi-extension/package-lock.json @@ -533,6 +533,7 @@ "version": "7.12.17", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.17.tgz", "integrity": "sha512-V3CuX1aBywbJvV2yzJScRxeiiw0v2KZZYYE3giywxzFJL13RiyPjaaDwhDnxmgFTTS7FgvM2ijr4QmKNIu0AtQ==", + "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", "@babel/generator": "^7.12.17", @@ -562,6 +563,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, "bin": { "semver": "bin/semver" } @@ -6078,6 +6080,7 @@ "version": "1.21.0", "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.21.0.tgz", "integrity": "sha512-JL0w36KuFHFCvnbOXRekqVAUplmOyT/OuCQkogo6X98MtpSaJOKEAeZnYO8JB0U/RIEixZaGI5px73YbRm/oag==", + "optional": true, "dependencies": { "merge-options": "^3.0.4" }, @@ -12956,6 +12959,7 @@ "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, "optional": true, "dependencies": { "iconv-lite": "^0.6.2" @@ -12965,6 +12969,7 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -21473,6 +21478,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", + "optional": true, "dependencies": { "is-plain-obj": "^2.1.0" }, From 8f325ba987948c78a0922850b859fac915fc9410 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 23 May 2024 16:46:50 +0300 Subject: [PATCH 019/464] added reusable text inputs ,and nav hook --- .../app/UI/components/Input/PasswordInput.js | 73 +++++++++++++++++++ .../app/UI/components/Input/TextInput.js | 49 +++++++++++++ .../app/UI/components/index.js | 3 + .../gouvernace/common/ChooseDRepModal.js | 18 +++-- .../gouvernace/common/useNavigateTo.js | 11 +++ .../useCases/DelagationForm/DelagationForm.js | 49 +++---------- 6 files changed, 158 insertions(+), 45 deletions(-) create mode 100644 packages/yoroi-extension/app/UI/components/Input/PasswordInput.js create mode 100644 packages/yoroi-extension/app/UI/components/Input/TextInput.js create mode 100644 packages/yoroi-extension/app/UI/components/index.js diff --git a/packages/yoroi-extension/app/UI/components/Input/PasswordInput.js b/packages/yoroi-extension/app/UI/components/Input/PasswordInput.js new file mode 100644 index 0000000000..6d076c890f --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/Input/PasswordInput.js @@ -0,0 +1,73 @@ +// @flow + +import React from 'react'; +import type { Node } from 'react'; +import { styled } from '@mui/material/styles'; + +import OutlinedInput from '@mui/material/OutlinedInput'; +import InputAdornment from '@mui/material/InputAdornment'; +import FormControl from '@mui/material/FormControl'; +import IconButton from '@mui/material/IconButton'; +import InputLabel from '@mui/material/InputLabel'; +import { Icon } from '../icons/index'; +import { VisibilityOff } from '../icons/VisibilityOff'; +import { VisibilityOn } from '../icons/VisibilityOn'; + +type StyledInputProps = {| + id: string, + label: string, + variant?: string, + onChange: (event: any) => void, + value?: string, + error?: boolean, + helperText?: string, +|}; + +export const PasswordInput = ({ + id, + label, + variant, + onChange, + value, + error, + helperText, +}: StyledInputProps): Node => { + const [showPassword, setShowPassword] = React.useState(false); + + const handleClickShowPassword = () => setShowPassword(show => !show); + + const handleMouseDownPassword = event => { + event.preventDefault(); + }; + + return ( + + {label} + + + {showPassword ? : } + + + } + label={label} + /> + + ); +}; + +const SOutlinedInput = styled(OutlinedInput)(({ theme, error }) => ({ + // additional styles here +})); diff --git a/packages/yoroi-extension/app/UI/components/Input/TextInput.js b/packages/yoroi-extension/app/UI/components/Input/TextInput.js new file mode 100644 index 0000000000..03d825256a --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/Input/TextInput.js @@ -0,0 +1,49 @@ +// @flow + +import React from 'react'; +import type { Node } from 'react'; +import TextField from '@mui/material/TextField'; +import { styled } from '@mui/material/styles'; + +type StyledInputProps = {| + id: string, + label: string, + variant: string, + onChange: (event: any) => void, + value?: string, + error?: boolean, + helperText: string, +|}; + +export const TextInput = ({ + id, + label, + variant, + onChange, + value, + error, + helperText, +}: StyledInputProps): Node => { + return ( + + ); +}; + +const SInput = styled(TextField)(({ theme, error }) => ({ + '& .MuiFormHelperText-root': { + position: 'absolute', + bottom: -22, + left: -10, + }, + '& .MuiInputLabel-root': { + color: error && theme.palette.ds.sys_magenta_c500, + }, +})); diff --git a/packages/yoroi-extension/app/UI/components/index.js b/packages/yoroi-extension/app/UI/components/index.js new file mode 100644 index 0000000000..12b8e11da8 --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/index.js @@ -0,0 +1,3 @@ +export * from './Input/TextInput'; +export * from './Input/PasswordInput'; +export * from './Icon'; diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/common/ChooseDRepModal.js b/packages/yoroi-extension/app/UI/features/gouvernace/common/ChooseDRepModal.js index a3e4ed54a5..021e6ddf1f 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/common/ChooseDRepModal.js +++ b/packages/yoroi-extension/app/UI/features/gouvernace/common/ChooseDRepModal.js @@ -4,13 +4,12 @@ import * as React from 'react'; import type { Node } from 'react'; import Button from '@mui/material/Button'; import Typography from '@mui/material/Typography'; -import TextField from '@mui/material/TextField'; import Box from '@mui/material/Box'; import Stack from '@mui/material/Stack'; import { CustomModal } from '../../../components/modals/CustomModal'; import { useGouvernance } from '../module/GouvernanceContextProvider'; -import { useHistory } from 'react-router-dom'; -import { ROUTES } from '../../../../routes-config'; +import { useNavigateTo } from './useNavigateTo'; +import { TextInput } from '../../../components'; type ChooseDRepModallProps = {| onClose: () => void, @@ -22,15 +21,17 @@ type ChooseDRepModallProps = {| export const ChooseDRepModal = ({ onClose, title }: ChooseDRepModallProps): Node => { const [drepId, setDrepId] = React.useState(''); + const navigateTo = useNavigateTo(); const { dRepIdChanged, gouvernanceStatusChanged } = useGouvernance(); - const history = useHistory(); const confirmDRep = () => { // TODO add spcecific validation if needed dRepIdChanged(drepId); - history.push('/gouvernance/delagation'); + navigateTo.delegationForm(); }; + const idInvalid = drepId.match(/\d+/g); + return ( Identify your preferred DRep and enter their ID below to delegate your vote - { - console.log('event.target.value', event.target.value); setDrepId(event.target.value); }} value={drepId} + error={!!idInvalid} + helperText={idInvalid ? 'Incorrect format' : ' '} /> } actions={ - } diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/common/useNavigateTo.js b/packages/yoroi-extension/app/UI/features/gouvernace/common/useNavigateTo.js index e69de29bb2..0b365d258e 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/common/useNavigateTo.js +++ b/packages/yoroi-extension/app/UI/features/gouvernace/common/useNavigateTo.js @@ -0,0 +1,11 @@ +import { useHistory } from 'react-router-dom'; +import React, { useRef } from 'react'; + +export const useNavigateTo = () => { + const history = useHistory(); + + return React.useRef({ + selectStatus: () => history.push('/gouvernance'), + delegationForm: () => history.push('/gouvernance/delagation'), + }).current; +}; diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/useCases/DelagationForm/DelagationForm.js b/packages/yoroi-extension/app/UI/features/gouvernace/useCases/DelagationForm/DelagationForm.js index 898b5ffd30..9f45f7851f 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/useCases/DelagationForm/DelagationForm.js +++ b/packages/yoroi-extension/app/UI/features/gouvernace/useCases/DelagationForm/DelagationForm.js @@ -3,18 +3,11 @@ import * as React from 'react'; import { styled } from '@mui/material/styles'; import Typography from '@mui/material/Typography'; import Box from '@mui/material/Box'; -import TextField from '@mui/material/TextField'; import Stack from '@mui/material/Stack'; import type { Node } from 'react'; -import OutlinedInput from '@mui/material/OutlinedInput'; -import InputAdornment from '@mui/material/InputAdornment'; -import IconButton from '@mui/material/IconButton'; -import { Icon } from '../../../../components/icons/index'; -import { VisibilityOff } from '../../../../components/icons/VisibilityOff'; -import { VisibilityOn } from '../../../../components/icons/VisibilityOn'; -import InputLabel from '@mui/material/InputLabel'; -import FormControl from '@mui/material/FormControl'; import { Button } from '@mui/material'; +import { useNavigateTo } from '../../common/useNavigateTo'; +import { PasswordInput } from '../../../../components'; const Container = styled(Box)(({ theme }) => ({ paddingTop: '32px', @@ -50,6 +43,7 @@ const Actions = styled(Stack)(({ theme }) => ({ export const DelagationForm = (): Node => { const [showPassword, setShowPassword] = React.useState(false); const [passwaord, setPassword] = React.useState(''); + const navigateTo = useNavigateTo(); const handleClickShowPassword = () => setShowPassword(show => !show); @@ -94,36 +88,17 @@ export const DelagationForm = (): Node => { Transaction fee: 0.5 ADA - - {/* // TODO to be extracted in a reusable component for all features */} - - Password - setPassword(event.target.value)} - value={passwaord} - endAdornment={ - - - {showPassword ? : } - - - } - label="Password" - sx={{ color: 'black' }} - /> - + setPassword(event.target.value)} + value={passwaord} + /> - + From 6f96b5866a49648e78b5d662221ea44dd52fe4a7 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 23 May 2024 18:09:07 +0300 Subject: [PATCH 020/464] refactor layout, add screens for transaction submitted and failed --- packages/yoroi-extension/app/Routes.js | 16 +++++ .../TransactionFailed/FailedIlustration.js | 52 ++++++++++++++++ .../TransactionFailed/TransactionFailed.js | 18 ++++++ .../SuccessIlustration.js | 60 +++++++++++++++++++ .../TransactionSubmitted.js | 18 ++++++ .../app/UI/components/index.js | 4 +- .../GouvernanceDelegationFormPage.js | 21 ++----- .../UI/pages/Gouvernance/GouvernancePage.js | 22 ++----- .../GouvernanceTransactionFailedPage.js | 19 ++++++ .../GouvernanceTransactionSubmittedPage.js | 19 ++++++ .../app/UI/pages/Gouvernance/layout.js | 35 +++++++++++ packages/yoroi-extension/app/routes-config.js | 2 + .../app/stores/stateless/sidebarCategories.js | 2 +- 13 files changed, 251 insertions(+), 37 deletions(-) create mode 100644 packages/yoroi-extension/app/UI/components/TransactionFailed/FailedIlustration.js create mode 100644 packages/yoroi-extension/app/UI/components/TransactionFailed/TransactionFailed.js create mode 100644 packages/yoroi-extension/app/UI/components/TransactionSubmitted/SuccessIlustration.js create mode 100644 packages/yoroi-extension/app/UI/components/TransactionSubmitted/TransactionSubmitted.js create mode 100644 packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernanceTransactionFailedPage.js create mode 100644 packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernanceTransactionSubmittedPage.js create mode 100644 packages/yoroi-extension/app/UI/pages/Gouvernance/layout.js diff --git a/packages/yoroi-extension/app/Routes.js b/packages/yoroi-extension/app/Routes.js index aa1908de67..0f60c190f3 100644 --- a/packages/yoroi-extension/app/Routes.js +++ b/packages/yoroi-extension/app/Routes.js @@ -36,6 +36,8 @@ import FullscreenLayout from './components/layout/FullscreenLayout'; // New UI pages import GouvernancePage from './UI/pages/Gouvernance/GouvernancePage'; import GouvernanceDelegationFormPage from './UI/pages/Gouvernance/GouvernanceDelegationFormPage'; +import GouvernanceTransactionSubmittedPage from './UI/pages/Gouvernance/GouvernanceTransactionSubmittedPage'; +import GouvernanceTransactionFailedPage from './UI/pages/Gouvernance/GouvernanceTransactionFailedPage'; // PAGES const LanguageSelectionPagePromise = () => import('./containers/profile/LanguageSelectionPage'); @@ -499,6 +501,20 @@ const GouvernanceSubpages = (stores, actions) => ( )} /> + ( + + )} + /> + ( + + )} + /> ); diff --git a/packages/yoroi-extension/app/UI/components/TransactionFailed/FailedIlustration.js b/packages/yoroi-extension/app/UI/components/TransactionFailed/FailedIlustration.js new file mode 100644 index 0000000000..1262c70651 --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/TransactionFailed/FailedIlustration.js @@ -0,0 +1,52 @@ +import React from 'react'; + +export const FailedIlustration = () => { + return ( + + + + + + + + + + + + + + + + + + ); +}; diff --git a/packages/yoroi-extension/app/UI/components/TransactionFailed/TransactionFailed.js b/packages/yoroi-extension/app/UI/components/TransactionFailed/TransactionFailed.js new file mode 100644 index 0000000000..d42772f789 --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/TransactionFailed/TransactionFailed.js @@ -0,0 +1,18 @@ +import React from 'react'; +import { Stack, Typography, Button } from '@mui/material'; +import { FailedIlustration } from './FailedIlustration'; + +export const TransactionFailed = () => { + return ( + + + + Transaction failed + + + Your transaction has not been processed properly due to technical issues + + + + ); +}; diff --git a/packages/yoroi-extension/app/UI/components/TransactionSubmitted/SuccessIlustration.js b/packages/yoroi-extension/app/UI/components/TransactionSubmitted/SuccessIlustration.js new file mode 100644 index 0000000000..88af08dfc8 --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/TransactionSubmitted/SuccessIlustration.js @@ -0,0 +1,60 @@ +import React from 'react'; + +export const SuccessIlustration = () => { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +}; diff --git a/packages/yoroi-extension/app/UI/components/TransactionSubmitted/TransactionSubmitted.js b/packages/yoroi-extension/app/UI/components/TransactionSubmitted/TransactionSubmitted.js new file mode 100644 index 0000000000..b236b4cd0a --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/TransactionSubmitted/TransactionSubmitted.js @@ -0,0 +1,18 @@ +import React from 'react'; +import { Stack, Typography, Button } from '@mui/material'; +import { SuccessIlustration } from './SuccessIlustration'; + +export const TransactionSubmitted = () => { + return ( + + + + Transaction submitted + + + Check this transaction in the list of wallet transactions + + + + ); +}; diff --git a/packages/yoroi-extension/app/UI/components/index.js b/packages/yoroi-extension/app/UI/components/index.js index 12b8e11da8..ac35e12ae0 100644 --- a/packages/yoroi-extension/app/UI/components/index.js +++ b/packages/yoroi-extension/app/UI/components/index.js @@ -1,3 +1,5 @@ export * from './Input/TextInput'; export * from './Input/PasswordInput'; -export * from './Icon'; +export * from './TransactionFailed/TransactionFailed'; +export * from './TransactionSubmitted/TransactionSubmitted'; +export * from './Icons'; diff --git a/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernanceDelegationFormPage.js b/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernanceDelegationFormPage.js index 91c2ddfdd6..9ee38f1100 100644 --- a/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernanceDelegationFormPage.js +++ b/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernanceDelegationFormPage.js @@ -1,9 +1,6 @@ // @flow -import GeneralPageLayout from '../../layout/GeneralPageLayout'; import { DelagationForm } from '../../features/gouvernace/useCases/DelagationForm/DelagationForm'; -import NavBarContainerRevamp from '../../../containers/NavBarContainerRevamp'; -import NavBar from '../../../components/topbar/NavBar'; -import NavBarTitle from '../../../components/topbar/NavBarTitle'; +import GouvernanceLayout from './layout'; type Props = {| stores: any, @@ -11,21 +8,11 @@ type Props = {| children?: React$Node, |}; -const GouvernanceDelegationFormPage = ({ stores, actions, children }: Props): any => { +const GouvernanceDelegationFormPage = (props: Props): any => { return ( - } - /> - } - > + - + ); }; diff --git a/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernancePage.js b/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernancePage.js index 054c8cddc4..d93d05245e 100644 --- a/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernancePage.js +++ b/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernancePage.js @@ -1,9 +1,6 @@ // @flow -import GeneralPageLayout from '../../layout/GeneralPageLayout'; import { GouvernanceStatusSelection } from '../../features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection'; -import NavBarContainerRevamp from '../../../containers/NavBarContainerRevamp'; -import NavBar from '../../../components/topbar/NavBar'; -import NavBarTitle from '../../../components/topbar/NavBarTitle'; +import GouvernanceLayout from './layout'; type Props = {| stores: any, @@ -11,22 +8,11 @@ type Props = {| children?: React$Node, |}; -const GouvernancePage = ({ stores, actions, children }: Props): any => { +const GouvernancePage = (props: Props): any => { return ( - } - /> - } - // menu={menu} // ADD a menu if needed (see example in SwapPageContainer) - > + - + ); }; diff --git a/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernanceTransactionFailedPage.js b/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernanceTransactionFailedPage.js new file mode 100644 index 0000000000..090084bf42 --- /dev/null +++ b/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernanceTransactionFailedPage.js @@ -0,0 +1,19 @@ +// @flow +import { TransactionFailed } from '../../components/TransactionFailed/TransactionFailed'; +import GouvernanceLayout from './layout'; + +type Props = {| + stores: any, + actions: any, + children?: React$Node, +|}; + +const GouvernanceTransactionFailedPage = (props: Props): any => { + return ( + + + + ); +}; + +export default GouvernanceTransactionFailedPage; diff --git a/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernanceTransactionSubmittedPage.js b/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernanceTransactionSubmittedPage.js new file mode 100644 index 0000000000..70a326e0b6 --- /dev/null +++ b/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernanceTransactionSubmittedPage.js @@ -0,0 +1,19 @@ +// @flow +import { TransactionSubmitted } from '../../components/TransactionSubmitted/TransactionSubmitted'; +import GouvernanceLayout from './layout'; + +type Props = {| + stores: any, + actions: any, + children?: React$Node, +|}; + +const GouvernanceTransactionSubmittedPage = (props: Props): any => { + return ( + + + + ); +}; + +export default GouvernanceTransactionSubmittedPage; diff --git a/packages/yoroi-extension/app/UI/pages/Gouvernance/layout.js b/packages/yoroi-extension/app/UI/pages/Gouvernance/layout.js new file mode 100644 index 0000000000..e4b45b89a7 --- /dev/null +++ b/packages/yoroi-extension/app/UI/pages/Gouvernance/layout.js @@ -0,0 +1,35 @@ +// @flow +import GeneralPageLayout from '../../layout/GeneralPageLayout'; +import { GouvernanceStatusSelection } from '../../features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection'; +import NavBarContainerRevamp from '../../../containers/NavBarContainerRevamp'; +import NavBar from '../../../components/topbar/NavBar'; +import NavBarTitle from '../../../components/topbar/NavBarTitle'; +import { TransactionSubmitted } from '../../components/TransactionSubmitted/TransactionSubmitted'; + +type Props = {| + stores: any, + actions: any, + children?: React$Node, +|}; + +const GouvernanceLayout = ({ stores, actions, children }: Props): any => { + console.log('@@@@@@@@@@@@GouvernanceLayout'); + return ( + } + /> + } + // menu={menu} // ADD a menu if needed (see example in SwapPageContainer) + > + {children} + + ); +}; + +export default GouvernanceLayout; diff --git a/packages/yoroi-extension/app/routes-config.js b/packages/yoroi-extension/app/routes-config.js index 27af8b494e..902d8ab936 100644 --- a/packages/yoroi-extension/app/routes-config.js +++ b/packages/yoroi-extension/app/routes-config.js @@ -82,5 +82,7 @@ export const ROUTES = { Gouvernance: { ROOT: '/gouvernance', DELEGATE: '/gouvernance/delagation', + SUBMITTED: '/gouvernance/submitted', + FAIL: '/gouvernance/failed', }, }; diff --git a/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js b/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js index 414bc64339..6000a321e2 100644 --- a/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js +++ b/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js @@ -178,7 +178,7 @@ export const allCategoriesRevamp: Array = [ isVisible: _request => true, }, { - className: 'settings', + className: 'gouvernance', route: '/gouvernance', icon: settingIcon, label: globalMessages.sidebarGouvernance, From c4d0145ad38799697866b74f874185c59edff885 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 23 May 2024 18:10:48 +0300 Subject: [PATCH 021/464] remove console.log --- packages/yoroi-extension/app/UI/pages/Gouvernance/layout.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/yoroi-extension/app/UI/pages/Gouvernance/layout.js b/packages/yoroi-extension/app/UI/pages/Gouvernance/layout.js index e4b45b89a7..7d31eb128a 100644 --- a/packages/yoroi-extension/app/UI/pages/Gouvernance/layout.js +++ b/packages/yoroi-extension/app/UI/pages/Gouvernance/layout.js @@ -13,7 +13,6 @@ type Props = {| |}; const GouvernanceLayout = ({ stores, actions, children }: Props): any => { - console.log('@@@@@@@@@@@@GouvernanceLayout'); return ( Date: Thu, 23 May 2024 18:14:43 +0300 Subject: [PATCH 022/464] change page name --- packages/yoroi-extension/app/Routes.js | 4 ++-- .../{GouvernancePage.js => GouvernanceStatusPage.js} | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) rename packages/yoroi-extension/app/UI/pages/Gouvernance/{GouvernancePage.js => GouvernanceStatusPage.js} (80%) diff --git a/packages/yoroi-extension/app/Routes.js b/packages/yoroi-extension/app/Routes.js index 0f60c190f3..b2ebe0150b 100644 --- a/packages/yoroi-extension/app/Routes.js +++ b/packages/yoroi-extension/app/Routes.js @@ -34,7 +34,7 @@ import LoadingSpinner from './components/widgets/LoadingSpinner'; import FullscreenLayout from './components/layout/FullscreenLayout'; // New UI pages -import GouvernancePage from './UI/pages/Gouvernance/GouvernancePage'; +import GouvernanceStatusPage from './UI/pages/Gouvernance/GouvernanceStatusPage'; import GouvernanceDelegationFormPage from './UI/pages/Gouvernance/GouvernanceDelegationFormPage'; import GouvernanceTransactionSubmittedPage from './UI/pages/Gouvernance/GouvernanceTransactionSubmittedPage'; import GouvernanceTransactionFailedPage from './UI/pages/Gouvernance/GouvernanceTransactionFailedPage'; @@ -492,7 +492,7 @@ const GouvernanceSubpages = (stores, actions) => ( } + component={props => } /> { +const GouvernanceStatusPage = (props: Props): any => { return ( @@ -16,4 +16,4 @@ const GouvernancePage = (props: Props): any => { ); }; -export default GouvernancePage; +export default GouvernanceStatusPage; From 1f2026ca6a5fdd179d86a541949d80524b80909c Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 23 May 2024 18:30:24 +0300 Subject: [PATCH 023/464] redo changes --- .../app/assets/images/add-label.inline.svg | 4 +- .../app/assets/images/add-memo.inline.svg | 4 +- .../add-wallet-bg-modern.inline.svg | 42 +- .../add-wallet/connect-hw-classic.inline.svg | 12 +- .../add-wallet/connect-hw-modern.inline.svg | 2 +- .../add-wallet/connect-hw-revamp.inline.svg | 274 ++++++------ .../create-wallet-classic.inline.svg | 6 +- .../create-wallet-modern.inline.svg | 2 +- .../create-wallet-revamp.inline.svg | 214 ++++----- .../connect-ledger-classic.inline.svg | 2 +- .../connect-ledger-modern.inline.svg | 2 +- .../connect-trezor-classic.inline.svg | 8 +- .../connect-trezor-modern.inline.svg | 2 +- .../restore-normal-wallet-classic.inline.svg | 4 +- .../restore-normal-wallet-modern.inline.svg | 2 +- .../restore-paper-wallet-classic.inline.svg | 2 +- .../restore-paper-wallet-modern.inline.svg | 2 +- .../restore-wallet-classic.inline.svg | 6 +- .../restore-wallet-modern.inline.svg | 2 +- .../restore-wallet-revamp.inline.svg | 406 +++++++++--------- .../add-wallet/restore/15-word.inline.svg | 216 +++++----- .../add-wallet/restore/24-word.inline.svg | 176 ++++---- .../images/add-wallet/step-mark.inline.svg | 2 +- .../add-wallet/wallet-list/drag.inline.svg | 2 +- .../images/analytics-illustration.inline.svg | 174 ++++---- .../assets/images/app-store-badge.inline.svg | 26 +- .../app/assets/images/arrow-down.inline.svg | 4 +- .../app/assets/images/arrow-up.inline.svg | 4 +- .../images/assets-page/asset-no.inline.svg | 4 +- .../images/assets-page/assets.inline.svg | 2 +- .../assets-page/chevron-right.inline.svg | 2 +- .../images/assets-page/grid-2x2.inline.svg | 8 +- .../images/assets-page/grid-3x3.inline.svg | 18 +- .../assets-page/no-nft-found.inline.svg | 118 ++--- .../images/assets-page/no-nfts.inline.svg | 118 ++--- .../images/assets-page/no-tokens.inline.svg | 194 ++++----- .../images/assets-page/search.inline.svg | 2 +- .../images/attention-big-light.inline.svg | 2 +- .../images/attention-classic.inline.svg | 4 +- .../assets/images/attention-modern.inline.svg | 4 +- .../assets/images/back-arrow-ic.inline.svg | 2 +- .../app/assets/images/banxa.png | Bin 748 -> 1914 bytes .../advanced-level.inline.svg | 256 +++++------ .../beginner-level.inline.svg | 126 +++--- .../app/assets/images/copied.inline.svg | 2 +- .../app/assets/images/copy.inline.svg | 2 +- .../app/assets/images/cross-dark.inline.svg | 2 +- .../assets/images/currencies/ADA.inline.svg | 2 +- .../assets/images/currencies/BRL.inline.svg | 18 +- .../assets/images/currencies/CNY.inline.svg | 12 +- .../assets/images/currencies/EUR.inline.svg | 28 +- .../assets/images/currencies/JPY.inline.svg | 4 +- .../assets/images/currencies/KRW.inline.svg | 44 +- .../dapp-connector/add-collateral.inline.svg | 250 +++++------ .../dapp-connector/dapp-connector.inline.svg | 4 +- .../images/dapp-connector/delete.inline.svg | 4 +- .../images/dapp-connector/no-dapp.inline.svg | 4 +- .../no-dapps-connected.inline.svg | 32 +- .../dashboard/empty-dashboard.inline.svg | 2 +- .../dashboard/grey-total-ada.inline.svg | 2 +- .../dashboard/grey-total-reward.inline.svg | 2 +- .../dashboard/staking-active.inline.svg | 2 +- .../dashboard/staking-illustration.inline.svg | 224 +++++----- .../dashboard/total-delegated.inline.svg | 2 +- .../app/assets/images/default-nft.inline.svg | 46 +- .../app/assets/images/edit.inline.svg | 4 +- .../app/assets/images/emurgo-logo-small.svg | 9 + .../app/assets/images/encryptus.png | Bin 0 -> 2448 bytes .../app/assets/images/error-info.inline.svg | 10 +- .../images/exchange-end-illustration.svg | 220 +++++----- .../images/expand-arrow-grey.inline.svg | 6 +- .../app/assets/images/flags/brazil.inline.svg | 68 +-- .../assets/images/flags/chinese.inline.svg | 2 +- .../app/assets/images/flags/czech.inline.svg | 4 +- .../app/assets/images/flags/dutch.inline.svg | 8 +- .../assets/images/flags/english.inline.svg | 2 +- .../app/assets/images/flags/french.inline.svg | 2 +- .../app/assets/images/flags/german.inline.svg | 2 +- .../assets/images/flags/indonesian.inline.svg | 2 +- .../assets/images/flags/italian.inline.svg | 2 +- .../assets/images/flags/japanese.inline.svg | 2 +- .../app/assets/images/flags/korean.inline.svg | 2 +- .../assets/images/flags/russian.inline.svg | 2 +- .../app/assets/images/flags/slovak.inline.svg | 16 +- .../assets/images/flags/spanish.inline.svg | 2 +- .../assets/images/flags/turkish.inline.svg | 4 +- .../assets/images/flags/vietnamese.inline.svg | 4 +- .../app/assets/images/forms/close.inline.svg | 2 +- .../app/assets/images/forms/done.inline.svg | 2 +- .../app/assets/images/forms/error.inline.svg | 2 +- .../images/forms/password-eye.inline.svg | 4 +- .../app/assets/images/generate-uri.inline.svg | 2 +- .../images/google-play-badge.inline.svg | 40 +- .../check-prerequisite-header-icon.inline.svg | 2 +- .../ledger/check-modern.inline.svg | 12 +- .../hardware-wallet/ledger/check.inline.svg | 2 +- .../ledger/connect-error-modern.inline.svg | 18 +- .../ledger/connect-error.inline.svg | 4 +- .../ledger/save-error-modern.inline.svg | 18 +- .../ledger/save-error.inline.svg | 4 +- .../ledger/save-load-modern.inline.svg | 16 +- .../ledger/save-load.inline.svg | 2 +- .../trezor/check-modern.inline.svg | 12 +- .../hardware-wallet/trezor/check.inline.svg | 16 +- .../trezor/connect-error-modern.inline.svg | 30 +- .../trezor/connect-error.inline.svg | 26 +- .../trezor/save-error-modern.inline.svg | 14 +- .../trezor/save-error.inline.svg | 4 +- .../trezor/save-load-modern.inline.svg | 6 +- .../trezor/save-load.inline.svg | 2 +- .../images/info-icon-primary.inline.svg | 2 +- .../assets/images/info-icon-revamp.inline.svg | 2 +- .../app/assets/images/info-icon.inline.svg | 4 +- .../app/assets/images/info-warning.inline.svg | 2 +- .../assets/images/link-external.inline.svg | 2 +- .../images/my-wallets/arrow_down.inline.svg | 2 +- .../my-wallets/icon_eye_closed.inline.svg | 2 +- .../my-wallets/icon_eye_open.inline.svg | 2 +- .../icon_eye_opened_revamp.inline.svg | 4 +- .../images/my-wallets/symbol_ada.inline.svg | 2 +- .../my-wallets/symbol_adaTestnet.inline.svg | 4 +- .../my-wallets/symbol_bitcoin.inline.svg | 2 +- .../my-wallets/symbol_ethereum.inline.svg | 2 +- .../images/new-theme-illustration.inline.svg | 10 +- .../app/assets/images/nft-no.inline.svg | 4 +- .../assets/images/open-eye-primary.inline.svg | 4 +- .../images/pic-catalyst-step1.inline.svg | 2 +- .../images/pic-catalyst-step2.inline.svg | 2 +- .../pic-catalyst-step3-ledger.inline.svg | 128 +++--- .../pic-catalyst-step3-trezor.inline.svg | 140 +++--- .../app/assets/images/qr-code.inline.svg | 4 +- .../assets/images/question-mark.inline.svg | 2 +- .../assets/images/recovery-phrase.inline.svg | 88 ++-- .../images/recovery-watching.inline.svg | 88 ++-- .../assets/images/revamp/add-memo.inline.svg | 2 +- .../images/revamp/asset-default.inline.svg | 2 +- .../images/revamp/catalyst-step1.inline.svg | 40 +- .../images/revamp/catalyst-step2.inline.svg | 32 +- .../assets/images/revamp/delete.inline.svg | 2 +- .../assets/images/revamp/dex/spec.inline.svg | 2 +- .../assets/images/revamp/dex/vyfi.inline.svg | 2 +- .../assets/images/revamp/error.triangle.svg | 2 +- .../images/revamp/exclamation.circle.svg | 2 +- .../images/revamp/icons/alert.inline.svg | 5 + .../revamp/icons/arrow-right.inline.svg | 3 + .../revamp/icons/chevron-down.inline.svg | 2 +- .../images/revamp/icons/edit.inline.svg | 2 +- .../icons/exclamation-circle.inline.svg | 2 +- .../images/revamp/icons/info.inline.svg | 2 +- .../images/revamp/icons/search.inline.svg | 2 +- .../app/assets/images/revamp/info.inline.svg | 2 +- .../images/revamp/no-assets-found.inline.svg | 194 ++++----- .../revamp/no-dapps-connected.inline.svg | 198 ++++----- .../registration-is-not-available.inline.svg | 18 +- .../images/revamp/tx-failure.inline.svg | 14 +- .../images/revamp/tx-successful.inline.svg | 12 +- .../images/revamp/verify-icon.inline.svg | 2 +- .../assets/images/select-language-shelley.svg | 112 ++--- .../app/assets/images/select-language.svg | 2 +- .../images/shelley-testnet-warning.inline.svg | 2 +- .../images/sidebar/my_wallets.inline.svg | 2 +- .../images/sidebar/open-sidebar.inline.svg | 2 +- .../images/sidebar/revamp/assets.inline.svg | 2 +- .../images/sidebar/revamp/nfts.inline.svg | 2 +- .../images/sidebar/revamp/setting.inline.svg | 2 +- .../images/sidebar/revamp/staking.inline.svg | 2 +- .../images/sidebar/revamp/voting.inline.svg | 2 +- .../images/sidebar/revamp/wallet.inline.svg | 2 +- .../sidebar/revamp/yoroi-logo.inline.svg | 2 +- .../sidebar/transfer_wallets.inline.svg | 2 +- .../sidebar/wallet-settings-2-ic.inline.svg | 4 +- .../sidebar/yoroi-logo-expanded.inline.svg | 2 +- .../images/sidebar/yoroi-logo.inline.svg | 2 +- .../assets/images/social/facebook.inline.svg | 2 +- .../assets/images/social/github.inline.svg | 2 +- .../assets/images/social/medium.inline.svg | 2 +- .../images/social/revamp/facebook.inline.svg | 2 +- .../social/revamp/github-24x24.inline.svg | 2 +- .../images/social/revamp/github.inline.svg | 2 +- .../images/social/revamp/telegram.inline.svg | 2 +- .../images/social/revamp/twitch.inline.svg | 2 +- .../images/social/revamp/twitter.inline.svg | 2 +- .../images/social/revamp/youtube.inline.svg | 2 +- .../assets/images/social/telegram.inline.svg | 2 +- .../assets/images/social/twitter.inline.svg | 2 +- .../assets/images/social/youtube.inline.svg | 2 +- .../app/assets/images/spinner-dark.svg | 4 +- .../app/assets/images/spinner-light.svg | 4 +- .../assets/images/success-small.inline.svg | 2 +- .../app/assets/images/support.inline.svg | 2 +- .../top-bar/back-arrow-white.inline.svg | 2 +- .../images/transaction/error.inline.svg | 2 +- .../transaction/export-tx-to-file.inline.svg | 4 +- .../images/transaction/export.inline.svg | 2 +- .../no-transactions-yet.modern.inline.svg | 32 +- .../images/transaction/receive.inline.svg | 2 +- .../images/transaction/reward.inline.svg | 2 +- .../assets/images/transaction/send.inline.svg | 2 +- .../images/transaction/stake.inline.svg | 2 +- .../wallet-empty-banner.inline.svg | 260 +++++------ .../transfer-success-shelley.inline.svg | 16 +- .../assets/images/transfer-success.inline.svg | 16 +- .../images/uri/about-url-classic.inline.svg | 10 +- .../assets/images/uri/about-url.inline.svg | 98 ++--- .../assets/images/uri/invalid-uri.inline.svg | 6 +- .../images/uri/perform-tx-uri.inline.svg | 14 +- .../images/verify-icon-green.inline.svg | 2 +- .../app/assets/images/verify-icon.inline.svg | 4 +- .../images/wallet-nav/back-arrow.inline.svg | 2 +- .../images/wallet-nav/caret-down.inline.svg | 2 +- .../wallet-nav/conceptual-wallet.inline.svg | 2 +- .../wallet-nav/ledger-wallet.inline.svg | 4 +- .../wallet-nav/tab-dashboard.inline.svg | 2 +- .../wallet-nav/tab-delegation_list.inline.svg | 4 +- .../images/wallet-nav/tab-receive.inline.svg | 2 +- .../images/wallet-nav/tab-send.inline.svg | 2 +- .../wallet-nav/tab-transactions.inline.svg | 2 +- .../wallet-nav/trezor-wallet.inline.svg | 2 +- .../images/wallet-nav/voting.inline.svg | 4 +- .../app/assets/images/warning.inline.svg | 2 +- .../images/widget/cross-green.inline.svg | 2 +- .../app/assets/images/widget/cross.inline.svg | 2 +- .../images/widget/tick-green.inline.svg | 4 +- .../app/assets/images/widget/tick.inline.svg | 4 +- .../app/assets/images/yes.inline.svg | 6 +- .../images/yoroi-classic-theme.inline.svg | 10 +- .../assets/images/yoroi-logo-blue.inline.svg | 2 +- .../images/yoroi-logo-nightly.inline.svg | 88 ++-- .../images/yoroi-logo-revamp-blue.inline.svg | 6 +- .../yoroi-logo-revamp-nightly-blue.inline.svg | 20 +- .../images/yoroi-logo-shape-blue.inline.svg | 2 +- .../images/yoroi-logo-shape-white.inline.svg | 2 +- .../images/yoroi-modern-theme.inline.svg | 10 +- .../images/yoroi-nightly-icon-dark.inline.svg | 20 +- .../images/yoroi-nightly-icon.inline.svg | 8 +- .../images/no-websites-connected.inline.svg | 32 +- .../ledger/assets/img/external-link.svg | 2 +- .../assets/img/nano-s/hint-catalyst-1.svg | 2 +- .../assets/img/nano-s/hint-catalyst-11.svg | 2 +- .../assets/img/nano-s/hint-catalyst-3.svg | 2 +- .../assets/img/nano-s/hint-catalyst-4.svg | 2 +- .../assets/img/nano-s/hint-catalyst-5.svg | 2 +- .../assets/img/nano-s/hint-catalyst-6.svg | 2 +- .../assets/img/nano-s/hint-catalyst-7.svg | 2 +- .../assets/img/nano-s/hint-catalyst-8.svg | 2 +- .../assets/img/nano-s/hint-catalyst-9.svg | 2 +- .../assets/img/nano-s/hint-connect-2-keys.svg | 2 +- .../assets/img/nano-x/hint-catalyst-1.svg | 2 +- .../assets/img/nano-x/hint-catalyst-11.svg | 2 +- .../assets/img/nano-x/hint-catalyst-3.svg | 2 +- .../assets/img/nano-x/hint-catalyst-4.svg | 2 +- .../assets/img/nano-x/hint-catalyst-5.svg | 2 +- .../assets/img/nano-x/hint-catalyst-6.svg | 2 +- .../assets/img/nano-x/hint-catalyst-7.svg | 2 +- .../assets/img/nano-x/hint-catalyst-8.svg | 2 +- .../assets/img/nano-x/hint-catalyst-9.svg | 2 +- .../assets/img/nano-x/hint-connect-2-keys.svg | 2 +- .../ledger/assets/img/spinner-dark.svg | 2 +- .../ledger/assets/img/warning-icon.svg | 4 +- 259 files changed, 2891 insertions(+), 2874 deletions(-) create mode 100644 packages/yoroi-extension/app/assets/images/emurgo-logo-small.svg create mode 100644 packages/yoroi-extension/app/assets/images/encryptus.png create mode 100644 packages/yoroi-extension/app/assets/images/revamp/icons/alert.inline.svg create mode 100644 packages/yoroi-extension/app/assets/images/revamp/icons/arrow-right.inline.svg diff --git a/packages/yoroi-extension/app/assets/images/add-label.inline.svg b/packages/yoroi-extension/app/assets/images/add-label.inline.svg index c9839ef15e..f8e8ae55e1 100644 --- a/packages/yoroi-extension/app/assets/images/add-label.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-label.inline.svg @@ -3,8 +3,8 @@ icon/label Created with Sketch. - - + + diff --git a/packages/yoroi-extension/app/assets/images/add-memo.inline.svg b/packages/yoroi-extension/app/assets/images/add-memo.inline.svg index 909681db97..a325e42d4e 100644 --- a/packages/yoroi-extension/app/assets/images/add-memo.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-memo.inline.svg @@ -3,8 +3,8 @@ icon/add-memo.inline Created with Sketch. - + - + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/add-wallet-bg-modern.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/add-wallet-bg-modern.inline.svg index edbda47a77..afa7fbabbf 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/add-wallet-bg-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/add-wallet-bg-modern.inline.svg @@ -21,36 +21,36 @@ - - - - + + + + - - - - - - - + + + + + + + - - - - - - - - - - + + + + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-classic.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-classic.inline.svg index 2630518044..bf03fc227c 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-classic.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-classic.inline.svg @@ -8,17 +8,17 @@ - + - - + + - - - + + + diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-modern.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-modern.inline.svg index d826bc4eae..eddc9a80fb 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-modern.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-revamp.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-revamp.inline.svg index f8ee6ab1c9..e58d57e12b 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-revamp.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/connect-hw-revamp.inline.svg @@ -1,14 +1,14 @@ - + - - - - - - + + + + + + @@ -17,182 +17,182 @@ - - - - - - - - + + + + + + + + - - - - - - - + + + + + + + - - - - + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/create-wallet-classic.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/create-wallet-classic.inline.svg index 0472346788..f1b14aaaf5 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/create-wallet-classic.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/create-wallet-classic.inline.svg @@ -7,7 +7,7 @@ - + @@ -30,7 +30,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/create-wallet-modern.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/create-wallet-modern.inline.svg index dc8c878223..35135ee283 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/create-wallet-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/create-wallet-modern.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/create-wallet-revamp.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/create-wallet-revamp.inline.svg index a08b0a6d30..eefbf42ba1 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/create-wallet-revamp.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/create-wallet-revamp.inline.svg @@ -50,145 +50,145 @@ - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - + + + - - - + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - + + + + + + + + + - - - + + + - - - - - - - + + + + + + + - - - - - - - - - + + + + + + + + + - - - + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-ledger-classic.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-ledger-classic.inline.svg index 82c033ffc6..1e7dd60d1f 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-ledger-classic.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-ledger-classic.inline.svg @@ -3,7 +3,7 @@ ledger_wallet.inline Created with Sketch. - + diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-ledger-modern.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-ledger-modern.inline.svg index 0f2c214d75..83fa9d2b06 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-ledger-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-ledger-modern.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-trezor-classic.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-trezor-classic.inline.svg index 58e558cf3e..3f8daec6c6 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-trezor-classic.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-trezor-classic.inline.svg @@ -6,12 +6,12 @@ - + - - - + + + diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-trezor-modern.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-trezor-modern.inline.svg index 67aa8aa7c6..2d74b66356 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-trezor-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/connect-trezor-modern.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-normal-wallet-classic.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-normal-wallet-classic.inline.svg index e7506b269f..8c0f34d98b 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-normal-wallet-classic.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-normal-wallet-classic.inline.svg @@ -3,7 +3,7 @@ mnemonimic_words_wallet.inline copy 2 Created with Sketch. - + @@ -25,7 +25,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-normal-wallet-modern.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-normal-wallet-modern.inline.svg index a5bbd7996c..359a8d964b 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-normal-wallet-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-normal-wallet-modern.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-paper-wallet-classic.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-paper-wallet-classic.inline.svg index ebe56a3db2..d423e017c8 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-paper-wallet-classic.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-paper-wallet-classic.inline.svg @@ -7,7 +7,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-paper-wallet-modern.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-paper-wallet-modern.inline.svg index 6ceb2d4237..11fab786db 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-paper-wallet-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/option-dialog/restore-paper-wallet-modern.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/restore-wallet-classic.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/restore-wallet-classic.inline.svg index 66ab26824a..d10eb9d418 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/restore-wallet-classic.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/restore-wallet-classic.inline.svg @@ -7,7 +7,7 @@ - + @@ -53,13 +53,13 @@ - + - + diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/restore-wallet-modern.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/restore-wallet-modern.inline.svg index e9a4f3200a..44e803a777 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/restore-wallet-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/restore-wallet-modern.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/restore-wallet-revamp.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/restore-wallet-revamp.inline.svg index cee2dec550..6ecaa5e6fb 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/restore-wallet-revamp.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/restore-wallet-revamp.inline.svg @@ -99,273 +99,273 @@ - - - + + + - - - + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - + + + - - - - - - - + + + + + + + - - - + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - + + - - - - - - - - - + + + + + + + + + - - - + + + - - - + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - + + + + + + + + + - - - + + + - - - - - - - + + + + + + + - - - - - - - - - + + + + + + + + + - - - + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/restore/15-word.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/restore/15-word.inline.svg index 7fd10144a0..0542bae470 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/restore/15-word.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/restore/15-word.inline.svg @@ -56,133 +56,133 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - + + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/restore/24-word.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/restore/24-word.inline.svg index bdbc07fc2c..a2c3f063ac 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/restore/24-word.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/restore/24-word.inline.svg @@ -35,60 +35,60 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - + + + @@ -115,55 +115,55 @@ - - - - + + + + - - + + - - + + - - + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/step-mark.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/step-mark.inline.svg index 04ed10afe9..cb3d081c1c 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/step-mark.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/step-mark.inline.svg @@ -1,4 +1,4 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/add-wallet/wallet-list/drag.inline.svg b/packages/yoroi-extension/app/assets/images/add-wallet/wallet-list/drag.inline.svg index c2686090d8..87945494eb 100644 --- a/packages/yoroi-extension/app/assets/images/add-wallet/wallet-list/drag.inline.svg +++ b/packages/yoroi-extension/app/assets/images/add-wallet/wallet-list/drag.inline.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/analytics-illustration.inline.svg b/packages/yoroi-extension/app/assets/images/analytics-illustration.inline.svg index 8e071f8bbb..21493be9de 100644 --- a/packages/yoroi-extension/app/assets/images/analytics-illustration.inline.svg +++ b/packages/yoroi-extension/app/assets/images/analytics-illustration.inline.svg @@ -43,131 +43,131 @@ - - - - - - - - - + + + + + + + + + - - + + - - - - - - - + + + + + + + - - + + - - - - - - - + + + + + + + - - + + - - - - - - - + + + + + + + - - + + - - - - - - - + + + + + + + - - + + - - + + - - + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - + + - - + + - - + + - - + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/app-store-badge.inline.svg b/packages/yoroi-extension/app/assets/images/app-store-badge.inline.svg index 32a109a907..b46cb95552 100644 --- a/packages/yoroi-extension/app/assets/images/app-store-badge.inline.svg +++ b/packages/yoroi-extension/app/assets/images/app-store-badge.inline.svg @@ -1,33 +1,33 @@ 0610BB62-2ED0-4D93-90E0-F15EFC3EC178 - + - - - + + + - + - - - + + + - - - - + + + + - + diff --git a/packages/yoroi-extension/app/assets/images/arrow-down.inline.svg b/packages/yoroi-extension/app/assets/images/arrow-down.inline.svg index 8e1dc6b812..a0c520975c 100644 --- a/packages/yoroi-extension/app/assets/images/arrow-down.inline.svg +++ b/packages/yoroi-extension/app/assets/images/arrow-down.inline.svg @@ -1,9 +1,9 @@ icon / arrow down - + - + diff --git a/packages/yoroi-extension/app/assets/images/arrow-up.inline.svg b/packages/yoroi-extension/app/assets/images/arrow-up.inline.svg index 41bd760436..b5e65216e5 100644 --- a/packages/yoroi-extension/app/assets/images/arrow-up.inline.svg +++ b/packages/yoroi-extension/app/assets/images/arrow-up.inline.svg @@ -1,8 +1,8 @@ icon / arrow up - - + + diff --git a/packages/yoroi-extension/app/assets/images/assets-page/asset-no.inline.svg b/packages/yoroi-extension/app/assets/images/assets-page/asset-no.inline.svg index 218b1c86b0..0bf2f8ef47 100644 --- a/packages/yoroi-extension/app/assets/images/assets-page/asset-no.inline.svg +++ b/packages/yoroi-extension/app/assets/images/assets-page/asset-no.inline.svg @@ -1,8 +1,8 @@ icon/asset-no image - + - + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/assets-page/assets.inline.svg b/packages/yoroi-extension/app/assets/images/assets-page/assets.inline.svg index 701745b244..d45e5a002a 100644 --- a/packages/yoroi-extension/app/assets/images/assets-page/assets.inline.svg +++ b/packages/yoroi-extension/app/assets/images/assets-page/assets.inline.svg @@ -1,7 +1,7 @@ icon/assets-grey - + diff --git a/packages/yoroi-extension/app/assets/images/assets-page/chevron-right.inline.svg b/packages/yoroi-extension/app/assets/images/assets-page/chevron-right.inline.svg index c75aa644b5..737b86de86 100644 --- a/packages/yoroi-extension/app/assets/images/assets-page/chevron-right.inline.svg +++ b/packages/yoroi-extension/app/assets/images/assets-page/chevron-right.inline.svg @@ -1,3 +1,3 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/assets-page/grid-2x2.inline.svg b/packages/yoroi-extension/app/assets/images/assets-page/grid-2x2.inline.svg index d28faae903..91ae38082b 100644 --- a/packages/yoroi-extension/app/assets/images/assets-page/grid-2x2.inline.svg +++ b/packages/yoroi-extension/app/assets/images/assets-page/grid-2x2.inline.svg @@ -1,6 +1,6 @@ - - - - + + + + diff --git a/packages/yoroi-extension/app/assets/images/assets-page/grid-3x3.inline.svg b/packages/yoroi-extension/app/assets/images/assets-page/grid-3x3.inline.svg index 0346c47a2c..23b8120519 100644 --- a/packages/yoroi-extension/app/assets/images/assets-page/grid-3x3.inline.svg +++ b/packages/yoroi-extension/app/assets/images/assets-page/grid-3x3.inline.svg @@ -1,11 +1,11 @@ - - - - - - - - - + + + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/assets-page/no-nft-found.inline.svg b/packages/yoroi-extension/app/assets/images/assets-page/no-nft-found.inline.svg index 075407371f..7eac287347 100644 --- a/packages/yoroi-extension/app/assets/images/assets-page/no-nft-found.inline.svg +++ b/packages/yoroi-extension/app/assets/images/assets-page/no-nft-found.inline.svg @@ -12,7 +12,7 @@ - + @@ -31,82 +31,82 @@ - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - - + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - + + - - + + - - - - - - - + + + + + + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/assets-page/no-nfts.inline.svg b/packages/yoroi-extension/app/assets/images/assets-page/no-nfts.inline.svg index 6846bdbe5f..6c8f7ee3e0 100644 --- a/packages/yoroi-extension/app/assets/images/assets-page/no-nfts.inline.svg +++ b/packages/yoroi-extension/app/assets/images/assets-page/no-nfts.inline.svg @@ -12,7 +12,7 @@ - + @@ -31,82 +31,82 @@ - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - - + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - + + - - + + - - - - - - - + + + + + + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/assets-page/no-tokens.inline.svg b/packages/yoroi-extension/app/assets/images/assets-page/no-tokens.inline.svg index 88516c249d..1e0f972cc6 100644 --- a/packages/yoroi-extension/app/assets/images/assets-page/no-tokens.inline.svg +++ b/packages/yoroi-extension/app/assets/images/assets-page/no-tokens.inline.svg @@ -13,19 +13,19 @@ - + - + - + - + @@ -33,130 +33,130 @@ - - + + - - - - - - - - - + + + + + + + + + - - + + - - - - - - - + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - + + - - + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/assets-page/search.inline.svg b/packages/yoroi-extension/app/assets/images/assets-page/search.inline.svg index 76350d463e..2a8441b50e 100644 --- a/packages/yoroi-extension/app/assets/images/assets-page/search.inline.svg +++ b/packages/yoroi-extension/app/assets/images/assets-page/search.inline.svg @@ -4,7 +4,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/attention-big-light.inline.svg b/packages/yoroi-extension/app/assets/images/attention-big-light.inline.svg index abd23b3035..1602e4e08a 100644 --- a/packages/yoroi-extension/app/assets/images/attention-big-light.inline.svg +++ b/packages/yoroi-extension/app/assets/images/attention-big-light.inline.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/attention-classic.inline.svg b/packages/yoroi-extension/app/assets/images/attention-classic.inline.svg index 2b821028b5..c2ab17c56c 100644 --- a/packages/yoroi-extension/app/assets/images/attention-classic.inline.svg +++ b/packages/yoroi-extension/app/assets/images/attention-classic.inline.svg @@ -3,10 +3,10 @@ icon/attention.inline Created with Sketch. - + - + diff --git a/packages/yoroi-extension/app/assets/images/attention-modern.inline.svg b/packages/yoroi-extension/app/assets/images/attention-modern.inline.svg index f480695ce8..dc6aa9b285 100644 --- a/packages/yoroi-extension/app/assets/images/attention-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/attention-modern.inline.svg @@ -3,10 +3,10 @@ icon/attention.inline Created with Sketch. - + - + diff --git a/packages/yoroi-extension/app/assets/images/back-arrow-ic.inline.svg b/packages/yoroi-extension/app/assets/images/back-arrow-ic.inline.svg index 53b148091f..202e459f35 100644 --- a/packages/yoroi-extension/app/assets/images/back-arrow-ic.inline.svg +++ b/packages/yoroi-extension/app/assets/images/back-arrow-ic.inline.svg @@ -1 +1 @@ -D3D7852F-EF60-41C7-BDB2-B25B249B24F3 \ No newline at end of file +D3D7852F-EF60-41C7-BDB2-B25B249B24F3 \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/banxa.png b/packages/yoroi-extension/app/assets/images/banxa.png index 908d05615e62b765b2d55a17eb663da80d4b503f..8473d98761e6ba4e11d404da084fdf2d0fa7409f 100644 GIT binary patch delta 1885 zcmV-j2cr1w1^NyliBL{Q4GJ0x0000DNk~Le0000m0000m2nGNE09OL}hmj#Pe+Lgq zL_t(|0qt1LZX87r{;Iv%0GBvV;PnX!0Ay1o?vZ@BPc%?Zp7xw zA>o9?fpxeMf05^aeb zK7$g)Aog6a$dEkSjMq_voIHs&aRYV46)ne$C9GmTS;8IxQ9MV3^$znc_Argv`CXhq z>WILK=rd(l;WVN;2T~lVyHh%oD-YyoOyX>4X_!0P{ zvj`4%t;z-i301Y%`Ev&!&Q06p)6TX$&@y9@4OBzCPKY0`;r+`$VhkBS0wuLG?paud z`*Og%U-D{xRPHU2Wo}a51{FhQv;38}#--Kq4ERlG6QKojJCfp-f3o%ygEoX+)~n|Q z<1)NiT~h{{(W<`RLIY#b>hTTeNa99XP9IJRkYz&8pq}?D>GBeKF-j?6)MV8|&X%1N zUbg`gVMPkld0`Lla*``8i6fNc*TwrgL+{C$7`tZAMs~$hpO?z@q%?xZPUzzqAl?^( zU+9Ah67wJ#w2i%TfAzrk3)~XT|4w~I&gcq&a#%cWpLEO!OmtLfa-}&ZFu5)og*9B< z$NO2N>T(&^;JuN*pR*w!Wi5eY$mlfs^RJ84pzn+<137h?`H^JxrT%=5kFHFQG8H}9 z?1=7jS%cJptydtIdw+~hvt#VQEByP z1AY=}DaD(aJE1Cfz)0n!^qF;o%&`uxM=n2UY_z1L={X z&?XuqCELDI#M?5<3ymb_Hm@?lSni9XX!URdN?H0vnOh@J!0EEIabip0iB-&B+`+h_ zv?^OIx%c+M9FXZXQDl2O1HON_D1L5nsSG0%>aXzRe-+P*A+&?fE{^a0o)PP!?4~Ij zQ)>dxvGl~8L}3}nGT`pRmO!R0$_h+?3OX?vVtIgTs7s`GvSdcpUf9~%*FHK-D+kf) z{st6bL6mGk6E!I>ij#R>l`q3OKELz`b;<0!QtC#T0$=}rRYG-7_AlYym)GQ+ zTsA_zL~+b?O6n%u1Uz}+}+kW11SFrc8DzNeFR);z5!Z}M=!IjNwJ3|56G`_c`C zLM#5Gd!z2IAk&7@JOE>X2B?g#&`W(jK(}4&x+v0$K%2ziEqdOQv`D19pcImZ6}Q=} ze{v5(Uu`YOd{ai1LY-8~RbfpU%ehb}8~>+Tkb0rq4_Q&;JSGh0dRv2&8n!+{a42$W zP2kntHAK~B$10&Qu;)aW!IKBe!v=J*!d-Tz$(*kRtF$9DC%hhzQ7N2}7>)Dp18LgxFo^ApR z8BpS}+@2wF%!{(Qx(l38?Q8m1Qb-$B#k5w*Ris{Pj4JGD&B*2>-vWm3&V_Uyf9+mg zmH9!pYusqh!Mr8L*cygVAv+0zdES$67r}Bs`XBu%oGcdI}z`_I=9RSqcR61=K>@w{Mmzre*%F? zL_t(|0kxGqZ_`i|hTm&DY282w6s#)!3Katbf(n>X7*N?@ zA;dso;U_S3C`^bg6(Eq3R2dRkNl}`rA#q4*U(U5FND~{IHhq)h>)7|6=bUpt0(6OU zo+Mi!%k$t$lP!`Z;3aw)+jhKHe+eHkH|J^IKc#m-cz+`A)`IZOxKp=0f{5EAsA2R8 zq>B<=9tQEdxz)yOIfv_oZ>Y9g2&k(HU8a4zagGOi4$pp;ZJZhoVPknByPkB8PBmcmmuae{iLUGA&{5Q7g$Kc+7v*p;uebFo1iLqdT^iSe|p*IEHx$ z8>WT(WD$ zHiP9g8ZcxcG(>YSK(!d8H(_CPAEJH=heZ407q!H|g@aLim^#~&e~HqAq{8ZJbQBn( z;4)2tL{O8;LUEIcXUuMyeJ;Tg#pBSME$66m$v_-*iOz?G^*X*(2qMuCic%Pp?P}OX zC8l#P0L<}vJ`#l{D-QUtR>TrZxu3Qc?}HXa21z2l$NuQJef7>_PfGp4@csVF?11zm slT?rME>ME(HUGbi9P-ETzBwHvj+t07*qoM6N<$g7zmyI{*Lx diff --git a/packages/yoroi-extension/app/assets/images/complexity-level/advanced-level.inline.svg b/packages/yoroi-extension/app/assets/images/complexity-level/advanced-level.inline.svg index bfedb4c099..93e8a8df56 100644 --- a/packages/yoroi-extension/app/assets/images/complexity-level/advanced-level.inline.svg +++ b/packages/yoroi-extension/app/assets/images/complexity-level/advanced-level.inline.svg @@ -5,173 +5,173 @@ Created with Sketch. - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - + - - + + - - + + - + - - - - + + + + @@ -186,22 +186,22 @@ - - - - - + + + + + - + - - + + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/complexity-level/beginner-level.inline.svg b/packages/yoroi-extension/app/assets/images/complexity-level/beginner-level.inline.svg index 6e63acf695..8d92c9766d 100644 --- a/packages/yoroi-extension/app/assets/images/complexity-level/beginner-level.inline.svg +++ b/packages/yoroi-extension/app/assets/images/complexity-level/beginner-level.inline.svg @@ -5,87 +5,87 @@ Created with Sketch. - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - + - - - - - - - - - - - + + + + + + + + + + + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/copied.inline.svg b/packages/yoroi-extension/app/assets/images/copied.inline.svg index e5402cfabb..9a9eff855e 100644 --- a/packages/yoroi-extension/app/assets/images/copied.inline.svg +++ b/packages/yoroi-extension/app/assets/images/copied.inline.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/copy.inline.svg b/packages/yoroi-extension/app/assets/images/copy.inline.svg index eb7dac3d1d..2425b226ca 100644 --- a/packages/yoroi-extension/app/assets/images/copy.inline.svg +++ b/packages/yoroi-extension/app/assets/images/copy.inline.svg @@ -1,4 +1,4 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/cross-dark.inline.svg b/packages/yoroi-extension/app/assets/images/cross-dark.inline.svg index 4dd19fba72..a3871260e5 100644 --- a/packages/yoroi-extension/app/assets/images/cross-dark.inline.svg +++ b/packages/yoroi-extension/app/assets/images/cross-dark.inline.svg @@ -3,7 +3,7 @@ close Created with Sketch. - + diff --git a/packages/yoroi-extension/app/assets/images/currencies/ADA.inline.svg b/packages/yoroi-extension/app/assets/images/currencies/ADA.inline.svg index 2e92235c48..5c312b81ba 100644 --- a/packages/yoroi-extension/app/assets/images/currencies/ADA.inline.svg +++ b/packages/yoroi-extension/app/assets/images/currencies/ADA.inline.svg @@ -1,4 +1,4 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/currencies/BRL.inline.svg b/packages/yoroi-extension/app/assets/images/currencies/BRL.inline.svg index da069779b5..237c06b0bd 100644 --- a/packages/yoroi-extension/app/assets/images/currencies/BRL.inline.svg +++ b/packages/yoroi-extension/app/assets/images/currencies/BRL.inline.svg @@ -9,26 +9,26 @@ - - + + - + - - + + - - + + - + - + diff --git a/packages/yoroi-extension/app/assets/images/currencies/CNY.inline.svg b/packages/yoroi-extension/app/assets/images/currencies/CNY.inline.svg index 0432493796..53dc39c0b0 100644 --- a/packages/yoroi-extension/app/assets/images/currencies/CNY.inline.svg +++ b/packages/yoroi-extension/app/assets/images/currencies/CNY.inline.svg @@ -8,12 +8,12 @@ - - - - - - + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/currencies/EUR.inline.svg b/packages/yoroi-extension/app/assets/images/currencies/EUR.inline.svg index 431ff735dd..0563ce8901 100644 --- a/packages/yoroi-extension/app/assets/images/currencies/EUR.inline.svg +++ b/packages/yoroi-extension/app/assets/images/currencies/EUR.inline.svg @@ -1,17 +1,17 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/currencies/JPY.inline.svg b/packages/yoroi-extension/app/assets/images/currencies/JPY.inline.svg index 6dc5a8abde..dd5ab907d0 100644 --- a/packages/yoroi-extension/app/assets/images/currencies/JPY.inline.svg +++ b/packages/yoroi-extension/app/assets/images/currencies/JPY.inline.svg @@ -5,7 +5,7 @@ - - + + diff --git a/packages/yoroi-extension/app/assets/images/currencies/KRW.inline.svg b/packages/yoroi-extension/app/assets/images/currencies/KRW.inline.svg index 2c7578b107..ad037f90bc 100644 --- a/packages/yoroi-extension/app/assets/images/currencies/KRW.inline.svg +++ b/packages/yoroi-extension/app/assets/images/currencies/KRW.inline.svg @@ -4,28 +4,28 @@ - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/dapp-connector/add-collateral.inline.svg b/packages/yoroi-extension/app/assets/images/dapp-connector/add-collateral.inline.svg index 0dabf4c8b6..85ce4fe451 100644 --- a/packages/yoroi-extension/app/assets/images/dapp-connector/add-collateral.inline.svg +++ b/packages/yoroi-extension/app/assets/images/dapp-connector/add-collateral.inline.svg @@ -21,7 +21,7 @@ - + @@ -33,168 +33,168 @@ - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - - + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - - + + - - + + - - + + - - + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/dapp-connector/dapp-connector.inline.svg b/packages/yoroi-extension/app/assets/images/dapp-connector/dapp-connector.inline.svg index 65d993ac88..f773aa9edf 100644 --- a/packages/yoroi-extension/app/assets/images/dapp-connector/dapp-connector.inline.svg +++ b/packages/yoroi-extension/app/assets/images/dapp-connector/dapp-connector.inline.svg @@ -1,8 +1,8 @@ icon/dapp connector - - + + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/dapp-connector/delete.inline.svg b/packages/yoroi-extension/app/assets/images/dapp-connector/delete.inline.svg index 2e34d96ebd..e66c61d793 100644 --- a/packages/yoroi-extension/app/assets/images/dapp-connector/delete.inline.svg +++ b/packages/yoroi-extension/app/assets/images/dapp-connector/delete.inline.svg @@ -1,10 +1,10 @@ icon/delete - + - + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/dapp-connector/no-dapp.inline.svg b/packages/yoroi-extension/app/assets/images/dapp-connector/no-dapp.inline.svg index 1dec0c5e41..f400d9c213 100644 --- a/packages/yoroi-extension/app/assets/images/dapp-connector/no-dapp.inline.svg +++ b/packages/yoroi-extension/app/assets/images/dapp-connector/no-dapp.inline.svg @@ -1,7 +1,7 @@ icon/dapp-no image - + @@ -9,7 +9,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/dapp-connector/no-dapps-connected.inline.svg b/packages/yoroi-extension/app/assets/images/dapp-connector/no-dapps-connected.inline.svg index e092aa7e63..ec19d5888f 100644 --- a/packages/yoroi-extension/app/assets/images/dapp-connector/no-dapps-connected.inline.svg +++ b/packages/yoroi-extension/app/assets/images/dapp-connector/no-dapps-connected.inline.svg @@ -5,27 +5,27 @@ Created with Sketch. - - - - - - + + + + + + - - - - - - + + + + + + - - + + - + @@ -33,7 +33,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/dashboard/empty-dashboard.inline.svg b/packages/yoroi-extension/app/assets/images/dashboard/empty-dashboard.inline.svg index 89e54da6ee..7e0e2c7d8c 100644 --- a/packages/yoroi-extension/app/assets/images/dashboard/empty-dashboard.inline.svg +++ b/packages/yoroi-extension/app/assets/images/dashboard/empty-dashboard.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/dashboard/grey-total-ada.inline.svg b/packages/yoroi-extension/app/assets/images/dashboard/grey-total-ada.inline.svg index 832a6aa535..f3d6005aa2 100644 --- a/packages/yoroi-extension/app/assets/images/dashboard/grey-total-ada.inline.svg +++ b/packages/yoroi-extension/app/assets/images/dashboard/grey-total-ada.inline.svg @@ -1,7 +1,7 @@ icon/total-ada - + diff --git a/packages/yoroi-extension/app/assets/images/dashboard/grey-total-reward.inline.svg b/packages/yoroi-extension/app/assets/images/dashboard/grey-total-reward.inline.svg index e5d4fe8ddb..afc134451c 100644 --- a/packages/yoroi-extension/app/assets/images/dashboard/grey-total-reward.inline.svg +++ b/packages/yoroi-extension/app/assets/images/dashboard/grey-total-reward.inline.svg @@ -1,7 +1,7 @@ icon/total-reward - + diff --git a/packages/yoroi-extension/app/assets/images/dashboard/staking-active.inline.svg b/packages/yoroi-extension/app/assets/images/dashboard/staking-active.inline.svg index 3b4564afeb..bbcd8cc68d 100644 --- a/packages/yoroi-extension/app/assets/images/dashboard/staking-active.inline.svg +++ b/packages/yoroi-extension/app/assets/images/dashboard/staking-active.inline.svg @@ -1,6 +1,6 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/dashboard/staking-illustration.inline.svg b/packages/yoroi-extension/app/assets/images/dashboard/staking-illustration.inline.svg index d5f526d60f..7893b4a2da 100644 --- a/packages/yoroi-extension/app/assets/images/dashboard/staking-illustration.inline.svg +++ b/packages/yoroi-extension/app/assets/images/dashboard/staking-illustration.inline.svg @@ -27,171 +27,171 @@ - + - + - - - - - - - + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - - - + + + + + + + - - + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - - + + - - - - - - - - - + + + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/dashboard/total-delegated.inline.svg b/packages/yoroi-extension/app/assets/images/dashboard/total-delegated.inline.svg index 2659a4f15c..0cbb5c3c80 100644 --- a/packages/yoroi-extension/app/assets/images/dashboard/total-delegated.inline.svg +++ b/packages/yoroi-extension/app/assets/images/dashboard/total-delegated.inline.svg @@ -1,4 +1,4 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/default-nft.inline.svg b/packages/yoroi-extension/app/assets/images/default-nft.inline.svg index bb57de9d73..33ffcb85da 100644 --- a/packages/yoroi-extension/app/assets/images/default-nft.inline.svg +++ b/packages/yoroi-extension/app/assets/images/default-nft.inline.svg @@ -1,28 +1,28 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/edit.inline.svg b/packages/yoroi-extension/app/assets/images/edit.inline.svg index b2391d9baa..8dc7d718f1 100644 --- a/packages/yoroi-extension/app/assets/images/edit.inline.svg +++ b/packages/yoroi-extension/app/assets/images/edit.inline.svg @@ -3,10 +3,10 @@ edit.inline Created with Sketch. - + - + diff --git a/packages/yoroi-extension/app/assets/images/emurgo-logo-small.svg b/packages/yoroi-extension/app/assets/images/emurgo-logo-small.svg new file mode 100644 index 0000000000..ca11e686fa --- /dev/null +++ b/packages/yoroi-extension/app/assets/images/emurgo-logo-small.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/encryptus.png b/packages/yoroi-extension/app/assets/images/encryptus.png new file mode 100644 index 0000000000000000000000000000000000000000..60119e175cee7913712ee0deb959ab33b9022a44 GIT binary patch literal 2448 zcmV;B32*j^P)G+4O zHfd{;X{I%OWF}*3l-G(K8?>pZRfCAINI)P@Eztl1%RcToU%zt~4D8+uyRgRm26pc~ zkMDfnIp6DiOGy&Yv_CIZrt>B|5!-&7$b5PP{lAqLNJybC?Q}%dSD7jy9{ppRv&V` zoK@P`O%gyt0(4eqJ!*h!CvJ5bAcKl&#iOKZhvjv0iS7yv&!PbDf?(x~HlN=Y@7%c7 z^3~)na7g}V$;8(vu*vIPoIn+;b%w%^W^TFAHPP4!d1(5R!N<>2$tKWg8j>V@f`k6LkhC4gHs~T8FuQb?CWLct zkO%MNKvyHBuTQjd5g}Me3uzDDUfS@g?W%SitrbfiW}19SF)ryi0|AapaQv}Hn^$qy z#>3Z09B8UrldAV$EoMyo1RcQ25i77;Aqc$0v#GI)#4A9Pcga1vByTWuCDO()DbQ9T z*%MhMjkRP7XsNiPROf-+xK4)M80_l}Q@Pet=xd1XW6=$rhjTKV5?-dt4@UlC5T@{K z{ZQ_bsWPvSTT=g;WT71NYQItr!U~kgG^eCT+YYRnAKj-#HyFbC3ISt*;#(j+1`*Xa z-8!LyNcm)5vF~^2n@F;dy|F!rUr)8xhGDZNkkuZbl{+IA|{ph|iB6n3T z`YsT$N^v|o4vjD`2`|esnZGeuT_U7RR!C|wh!Z+ch&r9V&K1M zu=8S~s(O>K1DXFdi33gh*Q8E!T%H+Z?wJNnaS`abJniFI?`MAJSRkJHt<}pOL(SjI ztc|;e`R8UXEIZn#Uap@&DhxdY4CYyxtdw+jJj}OM7L;79T7E=N>G>e+V4YMOI_;u; zZ|EG_j9ahtw0LvtnrfDPdm=iEiyEIp9eBpZH>Dfy51$-)F*$9j%S&|(vL@X51u@4#W&)EhkC@*Ji1qYhZ zfO9N*FEf82XJJ`KpShCm58scJ7g!NOKl;=0nD3}q`aMC6dYoUN5sZ>~Qgm^fzDCmhChQ-E_vmQ6!r*~CD` z3<5@X+YxWAT$#f_-$lvDZV#(R0-2r~>Y(!X%@uho?8fLp@+Yfy4zT`A<=hme8=D^Pz%^udUu})t9aED<=PK)hC$rXcV-2 zFnGnVfUff-u>pth4+JF^(PA`Hv>!j(kkUtFLIH3&9<;qu@-Wl^r|Y8I9fGgWFja6_ z=`J_ir>ux|?%VD%*qOVyRK{xMsTCpC#0=-gtj(w2BT0bZj&??b)lzdb0C@{A8hZlz zz$GhULo*w0!$~e;lVW243OT}|O_^I7lfrz28E8;>Ui5nCd}cGs=`B`sM2PoV({j$1 z6voNm>8W_Gf{8#nc);qkQBB=u97x0jfkQx()b#gOKxgJANd}jpG)-Ek+IR}mvbe;! zbXm1)?An!x)3iAQNfuw&e`h91CZzU&&8c6-sL%dqISE|(R?WgS=L*(x?5~cLq&l2~ zwJirTGDs5O^DfzjnfwlurKm#(fL^pmc8Sth3kMd?vLfhNdu*V^>p96KY_L`$6pzCq z&Qm+EC~%TcqmN7y4nlK?!83pw$UKdyDFEX`8sW4a*ZgMmWHfFSp?_&b7=-=;rNIrv z7Ln@*UaM9|U9J*>ncOfz?5q?FaspK-?6cA?tVVpf&HIh%RuglJ>JK61Gvp=%Q<(-f zAl*lKq(C_axP!Vhx=O4jnrV{|-zPT_YRl7m=hZP)6_$)0wHm}2d&G`Fc8TvSO8LW2 zr&bpWCS}E(ZT}cFoog6iA6OYOVQbpF%WZW%yRdmL*8G1q)nslmkVHGAzD)uA{=CCz zY#&AsQmHZ%;b+V7dS^!n@2@+FbbIiz#CVt6?)}dPf~Bm-WFY1~VBWPrQw86rB)BiMR4gwgHyO4L z{9@J8jgrdh@y0~TSn@4Hl070YtJ1Cra3e8p1ZwiGxZeTduUIU0O%$r6IRI)gbeuGR zp8_7Z#6#g;m+cJI6Bzfo-!J=?ZGE?gOjZDe^VN6crjVc)<8($sH#e15qpmUY@;_Yk zO5l?L?F}(^k!RzX6J#m^D5zg;KscVqUpMX}HyFxMVDLOHiFi1#u;rbJ#wV1-yj_#O zoq_lT?(G*z(g7;V?L~WfI%kvbg?MKroQ1U?xqFrf^*>0N_z_<0Ge|N3(9NXwJd^C1 zkq8?vCY?r}sa%+ O00000+I{> literal 0 HcmV?d00001 diff --git a/packages/yoroi-extension/app/assets/images/error-info.inline.svg b/packages/yoroi-extension/app/assets/images/error-info.inline.svg index 129f7f8966..cc90977bec 100644 --- a/packages/yoroi-extension/app/assets/images/error-info.inline.svg +++ b/packages/yoroi-extension/app/assets/images/error-info.inline.svg @@ -6,16 +6,16 @@ - - + + - - + + - + diff --git a/packages/yoroi-extension/app/assets/images/exchange-end-illustration.svg b/packages/yoroi-extension/app/assets/images/exchange-end-illustration.svg index 5891345967..43f46784ff 100644 --- a/packages/yoroi-extension/app/assets/images/exchange-end-illustration.svg +++ b/packages/yoroi-extension/app/assets/images/exchange-end-illustration.svg @@ -1,169 +1,169 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - + - - - - - - - + + + + + + + - - - + + + - - - + + + - + - + - - + + - - + + - - + + - - - - - - - - - + + + + + + + + + - + - - - - - - + + + + + + - - - - - - + + + + + + - - + + - - - - - - + + + + + + - - - - - - + + + + + + - - + + - - - - - - + + + + + + - - - - - - + + + + + + - - + + - - - - - - + + + + + + - - - - - - + + + + + + - - + + - - - - - - + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/expand-arrow-grey.inline.svg b/packages/yoroi-extension/app/assets/images/expand-arrow-grey.inline.svg index 66a40ace62..46a7cf9b69 100644 --- a/packages/yoroi-extension/app/assets/images/expand-arrow-grey.inline.svg +++ b/packages/yoroi-extension/app/assets/images/expand-arrow-grey.inline.svg @@ -3,8 +3,8 @@ icon/arrow Created with Sketch. - - - + + + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/flags/brazil.inline.svg b/packages/yoroi-extension/app/assets/images/flags/brazil.inline.svg index 939acd6951..21fb619338 100644 --- a/packages/yoroi-extension/app/assets/images/flags/brazil.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/brazil.inline.svg @@ -5,7 +5,7 @@ - + @@ -13,40 +13,40 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/flags/chinese.inline.svg b/packages/yoroi-extension/app/assets/images/flags/chinese.inline.svg index c8e9fdfff9..d3a63956fd 100644 --- a/packages/yoroi-extension/app/assets/images/flags/chinese.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/chinese.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/flags/czech.inline.svg b/packages/yoroi-extension/app/assets/images/flags/czech.inline.svg index 75f9aff55b..543ba5d5ab 100644 --- a/packages/yoroi-extension/app/assets/images/flags/czech.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/czech.inline.svg @@ -4,14 +4,14 @@ - + - + diff --git a/packages/yoroi-extension/app/assets/images/flags/dutch.inline.svg b/packages/yoroi-extension/app/assets/images/flags/dutch.inline.svg index d941a99af7..c5f5712242 100644 --- a/packages/yoroi-extension/app/assets/images/flags/dutch.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/dutch.inline.svg @@ -6,7 +6,7 @@ - + @@ -17,9 +17,9 @@ - - - + + + diff --git a/packages/yoroi-extension/app/assets/images/flags/english.inline.svg b/packages/yoroi-extension/app/assets/images/flags/english.inline.svg index 9f09c083c6..7131ae6ed3 100644 --- a/packages/yoroi-extension/app/assets/images/flags/english.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/english.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/flags/french.inline.svg b/packages/yoroi-extension/app/assets/images/flags/french.inline.svg index c91f76a93f..43fd73ea36 100644 --- a/packages/yoroi-extension/app/assets/images/flags/french.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/french.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/flags/german.inline.svg b/packages/yoroi-extension/app/assets/images/flags/german.inline.svg index cce6ef02e3..1f6e5ee522 100644 --- a/packages/yoroi-extension/app/assets/images/flags/german.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/german.inline.svg @@ -6,7 +6,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/flags/indonesian.inline.svg b/packages/yoroi-extension/app/assets/images/flags/indonesian.inline.svg index 00d61d765b..43ceba0003 100644 --- a/packages/yoroi-extension/app/assets/images/flags/indonesian.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/indonesian.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/flags/italian.inline.svg b/packages/yoroi-extension/app/assets/images/flags/italian.inline.svg index e4cc2b9065..1abb0ce2f2 100644 --- a/packages/yoroi-extension/app/assets/images/flags/italian.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/italian.inline.svg @@ -6,7 +6,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/flags/japanese.inline.svg b/packages/yoroi-extension/app/assets/images/flags/japanese.inline.svg index cbf9800cfd..be157e873a 100644 --- a/packages/yoroi-extension/app/assets/images/flags/japanese.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/japanese.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/flags/korean.inline.svg b/packages/yoroi-extension/app/assets/images/flags/korean.inline.svg index 77ffef7981..eb75c14fc3 100644 --- a/packages/yoroi-extension/app/assets/images/flags/korean.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/korean.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/flags/russian.inline.svg b/packages/yoroi-extension/app/assets/images/flags/russian.inline.svg index 6b22eec790..9c6cd54c0f 100644 --- a/packages/yoroi-extension/app/assets/images/flags/russian.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/russian.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/flags/slovak.inline.svg b/packages/yoroi-extension/app/assets/images/flags/slovak.inline.svg index b2a6aeb9c5..50ca6f21a2 100644 --- a/packages/yoroi-extension/app/assets/images/flags/slovak.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/slovak.inline.svg @@ -5,7 +5,7 @@ - + @@ -13,13 +13,13 @@ - - - - + + + + - + @@ -27,8 +27,8 @@ - - + + diff --git a/packages/yoroi-extension/app/assets/images/flags/spanish.inline.svg b/packages/yoroi-extension/app/assets/images/flags/spanish.inline.svg index 6f93383cdd..11b366ffa1 100644 --- a/packages/yoroi-extension/app/assets/images/flags/spanish.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/spanish.inline.svg @@ -6,7 +6,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/flags/turkish.inline.svg b/packages/yoroi-extension/app/assets/images/flags/turkish.inline.svg index 64b56fef0b..896c5f0309 100644 --- a/packages/yoroi-extension/app/assets/images/flags/turkish.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/turkish.inline.svg @@ -6,7 +6,7 @@ - + @@ -14,7 +14,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/flags/vietnamese.inline.svg b/packages/yoroi-extension/app/assets/images/flags/vietnamese.inline.svg index d69278e824..868caa51ba 100644 --- a/packages/yoroi-extension/app/assets/images/flags/vietnamese.inline.svg +++ b/packages/yoroi-extension/app/assets/images/flags/vietnamese.inline.svg @@ -26,7 +26,7 @@ - @@ -39,7 +39,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/forms/close.inline.svg b/packages/yoroi-extension/app/assets/images/forms/close.inline.svg index 35c8c328a3..87eda4d678 100644 --- a/packages/yoroi-extension/app/assets/images/forms/close.inline.svg +++ b/packages/yoroi-extension/app/assets/images/forms/close.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/forms/done.inline.svg b/packages/yoroi-extension/app/assets/images/forms/done.inline.svg index 43bf108e60..b243ba8ff8 100644 --- a/packages/yoroi-extension/app/assets/images/forms/done.inline.svg +++ b/packages/yoroi-extension/app/assets/images/forms/done.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/forms/error.inline.svg b/packages/yoroi-extension/app/assets/images/forms/error.inline.svg index 8a520304c2..43f2c0c66a 100644 --- a/packages/yoroi-extension/app/assets/images/forms/error.inline.svg +++ b/packages/yoroi-extension/app/assets/images/forms/error.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/forms/password-eye.inline.svg b/packages/yoroi-extension/app/assets/images/forms/password-eye.inline.svg index b50ba27608..9dbe97e92f 100644 --- a/packages/yoroi-extension/app/assets/images/forms/password-eye.inline.svg +++ b/packages/yoroi-extension/app/assets/images/forms/password-eye.inline.svg @@ -1,4 +1,4 @@ - - + + diff --git a/packages/yoroi-extension/app/assets/images/generate-uri.inline.svg b/packages/yoroi-extension/app/assets/images/generate-uri.inline.svg index 78c0ef8f35..2e1114d7fb 100644 --- a/packages/yoroi-extension/app/assets/images/generate-uri.inline.svg +++ b/packages/yoroi-extension/app/assets/images/generate-uri.inline.svg @@ -3,7 +3,7 @@ icon/generate-url.inline Created with Sketch. - + diff --git a/packages/yoroi-extension/app/assets/images/google-play-badge.inline.svg b/packages/yoroi-extension/app/assets/images/google-play-badge.inline.svg index d74a00bcf5..379b23da7c 100644 --- a/packages/yoroi-extension/app/assets/images/google-play-badge.inline.svg +++ b/packages/yoroi-extension/app/assets/images/google-play-badge.inline.svg @@ -3,32 +3,32 @@ A2FB9804-6156-474B-B654-0BFD9715383C - - - - - - + + + + + + - - - - + + + + - - + + - - - - - + + + + + - + @@ -38,10 +38,10 @@ - + - + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/check-prerequisite-header-icon.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/check-prerequisite-header-icon.inline.svg index f1c8f5a491..d69809b757 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/check-prerequisite-header-icon.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/check-prerequisite-header-icon.inline.svg @@ -3,7 +3,7 @@ Group Created with Sketch. - + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/check-modern.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/check-modern.inline.svg index b59bf6283a..a1fa37ad88 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/check-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/check-modern.inline.svg @@ -5,16 +5,16 @@ Created with Sketch. - - - + + + - - + + - + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/check.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/check.inline.svg index 5b04123454..597f5f3f74 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/check.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/check.inline.svg @@ -1,6 +1,6 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/connect-error-modern.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/connect-error-modern.inline.svg index f96c68f6cb..3bd1b09804 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/connect-error-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/connect-error-modern.inline.svg @@ -7,20 +7,20 @@ - - + + - - - + + + - - + + - + @@ -50,7 +50,7 @@ - + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/connect-error.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/connect-error.inline.svg index c885ddc0a5..8747134e23 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/connect-error.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/connect-error.inline.svg @@ -4,7 +4,7 @@ - + @@ -35,6 +35,6 @@ - + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-error-modern.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-error-modern.inline.svg index 511c5ad8b0..ad07504207 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-error-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-error-modern.inline.svg @@ -7,21 +7,21 @@ - - + + - - - + + + - - + + - + @@ -54,7 +54,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-error.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-error.inline.svg index c86f99a7b1..718835a6a9 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-error.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-error.inline.svg @@ -8,7 +8,7 @@ - + @@ -44,7 +44,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-load-modern.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-load-modern.inline.svg index 1e55dd9d31..d6badb2f22 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-load-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-load-modern.inline.svg @@ -6,21 +6,21 @@ - - + + - - - + + + - - + + - + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-load.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-load.inline.svg index 87da47a3de..70bce40350 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-load.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/ledger/save-load.inline.svg @@ -8,7 +8,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/check-modern.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/check-modern.inline.svg index 7b939b9a0e..0e343ea005 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/check-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/check-modern.inline.svg @@ -5,12 +5,12 @@ Created with Sketch. - - + + - + @@ -20,9 +20,9 @@ - - - + + + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/check.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/check.inline.svg index 74e4026e80..b4d1899bb6 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/check.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/check.inline.svg @@ -3,21 +3,21 @@ - + - - - - + + + + - - - + + + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/connect-error-modern.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/connect-error-modern.inline.svg index c35cebdc0f..5bdd3af607 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/connect-error-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/connect-error-modern.inline.svg @@ -7,11 +7,11 @@ - - + + - + @@ -19,24 +19,24 @@ - + - - - - - - - - - - - + + + + + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/connect-error.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/connect-error.inline.svg index fa7d4575fa..fbf3f139e6 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/connect-error.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/connect-error.inline.svg @@ -7,7 +7,7 @@ - + @@ -15,24 +15,24 @@ - + - - - - - - - - - - - + + + + + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-error-modern.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-error-modern.inline.svg index fe84fa0983..5f20ae0fb7 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-error-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-error-modern.inline.svg @@ -7,13 +7,13 @@ - - + + - + @@ -21,7 +21,7 @@ - + @@ -36,7 +36,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -58,7 +58,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-error.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-error.inline.svg index 849dabe73b..4e19983a60 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-error.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-error.inline.svg @@ -9,7 +9,7 @@ - + @@ -54,7 +54,7 @@ - + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-load-modern.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-load-modern.inline.svg index 5e4fa2a7f4..2f7fce66ba 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-load-modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-load-modern.inline.svg @@ -6,13 +6,13 @@ - - + + - + diff --git a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-load.inline.svg b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-load.inline.svg index 121135e852..18fda8e491 100644 --- a/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-load.inline.svg +++ b/packages/yoroi-extension/app/assets/images/hardware-wallet/trezor/save-load.inline.svg @@ -9,7 +9,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/info-icon-primary.inline.svg b/packages/yoroi-extension/app/assets/images/info-icon-primary.inline.svg index 17077361f4..87dff0b1c4 100644 --- a/packages/yoroi-extension/app/assets/images/info-icon-primary.inline.svg +++ b/packages/yoroi-extension/app/assets/images/info-icon-primary.inline.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/info-icon-revamp.inline.svg b/packages/yoroi-extension/app/assets/images/info-icon-revamp.inline.svg index 29357793ed..890c6157cc 100644 --- a/packages/yoroi-extension/app/assets/images/info-icon-revamp.inline.svg +++ b/packages/yoroi-extension/app/assets/images/info-icon-revamp.inline.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/info-icon.inline.svg b/packages/yoroi-extension/app/assets/images/info-icon.inline.svg index b7456bdef2..be3c304679 100644 --- a/packages/yoroi-extension/app/assets/images/info-icon.inline.svg +++ b/packages/yoroi-extension/app/assets/images/info-icon.inline.svg @@ -3,10 +3,10 @@ icon/info Created with Sketch. - + - + diff --git a/packages/yoroi-extension/app/assets/images/info-warning.inline.svg b/packages/yoroi-extension/app/assets/images/info-warning.inline.svg index d22675c691..c9f3cec9b3 100644 --- a/packages/yoroi-extension/app/assets/images/info-warning.inline.svg +++ b/packages/yoroi-extension/app/assets/images/info-warning.inline.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/link-external.inline.svg b/packages/yoroi-extension/app/assets/images/link-external.inline.svg index d9896c5baf..b12890521b 100644 --- a/packages/yoroi-extension/app/assets/images/link-external.inline.svg +++ b/packages/yoroi-extension/app/assets/images/link-external.inline.svg @@ -6,7 +6,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/my-wallets/arrow_down.inline.svg b/packages/yoroi-extension/app/assets/images/my-wallets/arrow_down.inline.svg index 332fa912c0..c1e6bf5971 100644 --- a/packages/yoroi-extension/app/assets/images/my-wallets/arrow_down.inline.svg +++ b/packages/yoroi-extension/app/assets/images/my-wallets/arrow_down.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/my-wallets/icon_eye_closed.inline.svg b/packages/yoroi-extension/app/assets/images/my-wallets/icon_eye_closed.inline.svg index 4f5cb573a5..df24322292 100644 --- a/packages/yoroi-extension/app/assets/images/my-wallets/icon_eye_closed.inline.svg +++ b/packages/yoroi-extension/app/assets/images/my-wallets/icon_eye_closed.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/my-wallets/icon_eye_open.inline.svg b/packages/yoroi-extension/app/assets/images/my-wallets/icon_eye_open.inline.svg index 5c0e55ea02..8dcf46e710 100644 --- a/packages/yoroi-extension/app/assets/images/my-wallets/icon_eye_open.inline.svg +++ b/packages/yoroi-extension/app/assets/images/my-wallets/icon_eye_open.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/my-wallets/icon_eye_opened_revamp.inline.svg b/packages/yoroi-extension/app/assets/images/my-wallets/icon_eye_opened_revamp.inline.svg index 3379b6ec0f..0dcdec1ecb 100644 --- a/packages/yoroi-extension/app/assets/images/my-wallets/icon_eye_opened_revamp.inline.svg +++ b/packages/yoroi-extension/app/assets/images/my-wallets/icon_eye_opened_revamp.inline.svg @@ -1,4 +1,4 @@ - - + + diff --git a/packages/yoroi-extension/app/assets/images/my-wallets/symbol_ada.inline.svg b/packages/yoroi-extension/app/assets/images/my-wallets/symbol_ada.inline.svg index 728fb5a075..7ea7f6e5da 100644 --- a/packages/yoroi-extension/app/assets/images/my-wallets/symbol_ada.inline.svg +++ b/packages/yoroi-extension/app/assets/images/my-wallets/symbol_ada.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/my-wallets/symbol_adaTestnet.inline.svg b/packages/yoroi-extension/app/assets/images/my-wallets/symbol_adaTestnet.inline.svg index 0d4b43c4e5..a4f8d1f3cc 100644 --- a/packages/yoroi-extension/app/assets/images/my-wallets/symbol_adaTestnet.inline.svg +++ b/packages/yoroi-extension/app/assets/images/my-wallets/symbol_adaTestnet.inline.svg @@ -6,9 +6,9 @@ Layer 1 - + - + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/my-wallets/symbol_bitcoin.inline.svg b/packages/yoroi-extension/app/assets/images/my-wallets/symbol_bitcoin.inline.svg index 78f9203f54..a9843d99a8 100644 --- a/packages/yoroi-extension/app/assets/images/my-wallets/symbol_bitcoin.inline.svg +++ b/packages/yoroi-extension/app/assets/images/my-wallets/symbol_bitcoin.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/my-wallets/symbol_ethereum.inline.svg b/packages/yoroi-extension/app/assets/images/my-wallets/symbol_ethereum.inline.svg index fea48a4dfc..5897651b34 100644 --- a/packages/yoroi-extension/app/assets/images/my-wallets/symbol_ethereum.inline.svg +++ b/packages/yoroi-extension/app/assets/images/my-wallets/symbol_ethereum.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/new-theme-illustration.inline.svg b/packages/yoroi-extension/app/assets/images/new-theme-illustration.inline.svg index b7377a8554..921d5d97b1 100644 --- a/packages/yoroi-extension/app/assets/images/new-theme-illustration.inline.svg +++ b/packages/yoroi-extension/app/assets/images/new-theme-illustration.inline.svg @@ -1,11 +1,11 @@ - - - - - + + + + + diff --git a/packages/yoroi-extension/app/assets/images/nft-no.inline.svg b/packages/yoroi-extension/app/assets/images/nft-no.inline.svg index d1a59939cb..fbe5b6cb1e 100644 --- a/packages/yoroi-extension/app/assets/images/nft-no.inline.svg +++ b/packages/yoroi-extension/app/assets/images/nft-no.inline.svg @@ -1,7 +1,7 @@ icon/nft-no image - + @@ -27,7 +27,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/open-eye-primary.inline.svg b/packages/yoroi-extension/app/assets/images/open-eye-primary.inline.svg index 4d18864607..6721e0aee8 100644 --- a/packages/yoroi-extension/app/assets/images/open-eye-primary.inline.svg +++ b/packages/yoroi-extension/app/assets/images/open-eye-primary.inline.svg @@ -1,4 +1,4 @@ - - + + diff --git a/packages/yoroi-extension/app/assets/images/pic-catalyst-step1.inline.svg b/packages/yoroi-extension/app/assets/images/pic-catalyst-step1.inline.svg index efd8ec9a49..4d7fac6aa0 100644 --- a/packages/yoroi-extension/app/assets/images/pic-catalyst-step1.inline.svg +++ b/packages/yoroi-extension/app/assets/images/pic-catalyst-step1.inline.svg @@ -1 +1 @@ -pic \ No newline at end of file +pic \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/pic-catalyst-step2.inline.svg b/packages/yoroi-extension/app/assets/images/pic-catalyst-step2.inline.svg index aae4bbca4e..d900556cac 100644 --- a/packages/yoroi-extension/app/assets/images/pic-catalyst-step2.inline.svg +++ b/packages/yoroi-extension/app/assets/images/pic-catalyst-step2.inline.svg @@ -1 +1 @@ -pic \ No newline at end of file +pic \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/pic-catalyst-step3-ledger.inline.svg b/packages/yoroi-extension/app/assets/images/pic-catalyst-step3-ledger.inline.svg index bb8a0f6e19..f32b21d348 100644 --- a/packages/yoroi-extension/app/assets/images/pic-catalyst-step3-ledger.inline.svg +++ b/packages/yoroi-extension/app/assets/images/pic-catalyst-step3-ledger.inline.svg @@ -3,88 +3,88 @@ ledger-voting - - - - - - - + + + + + + + - - - - + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - + @@ -96,17 +96,17 @@ - + - - + + - + diff --git a/packages/yoroi-extension/app/assets/images/pic-catalyst-step3-trezor.inline.svg b/packages/yoroi-extension/app/assets/images/pic-catalyst-step3-trezor.inline.svg index e9988fe92c..5b9c5d9c17 100644 --- a/packages/yoroi-extension/app/assets/images/pic-catalyst-step3-trezor.inline.svg +++ b/packages/yoroi-extension/app/assets/images/pic-catalyst-step3-trezor.inline.svg @@ -3,94 +3,94 @@ trezor-voting - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - + @@ -103,12 +103,12 @@ - - - - - - + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/qr-code.inline.svg b/packages/yoroi-extension/app/assets/images/qr-code.inline.svg index 89bc75c4b9..c9ce430eed 100644 --- a/packages/yoroi-extension/app/assets/images/qr-code.inline.svg +++ b/packages/yoroi-extension/app/assets/images/qr-code.inline.svg @@ -1,7 +1,7 @@ 5A8618A8-D7D1-4842-95F4-1BB58CCC0C7D - + @@ -10,7 +10,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/question-mark.inline.svg b/packages/yoroi-extension/app/assets/images/question-mark.inline.svg index 4986edf101..9806c07e0c 100644 --- a/packages/yoroi-extension/app/assets/images/question-mark.inline.svg +++ b/packages/yoroi-extension/app/assets/images/question-mark.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/recovery-phrase.inline.svg b/packages/yoroi-extension/app/assets/images/recovery-phrase.inline.svg index 5b890cdfe3..53c97925a4 100644 --- a/packages/yoroi-extension/app/assets/images/recovery-phrase.inline.svg +++ b/packages/yoroi-extension/app/assets/images/recovery-phrase.inline.svg @@ -5,72 +5,72 @@ .cls-2{fill:none;stroke:#1d45ba;stroke-miterlimit:10;stroke-width:0.5px;} - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - + + - - - - + + + + recovery phrase diff --git a/packages/yoroi-extension/app/assets/images/recovery-watching.inline.svg b/packages/yoroi-extension/app/assets/images/recovery-watching.inline.svg index 219baadeb0..e99acc080f 100644 --- a/packages/yoroi-extension/app/assets/images/recovery-watching.inline.svg +++ b/packages/yoroi-extension/app/assets/images/recovery-watching.inline.svg @@ -5,80 +5,80 @@ .cls-2{fill:none;stroke:#1d45ba;stroke-miterlimit:10;stroke-width:0.5px;} - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + + + - - - - + + + + - - - - + + + + - - + + - - - - + + + + - - - - + + + + - - - - + + + + - - + + - - + + - - + + watching diff --git a/packages/yoroi-extension/app/assets/images/revamp/add-memo.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/add-memo.inline.svg index 65e8a67135..2126e688df 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/add-memo.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/add-memo.inline.svg @@ -1,4 +1,4 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/revamp/asset-default.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/asset-default.inline.svg index f41c058280..6b1e21464d 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/asset-default.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/asset-default.inline.svg @@ -1,4 +1,4 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/revamp/catalyst-step1.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/catalyst-step1.inline.svg index 2f087e983e..d5ac59cede 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/catalyst-step1.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/catalyst-step1.inline.svg @@ -13,34 +13,34 @@ - - - - + + + + - - - - - - - - - + + + + + + + + + - - - + + + - - + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/revamp/catalyst-step2.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/catalyst-step2.inline.svg index 407f738565..78907ccb07 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/catalyst-step2.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/catalyst-step2.inline.svg @@ -15,26 +15,26 @@ - - - - + + + + - - - - - - - - - + + + + + + + + + - - - + + + diff --git a/packages/yoroi-extension/app/assets/images/revamp/delete.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/delete.inline.svg index eefd00e144..75036a7532 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/delete.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/delete.inline.svg @@ -1,3 +1,3 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/revamp/dex/spec.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/dex/spec.inline.svg index 4760e93cc7..6e7ac4058f 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/dex/spec.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/dex/spec.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/revamp/dex/vyfi.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/dex/vyfi.inline.svg index 5c001a642c..d3a6af90e7 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/dex/vyfi.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/dex/vyfi.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/revamp/error.triangle.svg b/packages/yoroi-extension/app/assets/images/revamp/error.triangle.svg index 2b65bcfcbf..5ed00fb004 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/error.triangle.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/error.triangle.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/revamp/exclamation.circle.svg b/packages/yoroi-extension/app/assets/images/revamp/exclamation.circle.svg index f5b25788d6..94cbff8baa 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/exclamation.circle.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/exclamation.circle.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/revamp/icons/alert.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/icons/alert.inline.svg new file mode 100644 index 0000000000..ebbb2eca08 --- /dev/null +++ b/packages/yoroi-extension/app/assets/images/revamp/icons/alert.inline.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/yoroi-extension/app/assets/images/revamp/icons/arrow-right.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/icons/arrow-right.inline.svg new file mode 100644 index 0000000000..8d69686496 --- /dev/null +++ b/packages/yoroi-extension/app/assets/images/revamp/icons/arrow-right.inline.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/yoroi-extension/app/assets/images/revamp/icons/chevron-down.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/icons/chevron-down.inline.svg index cbde6bd57e..8f20fcc172 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/icons/chevron-down.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/icons/chevron-down.inline.svg @@ -1,3 +1,3 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/revamp/icons/edit.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/icons/edit.inline.svg index a950738361..330f53347b 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/icons/edit.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/icons/edit.inline.svg @@ -1,4 +1,4 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/revamp/icons/exclamation-circle.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/icons/exclamation-circle.inline.svg index d512d95be1..9203ed1d3e 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/icons/exclamation-circle.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/icons/exclamation-circle.inline.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/revamp/icons/info.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/icons/info.inline.svg index f4abbe9285..9df6509f1d 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/icons/info.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/icons/info.inline.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/revamp/icons/search.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/icons/search.inline.svg index 6b5b2db56a..0f11886845 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/icons/search.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/icons/search.inline.svg @@ -1,3 +1,3 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/revamp/info.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/info.inline.svg index 29357793ed..890c6157cc 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/info.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/info.inline.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/revamp/no-assets-found.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/no-assets-found.inline.svg index efb9075c7c..ee5f18697a 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/no-assets-found.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/no-assets-found.inline.svg @@ -13,19 +13,19 @@ - + - + - + - + @@ -33,129 +33,129 @@ - - + + - - - - - - - - - + + + + + + + + + - - + + - - - - - - - + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - + + - - + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + diff --git a/packages/yoroi-extension/app/assets/images/revamp/no-dapps-connected.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/no-dapps-connected.inline.svg index 224366fe51..86148a421d 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/no-dapps-connected.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/no-dapps-connected.inline.svg @@ -42,153 +42,153 @@ - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - - - + + + + + + + - - + + - - + + - - + + - - - - - - - - - + + + + + + + + + - - + + - - - - - - - - - + + + + + + + + + - - + + - - + + - - + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - + + - - - - - - - + + + + + + + - - + + - - - - - - - + + + + + + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/revamp/registration-is-not-available.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/registration-is-not-available.inline.svg index 30f07a9b09..3129df4b1e 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/registration-is-not-available.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/registration-is-not-available.inline.svg @@ -2,24 +2,24 @@ - - - - - - - - - + + + + + + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/revamp/tx-failure.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/tx-failure.inline.svg index 06e7efe216..3899119ff3 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/tx-failure.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/tx-failure.inline.svg @@ -8,17 +8,17 @@ - - - + + + - - + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/revamp/tx-successful.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/tx-successful.inline.svg index dffdfa3d7a..f6c2616321 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/tx-successful.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/tx-successful.inline.svg @@ -12,16 +12,16 @@ - - + + - - + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/revamp/verify-icon.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/verify-icon.inline.svg index cebfb0747f..3f7bea4817 100644 --- a/packages/yoroi-extension/app/assets/images/revamp/verify-icon.inline.svg +++ b/packages/yoroi-extension/app/assets/images/revamp/verify-icon.inline.svg @@ -1,3 +1,3 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/select-language-shelley.svg b/packages/yoroi-extension/app/assets/images/select-language-shelley.svg index ee2d7e30f0..0747c84435 100644 --- a/packages/yoroi-extension/app/assets/images/select-language-shelley.svg +++ b/packages/yoroi-extension/app/assets/images/select-language-shelley.svg @@ -48,8 +48,8 @@ - - + + @@ -57,8 +57,8 @@ c3.3-1.9,9.2-1.7,13,0.5l30,17.3C952.7,891.1,953.1,894.4,949.8,896.3z"/> - - + + - - + + - - + + @@ -87,59 +87,59 @@ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + @@ -164,8 +164,8 @@ c0,0-4.4-4-4.4-8.3v-6.2l-4.6-2.7C1010.6,403,1009.6,401.5,1009.5,400.1z"/> - - + + @@ -175,8 +175,8 @@ - - + + - - + + - - + + - - + + - - + + @@ -223,8 +223,8 @@ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/select-language.svg b/packages/yoroi-extension/app/assets/images/select-language.svg index 4d896479bb..c1598ea5d9 100644 --- a/packages/yoroi-extension/app/assets/images/select-language.svg +++ b/packages/yoroi-extension/app/assets/images/select-language.svg @@ -1 +1 @@ -trezor not connected技術 \ No newline at end of file +trezor not connected技術 \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/shelley-testnet-warning.inline.svg b/packages/yoroi-extension/app/assets/images/shelley-testnet-warning.inline.svg index 7f202fd836..6da2790b21 100644 --- a/packages/yoroi-extension/app/assets/images/shelley-testnet-warning.inline.svg +++ b/packages/yoroi-extension/app/assets/images/shelley-testnet-warning.inline.svg @@ -3,7 +3,7 @@ icon/warning Created with Sketch. - + diff --git a/packages/yoroi-extension/app/assets/images/sidebar/my_wallets.inline.svg b/packages/yoroi-extension/app/assets/images/sidebar/my_wallets.inline.svg index df395f8740..904bbf0b17 100644 --- a/packages/yoroi-extension/app/assets/images/sidebar/my_wallets.inline.svg +++ b/packages/yoroi-extension/app/assets/images/sidebar/my_wallets.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/sidebar/open-sidebar.inline.svg b/packages/yoroi-extension/app/assets/images/sidebar/open-sidebar.inline.svg index fe08a18e14..3a67705315 100644 --- a/packages/yoroi-extension/app/assets/images/sidebar/open-sidebar.inline.svg +++ b/packages/yoroi-extension/app/assets/images/sidebar/open-sidebar.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/sidebar/revamp/assets.inline.svg b/packages/yoroi-extension/app/assets/images/sidebar/revamp/assets.inline.svg index d333e2683e..fd5644d3bb 100644 --- a/packages/yoroi-extension/app/assets/images/sidebar/revamp/assets.inline.svg +++ b/packages/yoroi-extension/app/assets/images/sidebar/revamp/assets.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/sidebar/revamp/nfts.inline.svg b/packages/yoroi-extension/app/assets/images/sidebar/revamp/nfts.inline.svg index 92cab2a637..d3ba617d37 100644 --- a/packages/yoroi-extension/app/assets/images/sidebar/revamp/nfts.inline.svg +++ b/packages/yoroi-extension/app/assets/images/sidebar/revamp/nfts.inline.svg @@ -1,4 +1,4 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/sidebar/revamp/setting.inline.svg b/packages/yoroi-extension/app/assets/images/sidebar/revamp/setting.inline.svg index cbd991516c..e55a8d4bc0 100644 --- a/packages/yoroi-extension/app/assets/images/sidebar/revamp/setting.inline.svg +++ b/packages/yoroi-extension/app/assets/images/sidebar/revamp/setting.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/sidebar/revamp/staking.inline.svg b/packages/yoroi-extension/app/assets/images/sidebar/revamp/staking.inline.svg index 754bb5fbb6..66a08dc9ed 100644 --- a/packages/yoroi-extension/app/assets/images/sidebar/revamp/staking.inline.svg +++ b/packages/yoroi-extension/app/assets/images/sidebar/revamp/staking.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/sidebar/revamp/voting.inline.svg b/packages/yoroi-extension/app/assets/images/sidebar/revamp/voting.inline.svg index 54250586bd..c2c36c6a38 100644 --- a/packages/yoroi-extension/app/assets/images/sidebar/revamp/voting.inline.svg +++ b/packages/yoroi-extension/app/assets/images/sidebar/revamp/voting.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/sidebar/revamp/wallet.inline.svg b/packages/yoroi-extension/app/assets/images/sidebar/revamp/wallet.inline.svg index ee02d0ff88..916409450b 100644 --- a/packages/yoroi-extension/app/assets/images/sidebar/revamp/wallet.inline.svg +++ b/packages/yoroi-extension/app/assets/images/sidebar/revamp/wallet.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/sidebar/revamp/yoroi-logo.inline.svg b/packages/yoroi-extension/app/assets/images/sidebar/revamp/yoroi-logo.inline.svg index aab8fd4950..23525eab44 100644 --- a/packages/yoroi-extension/app/assets/images/sidebar/revamp/yoroi-logo.inline.svg +++ b/packages/yoroi-extension/app/assets/images/sidebar/revamp/yoroi-logo.inline.svg @@ -1,3 +1,3 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/sidebar/transfer_wallets.inline.svg b/packages/yoroi-extension/app/assets/images/sidebar/transfer_wallets.inline.svg index 386e34c9fa..91ecf1089f 100644 --- a/packages/yoroi-extension/app/assets/images/sidebar/transfer_wallets.inline.svg +++ b/packages/yoroi-extension/app/assets/images/sidebar/transfer_wallets.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/sidebar/wallet-settings-2-ic.inline.svg b/packages/yoroi-extension/app/assets/images/sidebar/wallet-settings-2-ic.inline.svg index 5b088c386e..93bebc9667 100644 --- a/packages/yoroi-extension/app/assets/images/sidebar/wallet-settings-2-ic.inline.svg +++ b/packages/yoroi-extension/app/assets/images/sidebar/wallet-settings-2-ic.inline.svg @@ -3,9 +3,9 @@ icon/wallet-settings-2-ic.inline Created with Sketch. - + - + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/sidebar/yoroi-logo-expanded.inline.svg b/packages/yoroi-extension/app/assets/images/sidebar/yoroi-logo-expanded.inline.svg index 15a56c89ff..561ef95b88 100644 --- a/packages/yoroi-extension/app/assets/images/sidebar/yoroi-logo-expanded.inline.svg +++ b/packages/yoroi-extension/app/assets/images/sidebar/yoroi-logo-expanded.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/sidebar/yoroi-logo.inline.svg b/packages/yoroi-extension/app/assets/images/sidebar/yoroi-logo.inline.svg index b1a39407e8..d479106fbe 100644 --- a/packages/yoroi-extension/app/assets/images/sidebar/yoroi-logo.inline.svg +++ b/packages/yoroi-extension/app/assets/images/sidebar/yoroi-logo.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/social/facebook.inline.svg b/packages/yoroi-extension/app/assets/images/social/facebook.inline.svg index 9e692313b2..aca22c4305 100644 --- a/packages/yoroi-extension/app/assets/images/social/facebook.inline.svg +++ b/packages/yoroi-extension/app/assets/images/social/facebook.inline.svg @@ -1,3 +1,3 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/social/github.inline.svg b/packages/yoroi-extension/app/assets/images/social/github.inline.svg index 7c2e0938fd..95ce3f9bd5 100644 --- a/packages/yoroi-extension/app/assets/images/social/github.inline.svg +++ b/packages/yoroi-extension/app/assets/images/social/github.inline.svg @@ -1,3 +1,3 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/social/medium.inline.svg b/packages/yoroi-extension/app/assets/images/social/medium.inline.svg index bda1f8be8b..420065d227 100644 --- a/packages/yoroi-extension/app/assets/images/social/medium.inline.svg +++ b/packages/yoroi-extension/app/assets/images/social/medium.inline.svg @@ -1,3 +1,3 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/social/revamp/facebook.inline.svg b/packages/yoroi-extension/app/assets/images/social/revamp/facebook.inline.svg index c31d302e35..f6fd20492d 100644 --- a/packages/yoroi-extension/app/assets/images/social/revamp/facebook.inline.svg +++ b/packages/yoroi-extension/app/assets/images/social/revamp/facebook.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/social/revamp/github-24x24.inline.svg b/packages/yoroi-extension/app/assets/images/social/revamp/github-24x24.inline.svg index 37241eca49..6f6f5e5306 100644 --- a/packages/yoroi-extension/app/assets/images/social/revamp/github-24x24.inline.svg +++ b/packages/yoroi-extension/app/assets/images/social/revamp/github-24x24.inline.svg @@ -1,3 +1,3 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/social/revamp/github.inline.svg b/packages/yoroi-extension/app/assets/images/social/revamp/github.inline.svg index 5beb251280..59264e3b86 100644 --- a/packages/yoroi-extension/app/assets/images/social/revamp/github.inline.svg +++ b/packages/yoroi-extension/app/assets/images/social/revamp/github.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/social/revamp/telegram.inline.svg b/packages/yoroi-extension/app/assets/images/social/revamp/telegram.inline.svg index 62ef03a2db..5060bf9fa4 100644 --- a/packages/yoroi-extension/app/assets/images/social/revamp/telegram.inline.svg +++ b/packages/yoroi-extension/app/assets/images/social/revamp/telegram.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/social/revamp/twitch.inline.svg b/packages/yoroi-extension/app/assets/images/social/revamp/twitch.inline.svg index c4345de05c..64b05a04e8 100644 --- a/packages/yoroi-extension/app/assets/images/social/revamp/twitch.inline.svg +++ b/packages/yoroi-extension/app/assets/images/social/revamp/twitch.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/social/revamp/twitter.inline.svg b/packages/yoroi-extension/app/assets/images/social/revamp/twitter.inline.svg index 0fa2f8b99f..c4143b923c 100644 --- a/packages/yoroi-extension/app/assets/images/social/revamp/twitter.inline.svg +++ b/packages/yoroi-extension/app/assets/images/social/revamp/twitter.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/social/revamp/youtube.inline.svg b/packages/yoroi-extension/app/assets/images/social/revamp/youtube.inline.svg index 8f5212cb33..ef9863bf2d 100644 --- a/packages/yoroi-extension/app/assets/images/social/revamp/youtube.inline.svg +++ b/packages/yoroi-extension/app/assets/images/social/revamp/youtube.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/social/telegram.inline.svg b/packages/yoroi-extension/app/assets/images/social/telegram.inline.svg index e43ff43e1c..0fa9e6251c 100644 --- a/packages/yoroi-extension/app/assets/images/social/telegram.inline.svg +++ b/packages/yoroi-extension/app/assets/images/social/telegram.inline.svg @@ -2,7 +2,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/social/twitter.inline.svg b/packages/yoroi-extension/app/assets/images/social/twitter.inline.svg index fe654e5704..29f8996d41 100644 --- a/packages/yoroi-extension/app/assets/images/social/twitter.inline.svg +++ b/packages/yoroi-extension/app/assets/images/social/twitter.inline.svg @@ -1,3 +1,3 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/social/youtube.inline.svg b/packages/yoroi-extension/app/assets/images/social/youtube.inline.svg index 7f99ae558a..0e0cd9e092 100644 --- a/packages/yoroi-extension/app/assets/images/social/youtube.inline.svg +++ b/packages/yoroi-extension/app/assets/images/social/youtube.inline.svg @@ -1,3 +1,3 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/spinner-dark.svg b/packages/yoroi-extension/app/assets/images/spinner-dark.svg index 02529fdd9b..bb56eda05c 100644 --- a/packages/yoroi-extension/app/assets/images/spinner-dark.svg +++ b/packages/yoroi-extension/app/assets/images/spinner-dark.svg @@ -4,8 +4,8 @@ fill="url(#paint0_linear_12921_42008)" /> - - + + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/spinner-light.svg b/packages/yoroi-extension/app/assets/images/spinner-light.svg index 02529fdd9b..bb56eda05c 100644 --- a/packages/yoroi-extension/app/assets/images/spinner-light.svg +++ b/packages/yoroi-extension/app/assets/images/spinner-light.svg @@ -4,8 +4,8 @@ fill="url(#paint0_linear_12921_42008)" /> - - + + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/success-small.inline.svg b/packages/yoroi-extension/app/assets/images/success-small.inline.svg index 1c9f1527a0..b8d76a069d 100644 --- a/packages/yoroi-extension/app/assets/images/success-small.inline.svg +++ b/packages/yoroi-extension/app/assets/images/success-small.inline.svg @@ -1 +1 @@ -C1A491E1-87A9-4229-AF18-5B141E6D99B6 \ No newline at end of file +C1A491E1-87A9-4229-AF18-5B141E6D99B6 \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/support.inline.svg b/packages/yoroi-extension/app/assets/images/support.inline.svg index abdeb8bea6..c3b1254f3c 100644 --- a/packages/yoroi-extension/app/assets/images/support.inline.svg +++ b/packages/yoroi-extension/app/assets/images/support.inline.svg @@ -1,4 +1,4 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/top-bar/back-arrow-white.inline.svg b/packages/yoroi-extension/app/assets/images/top-bar/back-arrow-white.inline.svg index b70034f6cc..90c40efc2b 100644 --- a/packages/yoroi-extension/app/assets/images/top-bar/back-arrow-white.inline.svg +++ b/packages/yoroi-extension/app/assets/images/top-bar/back-arrow-white.inline.svg @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/transaction/error.inline.svg b/packages/yoroi-extension/app/assets/images/transaction/error.inline.svg index 4ac632b5d6..0b0cdcc57c 100644 --- a/packages/yoroi-extension/app/assets/images/transaction/error.inline.svg +++ b/packages/yoroi-extension/app/assets/images/transaction/error.inline.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/transaction/export-tx-to-file.inline.svg b/packages/yoroi-extension/app/assets/images/transaction/export-tx-to-file.inline.svg index 013578a089..19dff8a1dd 100644 --- a/packages/yoroi-extension/app/assets/images/transaction/export-tx-to-file.inline.svg +++ b/packages/yoroi-extension/app/assets/images/transaction/export-tx-to-file.inline.svg @@ -3,11 +3,11 @@ export.inline copy Created with Sketch. - + - + diff --git a/packages/yoroi-extension/app/assets/images/transaction/export.inline.svg b/packages/yoroi-extension/app/assets/images/transaction/export.inline.svg index e66eea3583..2528c4184a 100644 --- a/packages/yoroi-extension/app/assets/images/transaction/export.inline.svg +++ b/packages/yoroi-extension/app/assets/images/transaction/export.inline.svg @@ -1,4 +1,4 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/transaction/no-transactions-yet.modern.inline.svg b/packages/yoroi-extension/app/assets/images/transaction/no-transactions-yet.modern.inline.svg index e092aa7e63..ec19d5888f 100644 --- a/packages/yoroi-extension/app/assets/images/transaction/no-transactions-yet.modern.inline.svg +++ b/packages/yoroi-extension/app/assets/images/transaction/no-transactions-yet.modern.inline.svg @@ -5,27 +5,27 @@ Created with Sketch. - - - - - - + + + + + + - - - - - - + + + + + + - - + + - + @@ -33,7 +33,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/transaction/receive.inline.svg b/packages/yoroi-extension/app/assets/images/transaction/receive.inline.svg index 1c802c48a0..d4c98a39a7 100644 --- a/packages/yoroi-extension/app/assets/images/transaction/receive.inline.svg +++ b/packages/yoroi-extension/app/assets/images/transaction/receive.inline.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/transaction/reward.inline.svg b/packages/yoroi-extension/app/assets/images/transaction/reward.inline.svg index 9029aa4286..3958c0d33b 100644 --- a/packages/yoroi-extension/app/assets/images/transaction/reward.inline.svg +++ b/packages/yoroi-extension/app/assets/images/transaction/reward.inline.svg @@ -1,6 +1,6 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/transaction/send.inline.svg b/packages/yoroi-extension/app/assets/images/transaction/send.inline.svg index 2d667738c3..d9b7cfeb80 100644 --- a/packages/yoroi-extension/app/assets/images/transaction/send.inline.svg +++ b/packages/yoroi-extension/app/assets/images/transaction/send.inline.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/transaction/stake.inline.svg b/packages/yoroi-extension/app/assets/images/transaction/stake.inline.svg index a72c2321af..46ed101875 100644 --- a/packages/yoroi-extension/app/assets/images/transaction/stake.inline.svg +++ b/packages/yoroi-extension/app/assets/images/transaction/stake.inline.svg @@ -1,6 +1,6 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/transaction/wallet-empty-banner.inline.svg b/packages/yoroi-extension/app/assets/images/transaction/wallet-empty-banner.inline.svg index 4713752cc1..0f19d79a53 100644 --- a/packages/yoroi-extension/app/assets/images/transaction/wallet-empty-banner.inline.svg +++ b/packages/yoroi-extension/app/assets/images/transaction/wallet-empty-banner.inline.svg @@ -3,148 +3,148 @@ Create wallet - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - + + + - - - + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - + + + + + + + + + - - - + + + - - - - - - - + + + + + + + - - - - - - - - - + + + + + + + + + - - - + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - + @@ -162,13 +162,13 @@ - - - + + + - + @@ -188,13 +188,13 @@ - - - + + + - + @@ -226,13 +226,13 @@ - - - + + + - + @@ -243,15 +243,15 @@ - - - + + + - + - + @@ -287,15 +287,15 @@ - + - - + + - + - + diff --git a/packages/yoroi-extension/app/assets/images/transfer-success-shelley.inline.svg b/packages/yoroi-extension/app/assets/images/transfer-success-shelley.inline.svg index 60f8c2fec3..18a346dc52 100644 --- a/packages/yoroi-extension/app/assets/images/transfer-success-shelley.inline.svg +++ b/packages/yoroi-extension/app/assets/images/transfer-success-shelley.inline.svg @@ -5,19 +5,19 @@ Created with Sketch. - - + + - - + + - - + + - + @@ -25,7 +25,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/transfer-success.inline.svg b/packages/yoroi-extension/app/assets/images/transfer-success.inline.svg index 51445a4787..ba04071e15 100644 --- a/packages/yoroi-extension/app/assets/images/transfer-success.inline.svg +++ b/packages/yoroi-extension/app/assets/images/transfer-success.inline.svg @@ -6,20 +6,20 @@ - - + + - - + + - - + + - + @@ -46,7 +46,7 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/uri/about-url-classic.inline.svg b/packages/yoroi-extension/app/assets/images/uri/about-url-classic.inline.svg index bfb4e3cd71..895130a540 100644 --- a/packages/yoroi-extension/app/assets/images/uri/about-url-classic.inline.svg +++ b/packages/yoroi-extension/app/assets/images/uri/about-url-classic.inline.svg @@ -7,7 +7,7 @@ - + @@ -41,8 +41,8 @@ - - + + @@ -51,8 +51,8 @@ - - + + diff --git a/packages/yoroi-extension/app/assets/images/uri/about-url.inline.svg b/packages/yoroi-extension/app/assets/images/uri/about-url.inline.svg index 144fde49f8..dc92528ff0 100644 --- a/packages/yoroi-extension/app/assets/images/uri/about-url.inline.svg +++ b/packages/yoroi-extension/app/assets/images/uri/about-url.inline.svg @@ -5,70 +5,70 @@ Created with Sketch. - - - - + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - - - - + + + + + + + - - - - + + + + - - - - + + + + - + @@ -80,7 +80,7 @@ - + @@ -105,8 +105,8 @@ - - + + diff --git a/packages/yoroi-extension/app/assets/images/uri/invalid-uri.inline.svg b/packages/yoroi-extension/app/assets/images/uri/invalid-uri.inline.svg index 2e28bd8141..1bad1829ee 100644 --- a/packages/yoroi-extension/app/assets/images/uri/invalid-uri.inline.svg +++ b/packages/yoroi-extension/app/assets/images/uri/invalid-uri.inline.svg @@ -6,11 +6,11 @@ - - + + - + diff --git a/packages/yoroi-extension/app/assets/images/uri/perform-tx-uri.inline.svg b/packages/yoroi-extension/app/assets/images/uri/perform-tx-uri.inline.svg index 414d22185f..767a6a3616 100644 --- a/packages/yoroi-extension/app/assets/images/uri/perform-tx-uri.inline.svg +++ b/packages/yoroi-extension/app/assets/images/uri/perform-tx-uri.inline.svg @@ -6,21 +6,21 @@ - - + + - - + + - - + + - + diff --git a/packages/yoroi-extension/app/assets/images/verify-icon-green.inline.svg b/packages/yoroi-extension/app/assets/images/verify-icon-green.inline.svg index 9c4fa9d597..8c69f50cdf 100644 --- a/packages/yoroi-extension/app/assets/images/verify-icon-green.inline.svg +++ b/packages/yoroi-extension/app/assets/images/verify-icon-green.inline.svg @@ -1,3 +1,3 @@ - + diff --git a/packages/yoroi-extension/app/assets/images/verify-icon.inline.svg b/packages/yoroi-extension/app/assets/images/verify-icon.inline.svg index b67c084263..eaffcaa010 100644 --- a/packages/yoroi-extension/app/assets/images/verify-icon.inline.svg +++ b/packages/yoroi-extension/app/assets/images/verify-icon.inline.svg @@ -3,8 +3,8 @@ icon/verify Created with Sketch. - - + + diff --git a/packages/yoroi-extension/app/assets/images/wallet-nav/back-arrow.inline.svg b/packages/yoroi-extension/app/assets/images/wallet-nav/back-arrow.inline.svg index cd472fa1ec..af0beccc38 100644 --- a/packages/yoroi-extension/app/assets/images/wallet-nav/back-arrow.inline.svg +++ b/packages/yoroi-extension/app/assets/images/wallet-nav/back-arrow.inline.svg @@ -3,7 +3,7 @@ Artboard Created with Sketch. - + diff --git a/packages/yoroi-extension/app/assets/images/wallet-nav/caret-down.inline.svg b/packages/yoroi-extension/app/assets/images/wallet-nav/caret-down.inline.svg index 592bc76a6e..1996b088a2 100644 --- a/packages/yoroi-extension/app/assets/images/wallet-nav/caret-down.inline.svg +++ b/packages/yoroi-extension/app/assets/images/wallet-nav/caret-down.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/wallet-nav/conceptual-wallet.inline.svg b/packages/yoroi-extension/app/assets/images/wallet-nav/conceptual-wallet.inline.svg index d58fd7aba2..20a7a26c48 100644 --- a/packages/yoroi-extension/app/assets/images/wallet-nav/conceptual-wallet.inline.svg +++ b/packages/yoroi-extension/app/assets/images/wallet-nav/conceptual-wallet.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/wallet-nav/ledger-wallet.inline.svg b/packages/yoroi-extension/app/assets/images/wallet-nav/ledger-wallet.inline.svg index 5570ee335e..6e0fa24b84 100644 --- a/packages/yoroi-extension/app/assets/images/wallet-nav/ledger-wallet.inline.svg +++ b/packages/yoroi-extension/app/assets/images/wallet-nav/ledger-wallet.inline.svg @@ -3,8 +3,8 @@ icon/ledger Created with Sketch. - - + + diff --git a/packages/yoroi-extension/app/assets/images/wallet-nav/tab-dashboard.inline.svg b/packages/yoroi-extension/app/assets/images/wallet-nav/tab-dashboard.inline.svg index e9248adc51..467cfc39f1 100644 --- a/packages/yoroi-extension/app/assets/images/wallet-nav/tab-dashboard.inline.svg +++ b/packages/yoroi-extension/app/assets/images/wallet-nav/tab-dashboard.inline.svg @@ -1,7 +1,7 @@ icon/dashboard active - + diff --git a/packages/yoroi-extension/app/assets/images/wallet-nav/tab-delegation_list.inline.svg b/packages/yoroi-extension/app/assets/images/wallet-nav/tab-delegation_list.inline.svg index abeb8cc5b9..0986b08f29 100644 --- a/packages/yoroi-extension/app/assets/images/wallet-nav/tab-delegation_list.inline.svg +++ b/packages/yoroi-extension/app/assets/images/wallet-nav/tab-delegation_list.inline.svg @@ -1,9 +1,9 @@ icon/delegation_list active - + - + diff --git a/packages/yoroi-extension/app/assets/images/wallet-nav/tab-receive.inline.svg b/packages/yoroi-extension/app/assets/images/wallet-nav/tab-receive.inline.svg index 41e654a6fe..57aa03ee1d 100644 --- a/packages/yoroi-extension/app/assets/images/wallet-nav/tab-receive.inline.svg +++ b/packages/yoroi-extension/app/assets/images/wallet-nav/tab-receive.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/wallet-nav/tab-send.inline.svg b/packages/yoroi-extension/app/assets/images/wallet-nav/tab-send.inline.svg index 6ad780588b..ec84b912c4 100644 --- a/packages/yoroi-extension/app/assets/images/wallet-nav/tab-send.inline.svg +++ b/packages/yoroi-extension/app/assets/images/wallet-nav/tab-send.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/wallet-nav/tab-transactions.inline.svg b/packages/yoroi-extension/app/assets/images/wallet-nav/tab-transactions.inline.svg index 7a31760031..13e3278327 100644 --- a/packages/yoroi-extension/app/assets/images/wallet-nav/tab-transactions.inline.svg +++ b/packages/yoroi-extension/app/assets/images/wallet-nav/tab-transactions.inline.svg @@ -1,7 +1,7 @@ icon / transactions@1x - + diff --git a/packages/yoroi-extension/app/assets/images/wallet-nav/trezor-wallet.inline.svg b/packages/yoroi-extension/app/assets/images/wallet-nav/trezor-wallet.inline.svg index 625441cc7c..52dbd5f864 100644 --- a/packages/yoroi-extension/app/assets/images/wallet-nav/trezor-wallet.inline.svg +++ b/packages/yoroi-extension/app/assets/images/wallet-nav/trezor-wallet.inline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/wallet-nav/voting.inline.svg b/packages/yoroi-extension/app/assets/images/wallet-nav/voting.inline.svg index 540be9314f..20235c8b31 100644 --- a/packages/yoroi-extension/app/assets/images/wallet-nav/voting.inline.svg +++ b/packages/yoroi-extension/app/assets/images/wallet-nav/voting.inline.svg @@ -1,8 +1,8 @@ icon/voting - + - + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/warning.inline.svg b/packages/yoroi-extension/app/assets/images/warning.inline.svg index 5c06ec547f..46d89d4703 100644 --- a/packages/yoroi-extension/app/assets/images/warning.inline.svg +++ b/packages/yoroi-extension/app/assets/images/warning.inline.svg @@ -3,7 +3,7 @@ warning.inline Created with Sketch. - + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/widget/cross-green.inline.svg b/packages/yoroi-extension/app/assets/images/widget/cross-green.inline.svg index 25425b7657..cb21bb4d60 100644 --- a/packages/yoroi-extension/app/assets/images/widget/cross-green.inline.svg +++ b/packages/yoroi-extension/app/assets/images/widget/cross-green.inline.svg @@ -3,7 +3,7 @@ cross.green.inline copy Created with Sketch. - + \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/widget/cross.inline.svg b/packages/yoroi-extension/app/assets/images/widget/cross.inline.svg index e0cc2f3edb..c4915c5799 100644 --- a/packages/yoroi-extension/app/assets/images/widget/cross.inline.svg +++ b/packages/yoroi-extension/app/assets/images/widget/cross.inline.svg @@ -3,7 +3,7 @@ Shape Copy Created with Sketch. - + diff --git a/packages/yoroi-extension/app/assets/images/widget/tick-green.inline.svg b/packages/yoroi-extension/app/assets/images/widget/tick-green.inline.svg index 4afb9d6d19..2894eff395 100644 --- a/packages/yoroi-extension/app/assets/images/widget/tick-green.inline.svg +++ b/packages/yoroi-extension/app/assets/images/widget/tick-green.inline.svg @@ -3,8 +3,8 @@ tick.inline Created with Sketch. - - + + diff --git a/packages/yoroi-extension/app/assets/images/widget/tick.inline.svg b/packages/yoroi-extension/app/assets/images/widget/tick.inline.svg index 9fa6e05f6d..9e392c1010 100644 --- a/packages/yoroi-extension/app/assets/images/widget/tick.inline.svg +++ b/packages/yoroi-extension/app/assets/images/widget/tick.inline.svg @@ -3,8 +3,8 @@ Shape Created with Sketch. - - + + diff --git a/packages/yoroi-extension/app/assets/images/yes.inline.svg b/packages/yoroi-extension/app/assets/images/yes.inline.svg index d779638977..caa778a4f0 100644 --- a/packages/yoroi-extension/app/assets/images/yes.inline.svg +++ b/packages/yoroi-extension/app/assets/images/yes.inline.svg @@ -1,9 +1,9 @@ - + - - + + diff --git a/packages/yoroi-extension/app/assets/images/yoroi-classic-theme.inline.svg b/packages/yoroi-extension/app/assets/images/yoroi-classic-theme.inline.svg index 2b3a1ce152..28fb0fedbc 100644 --- a/packages/yoroi-extension/app/assets/images/yoroi-classic-theme.inline.svg +++ b/packages/yoroi-extension/app/assets/images/yoroi-classic-theme.inline.svg @@ -1,11 +1,11 @@ - - - - - + + + + + diff --git a/packages/yoroi-extension/app/assets/images/yoroi-logo-blue.inline.svg b/packages/yoroi-extension/app/assets/images/yoroi-logo-blue.inline.svg index 34297d2d5c..ccee841188 100644 --- a/packages/yoroi-extension/app/assets/images/yoroi-logo-blue.inline.svg +++ b/packages/yoroi-extension/app/assets/images/yoroi-logo-blue.inline.svg @@ -1 +1 @@ -yoroi logo \ No newline at end of file +yoroi logo \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/yoroi-logo-nightly.inline.svg b/packages/yoroi-extension/app/assets/images/yoroi-logo-nightly.inline.svg index a339b0b087..6f92d71b7a 100644 --- a/packages/yoroi-extension/app/assets/images/yoroi-logo-nightly.inline.svg +++ b/packages/yoroi-extension/app/assets/images/yoroi-logo-nightly.inline.svg @@ -113,8 +113,8 @@ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/yoroi-logo-revamp-blue.inline.svg b/packages/yoroi-extension/app/assets/images/yoroi-logo-revamp-blue.inline.svg index 86844610ea..4df8f151a3 100644 --- a/packages/yoroi-extension/app/assets/images/yoroi-logo-revamp-blue.inline.svg +++ b/packages/yoroi-extension/app/assets/images/yoroi-logo-revamp-blue.inline.svg @@ -1,9 +1,9 @@ - + - - + + diff --git a/packages/yoroi-extension/app/assets/images/yoroi-logo-revamp-nightly-blue.inline.svg b/packages/yoroi-extension/app/assets/images/yoroi-logo-revamp-nightly-blue.inline.svg index ed97a216d6..bc22bcc925 100644 --- a/packages/yoroi-extension/app/assets/images/yoroi-logo-revamp-nightly-blue.inline.svg +++ b/packages/yoroi-extension/app/assets/images/yoroi-logo-revamp-nightly-blue.inline.svg @@ -6,24 +6,24 @@ - - + + - - + + - - + + - - + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/yoroi-logo-shape-blue.inline.svg b/packages/yoroi-extension/app/assets/images/yoroi-logo-shape-blue.inline.svg index fb780dba7a..5bf948f869 100644 --- a/packages/yoroi-extension/app/assets/images/yoroi-logo-shape-blue.inline.svg +++ b/packages/yoroi-extension/app/assets/images/yoroi-logo-shape-blue.inline.svg @@ -1 +1 @@ -yoroi logo \ No newline at end of file +yoroi logo \ No newline at end of file diff --git a/packages/yoroi-extension/app/assets/images/yoroi-logo-shape-white.inline.svg b/packages/yoroi-extension/app/assets/images/yoroi-logo-shape-white.inline.svg index 8c91839222..372eeef1d7 100644 --- a/packages/yoroi-extension/app/assets/images/yoroi-logo-shape-white.inline.svg +++ b/packages/yoroi-extension/app/assets/images/yoroi-logo-shape-white.inline.svg @@ -3,7 +3,7 @@ - - - - - - + + + + + diff --git a/packages/yoroi-extension/app/assets/images/yoroi-nightly-icon-dark.inline.svg b/packages/yoroi-extension/app/assets/images/yoroi-nightly-icon-dark.inline.svg index 4eb0e472c9..6f70d51889 100644 --- a/packages/yoroi-extension/app/assets/images/yoroi-nightly-icon-dark.inline.svg +++ b/packages/yoroi-extension/app/assets/images/yoroi-nightly-icon-dark.inline.svg @@ -6,24 +6,24 @@ - - + + - - + + - - + + - - + + - - + + diff --git a/packages/yoroi-extension/app/assets/images/yoroi-nightly-icon.inline.svg b/packages/yoroi-extension/app/assets/images/yoroi-nightly-icon.inline.svg index 8851cc3017..c53a77e1c0 100644 --- a/packages/yoroi-extension/app/assets/images/yoroi-nightly-icon.inline.svg +++ b/packages/yoroi-extension/app/assets/images/yoroi-nightly-icon.inline.svg @@ -113,8 +113,8 @@ - - + + - - + + - - - - - - + + + + + + - - - - - - + + + + + + - - + + - + @@ -33,7 +33,7 @@ - + diff --git a/packages/yoroi-extension/ledger/assets/img/external-link.svg b/packages/yoroi-extension/ledger/assets/img/external-link.svg index bbdf4c7ccb..7ad04c93d3 100644 --- a/packages/yoroi-extension/ledger/assets/img/external-link.svg +++ b/packages/yoroi-extension/ledger/assets/img/external-link.svg @@ -6,7 +6,7 @@ - + diff --git a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-1.svg b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-1.svg index 2cf0d706ad..94a33ad2f1 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-1.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-1.svg @@ -1 +1 @@ -New transaction network id 0 / pr \ No newline at end of file +New transaction network id 0 / pr \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-11.svg b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-11.svg index 5484b8a23e..c45132c07f 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-11.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-11.svg @@ -1 +1 @@ -____________Transaction TTL____________ \ No newline at end of file +____________Transaction TTL____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-3.svg b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-3.svg index 636fd0872a..ee5423fefc 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-3.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-3.svg @@ -1 +1 @@ -Register Catalyst voting key? \ No newline at end of file +Register Catalyst voting key? \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-4.svg b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-4.svg index b0df9cb0b1..8314960353 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-4.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-4.svg @@ -1 +1 @@ -Voting public key____________ \ No newline at end of file +Voting public key____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-5.svg b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-5.svg index e8a7e47d0f..ce68042fb0 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-5.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-5.svg @@ -1 +1 @@ -Staking key____________ \ No newline at end of file +Staking key____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-6.svg b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-6.svg index 875103bd5e..e4458dfbd6 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-6.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-6.svg @@ -1 +1 @@ -Rewards go to____________ \ No newline at end of file +Rewards go to____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-7.svg b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-7.svg index 72970c4217..cc93108f0e 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-7.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-7.svg @@ -1 +1 @@ -Nonce____________ \ No newline at end of file +Nonce____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-8.svg b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-8.svg index 0ff3e0769d..c1a542b0ec 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-8.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-8.svg @@ -1 +1 @@ -Confirm voting keyregistration? \ No newline at end of file +Confirm voting keyregistration? \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-9.svg b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-9.svg index 841679090c..a95e4b54b9 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-9.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-catalyst-9.svg @@ -1 +1 @@ -Auxiliary data hash____________ \ No newline at end of file +Auxiliary data hash____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-connect-2-keys.svg b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-connect-2-keys.svg index ea3c74e82b..e0c78f0917 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-s/hint-connect-2-keys.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-s/hint-connect-2-keys.svg @@ -1 +1 @@ -Confirm export2 public keys +Confirm export2 public keys diff --git a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-1.svg b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-1.svg index 5740b15160..849885baf3 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-1.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-1.svg @@ -1 +1 @@ -New transaction network id 0 / pr \ No newline at end of file +New transaction network id 0 / pr \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-11.svg b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-11.svg index 2e26191ecd..2a275ea283 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-11.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-11.svg @@ -1 +1 @@ -Transaction TTL____________ \ No newline at end of file +Transaction TTL____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-3.svg b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-3.svg index 14c113de70..84048368ee 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-3.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-3.svg @@ -1 +1 @@ -Register Catalyst voting key? \ No newline at end of file +Register Catalyst voting key? \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-4.svg b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-4.svg index 3f62a644bc..472f0a0091 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-4.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-4.svg @@ -1 +1 @@ -Voting public key____________ \ No newline at end of file +Voting public key____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-5.svg b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-5.svg index 53ec11d242..4689d8f223 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-5.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-5.svg @@ -1 +1 @@ -Staking key____________ \ No newline at end of file +Staking key____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-6.svg b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-6.svg index d7c6fa5bf6..441d70e6eb 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-6.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-6.svg @@ -1 +1 @@ -Rewards go to____________ \ No newline at end of file +Rewards go to____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-7.svg b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-7.svg index b71bef45e9..a21699a877 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-7.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-7.svg @@ -1 +1 @@ -Nonce____________ \ No newline at end of file +Nonce____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-8.svg b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-8.svg index 278376764f..c7628b4ba7 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-8.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-8.svg @@ -1 +1 @@ -Confirm voting keyregistration? \ No newline at end of file +Confirm voting keyregistration? \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-9.svg b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-9.svg index 4630289b57..2f38677aa4 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-9.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-catalyst-9.svg @@ -1 +1 @@ -Auxiliary data hash____________ \ No newline at end of file +Auxiliary data hash____________ \ No newline at end of file diff --git a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-connect-2-keys.svg b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-connect-2-keys.svg index 2120033c96..1b94eda90e 100644 --- a/packages/yoroi-extension/ledger/assets/img/nano-x/hint-connect-2-keys.svg +++ b/packages/yoroi-extension/ledger/assets/img/nano-x/hint-connect-2-keys.svg @@ -1 +1 @@ -Confirm export2 public keys +Confirm export2 public keys diff --git a/packages/yoroi-extension/ledger/assets/img/spinner-dark.svg b/packages/yoroi-extension/ledger/assets/img/spinner-dark.svg index 367e624f57..25690d70a4 100644 --- a/packages/yoroi-extension/ledger/assets/img/spinner-dark.svg +++ b/packages/yoroi-extension/ledger/assets/img/spinner-dark.svg @@ -4,7 +4,7 @@ 689D1EC6-CFD1-4DB8-8399-D10FD29322A1 Created with sketchtool. - + diff --git a/packages/yoroi-extension/ledger/assets/img/warning-icon.svg b/packages/yoroi-extension/ledger/assets/img/warning-icon.svg index f480695ce8..dc6aa9b285 100644 --- a/packages/yoroi-extension/ledger/assets/img/warning-icon.svg +++ b/packages/yoroi-extension/ledger/assets/img/warning-icon.svg @@ -3,10 +3,10 @@ icon/attention.inline Created with Sketch. - + - + From db431dbf464c013c009ba75a56dee6280d671448 Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Fri, 24 May 2024 08:55:20 +0700 Subject: [PATCH 024/464] apply useNavigateTo --- .../portfolio/common/useNavigateTo.js | 13 ++++++++++++ .../useCases/TokenDetails/TokenDetails.js | 6 +++--- .../useCases/Wallet/PortfolioWallet.js | 6 +++--- .../yoroi-extension/app/UI/hooks/index.js | 1 - .../app/UI/hooks/useStrings.js | 20 ------------------- 5 files changed, 19 insertions(+), 27 deletions(-) create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/useNavigateTo.js delete mode 100644 packages/yoroi-extension/app/UI/hooks/index.js delete mode 100644 packages/yoroi-extension/app/UI/hooks/useStrings.js diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/useNavigateTo.js b/packages/yoroi-extension/app/UI/features/portfolio/common/useNavigateTo.js new file mode 100644 index 0000000000..e364deab49 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/useNavigateTo.js @@ -0,0 +1,13 @@ +import { useHistory } from 'react-router-dom'; +import React, { useRef } from 'react'; +import { ROUTES } from '../../../../routes-config'; + +export const useNavigateTo = () => { + const history = useHistory(); + + return React.useRef({ + portfolio: () => history.push(ROUTES.PORTFOLIO.ROOT), + portfolioDapps: () => history.push(ROUTES.PORTFOLIO.DAPPS), + portfolioDetail: tokenId => history.push(`${ROUTES.PORTFOLIO.ROOT}/details/${tokenId}`), + }).current; +}; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js index 7622a580f5..dce8b1f12f 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js @@ -15,13 +15,13 @@ import { ReactComponent as BackIcon } from '../../../../../assets/images/assets- import { styled } from '@mui/material/styles'; import { StyledTooltip, StyledSkeleton, CopyButton, Card } from '../../../../components'; import { tableCellClasses } from '@mui/material/TableCell'; -import { useHistory } from 'react-router-dom'; import TransactionHistory from '../../common/TransactionHistory'; import TokenDetailChart from '../../common/TokenDetailChart'; import SubMenu from '../../../../../components/topbar/SubMenu'; import Arrow from '../../../../components/icons/portfolio/Arrow'; import { useTheme } from '@mui/material/styles'; import mockData from '../../../../pages/portfolio/mockData'; +import { useNavigateTo } from '../../common/useNavigateTo'; const Header = styled(Box)({ display: 'flex', @@ -43,7 +43,7 @@ const TabContent = styled(Box)({ const TokenDetails = ({ tokenInfo, subMenuOptions, mockHistory }) => { const theme = useTheme(); - const history = useHistory(); + const navigateTo = useNavigateTo(); const [selectedTab, setSelectedTab] = useState(subMenuOptions[0].route); const [isLoading, setIsLoading] = useState(false); @@ -70,7 +70,7 @@ const TokenDetails = ({ tokenInfo, subMenuOptions, mockHistory }) => {
- SWAP - SEND - RECEIVE + {strings.swap} + {strings.send} + {strings.receive}
@@ -92,7 +127,7 @@ const TokenDetails = ({ tokenInfo, subMenuOptions, mockHistory }) => { {isLoading ? ( ) : ( - `${tokenInfo.overview.tokenName} balance` + `${tokenInfo.overview.tokenName} ${strings.balance}` )} @@ -129,7 +164,7 @@ const TokenDetails = ({ tokenInfo, subMenuOptions, mockHistory }) => { {isLoading ? ( ) : ( - Market price + {strings.marketPrice} )} {isLoading ? ( @@ -145,8 +180,8 @@ const TokenDetails = ({ tokenInfo, subMenuOptions, mockHistory }) => { - Token price change - in 24 hours + {strings.tokenPriceChange} + {strings.in24hours} } placement="top" @@ -236,7 +271,7 @@ const TokenDetails = ({ tokenInfo, subMenuOptions, mockHistory }) => { {isLoading ? ( ) : ( - Description + {strings.description} )} {isLoading ? ( <> @@ -255,7 +290,7 @@ const TokenDetails = ({ tokenInfo, subMenuOptions, mockHistory }) => { {isLoading ? ( ) : ( - Website + {strings.website} )} {isLoading ? ( @@ -270,7 +305,7 @@ const TokenDetails = ({ tokenInfo, subMenuOptions, mockHistory }) => { {isLoading ? ( ) : ( - Policy ID + {strings.policyId} )} @@ -297,7 +332,7 @@ const TokenDetails = ({ tokenInfo, subMenuOptions, mockHistory }) => { {isLoading ? ( ) : ( - Fingerprint + {strings.fingerprint} )} @@ -324,7 +359,7 @@ const TokenDetails = ({ tokenInfo, subMenuOptions, mockHistory }) => { {isLoading ? ( ) : ( - Details on + {strings.detailsOn} )} {isLoading ? ( @@ -353,7 +388,7 @@ const TokenDetails = ({ tokenInfo, subMenuOptions, mockHistory }) => { Market data - {mockData.TokenDetails.performanceItemList.map((item, index) => ( + {performanceItemList.map((item, index) => ( { {item.label} - {tokenInfo.performance[index].value} + + {item.type === PerformanceItemType.RANK && '#'} + {tokenInfo.performance[index].value}{' '} + {item.type === PerformanceItemType.USD && 'USD'} + {item.type === PerformanceItemType.TOKEN && tokenInfo.overview.tokenName} + ))} @@ -373,7 +413,7 @@ const TokenDetails = ({ tokenInfo, subMenuOptions, mockHistory }) => { - +
); }; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/TransactionHistory.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js similarity index 92% rename from packages/yoroi-extension/app/UI/features/portfolio/common/TransactionHistory.js rename to packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js index b2c3b45a41..2d14a9954f 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/TransactionHistory.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js @@ -12,10 +12,10 @@ import { styled, } from '@mui/material'; import { useTheme } from '@mui/material/styles'; -import { Card } from '../../../components'; -import { default as ArrowIcon } from '../../../components/icons/portfolio/transaction-history/Arrow'; -import { default as ExpandIcon } from '../../../components/icons/portfolio/transaction-history/Expand'; -import { default as ErrorIcon } from '../../../components/icons/portfolio/transaction-history/Error'; +import { Card } from '../../../../components'; +import { default as ArrowIcon } from '../../../../components/icons/portfolio/transaction-history/Arrow'; +import { default as ExpandIcon } from '../../../../components/icons/portfolio/transaction-history/Expand'; +import { default as ErrorIcon } from '../../../../components/icons/portfolio/transaction-history/Error'; const timestamps = ['Today', 'Yesterday', 'In the past']; const categorizeByDate = data => { @@ -43,7 +43,7 @@ const categorizeByDate = data => { ); }; -const TransactionHistory = ({ history }) => { +const TransactionTable = ({ history }) => { const theme = useTheme(); const categorizedData = useMemo(() => categorizeByDate(history), [history]); @@ -197,4 +197,4 @@ const Container = styled(Box)({ margin: '30px 0 100px', }); -export default TransactionHistory; +export default TransactionTable; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js index e31fd784cb..092e010bd5 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js @@ -1,46 +1,18 @@ -import { - Table, - TableBody, - TableCell, - TableHead, - TableRow, - TableSortLabel, - Typography, - Stack, - Chip, - Box, - Input, - InputAdornment, - styled, -} from '@mui/material'; +import { Typography, Stack, Chip, Box, Input, InputAdornment, styled } from '@mui/material'; import { ReactComponent as Search } from '../../../../../assets/images/assets-page/search.inline.svg'; import React, { useState } from 'react'; import { StyledTooltip, SearchInput } from '../../../../components'; -import Arrow from '../../../../components/icons/portfolio/Arrow'; -import { default as SortIcon } from '../../../../components/icons/portfolio/Sort'; +import ArrowIcon from '../../../../components/icons/portfolio/Arrow'; import { useTheme } from '@mui/material/styles'; import { defineMessages } from 'react-intl'; -import { useNavigateTo } from '../../common/useNavigateTo'; +import { usePortfolio } from '../../module/PortfolioContextProvider'; +import StatsTable from './StatsTable'; +import mockData from '../../../../pages/portfolio/mockData'; -// const messages = defineMessages({ -// search: { -// id: 'wallet.revamp.assets.search', -// defaultMessage: '!!!Search by asset name or ID', -// }, -// }); - -const PortfolioWallet = ({ headCells, data }) => { +const PortfolioWallet = ({ data }) => { const theme = useTheme(); - const navigateTo = useNavigateTo(); + const { strings } = usePortfolio(); const [keyword, setKeyword] = useState(''); - const [order, setOrder] = useState('asc'); - const [orderBy, setOrderBy] = useState(''); - - const handleRequestSort = property => { - const isAsc = orderBy === property && order === 'asc'; - setOrder(isAsc ? 'desc' : 'asc'); - setOrderBy(property); - }; return ( @@ -48,7 +20,7 @@ const PortfolioWallet = ({ headCells, data }) => { - 200000,00 + {mockData.PortfolioPage.balance.ada} ADA @@ -67,13 +39,15 @@ const PortfolioWallet = ({ headCells, data }) => { - 10000,00 USD + + {mockData.PortfolioPage.balance.usd} USD + - % Balance performance - +/- Balance change - in 24 hours + % {strings.balancePerformance} + +/- {strings.balanceChange} + {strings.in24hours} } placement="right" @@ -87,23 +61,45 @@ const PortfolioWallet = ({ headCells, data }) => { - - 0,03% + {mockData.PortfolioPage.balance.percents.value}% } sx={{ - backgroundColor: theme.palette.ds.secondary_c100, - color: theme.palette.ds.secondary_c800, + backgroundColor: mockData.PortfolioPage.balance.percents.active + ? theme.palette.ds.secondary_c100 + : theme.palette.ds.sys_magenta_c100, + color: mockData.PortfolioPage.balance.percents.active + ? theme.palette.ds.secondary_c800 + : theme.palette.ds.sys_magenta_c700, }} > +0,03 USD} + label={ + + {mockData.PortfolioPage.balance.amount.active ? '+' : '-'} + {mockData.PortfolioPage.balance.amount.value} USD + + } sx={{ - backgroundColor: theme.palette.ds.secondary_c100, - color: theme.palette.ds.secondary_c800, + backgroundColor: mockData.PortfolioPage.balance.amount.active + ? theme.palette.ds.secondary_c100 + : theme.palette.ds.sys_magenta_c100, + color: mockData.PortfolioPage.balance.amount.active + ? theme.palette.ds.secondary_c800 + : theme.palette.ds.sys_magenta_c700, }} > @@ -114,7 +110,7 @@ const PortfolioWallet = ({ headCells, data }) => { setKeyword(e.target.value)} - placeholder={'Search by asset name or ID'} + placeholder={strings.search} startAdornment={ { } /> - -
- - - {headCells.map(({ label, align, id }) => ( - handleRequestSort(id)}> - - {label} - - - - ))} - - - - {data.map(row => ( - navigateTo.portfolioDetail(row.id)} - sx={{ - cursor: 'pointer', - transition: 'all 0.3s ease-in-out', - '& td, & th': { border: 0 }, - '&:hover': { - backgroundColor: theme.palette.ds.gray_c50, - boxShadow: `0px 2px 10px ${theme.palette.ds.gray_c200}`, - borderRadius: `${theme.shape.borderRadius}px`, - }, - }} - > - - - - - {row.name} - - {row.id} - - - - - - - - {row.price} - - - - - - - {row['24h'].percents} - - } - sx={{ - cursor: 'pointer', - backgroundColor: row['24h'].active - ? theme.palette.ds.secondary_c100 - : theme.palette.ds.sys_magenta_c100, - color: row['24h'].active - ? theme.palette.ds.secondary_c800 - : theme.palette.ds.sys_magenta_c700, - }} - > - - - - - - {row['1W'].percents} - - } - sx={{ - cursor: 'pointer', - backgroundColor: row['1W'].active - ? theme.palette.ds.secondary_c100 - : theme.palette.ds.sys_magenta_c100, - color: row['1W'].active - ? theme.palette.ds.secondary_c800 - : theme.palette.ds.sys_magenta_c700, - }} - > - - - - - - {row['1M'].percents} - - } - sx={{ - cursor: 'pointer', - backgroundColor: row['1M'].active - ? theme.palette.ds.secondary_c100 - : theme.palette.ds.sys_magenta_c100, - color: row['1M'].active - ? theme.palette.ds.secondary_c800 - : theme.palette.ds.sys_magenta_c700, - }} - > - - - - - {row.portfolioPercents} % - - - - - - - {row.totalAmount.amount} - - {row.totalAmount.usd} - - - - - - ))} - -
+
); }; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js new file mode 100644 index 0000000000..22f41c974c --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js @@ -0,0 +1,221 @@ +import React, { useState } from 'react'; +import { + Table, + TableBody, + TableCell, + TableHead, + TableRow, + TableSortLabel, + Typography, + Stack, + Box, + Chip, +} from '@mui/material'; +import { useTheme } from '@mui/material/styles'; +import { default as SortIcon } from '../../../../components/icons/portfolio/Sort'; +import ArrowIcon from '../../../../components/icons/portfolio/Arrow'; +import { useNavigateTo } from '../../common/useNavigateTo'; +import { usePortfolio } from '../../module/PortfolioContextProvider'; + +const StatsTable = ({ data }) => { + const theme = useTheme(); + const navigateTo = useNavigateTo(); + const { strings } = usePortfolio(); + const [order, setOrder] = useState('asc'); + const [orderBy, setOrderBy] = useState(''); + + const headCells = [ + { id: 'name', label: strings.name, align: 'left' }, + { id: 'price', label: strings.price, align: 'left' }, + { id: '24h', label: '24H', align: 'left' }, + { id: '1w', label: '1W', align: 'left' }, + { id: '1m', label: '1M', align: 'left' }, + { id: 'portfolioPercents', label: `${strings.portfolio} %`, align: 'left' }, + { id: 'totalAmount', label: strings.totalAmount, align: 'right' }, + ]; + + const handleRequestSort = property => { + const isAsc = orderBy === property && order === 'asc'; + setOrder(isAsc ? 'desc' : 'asc'); + setOrderBy(property); + }; + + return ( + + + + {headCells.map(({ label, align, id }) => ( + handleRequestSort(id)}> + + {label} + + + + ))} + + + + {data.map(row => ( + navigateTo.portfolioDetail(row.id)} + sx={{ + cursor: 'pointer', + transition: 'all 0.3s ease-in-out', + '& td, & th': { border: 0 }, + '&:hover': { + backgroundColor: theme.palette.ds.gray_c50, + boxShadow: `0px 2px 10px ${theme.palette.ds.gray_c200}`, + borderRadius: `${theme.shape.borderRadius}px`, + }, + }} + > + + + + + {row.name} + + {row.id} + + + + + + + + {row.price} USD + + + + + + + {row['24h'].percents}% + + } + sx={{ + cursor: 'pointer', + backgroundColor: row['24h'].active + ? theme.palette.ds.secondary_c100 + : theme.palette.ds.sys_magenta_c100, + color: row['24h'].active + ? theme.palette.ds.secondary_c800 + : theme.palette.ds.sys_magenta_c700, + }} + > + + + + + + {row['1W'].percents}% + + } + sx={{ + cursor: 'pointer', + backgroundColor: row['1W'].active + ? theme.palette.ds.secondary_c100 + : theme.palette.ds.sys_magenta_c100, + color: row['1W'].active + ? theme.palette.ds.secondary_c800 + : theme.palette.ds.sys_magenta_c700, + }} + > + + + + + + {row['1M'].percents}% + + } + sx={{ + cursor: 'pointer', + backgroundColor: row['1M'].active + ? theme.palette.ds.secondary_c100 + : theme.palette.ds.sys_magenta_c100, + color: row['1M'].active + ? theme.palette.ds.secondary_c800 + : theme.palette.ds.sys_magenta_c700, + }} + > + + + + + {row.portfolioPercents} % + + + + + + + {row.totalAmount.amount} {row.name} + + {row.totalAmount.usd} USD + + + + + + ))} + +
+ ); +}; + +export default StatsTable; diff --git a/packages/yoroi-extension/app/UI/layout/PortfolioPageLayout.js b/packages/yoroi-extension/app/UI/layout/PortfolioPageLayout.js index c5ef0937b4..9b7e2207a2 100644 --- a/packages/yoroi-extension/app/UI/layout/PortfolioPageLayout.js +++ b/packages/yoroi-extension/app/UI/layout/PortfolioPageLayout.js @@ -18,6 +18,7 @@ import BannerContainer from '../../containers/banners/BannerContainer'; import SidebarContainer from '../../containers/SidebarContainer'; import NavBarContainerRevamp from '../../containers/NavBarContainerRevamp'; import { ROUTES } from '../../routes-config'; +import { PortfolioContextProvider } from '../features/portfolio/module/PortfolioContextProvider'; type Props = {| ...StoresAndActionsProps, @@ -61,55 +62,59 @@ class PortfolioPageLayout extends Component { ); const PortfolioLayoutClassic = ( - } - sidebar={sidebarContainer} - navbar={ - - } - /> - } - showInContainer - showAsCard - > - {children} - + + } + sidebar={sidebarContainer} + navbar={ + + } + /> + } + showInContainer + showAsCard + > + {children} + + ); const PortfolioLayoutRevamp = ( - } - sidebar={sidebarContainer} - navbar={ - - } - menu={menu} - /> - } - showInContainer - showAsCard - > - {children} - + + } + sidebar={sidebarContainer} + navbar={ + + } + menu={menu} + /> + } + showInContainer + showAsCard + > + {children} + + ); return this.props.renderLayoutComponent({ CLASSIC: PortfolioLayoutClassic, diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js index 6d86411299..7cf07a77b7 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js @@ -26,26 +26,22 @@ const PortfolioDetailPage = ({ stores, actions, match }: Props) => { 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', }, performance: [ - { value: '0,277 USD' }, - { value: '0,48 USD' }, - { value: '557M USD' }, - { value: '34M USD' }, - { value: '#55' }, - { value: '67,00 ADA' }, - { value: '100,67 ADA' }, - { value: '400,60 ADA' }, - { value: '3,01 USD' }, - { value: '0,00002 USD' }, + { value: '0,277' }, + { value: '0,48' }, + { value: '557M' }, + { value: '34M' }, + { value: '55' }, + { value: '67,00' }, + { value: '100,67' }, + { value: '400,60' }, + { value: '3,01' }, + { value: '0,00002' }, ], }; return ( - + ); }; diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js index 5d5bd37e58..b9e6822387 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js @@ -14,7 +14,6 @@ const PortfolioPage = ({ stores, actions }: Props) => { return ( diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js b/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js index c16fe5a756..33f02ad2f4 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js @@ -1,164 +1,158 @@ // ALL THE MOCK DATA FOR RENDERING UI const mockData = { + tokenList: [], + PortfolioPage: { - headCells: [ - { id: 'name', label: 'Name', align: 'left' }, - { id: 'price', label: 'Price', align: 'left' }, - { id: '24h', label: '24H', align: 'left' }, - { id: '1w', label: '1W', align: 'left' }, - { id: '1m', label: '1M', align: 'left' }, - { id: 'portfolioPercents', label: 'Portfolio %', align: 'left' }, - { id: 'totalAmount', label: 'Total amount', align: 'right' }, - ], + balance: { + ada: '289869,04', + usd: '940,64', + percents: { + active: true, + value: '0,03', + }, + amount: { + active: true, + value: '0,56', + }, + }, data: [ { name: 'Token name', id: 'Policy ID', - price: '0,48 USD', + price: '0,48', portfolioPercents: '75,00', '24h': { active: true, - percents: '0,03%', + percents: '0,03', }, '1W': { active: false, - percents: '0,07%', + percents: '0,07', }, '1M': { active: true, - percents: '0,07%', + percents: '0,07', }, totalAmount: { - amount: '1,019,243 ADA', - usd: '372,561 USD', + amount: '1,019,243', + usd: '372,561', }, }, { name: 'AGIX', id: 'Agix', - price: '0,08 USD', + price: '0,08', portfolioPercents: '5,00', '24h': { active: false, - percents: '0,03%', + percents: '0,03', }, '1W': { active: false, - percents: '0,07%', + percents: '0,07', }, '1M': { active: false, - percents: '0,07%', + percents: '0,07', }, totalAmount: { - amount: '4990,00 AGIX', - usd: '400,00 USD', + amount: '4990,00', + usd: '400,00', }, }, { name: 'MILK', id: 'Milk', - price: '0,05 USD', + price: '0,05', portfolioPercents: '5,00', '24h': { active: true, - percents: '0,03%', + percents: '0,03', }, '1W': { active: false, - percents: '0,07%', + percents: '0,07', }, '1M': { active: true, - percents: '0,03%', + percents: '0,03', }, totalAmount: { - amount: '1000,00 MILK', - usd: '372,561 USD', + amount: '1000,00', + usd: '372,561', }, }, { name: 'TKN', id: 'Tkn', - price: '0,08 USD', + price: '0,08', portfolioPercents: '5,00', '24h': { active: true, - percents: '0,03%', + percents: '0,03', }, '1W': { active: true, - percents: '0,07%', + percents: '0,07', }, '1M': { active: false, - percents: '0,07%', + percents: '0,07', }, totalAmount: { - amount: '4990,00 AGIX', - usd: '400,00 USD', + amount: '4990,00', + usd: '400,00', }, }, { name: 'TKN', id: 'Tkn', - price: '0,08 USD', + price: '0,08', portfolioPercents: '5,00', '24h': { active: false, - percents: '0,03%', + percents: '0,03', }, '1W': { active: true, - percents: '0,07%', + percents: '0,07', }, '1M': { active: true, - percents: '0,07%', + percents: '0,07', }, totalAmount: { - amount: '4990,00 AGIX', - usd: '400,00 USD', + amount: '4990,00', + usd: '400,00', }, }, { name: 'TKN', id: 'Tkn', - price: '0,08 USD', + price: '0,08', portfolioPercents: '5,00', '24h': { active: false, - percents: '0,03%', + percents: '0,03', }, '1W': { active: false, - percents: '0,07%', + percents: '0,07', }, '1M': { active: false, - percents: '0,07%', + percents: '0,07', }, totalAmount: { - amount: '4990,00 AGIX', - usd: '400,00 USD', + amount: '4990,00', + usd: '400,00', }, }, ], }, + PortfolioDetailPage: { - subMenuOptions: [ - { - label: 'Overview', - className: 'overview', - route: 'overview', - }, - { - label: 'Performance', - className: 'performance', - route: 'performance', - }, - ], history: [ { type: 'Sent', @@ -214,20 +208,7 @@ const mockData = { }, ], }, - TokenDetails: { - performanceItemList: [ - { id: 'tokenPriceChange', label: 'Token price change' }, - { id: 'tokenPrice', label: 'Token price' }, - { id: 'marketCap', label: 'Market cap' }, - { id: 'volumn', label: '24h volumn' }, - { id: 'rank', label: 'Rank' }, - { id: 'circulating', label: 'Circulating' }, - { id: 'totalSupply', label: 'Total supply' }, - { id: 'maxSupply', label: 'Max supply' }, - { id: 'allTimeHigh', label: 'All time high' }, - { id: 'allTimeLow', label: 'All time low' }, - ], - }, + Chart: { data: [ { name: 'Page A', value: 0.1 }, diff --git a/packages/yoroi-extension/app/i18n/locales/en-US.json b/packages/yoroi-extension/app/i18n/locales/en-US.json index a42d2a8c33..1f484448b8 100644 --- a/packages/yoroi-extension/app/i18n/locales/en-US.json +++ b/packages/yoroi-extension/app/i18n/locales/en-US.json @@ -1011,9 +1011,41 @@ "yoroiTransfer.waiting.progressInfo.restoringAddresses": "Fetching addresses", "yoroiTransfer.waiting.title.label": "Wallet is being restored", "portfolio.main.header.text": "Tokens", + "portfolio.main.search.text": "Search by asset name or ID", "portfolio.detail.header.text": "Token details", "portfolio.menu.wallet.link.label": "Wallet", "portfolio.menu.dapps.link.label": "Dapps", - "gouvernace.delegateToDRep":"Delegate to a DRep", - "gouvernace.designatingSomeoneElse":"You are designating someone else to cast your vote on your behalf for all proposals now and in the future." + "portfolio.tooltip.balancePerformance": "Balance performance", + "portfolio.tooltip.balanceChange": "Balance change", + "portfolio.tooltip.tokenPriceChange": "Token price change", + "portfolio.tooltip.in24hours": "in 24 hours", + "portfolio.button.backToPortfolio": "Back to portfolio", + "portfolio.button.swap": "Swap", + "portfolio.button.send": "Send", + "portfolio.button.receive": "Receive", + "portfolio.tokenInfo.balance": "balance", + "portfolio.tokenInfo.marketPrice": "Market price", + "portfolio.tokenInfo.menuLabel.overview": "Overview", + "portfolio.tokenInfo.menuLabel.performance": "Performance", + "portfolio.tokenInfo.overview.description": "Description", + "portfolio.tokenInfo.overview.website": "Website", + "portfolio.tokenInfo.overview.policyId": "Policy ID", + "portfolio.tokenInfo.overview.fingerprint": "Fingerprint", + "portfolio.tokenInfo.overview.detailsOn": "Details on", + "portfolio.tokenInfo.performance.marketData": "Market data", + "portfolio.tokenInfo.performance.tokenPrice": "Token price", + "portfolio.tokenInfo.performance.marketCap": "Market cap", + "portfolio.tokenInfo.performance.24hVolumn": "24h volumn", + "portfolio.tokenInfo.performance.rank": "Rank", + "portfolio.tokenInfo.performance.circulating": "Circulating", + "portfolio.tokenInfo.performance.totalSupply": "Total supply", + "portfolio.tokenInfo.performance.maxSupply": "Max supply", + "portfolio.tokenInfo.performance.allTimeHigh": "All time high", + "portfolio.tokenInfo.performance.allTimeLow": "All time low", + "portfolio.statsTable.headerText.name": "Name", + "portfolio.statsTable.headerText.price": "Price", + "portfolio.statsTable.headerText.portfolio": "Portfolio", + "portfolio.statsTable.headerText.totalAmount": "Total amount", + "gouvernace.delegateToDRep": "Delegate to a DRep", + "gouvernace.designatingSomeoneElse": "You are designating someone else to cast your vote on your behalf for all proposals now and in the future." } From 3fd6ec2b46990ba50a5fbbcb8191b0ff9287765e Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Fri, 24 May 2024 14:58:59 +0700 Subject: [PATCH 026/464] update chart and transaction table --- .../yoroi-extension/app/UI/components/chip.js | 23 ++++ .../app/UI/components/search-input.js | 2 +- .../features/portfolio/common/useStrings.js | 40 ++++++ .../useCases/TokenDetails/TokenDetailChart.js | 123 ++++++++++++++++-- .../useCases/TokenDetails/TokenDetails.js | 48 ++++--- .../useCases/TokenDetails/TransactionTable.js | 92 +++++++------ .../useCases/Wallet/PortfolioWallet.js | 33 ++--- .../portfolio/useCases/Wallet/StatsTable.js | 53 +++----- .../UI/pages/portfolio/PortfolioDetailPage.js | 35 +++++ .../app/i18n/locales/en-US.json | 8 ++ 10 files changed, 327 insertions(+), 130 deletions(-) create mode 100644 packages/yoroi-extension/app/UI/components/chip.js diff --git a/packages/yoroi-extension/app/UI/components/chip.js b/packages/yoroi-extension/app/UI/components/chip.js new file mode 100644 index 0000000000..7a41945078 --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/chip.js @@ -0,0 +1,23 @@ +import React from 'react'; +import { Chip, Stack, Typography } from '@mui/material'; +import { useTheme } from '@mui/material/styles'; + +const StyledChip = props => { + const theme = useTheme(); + + return ( + + ); +}; + +export default StyledChip; diff --git a/packages/yoroi-extension/app/UI/components/search-input.js b/packages/yoroi-extension/app/UI/components/search-input.js index 50deb84a45..1da9caaf05 100644 --- a/packages/yoroi-extension/app/UI/components/search-input.js +++ b/packages/yoroi-extension/app/UI/components/search-input.js @@ -5,7 +5,7 @@ export const SearchInput = styled(Input)(({ theme }) => ({ width: '370px', height: '40px', padding: '10px 12px', - backgroundColor: theme.palette.ds.white_static, + backgroundColor: theme.palette.ds.text_primary_on, border: '1px solid', borderColor: theme.palette.ds.gray_c300, 'input::placeholder': { diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/useStrings.js b/packages/yoroi-extension/app/UI/features/portfolio/common/useStrings.js index 747c2f4779..21994df250 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/useStrings.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/useStrings.js @@ -131,6 +131,38 @@ export const messages = Object.freeze( id: 'portfolio.statsTable.headerText.totalAmount', defaultMessage: '!!!Total amount', }, + transactionHistory: { + id: 'portfolio.transactionTable.title', + defaultMessage: '!!!Transaction history', + }, + transactionType: { + id: 'portfolio.transactionTable.headerText.transactionType', + defaultMessage: '!!!Transaction type', + }, + status: { + id: 'portfolio.transactionTable.headerText.status', + defaultMessage: '!!!Status', + }, + fee: { + id: 'portfolio.transactionTable.headerText.fee', + defaultMessage: '!!!Fee', + }, + amount: { + id: 'portfolio.transactionTable.headerText.amount', + defaultMessage: '!!!Amount', + }, + today: { + id: 'portfolio.transactionTable.timestamp.today', + defaultMessage: '!!!Today', + }, + yesterday: { + id: 'portfolio.transactionTable.timestamp.yesterday', + defaultMessage: '!!!Amount', + }, + inthepast: { + id: 'portfolio.transactionTable.timestamp.inthepast', + defaultMessage: '!!!In the past', + }, }) ); @@ -168,5 +200,13 @@ export const getStrings = intl => { price: intl.formatMessage(messages.price), portfolio: intl.formatMessage(messages.portfolio), totalAmount: intl.formatMessage(messages.totalAmount), + transactionHistory: intl.formatMessage(messages.transactionHistory), + transactionType: intl.formatMessage(messages.transactionType), + status: intl.formatMessage(messages.status), + fee: intl.formatMessage(messages.fee), + amount: intl.formatMessage(messages.amount), + today: intl.formatMessage(messages.today), + yesterday: intl.formatMessage(messages.yesterday), + inthepast: intl.formatMessage(messages.inthepast), }).current; }; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js index 275a10f2d2..db4eda09be 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js @@ -1,5 +1,5 @@ -import { Box, Button, Stack, styled } from '@mui/material'; -import React, { useState } from 'react'; +import { Box, Button, Stack, styled, Typography } from '@mui/material'; +import React, { useEffect, useMemo, useState } from 'react'; import { LineChart, Line, @@ -11,7 +11,6 @@ import { Label, } from 'recharts'; import { useTheme } from '@mui/material/styles'; -import mockData from '../../../../pages/portfolio/mockData'; const StyledButton = styled(Button)(({ theme }) => ({ fontWeight: 500, @@ -21,17 +20,100 @@ const StyledButton = styled(Button)(({ theme }) => ({ height: '30px', })); -const TokenDetailChart = ({ isLoading }) => { - const timePeriods = [ +const StyledTooltip = styled(Box)(({ theme }) => ({ + padding: '10px', + borderRadius: `${theme.shape.borderRadius}px`, + border: `1px solid ${theme.palette.ds.sys_cyan_c100}`, + backgroundColor: theme.palette.ds.primary_c200, + color: theme.palette.ds.primary_c700, +})); + +const CustomTooltip = ({ active, payload }) => { + if (active && payload && payload.length) { + return ( + + {`Date: ${payload[0].payload.date}`} + {`Price: ${payload[0].value} USD`} + + ); + } + + return null; +}; + +const TokenDetailChart = ({ isLoading, data }) => { + const theme = useTheme(); + const [buttonPeriodProps, setButtonPeriodProps] = useState([ { label: '24H', active: true }, { label: '1W', active: false }, { label: '1M', active: false }, { label: '6M', active: false }, { label: '1Y', active: false }, { label: 'ALL', active: false }, - ]; - const theme = useTheme(); - const [data, setData] = useState(mockData.Chart.data); + ]); + + const categorizeByDate = data => { + const now = new Date(); + + const todayStart = new Date(now); + + const yesterdayStart = new Date(todayStart); + yesterdayStart.setDate(todayStart.getDate() - 1); + + const oneWeekAgo = new Date(todayStart); + oneWeekAgo.setDate(todayStart.getDate() - 7); + + const oneMonthAgo = new Date(todayStart); + oneMonthAgo.setMonth(todayStart.getMonth() - 1); + + const sixMonthsAgo = new Date(todayStart); + sixMonthsAgo.setMonth(todayStart.getMonth() - 6); + + const oneYearAgo = new Date(todayStart); + oneYearAgo.setFullYear(todayStart.getFullYear() - 1); + + const categorizedData = data.reduce( + (acc, item) => { + const itemDate = new Date(item.date); + + if (itemDate >= yesterdayStart && itemDate < todayStart) { + acc['24H'].push(item); + } + if (itemDate >= oneWeekAgo && itemDate < todayStart) { + acc['1W'].push(item); + } + if (itemDate >= oneMonthAgo && itemDate < todayStart) { + acc['1M'].push(item); + } + if (itemDate >= sixMonthsAgo && itemDate < todayStart) { + acc['6M'].push(item); + } + if (itemDate >= oneYearAgo && itemDate < todayStart) { + acc['1Y'].push(item); + } + + acc['ALL'].push(item); + + return acc; + }, + { + '24H': [], + '1W': [], + '1M': [], + '6M': [], + '1Y': [], + ALL: [], + } + ); + + Object.keys(categorizedData).forEach(key => { + categorizedData[key].sort((a, b) => new Date(a.date) - new Date(b.date)); + }); + + return categorizedData; + }; + + const categorizedData = useMemo(() => categorizeByDate(data), [data]); const SkeletonLabel = ({ x, y, width = 19, height = 13, borderRadius = 8, marginRight = 10 }) => { return ( @@ -46,7 +128,6 @@ const TokenDetailChart = ({ isLoading }) => { /> ); }; - const CustomYAxisTick = props => { const { x, y, payload } = props; @@ -59,11 +140,26 @@ const TokenDetailChart = ({ isLoading }) => { ); }; + const handleChoosePeriod = label => { + const tmp = buttonPeriodProps.map(item => { + if (item.label === label) return { ...item, active: true }; + return { + ...item, + active: false, + }; + }); + setButtonPeriodProps(tmp); + }; + + useEffect(() => { + console.log('categorized data', categorizedData); + }, [categorizedData]); + return ( - + item.active).label]}> { type={'number'} tick={CustomYAxisTick} > - {!isLoading && } + {!isLoading && } />} @@ -85,11 +181,12 @@ const TokenDetailChart = ({ isLoading }) => { - {timePeriods.map(period => ( + {buttonPeriodProps.map(period => ( handleChoosePeriod(period.label)} > {period.label} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js index fc1751e6f8..8ca96b4718 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js @@ -23,6 +23,8 @@ import { useTheme } from '@mui/material/styles'; import mockData from '../../../../pages/portfolio/mockData'; import { useNavigateTo } from '../../common/useNavigateTo'; import { usePortfolio } from '../../module/PortfolioContextProvider'; +import StyledChip from '../../../../components/chip'; +import ArrowIcon from '../../../../components/icons/portfolio/Arrow'; const PerformanceItemType = { USD: 'usd', @@ -172,7 +174,7 @@ const TokenDetails = ({ tokenInfo, mockHistory }) => { ) : ( - 0,48 + {tokenInfo.marketPrice.current}  USD @@ -190,39 +192,47 @@ const TokenDetails = ({ tokenInfo, mockHistory }) => { {isLoading ? ( ) : ( - - - 0,03% + {tokenInfo.marketPrice.percents.value}% } - sx={{ - backgroundColor: theme.palette.ds.secondary_c100, - color: theme.palette.ds.secondary_c800, - }} - > + /> )} {isLoading ? ( ) : ( - +0,03 USD} - sx={{ - backgroundColor: theme.palette.ds.secondary_c100, - color: theme.palette.ds.secondary_c800, - }} - > + + {tokenInfo.marketPrice.usd.active ? '+' : '-'} + {tokenInfo.marketPrice.usd.value} USD + + } + /> )} - +
diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js index 2d14a9954f..b3dad2e3d3 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js @@ -16,42 +16,44 @@ import { Card } from '../../../../components'; import { default as ArrowIcon } from '../../../../components/icons/portfolio/transaction-history/Arrow'; import { default as ExpandIcon } from '../../../../components/icons/portfolio/transaction-history/Expand'; import { default as ErrorIcon } from '../../../../components/icons/portfolio/transaction-history/Error'; - -const timestamps = ['Today', 'Yesterday', 'In the past']; -const categorizeByDate = data => { - const today = new Date(); - const yesterday = new Date(today); - yesterday.setDate(yesterday.getDate() - 1); - - return data.reduce( - (acc, item) => { - const itemDate = new Date(item.date); - if (itemDate.toDateString() === today.toDateString()) { - acc['Today'].push(item); - } else if (itemDate.toDateString() === yesterday.toDateString()) { - acc['Yesterday'].push(item); - } else { - acc['In the past'].push(item); - } - return acc; - }, - { - Today: [], - Yesterday: [], - 'In the past': [], - } - ); -}; +import { usePortfolio } from '../../module/PortfolioContextProvider'; const TransactionTable = ({ history }) => { const theme = useTheme(); + const { strings } = usePortfolio(); + + const timestamps = [strings.today, strings.yesterday, strings.inthepast]; + const categorizeByDate = data => { + const today = new Date(); + const yesterday = new Date(today); + yesterday.setDate(yesterday.getDate() - 1); + + return data.reduce( + (acc, item) => { + const itemDate = new Date(item.date); + if (itemDate.toDateString() === today.toDateString()) { + acc[timestamps[0]].push(item); + } else if (itemDate.toDateString() === yesterday.toDateString()) { + acc[timestamps[1]].push(item); + } else { + acc[timestamps[2]].push(item); + } + return acc; + }, + { + Today: [], + Yesterday: [], + 'In the past': [], + } + ); + }; const categorizedData = useMemo(() => categorizeByDate(history), [history]); return ( - Transaction history + {strings.transactionHistory} { - Transaction type + {strings.transactionType} - Status + + {strings.status} + - Fee + + {strings.fee} + - Amount + + {strings.amount} + @@ -97,22 +105,30 @@ const TransactionTable = ({ history }) => { height: '48px', backgroundColor: row.type === 'Sent' - ? theme.palette.ds.sys_cyan_c100 + ? theme.palette.ds.primary_c100 : row.type === 'Received' ? theme.palette.ds.secondary_c100 : theme.palette.ds.sys_magenta_c100, + '&:hover': { + backgroundColor: + row.type === 'Sent' + ? theme.palette.ds.primary_c100 + : row.type === 'Received' + ? theme.palette.ds.secondary_c100 + : theme.palette.ds.sys_magenta_c100, + }, }} > {row.type === 'Sent' && ( )} {row.type === 'Received' && ( { )} {row.type === 'Transaction error' && ( @@ -142,7 +158,7 @@ const TransactionTable = ({ history }) => { sx={{ color: row.status === 'Failed' - ? theme.palette.ds.sys_magenta_c500 + ? theme.palette.ds.text_error : theme.palette.ds.black_static, }} > @@ -172,12 +188,12 @@ const TransactionTable = ({ history }) => { )} {row.type === 'Sent' && ( - + {row.amount.asset} )} - + diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js index 092e010bd5..e9dcdf0fb3 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js @@ -1,13 +1,14 @@ -import { Typography, Stack, Chip, Box, Input, InputAdornment, styled } from '@mui/material'; +import { Typography, Stack, Box, Input, InputAdornment, styled } from '@mui/material'; import { ReactComponent as Search } from '../../../../../assets/images/assets-page/search.inline.svg'; import React, { useState } from 'react'; import { StyledTooltip, SearchInput } from '../../../../components'; -import ArrowIcon from '../../../../components/icons/portfolio/Arrow'; import { useTheme } from '@mui/material/styles'; import { defineMessages } from 'react-intl'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import StatsTable from './StatsTable'; import mockData from '../../../../pages/portfolio/mockData'; +import StyledChip from '../../../../components/chip'; +import ArrowIcon from '../../../../components/icons/portfolio/Arrow'; const PortfolioWallet = ({ data }) => { const theme = useTheme(); @@ -30,7 +31,7 @@ const PortfolioWallet = ({ data }) => { sx={{ display: 'inline', marginTop: '5px', - color: theme.palette.ds.gray_c400, + color: theme.palette.ds.text_gray_low, }} > /USD @@ -58,7 +59,8 @@ const PortfolioWallet = ({ data }) => { spacing={theme.spacing(1)} sx={{ marginLeft: '20px' }} > - { {mockData.PortfolioPage.balance.percents.value}% } - sx={{ - backgroundColor: mockData.PortfolioPage.balance.percents.active - ? theme.palette.ds.secondary_c100 - : theme.palette.ds.sys_magenta_c100, - color: mockData.PortfolioPage.balance.percents.active - ? theme.palette.ds.secondary_c800 - : theme.palette.ds.sys_magenta_c700, - }} - > - + {mockData.PortfolioPage.balance.amount.active ? '+' : '-'} {mockData.PortfolioPage.balance.amount.value} USD } - sx={{ - backgroundColor: mockData.PortfolioPage.balance.amount.active - ? theme.palette.ds.secondary_c100 - : theme.palette.ds.sys_magenta_c100, - color: mockData.PortfolioPage.balance.amount.active - ? theme.palette.ds.secondary_c800 - : theme.palette.ds.sys_magenta_c700, - }} - > + /> diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js index 22f41c974c..47384acb75 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js @@ -9,13 +9,13 @@ import { Typography, Stack, Box, - Chip, } from '@mui/material'; import { useTheme } from '@mui/material/styles'; import { default as SortIcon } from '../../../../components/icons/portfolio/Sort'; -import ArrowIcon from '../../../../components/icons/portfolio/Arrow'; import { useNavigateTo } from '../../common/useNavigateTo'; import { usePortfolio } from '../../module/PortfolioContextProvider'; +import StyledChip from '../../../../components/chip'; +import ArrowIcon from '../../../../components/icons/portfolio/Arrow'; const StatsTable = ({ data }) => { const theme = useTheme(); @@ -106,7 +106,8 @@ const StatsTable = ({ data }) => { - { {row['24h'].percents}% } - sx={{ - cursor: 'pointer', - backgroundColor: row['24h'].active - ? theme.palette.ds.secondary_c100 - : theme.palette.ds.sys_magenta_c100, - color: row['24h'].active - ? theme.palette.ds.secondary_c800 - : theme.palette.ds.sys_magenta_c700, - }} - > + sx={{ cursor: 'pointer' }} + /> - { {row['1W'].percents}% } - sx={{ - cursor: 'pointer', - backgroundColor: row['1W'].active - ? theme.palette.ds.secondary_c100 - : theme.palette.ds.sys_magenta_c100, - color: row['1W'].active - ? theme.palette.ds.secondary_c800 - : theme.palette.ds.sys_magenta_c700, - }} - > + sx={{ cursor: 'pointer' }} + /> - { {row['1M'].percents}% } - sx={{ - cursor: 'pointer', - backgroundColor: row['1M'].active - ? theme.palette.ds.secondary_c100 - : theme.palette.ds.sys_magenta_c100, - color: row['1M'].active - ? theme.palette.ds.secondary_c800 - : theme.palette.ds.sys_magenta_c700, - }} - > + sx={{ cursor: 'pointer' }} + /> @@ -204,7 +183,9 @@ const StatsTable = ({ data }) => { - {row.totalAmount.amount} {row.name} + + {row.totalAmount.amount} {row.name} + {row.totalAmount.usd} USD diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js index 7cf07a77b7..9f69eaa037 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js @@ -14,6 +14,41 @@ const PortfolioDetailPage = ({ stores, actions, match }: Props) => { const tokenId = match.params.tokenId; const tokenInfo = { + marketPrice: { + current: '0,68', + percents: { + active: true, + value: '0,79', + }, + usd: { + active: true, + value: '8,33', + }, + chartData: [ + { date: '05/24/2024 14:37', value: Math.random().toFixed(3) }, + { date: '05/01/2024 14:37', value: Math.random().toFixed(3) }, + { date: '05/02/2024 18:21', value: Math.random().toFixed(3) }, + { date: '05/03/2024 22:37', value: Math.random().toFixed(3) }, + { date: '05/24/2024 13:37', value: Math.random().toFixed(3) }, + { date: '05/24/2024 10:27', value: Math.random().toFixed(3) }, + { date: '05/24/2024 08:18', value: Math.random().toFixed(3) }, + { date: '08/17/2023 14:37', value: Math.random().toFixed(3) }, + { date: '09/24/2023 14:37', value: Math.random().toFixed(3) }, + { date: '08/17/2022 14:37', value: Math.random().toFixed(3) }, + { date: '09/24/2022 14:37', value: Math.random().toFixed(3) }, + { date: '08/17/2021 14:37', value: Math.random().toFixed(3) }, + { date: '09/24/2021 14:37', value: Math.random().toFixed(3) }, + { date: '05/23/2024 18:37', value: Math.random().toFixed(3) }, + { date: '05/23/2024 20:37', value: Math.random().toFixed(3) }, + { date: '05/20/2024 12:22', value: Math.random().toFixed(3) }, + { date: '04/24/2024 12:22', value: Math.random().toFixed(3) }, + { date: '04/24/2024 12:22', value: Math.random().toFixed(3) }, + { date: '03/24/2024 04:22', value: Math.random().toFixed(3) }, + { date: '03/24/2024 09:22', value: Math.random().toFixed(3) }, + { date: '02/24/2024 18:22', value: Math.random().toFixed(3) }, + { date: '01/24/2024 23:22', value: Math.random().toFixed(3) }, + ], + }, overview: { tokenName: tokenId, description: diff --git a/packages/yoroi-extension/app/i18n/locales/en-US.json b/packages/yoroi-extension/app/i18n/locales/en-US.json index 1f484448b8..6e001581de 100644 --- a/packages/yoroi-extension/app/i18n/locales/en-US.json +++ b/packages/yoroi-extension/app/i18n/locales/en-US.json @@ -1046,6 +1046,14 @@ "portfolio.statsTable.headerText.price": "Price", "portfolio.statsTable.headerText.portfolio": "Portfolio", "portfolio.statsTable.headerText.totalAmount": "Total amount", + "portfolio.transactionTable.title": "Transaction history", + "portfolio.transactionTable.headerText.transactionType": "Transaction type", + "portfolio.transactionTable.headerText.status": "Status", + "portfolio.transactionTable.headerText.fee": "Fee", + "portfolio.transactionTable.headerText.amount": "Amount", + "portfolio.transactionTable.timestamp.today": "Today", + "portfolio.transactionTable.timestamp.yesterday": "Yesterday", + "portfolio.transactionTable.timestamp.inthepast": "In the past", "gouvernace.delegateToDRep": "Delegate to a DRep", "gouvernace.designatingSomeoneElse": "You are designating someone else to cast your vote on your behalf for all proposals now and in the future." } From ea613806dc33a7da804305f83d417b4c81f8a249 Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Fri, 24 May 2024 15:09:52 +0700 Subject: [PATCH 027/464] add portfolio sidebar icon --- .../app/assets/images/sidebar/revamp/portfolio.inline.svg | 3 +++ .../yoroi-extension/app/stores/stateless/sidebarCategories.js | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 packages/yoroi-extension/app/assets/images/sidebar/revamp/portfolio.inline.svg diff --git a/packages/yoroi-extension/app/assets/images/sidebar/revamp/portfolio.inline.svg b/packages/yoroi-extension/app/assets/images/sidebar/revamp/portfolio.inline.svg new file mode 100644 index 0000000000..807354827f --- /dev/null +++ b/packages/yoroi-extension/app/assets/images/sidebar/revamp/portfolio.inline.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js b/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js index 443b3d1666..a5b68c5c6e 100644 --- a/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js +++ b/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js @@ -10,7 +10,7 @@ import { ReactComponent as goBackIcon } from '../../assets/images/top-bar/back-a import { ReactComponent as dappConnectorIcon } from '../../assets/images/dapp-connector/dapp-connector.inline.svg'; import { ReactComponent as walletIcon } from '../../assets/images/sidebar/revamp/wallet.inline.svg'; import { ReactComponent as stakingIcon } from '../../assets/images/sidebar/revamp/staking.inline.svg'; -import { ReactComponent as assetsIcon } from '../../assets/images/sidebar/revamp/assets.inline.svg'; +import { ReactComponent as portfolioIcon } from '../../assets/images/sidebar/revamp/portfolio.inline.svg'; import { ReactComponent as nftsIcon } from '../../assets/images/sidebar/revamp/nfts.inline.svg'; import { ReactComponent as votingIcon } from '../../assets/images/sidebar/revamp/voting.inline.svg'; import { ReactComponent as swapIcon } from '../../assets/images/sidebar/revamp/swap.inline.svg'; @@ -137,7 +137,7 @@ export const allCategoriesRevamp: Array = [ { className: 'portfolio', route: ROUTES.PORTFOLIO.ROOT, - icon: assetsIcon, + icon: portfolioIcon, label: globalMessages.sidebarPortfolio, isVisible: _request => _request.selected !== null, }, From 0566c5bf2f25b3ec7573a17d6d1ad1710d4013af Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Fri, 24 May 2024 16:23:52 +0700 Subject: [PATCH 028/464] add sort to wallet table --- .../portfolio/useCases/Wallet/StatsTable.js | 125 +++++++++---- .../app/UI/pages/portfolio/PortfolioPage.js | 5 +- .../app/UI/pages/portfolio/mockData.js | 170 ++++-------------- 3 files changed, 128 insertions(+), 172 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js index 47384acb75..7c4d47a16a 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useCallback, useState } from 'react'; import { Table, TableBody, @@ -21,25 +21,75 @@ const StatsTable = ({ data }) => { const theme = useTheme(); const navigateTo = useNavigateTo(); const { strings } = usePortfolio(); - const [order, setOrder] = useState('asc'); - const [orderBy, setOrderBy] = useState(''); const headCells = [ - { id: 'name', label: strings.name, align: 'left' }, - { id: 'price', label: strings.price, align: 'left' }, - { id: '24h', label: '24H', align: 'left' }, - { id: '1w', label: '1W', align: 'left' }, - { id: '1m', label: '1M', align: 'left' }, - { id: 'portfolioPercents', label: `${strings.portfolio} %`, align: 'left' }, - { id: 'totalAmount', label: strings.totalAmount, align: 'right' }, + { id: 'name', label: strings.name, align: 'left', disabledSort: false, sortType: 'character' }, + { id: 'price', label: strings.price, align: 'left', disabledSort: false, sortType: 'numeric' }, + { id: '24h', label: '24H', align: 'left', disabledSort: false, sortType: 'numeric' }, + { id: '1W', label: '1W', align: 'left', disabledSort: false, sortType: 'numeric' }, + { id: '1M', label: '1M', align: 'left', disabledSort: true, sortType: 'numeric' }, + { + id: 'portfolioPercents', + label: `${strings.portfolio} %`, + align: 'left', + disabledSort: false, + sortType: 'numeric', + }, + { + id: 'totalAmount', + label: strings.totalAmount, + align: 'right', + disabledSort: false, + sortType: 'numeric', + }, ]; + const [{ order, orderBy }, setSortState] = useState({ + order: 'asc', + orderBy: 'name', + }); + const handleRequestSort = property => { const isAsc = orderBy === property && order === 'asc'; - setOrder(isAsc ? 'desc' : 'asc'); - setOrderBy(property); + setSortState({ + order: isAsc ? 'desc' : 'asc', + orderBy: property, + }); }; + function descendingComparator(a, b, sortType) { + switch (sortType) { + case 'numeric': + if (parseFloat(b[orderBy]) < parseFloat(a[orderBy])) { + return -1; + } else { + return 1; + } + case 'character': + return String(a[orderBy]).localeCompare(b[orderBy]); + default: + if (b[orderBy] < a[orderBy]) { + return -1; + } else { + return 1; + } + } + } + + const getSortedData = useCallback( + data => { + if (!orderBy || !order) return data; + const sortColumn = headCells.find(cell => cell.id === orderBy); + const sortType = sortColumn?.sortType ?? 'character'; + return data.sort((a, b) => { + return order === 'desc' + ? descendingComparator(a, b, sortType) + : -descendingComparator(a, b, sortType); + }); + }, + [order, orderBy, headCells] + ); + return (
{ > - {headCells.map(({ label, align, id }) => ( - handleRequestSort(id)}> + {headCells.map(({ label, align, id, disabledSort }) => ( + (disabledSort ? null : handleRequestSort(id))} + > - {label} - + + {label} + + {disabledSort ? null : } ))} - {data.map(row => ( + {getSortedData(data).map(row => ( navigateTo.portfolioDetail(row.id)} @@ -107,21 +166,21 @@ const StatsTable = ({ data }) => { 0} label={ 0 ? theme.palette.ds.secondary_c800 : theme.palette.ds.sys_magenta_c700 } style={{ marginRight: '5px', - transform: row['24h'].active ? '' : 'rotate(180deg)', + transform: row['24h'] > 0 ? '' : 'rotate(180deg)', }} /> - {row['24h'].percents}% + {row['24h'] > 0 ? row['24h'] : -1 * row['24h']}% } sx={{ cursor: 'pointer' }} @@ -130,21 +189,21 @@ const StatsTable = ({ data }) => { 0} label={ 0 ? theme.palette.ds.secondary_c800 : theme.palette.ds.sys_magenta_c700 } style={{ marginRight: '5px', - transform: row['1W'].active ? '' : 'rotate(180deg)', + transform: row['1W'] > 0 ? '' : 'rotate(180deg)', }} /> - {row['1W'].percents}% + {row['1W'] > 0 ? row['1W'] : -1 * row['1W']}% } sx={{ cursor: 'pointer' }} @@ -153,21 +212,21 @@ const StatsTable = ({ data }) => { 0} label={ 0 ? theme.palette.ds.secondary_c800 : theme.palette.ds.sys_magenta_c700 } style={{ marginRight: '5px', - transform: row['1M'].active ? '' : 'rotate(180deg)', + transform: row['1M'] > 0 ? '' : 'rotate(180deg)', }} /> - {row['1M'].percents}% + {row['1M'] > 0 ? row['1M'] : -1 * row['1M']}% } sx={{ cursor: 'pointer' }} @@ -176,7 +235,7 @@ const StatsTable = ({ data }) => { - {row.portfolioPercents} % + {row.portfolioPercents.toFixed(2)} % @@ -184,10 +243,10 @@ const StatsTable = ({ data }) => { - {row.totalAmount.amount} {row.name} + {row.totalAmount} {row.name} - {row.totalAmount.usd} USD + {row.totalAmountUsd} USD diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js index b9e6822387..1eb06a941c 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js @@ -10,12 +10,9 @@ type Props = {| |}; const PortfolioPage = ({ stores, actions }: Props) => { - return ( - + ); }; diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js b/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js index 33f02ad2f4..4c88d544ed 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js @@ -1,7 +1,41 @@ // ALL THE MOCK DATA FOR RENDERING UI const mockData = { - tokenList: [], + tokenList: [ + { + name: 'Token name', + id: 'Policy ID', + price: 0.23, + portfolioPercents: 75, + '24h': -0.03, + '1W': 0.83, + '1M': 0.89, + totalAmount: 281023, + totalAmountUsd: 372561, + }, + { + name: 'AGIX', + id: 'Agix', + price: 0.79, + portfolioPercents: 43.23, + '24h': -0.03, + '1W': -0.19, + '1M': 0.07, + totalAmount: 1019243, + totalAmountUsd: 372561, + }, + { + name: 'DOGE', + id: 'Doge', + price: 0.86, + portfolioPercents: 81.28, + '24h': 0.43, + '1W': -0.07, + '1M': -0.07, + totalAmount: 658291, + totalAmountUsd: 372561, + }, + ], PortfolioPage: { balance: { @@ -16,140 +50,6 @@ const mockData = { value: '0,56', }, }, - data: [ - { - name: 'Token name', - id: 'Policy ID', - price: '0,48', - portfolioPercents: '75,00', - '24h': { - active: true, - percents: '0,03', - }, - '1W': { - active: false, - percents: '0,07', - }, - '1M': { - active: true, - percents: '0,07', - }, - totalAmount: { - amount: '1,019,243', - usd: '372,561', - }, - }, - { - name: 'AGIX', - id: 'Agix', - price: '0,08', - portfolioPercents: '5,00', - '24h': { - active: false, - percents: '0,03', - }, - '1W': { - active: false, - percents: '0,07', - }, - '1M': { - active: false, - percents: '0,07', - }, - totalAmount: { - amount: '4990,00', - usd: '400,00', - }, - }, - { - name: 'MILK', - id: 'Milk', - price: '0,05', - portfolioPercents: '5,00', - '24h': { - active: true, - percents: '0,03', - }, - '1W': { - active: false, - percents: '0,07', - }, - '1M': { - active: true, - percents: '0,03', - }, - totalAmount: { - amount: '1000,00', - usd: '372,561', - }, - }, - { - name: 'TKN', - id: 'Tkn', - price: '0,08', - portfolioPercents: '5,00', - '24h': { - active: true, - percents: '0,03', - }, - '1W': { - active: true, - percents: '0,07', - }, - '1M': { - active: false, - percents: '0,07', - }, - totalAmount: { - amount: '4990,00', - usd: '400,00', - }, - }, - { - name: 'TKN', - id: 'Tkn', - price: '0,08', - portfolioPercents: '5,00', - '24h': { - active: false, - percents: '0,03', - }, - '1W': { - active: true, - percents: '0,07', - }, - '1M': { - active: true, - percents: '0,07', - }, - totalAmount: { - amount: '4990,00', - usd: '400,00', - }, - }, - { - name: 'TKN', - id: 'Tkn', - price: '0,08', - portfolioPercents: '5,00', - '24h': { - active: false, - percents: '0,03', - }, - '1W': { - active: false, - percents: '0,07', - }, - '1M': { - active: false, - percents: '0,07', - }, - totalAmount: { - amount: '4990,00', - usd: '400,00', - }, - }, - ], }, PortfolioDetailPage: { From c6d6e6d4b7c7864db4771acf860323362077fac7 Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Fri, 24 May 2024 17:55:29 +0700 Subject: [PATCH 029/464] update mock data --- .../useCases/TokenDetails/TokenDetails.js | 30 +-- .../portfolio/useCases/Wallet/StatsTable.js | 7 +- .../UI/pages/portfolio/PortfolioDetailPage.js | 65 +------ .../app/UI/pages/portfolio/mockData.js | 176 ++++++++++++++++-- 4 files changed, 179 insertions(+), 99 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js index 8ca96b4718..dadadbaba4 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js @@ -129,7 +129,7 @@ const TokenDetails = ({ tokenInfo, mockHistory }) => { {isLoading ? ( ) : ( - `${tokenInfo.overview.tokenName} ${strings.balance}` + `${tokenInfo.name} ${strings.balance}` )} @@ -138,7 +138,7 @@ const TokenDetails = ({ tokenInfo, mockHistory }) => { ) : ( - 200000,00 + {tokenInfo.totalAmount} { marginTop: '5px', }} > - {tokenInfo.overview.tokenName} + {tokenInfo.name} )} @@ -155,7 +155,9 @@ const TokenDetails = ({ tokenInfo, mockHistory }) => { {isLoading ? ( ) : ( - 680,00 USD + + {tokenInfo.totalAmountUsd} USD + )} @@ -174,7 +176,7 @@ const TokenDetails = ({ tokenInfo, mockHistory }) => { ) : ( - {tokenInfo.marketPrice.current} + {tokenInfo.price}  USD @@ -193,23 +195,21 @@ const TokenDetails = ({ tokenInfo, mockHistory }) => { ) : ( 0} label={ 0 ? theme.palette.ds.secondary_c800 : theme.palette.ds.sys_magenta_c700 } style={{ marginRight: '5px', - transform: tokenInfo.marketPrice.percents.active - ? '' - : 'rotate(180deg)', + transform: tokenInfo.price > 0 ? '' : 'rotate(180deg)', }} /> - {tokenInfo.marketPrice.percents.value}% + {tokenInfo.price}% } /> @@ -219,11 +219,11 @@ const TokenDetails = ({ tokenInfo, mockHistory }) => { ) : ( 0} label={ - {tokenInfo.marketPrice.usd.active ? '+' : '-'} - {tokenInfo.marketPrice.usd.value} USD + {tokenInfo.totalAmountUsd > 0 ? '+' : '-'} + {tokenInfo.totalAmountUsd} USD } /> @@ -232,7 +232,7 @@ const TokenDetails = ({ tokenInfo, mockHistory }) => { - + diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js index 7c4d47a16a..c53c6e7c32 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js @@ -100,15 +100,12 @@ const StatsTable = ({ data }) => { {headCells.map(({ label, align, id, disabledSort }) => ( - (disabledSort ? null : handleRequestSort(id))} - > + (disabledSort ? null : handleRequestSort(id))} sx={{ float: align, cursor: disabledSort ? 'auto' : 'pointer' }} > { const tokenId = match.params.tokenId; - const tokenInfo = { - marketPrice: { - current: '0,68', - percents: { - active: true, - value: '0,79', - }, - usd: { - active: true, - value: '8,33', - }, - chartData: [ - { date: '05/24/2024 14:37', value: Math.random().toFixed(3) }, - { date: '05/01/2024 14:37', value: Math.random().toFixed(3) }, - { date: '05/02/2024 18:21', value: Math.random().toFixed(3) }, - { date: '05/03/2024 22:37', value: Math.random().toFixed(3) }, - { date: '05/24/2024 13:37', value: Math.random().toFixed(3) }, - { date: '05/24/2024 10:27', value: Math.random().toFixed(3) }, - { date: '05/24/2024 08:18', value: Math.random().toFixed(3) }, - { date: '08/17/2023 14:37', value: Math.random().toFixed(3) }, - { date: '09/24/2023 14:37', value: Math.random().toFixed(3) }, - { date: '08/17/2022 14:37', value: Math.random().toFixed(3) }, - { date: '09/24/2022 14:37', value: Math.random().toFixed(3) }, - { date: '08/17/2021 14:37', value: Math.random().toFixed(3) }, - { date: '09/24/2021 14:37', value: Math.random().toFixed(3) }, - { date: '05/23/2024 18:37', value: Math.random().toFixed(3) }, - { date: '05/23/2024 20:37', value: Math.random().toFixed(3) }, - { date: '05/20/2024 12:22', value: Math.random().toFixed(3) }, - { date: '04/24/2024 12:22', value: Math.random().toFixed(3) }, - { date: '04/24/2024 12:22', value: Math.random().toFixed(3) }, - { date: '03/24/2024 04:22', value: Math.random().toFixed(3) }, - { date: '03/24/2024 09:22', value: Math.random().toFixed(3) }, - { date: '02/24/2024 18:22', value: Math.random().toFixed(3) }, - { date: '01/24/2024 23:22', value: Math.random().toFixed(3) }, - ], - }, - overview: { - tokenName: tokenId, - description: - "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", - website: 'https://www.cardano.org', - detailOn: 'https://www.yoroiwallet.com', - policyId: - 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', - fingerprint: - 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', - }, - performance: [ - { value: '0,277' }, - { value: '0,48' }, - { value: '557M' }, - { value: '34M' }, - { value: '55' }, - { value: '67,00' }, - { value: '100,67' }, - { value: '400,60' }, - { value: '3,01' }, - { value: '0,00002' }, - ], - }; + const tokenInfo = React.useMemo(() => { + const tmp = mockData.tokenList.find(item => item.id === tokenId); + if (tmp) return tmp; + return {}; + }, [tokenId]); return ( diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js b/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js index 4c88d544ed..f202ac97b0 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js @@ -3,8 +3,8 @@ const mockData = { tokenList: [ { - name: 'Token name', - id: 'Policy ID', + name: 'AGIX', + id: 'Agix', price: 0.23, portfolioPercents: 75, '24h': -0.03, @@ -12,28 +12,166 @@ const mockData = { '1M': 0.89, totalAmount: 281023, totalAmountUsd: 372561, - }, - { - name: 'AGIX', - id: 'Agix', - price: 0.79, - portfolioPercents: 43.23, - '24h': -0.03, - '1W': -0.19, - '1M': 0.07, - totalAmount: 1019243, - totalAmountUsd: 372561, + overview: { + description: + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", + website: 'https://www.cardano.org', + detailOn: 'https://www.yoroiwallet.com', + policyId: + 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + fingerprint: + 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', + }, + performance: [ + { value: '0,277' }, + { value: '0,48' }, + { value: '557M' }, + { value: '34M' }, + { value: '55' }, + { value: '67,00' }, + { value: '100,67' }, + { value: '400,60' }, + { value: '3,01' }, + { value: '0,00002' }, + ], + chartData: [ + { date: '05/24/2024 14:37', value: Math.random().toFixed(3) }, + { date: '05/01/2024 14:37', value: Math.random().toFixed(3) }, + { date: '05/02/2024 18:21', value: Math.random().toFixed(3) }, + { date: '05/03/2024 22:37', value: Math.random().toFixed(3) }, + { date: '05/24/2024 13:37', value: Math.random().toFixed(3) }, + { date: '05/24/2024 10:27', value: Math.random().toFixed(3) }, + { date: '05/24/2024 08:18', value: Math.random().toFixed(3) }, + { date: '08/17/2023 14:37', value: Math.random().toFixed(3) }, + { date: '09/24/2023 14:37', value: Math.random().toFixed(3) }, + { date: '08/17/2022 14:37', value: Math.random().toFixed(3) }, + { date: '09/24/2022 14:37', value: Math.random().toFixed(3) }, + { date: '08/17/2021 14:37', value: Math.random().toFixed(3) }, + { date: '09/24/2021 14:37', value: Math.random().toFixed(3) }, + { date: '05/23/2024 18:37', value: Math.random().toFixed(3) }, + { date: '05/23/2024 20:37', value: Math.random().toFixed(3) }, + { date: '05/20/2024 12:22', value: Math.random().toFixed(3) }, + { date: '04/24/2024 12:22', value: Math.random().toFixed(3) }, + { date: '04/24/2024 12:22', value: Math.random().toFixed(3) }, + { date: '03/24/2024 04:22', value: Math.random().toFixed(3) }, + { date: '03/24/2024 09:22', value: Math.random().toFixed(3) }, + { date: '02/24/2024 18:22', value: Math.random().toFixed(3) }, + { date: '01/24/2024 23:22', value: Math.random().toFixed(3) }, + ], }, { name: 'DOGE', id: 'Doge', - price: 0.86, - portfolioPercents: 81.28, - '24h': 0.43, - '1W': -0.07, - '1M': -0.07, - totalAmount: 658291, + price: 0.23, + portfolioPercents: 68, + '24h': -0.59, + '1W': 0.24, + '1M': 0.17, + totalAmount: 321023, + totalAmountUsd: 2561, + overview: { + description: + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", + website: 'https://www.cardano.org', + detailOn: 'https://www.yoroiwallet.com', + policyId: + 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + fingerprint: + 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', + }, + performance: [ + { value: '0,277' }, + { value: '0,48' }, + { value: '557M' }, + { value: '34M' }, + { value: '1' }, + { value: '67,00' }, + { value: '100,67' }, + { value: '400,60' }, + { value: '3,01' }, + { value: '0,00002' }, + ], + chartData: [ + { date: '05/24/2024 14:37', value: Math.random().toFixed(3) }, + { date: '05/01/2024 14:37', value: Math.random().toFixed(3) }, + { date: '05/02/2024 18:21', value: Math.random().toFixed(3) }, + { date: '05/03/2024 22:37', value: Math.random().toFixed(3) }, + { date: '05/24/2024 13:37', value: Math.random().toFixed(3) }, + { date: '05/24/2024 10:27', value: Math.random().toFixed(3) }, + { date: '05/24/2024 08:18', value: Math.random().toFixed(3) }, + { date: '08/17/2023 14:37', value: Math.random().toFixed(3) }, + { date: '09/24/2023 14:37', value: Math.random().toFixed(3) }, + { date: '08/17/2022 14:37', value: Math.random().toFixed(3) }, + { date: '09/24/2022 14:37', value: Math.random().toFixed(3) }, + { date: '08/17/2021 14:37', value: Math.random().toFixed(3) }, + { date: '09/24/2021 14:37', value: Math.random().toFixed(3) }, + { date: '05/23/2024 18:37', value: Math.random().toFixed(3) }, + { date: '05/23/2024 20:37', value: Math.random().toFixed(3) }, + { date: '05/20/2024 12:22', value: Math.random().toFixed(3) }, + { date: '04/24/2024 12:22', value: Math.random().toFixed(3) }, + { date: '04/24/2024 12:22', value: Math.random().toFixed(3) }, + { date: '03/24/2024 04:22', value: Math.random().toFixed(3) }, + { date: '03/24/2024 09:22', value: Math.random().toFixed(3) }, + { date: '02/24/2024 18:22', value: Math.random().toFixed(3) }, + { date: '01/24/2024 23:22', value: Math.random().toFixed(3) }, + ], + }, + { + name: 'TKN', + id: 'Tkn', + price: 0.82, + portfolioPercents: 34, + '24h': -0.93, + '1W': 0.23, + '1M': 0.829, + totalAmount: 1281023, totalAmountUsd: 372561, + overview: { + description: + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", + website: 'https://www.cardano.org', + detailOn: 'https://www.yoroiwallet.com', + policyId: + 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + fingerprint: + 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', + }, + performance: [ + { value: '0,277' }, + { value: '0,48' }, + { value: '557M' }, + { value: '34M' }, + { value: '55' }, + { value: '67,00' }, + { value: '100,67' }, + { value: '400,60' }, + { value: '3,01' }, + { value: '0,00002' }, + ], + chartData: [ + { date: '05/24/2024 14:37', value: Math.random().toFixed(3) }, + { date: '05/01/2024 14:37', value: Math.random().toFixed(3) }, + { date: '05/02/2024 18:21', value: Math.random().toFixed(3) }, + { date: '05/03/2024 22:37', value: Math.random().toFixed(3) }, + { date: '05/24/2024 13:37', value: Math.random().toFixed(3) }, + { date: '05/24/2024 10:27', value: Math.random().toFixed(3) }, + { date: '05/24/2024 08:18', value: Math.random().toFixed(3) }, + { date: '08/17/2023 14:37', value: Math.random().toFixed(3) }, + { date: '09/24/2023 14:37', value: Math.random().toFixed(3) }, + { date: '08/17/2022 14:37', value: Math.random().toFixed(3) }, + { date: '09/24/2022 14:37', value: Math.random().toFixed(3) }, + { date: '08/17/2021 14:37', value: Math.random().toFixed(3) }, + { date: '09/24/2021 14:37', value: Math.random().toFixed(3) }, + { date: '05/23/2024 18:37', value: Math.random().toFixed(3) }, + { date: '05/23/2024 20:37', value: Math.random().toFixed(3) }, + { date: '05/20/2024 12:22', value: Math.random().toFixed(3) }, + { date: '04/24/2024 12:22', value: Math.random().toFixed(3) }, + { date: '04/24/2024 12:22', value: Math.random().toFixed(3) }, + { date: '03/24/2024 04:22', value: Math.random().toFixed(3) }, + { date: '03/24/2024 09:22', value: Math.random().toFixed(3) }, + { date: '02/24/2024 18:22', value: Math.random().toFixed(3) }, + { date: '01/24/2024 23:22', value: Math.random().toFixed(3) }, + ], }, ], From b6dfe2bb1492243ff51d2ebd004ba3665ca9b168 Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Mon, 27 May 2024 08:57:20 +0700 Subject: [PATCH 030/464] update sort login and icon --- .../app/UI/components/icons/portfolio/Sort.js | 4 ++-- .../portfolio/useCases/Wallet/StatsTable.js | 19 ++++++++++++++----- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/packages/yoroi-extension/app/UI/components/icons/portfolio/Sort.js b/packages/yoroi-extension/app/UI/components/icons/portfolio/Sort.js index 77a4e9c7f5..48de86ca5a 100644 --- a/packages/yoroi-extension/app/UI/components/icons/portfolio/Sort.js +++ b/packages/yoroi-extension/app/UI/components/icons/portfolio/Sort.js @@ -12,11 +12,11 @@ const Sort = props => { > ); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js index c53c6e7c32..0c205d9cae 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js @@ -45,14 +45,23 @@ const StatsTable = ({ data }) => { ]; const [{ order, orderBy }, setSortState] = useState({ - order: 'asc', - orderBy: 'name', + order: null, + orderBy: null, }); const handleRequestSort = property => { - const isAsc = orderBy === property && order === 'asc'; + let direction = 'asc'; + if (order === 'asc') { + if (property === orderBy) { + direction = 'desc'; + } + } else if (order === 'desc') { + if (property === orderBy) { + direction = null; + } + } setSortState({ - order: isAsc ? 'desc' : 'asc', + order: direction, orderBy: property, }); }; @@ -114,7 +123,7 @@ const StatsTable = ({ data }) => { > {label} - {disabledSort ? null : } + {disabledSort ? null : } ))} From c709522eb75537c3eb2ce82aea5c31e2f2740e3d Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Mon, 27 May 2024 08:59:01 +0700 Subject: [PATCH 031/464] remove unused change --- .../portfolio/useCases/Wallet/StatsTable.js | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js index 0c205d9cae..3d16be5cc6 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js @@ -23,23 +23,21 @@ const StatsTable = ({ data }) => { const { strings } = usePortfolio(); const headCells = [ - { id: 'name', label: strings.name, align: 'left', disabledSort: false, sortType: 'character' }, - { id: 'price', label: strings.price, align: 'left', disabledSort: false, sortType: 'numeric' }, - { id: '24h', label: '24H', align: 'left', disabledSort: false, sortType: 'numeric' }, - { id: '1W', label: '1W', align: 'left', disabledSort: false, sortType: 'numeric' }, - { id: '1M', label: '1M', align: 'left', disabledSort: true, sortType: 'numeric' }, + { id: 'name', label: strings.name, align: 'left', sortType: 'character' }, + { id: 'price', label: strings.price, align: 'left', sortType: 'numeric' }, + { id: '24h', label: '24H', align: 'left', sortType: 'numeric' }, + { id: '1W', label: '1W', align: 'left', sortType: 'numeric' }, + { id: '1M', label: '1M', align: 'left', sortType: 'numeric' }, { id: 'portfolioPercents', label: `${strings.portfolio} %`, align: 'left', - disabledSort: false, sortType: 'numeric', }, { id: 'totalAmount', label: strings.totalAmount, align: 'right', - disabledSort: false, sortType: 'numeric', }, ]; @@ -108,14 +106,14 @@ const StatsTable = ({ data }) => { > - {headCells.map(({ label, align, id, disabledSort }) => ( + {headCells.map(({ label, align, id }) => ( (disabledSort ? null : handleRequestSort(id))} - sx={{ float: align, cursor: disabledSort ? 'auto' : 'pointer' }} + onClick={() => handleRequestSort(id)} + sx={{ float: align, cursor: 'pointer' }} > { > {label} - {disabledSort ? null : } + ))} From 4ea42708aeaa2f9202d4703166f9dbe4f2717fca Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Mon, 27 May 2024 09:34:14 +0700 Subject: [PATCH 032/464] updates --- .../useCases/TokenDetails/TokenDetailChart.js | 22 ++- .../useCases/TokenDetails/TokenDetails.js | 2 +- .../useCases/TokenDetails/TransactionTable.js | 4 +- .../app/UI/pages/portfolio/mockData.js | 143 +++++++++--------- 4 files changed, 85 insertions(+), 86 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js index db4eda09be..e3f66ccec1 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js @@ -32,7 +32,7 @@ const CustomTooltip = ({ active, payload }) => { if (active && payload && payload.length) { return ( - {`Date: ${payload[0].payload.date}`} + {`Time: ${payload[0].payload.time}`} {`Price: ${payload[0].value} USD`} ); @@ -52,7 +52,7 @@ const TokenDetailChart = ({ isLoading, data }) => { { label: 'ALL', active: false }, ]); - const categorizeByDate = data => { + const categorizeByTime = data => { const now = new Date(); const todayStart = new Date(now); @@ -74,21 +74,21 @@ const TokenDetailChart = ({ isLoading, data }) => { const categorizedData = data.reduce( (acc, item) => { - const itemDate = new Date(item.date); + const itemTime = new Date(item.time); - if (itemDate >= yesterdayStart && itemDate < todayStart) { + if (itemTime >= yesterdayStart && itemTime < todayStart) { acc['24H'].push(item); } - if (itemDate >= oneWeekAgo && itemDate < todayStart) { + if (itemTime >= oneWeekAgo && itemTime < todayStart) { acc['1W'].push(item); } - if (itemDate >= oneMonthAgo && itemDate < todayStart) { + if (itemTime >= oneMonthAgo && itemTime < todayStart) { acc['1M'].push(item); } - if (itemDate >= sixMonthsAgo && itemDate < todayStart) { + if (itemTime >= sixMonthsAgo && itemTime < todayStart) { acc['6M'].push(item); } - if (itemDate >= oneYearAgo && itemDate < todayStart) { + if (itemTime >= oneYearAgo && itemTime < todayStart) { acc['1Y'].push(item); } @@ -113,7 +113,7 @@ const TokenDetailChart = ({ isLoading, data }) => { return categorizedData; }; - const categorizedData = useMemo(() => categorizeByDate(data), [data]); + const categorizedData = useMemo(() => categorizeByTime(data), [data]); const SkeletonLabel = ({ x, y, width = 19, height = 13, borderRadius = 8, marginRight = 10 }) => { return ( @@ -151,10 +151,6 @@ const TokenDetailChart = ({ isLoading, data }) => { setButtonPeriodProps(tmp); }; - useEffect(() => { - console.log('categorized data', categorizedData); - }, [categorizedData]); - return ( diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js index dadadbaba4..fc5cec842a 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js @@ -272,7 +272,7 @@ const TokenDetails = ({ tokenInfo, mockHistory }) => { ) : ( - {tokenInfo.overview.tokenName} + {tokenInfo.name} )} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js index b3dad2e3d3..6537bc62a4 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js @@ -23,7 +23,7 @@ const TransactionTable = ({ history }) => { const { strings } = usePortfolio(); const timestamps = [strings.today, strings.yesterday, strings.inthepast]; - const categorizeByDate = data => { + const categorizeByTimestamp = data => { const today = new Date(); const yesterday = new Date(today); yesterday.setDate(yesterday.getDate() - 1); @@ -48,7 +48,7 @@ const TransactionTable = ({ history }) => { ); }; - const categorizedData = useMemo(() => categorizeByDate(history), [history]); + const categorizedData = useMemo(() => categorizeByTimestamp(history), [history]); return ( diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js b/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js index f202ac97b0..db58689044 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js @@ -35,28 +35,31 @@ const mockData = { { value: '0,00002' }, ], chartData: [ - { date: '05/24/2024 14:37', value: Math.random().toFixed(3) }, - { date: '05/01/2024 14:37', value: Math.random().toFixed(3) }, - { date: '05/02/2024 18:21', value: Math.random().toFixed(3) }, - { date: '05/03/2024 22:37', value: Math.random().toFixed(3) }, - { date: '05/24/2024 13:37', value: Math.random().toFixed(3) }, - { date: '05/24/2024 10:27', value: Math.random().toFixed(3) }, - { date: '05/24/2024 08:18', value: Math.random().toFixed(3) }, - { date: '08/17/2023 14:37', value: Math.random().toFixed(3) }, - { date: '09/24/2023 14:37', value: Math.random().toFixed(3) }, - { date: '08/17/2022 14:37', value: Math.random().toFixed(3) }, - { date: '09/24/2022 14:37', value: Math.random().toFixed(3) }, - { date: '08/17/2021 14:37', value: Math.random().toFixed(3) }, - { date: '09/24/2021 14:37', value: Math.random().toFixed(3) }, - { date: '05/23/2024 18:37', value: Math.random().toFixed(3) }, - { date: '05/23/2024 20:37', value: Math.random().toFixed(3) }, - { date: '05/20/2024 12:22', value: Math.random().toFixed(3) }, - { date: '04/24/2024 12:22', value: Math.random().toFixed(3) }, - { date: '04/24/2024 12:22', value: Math.random().toFixed(3) }, - { date: '03/24/2024 04:22', value: Math.random().toFixed(3) }, - { date: '03/24/2024 09:22', value: Math.random().toFixed(3) }, - { date: '02/24/2024 18:22', value: Math.random().toFixed(3) }, - { date: '01/24/2024 23:22', value: Math.random().toFixed(3) }, + { time: '05/26/2024 14:37', value: Math.random().toFixed(3) }, + { time: '05/26/2024 18:37', value: Math.random().toFixed(3) }, + { time: '05/26/2024 20:47', value: Math.random().toFixed(3) }, + { time: '05/27/2024 09:12', value: Math.random().toFixed(3) }, + { time: '05/01/2024 14:37', value: Math.random().toFixed(3) }, + { time: '05/02/2024 18:21', value: Math.random().toFixed(3) }, + { time: '05/03/2024 22:37', value: Math.random().toFixed(3) }, + { time: '05/24/2024 13:37', value: Math.random().toFixed(3) }, + { time: '05/24/2024 10:27', value: Math.random().toFixed(3) }, + { time: '05/24/2024 08:18', value: Math.random().toFixed(3) }, + { time: '08/17/2023 14:37', value: Math.random().toFixed(3) }, + { time: '09/24/2023 14:37', value: Math.random().toFixed(3) }, + { time: '08/17/2022 14:37', value: Math.random().toFixed(3) }, + { time: '09/24/2022 14:37', value: Math.random().toFixed(3) }, + { time: '08/17/2021 14:37', value: Math.random().toFixed(3) }, + { time: '09/24/2021 14:37', value: Math.random().toFixed(3) }, + { time: '05/23/2024 18:37', value: Math.random().toFixed(3) }, + { time: '05/23/2024 20:37', value: Math.random().toFixed(3) }, + { time: '05/20/2024 12:22', value: Math.random().toFixed(3) }, + { time: '04/24/2024 12:22', value: Math.random().toFixed(3) }, + { time: '04/24/2024 12:22', value: Math.random().toFixed(3) }, + { time: '03/24/2024 04:22', value: Math.random().toFixed(3) }, + { time: '03/24/2024 09:22', value: Math.random().toFixed(3) }, + { time: '02/24/2024 18:22', value: Math.random().toFixed(3) }, + { time: '01/24/2024 23:22', value: Math.random().toFixed(3) }, ], }, { @@ -92,28 +95,28 @@ const mockData = { { value: '0,00002' }, ], chartData: [ - { date: '05/24/2024 14:37', value: Math.random().toFixed(3) }, - { date: '05/01/2024 14:37', value: Math.random().toFixed(3) }, - { date: '05/02/2024 18:21', value: Math.random().toFixed(3) }, - { date: '05/03/2024 22:37', value: Math.random().toFixed(3) }, - { date: '05/24/2024 13:37', value: Math.random().toFixed(3) }, - { date: '05/24/2024 10:27', value: Math.random().toFixed(3) }, - { date: '05/24/2024 08:18', value: Math.random().toFixed(3) }, - { date: '08/17/2023 14:37', value: Math.random().toFixed(3) }, - { date: '09/24/2023 14:37', value: Math.random().toFixed(3) }, - { date: '08/17/2022 14:37', value: Math.random().toFixed(3) }, - { date: '09/24/2022 14:37', value: Math.random().toFixed(3) }, - { date: '08/17/2021 14:37', value: Math.random().toFixed(3) }, - { date: '09/24/2021 14:37', value: Math.random().toFixed(3) }, - { date: '05/23/2024 18:37', value: Math.random().toFixed(3) }, - { date: '05/23/2024 20:37', value: Math.random().toFixed(3) }, - { date: '05/20/2024 12:22', value: Math.random().toFixed(3) }, - { date: '04/24/2024 12:22', value: Math.random().toFixed(3) }, - { date: '04/24/2024 12:22', value: Math.random().toFixed(3) }, - { date: '03/24/2024 04:22', value: Math.random().toFixed(3) }, - { date: '03/24/2024 09:22', value: Math.random().toFixed(3) }, - { date: '02/24/2024 18:22', value: Math.random().toFixed(3) }, - { date: '01/24/2024 23:22', value: Math.random().toFixed(3) }, + { time: '05/24/2024 14:37', value: Math.random().toFixed(3) }, + { time: '05/01/2024 14:37', value: Math.random().toFixed(3) }, + { time: '05/02/2024 18:21', value: Math.random().toFixed(3) }, + { time: '05/03/2024 22:37', value: Math.random().toFixed(3) }, + { time: '05/24/2024 13:37', value: Math.random().toFixed(3) }, + { time: '05/24/2024 10:27', value: Math.random().toFixed(3) }, + { time: '05/24/2024 08:18', value: Math.random().toFixed(3) }, + { time: '08/17/2023 14:37', value: Math.random().toFixed(3) }, + { time: '09/24/2023 14:37', value: Math.random().toFixed(3) }, + { time: '08/17/2022 14:37', value: Math.random().toFixed(3) }, + { time: '09/24/2022 14:37', value: Math.random().toFixed(3) }, + { time: '08/17/2021 14:37', value: Math.random().toFixed(3) }, + { time: '09/24/2021 14:37', value: Math.random().toFixed(3) }, + { time: '05/23/2024 18:37', value: Math.random().toFixed(3) }, + { time: '05/23/2024 20:37', value: Math.random().toFixed(3) }, + { time: '05/20/2024 12:22', value: Math.random().toFixed(3) }, + { time: '04/24/2024 12:22', value: Math.random().toFixed(3) }, + { time: '04/24/2024 12:22', value: Math.random().toFixed(3) }, + { time: '03/24/2024 04:22', value: Math.random().toFixed(3) }, + { time: '03/24/2024 09:22', value: Math.random().toFixed(3) }, + { time: '02/24/2024 18:22', value: Math.random().toFixed(3) }, + { time: '01/24/2024 23:22', value: Math.random().toFixed(3) }, ], }, { @@ -149,28 +152,28 @@ const mockData = { { value: '0,00002' }, ], chartData: [ - { date: '05/24/2024 14:37', value: Math.random().toFixed(3) }, - { date: '05/01/2024 14:37', value: Math.random().toFixed(3) }, - { date: '05/02/2024 18:21', value: Math.random().toFixed(3) }, - { date: '05/03/2024 22:37', value: Math.random().toFixed(3) }, - { date: '05/24/2024 13:37', value: Math.random().toFixed(3) }, - { date: '05/24/2024 10:27', value: Math.random().toFixed(3) }, - { date: '05/24/2024 08:18', value: Math.random().toFixed(3) }, - { date: '08/17/2023 14:37', value: Math.random().toFixed(3) }, - { date: '09/24/2023 14:37', value: Math.random().toFixed(3) }, - { date: '08/17/2022 14:37', value: Math.random().toFixed(3) }, - { date: '09/24/2022 14:37', value: Math.random().toFixed(3) }, - { date: '08/17/2021 14:37', value: Math.random().toFixed(3) }, - { date: '09/24/2021 14:37', value: Math.random().toFixed(3) }, - { date: '05/23/2024 18:37', value: Math.random().toFixed(3) }, - { date: '05/23/2024 20:37', value: Math.random().toFixed(3) }, - { date: '05/20/2024 12:22', value: Math.random().toFixed(3) }, - { date: '04/24/2024 12:22', value: Math.random().toFixed(3) }, - { date: '04/24/2024 12:22', value: Math.random().toFixed(3) }, - { date: '03/24/2024 04:22', value: Math.random().toFixed(3) }, - { date: '03/24/2024 09:22', value: Math.random().toFixed(3) }, - { date: '02/24/2024 18:22', value: Math.random().toFixed(3) }, - { date: '01/24/2024 23:22', value: Math.random().toFixed(3) }, + { time: '05/24/2024 14:37', value: Math.random().toFixed(3) }, + { time: '05/01/2024 14:37', value: Math.random().toFixed(3) }, + { time: '05/02/2024 18:21', value: Math.random().toFixed(3) }, + { time: '05/03/2024 22:37', value: Math.random().toFixed(3) }, + { time: '05/24/2024 13:37', value: Math.random().toFixed(3) }, + { time: '05/24/2024 10:27', value: Math.random().toFixed(3) }, + { time: '05/24/2024 08:18', value: Math.random().toFixed(3) }, + { time: '08/17/2023 14:37', value: Math.random().toFixed(3) }, + { time: '09/24/2023 14:37', value: Math.random().toFixed(3) }, + { time: '08/17/2022 14:37', value: Math.random().toFixed(3) }, + { time: '09/24/2022 14:37', value: Math.random().toFixed(3) }, + { time: '08/17/2021 14:37', value: Math.random().toFixed(3) }, + { time: '09/24/2021 14:37', value: Math.random().toFixed(3) }, + { time: '05/23/2024 18:37', value: Math.random().toFixed(3) }, + { time: '05/23/2024 20:37', value: Math.random().toFixed(3) }, + { time: '05/20/2024 12:22', value: Math.random().toFixed(3) }, + { time: '04/24/2024 12:22', value: Math.random().toFixed(3) }, + { time: '04/24/2024 12:22', value: Math.random().toFixed(3) }, + { time: '03/24/2024 04:22', value: Math.random().toFixed(3) }, + { time: '03/24/2024 09:22', value: Math.random().toFixed(3) }, + { time: '02/24/2024 18:22', value: Math.random().toFixed(3) }, + { time: '01/24/2024 23:22', value: Math.random().toFixed(3) }, ], }, ], @@ -195,7 +198,7 @@ const mockData = { { type: 'Sent', time: '11:30 PM', - date: '05/23/2024', + time: '05/23/2024', status: 'Low', fee: { amount: '0.17 ADA', @@ -210,7 +213,7 @@ const mockData = { { type: 'Received', time: '9:12 PM', - date: '05/23/2024', + time: '05/23/2024', status: 'Low', amount: { total: '1,169,789.34432 ADA', @@ -221,7 +224,7 @@ const mockData = { { type: 'Transaction error', time: '9:12 PM', - date: '05/22/2024', + time: '05/22/2024', status: 'Failed', amount: { total: '1,169,789.34432 ADA', @@ -232,7 +235,7 @@ const mockData = { { type: 'Sent', time: '4:20 PM', - date: '05/20/2024', + time: '05/20/2024', status: 'Low', fee: { amount: '0.17 ADA', From 5d36f273f920dc70ca3848874d818a0935d850a6 Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Mon, 27 May 2024 11:15:50 +0700 Subject: [PATCH 033/464] update wallet page --- .../UI/components/icons/portfolio/Arrow.js | 13 +++---- .../app/UI/components/search-input.js | 18 +++++---- .../portfolio/common}/chip.js | 0 .../useCases/TokenDetails/TokenDetailChart.js | 17 +++++--- .../useCases/TokenDetails/TokenDetails.js | 2 +- .../useCases/Wallet/PortfolioWallet.js | 16 ++++---- .../portfolio/useCases/Wallet/StatsTable.js | 39 ++++++++++++------- 7 files changed, 64 insertions(+), 41 deletions(-) rename packages/yoroi-extension/app/UI/{components => features/portfolio/common}/chip.js (100%) diff --git a/packages/yoroi-extension/app/UI/components/icons/portfolio/Arrow.js b/packages/yoroi-extension/app/UI/components/icons/portfolio/Arrow.js index 2598524250..60287b1bf8 100644 --- a/packages/yoroi-extension/app/UI/components/icons/portfolio/Arrow.js +++ b/packages/yoroi-extension/app/UI/components/icons/portfolio/Arrow.js @@ -2,14 +2,11 @@ import React from 'react'; const Arrow = props => { return ( - - + + ); }; diff --git a/packages/yoroi-extension/app/UI/components/search-input.js b/packages/yoroi-extension/app/UI/components/search-input.js index 1da9caaf05..7057cb902f 100644 --- a/packages/yoroi-extension/app/UI/components/search-input.js +++ b/packages/yoroi-extension/app/UI/components/search-input.js @@ -1,14 +1,18 @@ import { Input, styled } from '@mui/material'; -export const SearchInput = styled(Input)(({ theme }) => ({ - borderRadius: '8px', - width: '370px', +const SearchInput = styled(Input)(({ theme }) => ({ + borderRadius: `${theme.shape.borderRadius}px`, + width: '320px', height: '40px', - padding: '10px 12px', - backgroundColor: theme.palette.ds.text_primary_on, + padding: '8px 16px 8px 8px', + backgroundColor: 'transparent', border: '1px solid', - borderColor: theme.palette.ds.gray_c300, + borderColor: theme.palette.grayscale[400], 'input::placeholder': { - color: theme.palette.ds.text_gray_medium, + color: theme.palette.grayscale[600], }, })); + +export const StyledInput = props => { + return ; +}; diff --git a/packages/yoroi-extension/app/UI/components/chip.js b/packages/yoroi-extension/app/UI/features/portfolio/common/chip.js similarity index 100% rename from packages/yoroi-extension/app/UI/components/chip.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/chip.js diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js index e3f66ccec1..9b28affaac 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js @@ -28,13 +28,20 @@ const StyledTooltip = styled(Box)(({ theme }) => ({ color: theme.palette.ds.primary_c700, })); -const CustomTooltip = ({ active, payload }) => { +const CustomTooltip = ({ active, payload, coordinate }) => { if (active && payload && payload.length) { + const { x, y } = coordinate; + const tooltipX = x + 10; + const tooltipY = y - 50; + return ( - - {`Time: ${payload[0].payload.time}`} - {`Price: ${payload[0].value} USD`} - + + + + {`Time: ${payload[0].payload.time}`} + {`Price: ${payload[0].value} USD`} + + ); } diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js index fc5cec842a..c11027fecf 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js @@ -23,7 +23,7 @@ import { useTheme } from '@mui/material/styles'; import mockData from '../../../../pages/portfolio/mockData'; import { useNavigateTo } from '../../common/useNavigateTo'; import { usePortfolio } from '../../module/PortfolioContextProvider'; -import StyledChip from '../../../../components/chip'; +import StyledChip from '../../common/chip'; import ArrowIcon from '../../../../components/icons/portfolio/Arrow'; const PerformanceItemType = { diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js index e9dcdf0fb3..d4a359656c 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js @@ -1,13 +1,13 @@ import { Typography, Stack, Box, Input, InputAdornment, styled } from '@mui/material'; import { ReactComponent as Search } from '../../../../../assets/images/assets-page/search.inline.svg'; import React, { useState } from 'react'; -import { StyledTooltip, SearchInput } from '../../../../components'; +import { StyledTooltip, StyledInput } from '../../../../components'; import { useTheme } from '@mui/material/styles'; import { defineMessages } from 'react-intl'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import StatsTable from './StatsTable'; import mockData from '../../../../pages/portfolio/mockData'; -import StyledChip from '../../../../components/chip'; +import StyledChip from '../../common/chip'; import ArrowIcon from '../../../../components/icons/portfolio/Arrow'; const PortfolioWallet = ({ data }) => { @@ -57,7 +57,7 @@ const PortfolioWallet = ({ data }) => { direction="row" alignItems="center" spacing={theme.spacing(1)} - sx={{ marginLeft: '20px' }} + sx={{ marginLeft: theme.spacing(2) }} > { : 'rotate(180deg)', }} /> - {mockData.PortfolioPage.balance.percents.value}% + + {mockData.PortfolioPage.balance.percents.value}% + } /> + {mockData.PortfolioPage.balance.amount.active ? '+' : '-'} {mockData.PortfolioPage.balance.amount.value} USD @@ -94,7 +96,7 @@ const PortfolioWallet = ({ data }) => { - setKeyword(e.target.value)} placeholder={strings.search} @@ -102,7 +104,7 @@ const PortfolioWallet = ({ data }) => { svg > use': { - fill: 'ds.text_gray_medium', + fill: '#242838', }, }} position="start" diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js index 3d16be5cc6..2f66c96288 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js @@ -14,8 +14,9 @@ import { useTheme } from '@mui/material/styles'; import { default as SortIcon } from '../../../../components/icons/portfolio/Sort'; import { useNavigateTo } from '../../common/useNavigateTo'; import { usePortfolio } from '../../module/PortfolioContextProvider'; -import StyledChip from '../../../../components/chip'; +import StyledChip from '../../common/chip'; import ArrowIcon from '../../../../components/icons/portfolio/Arrow'; +import adaPng from '../../../../../assets/images/ada.png'; const StatsTable = ({ data }) => { const theme = useTheme(); @@ -116,8 +117,8 @@ const StatsTable = ({ data }) => { sx={{ float: align, cursor: 'pointer' }} > {label} @@ -138,7 +139,6 @@ const StatsTable = ({ data }) => { '& td, & th': { border: 0 }, '&:hover': { backgroundColor: theme.palette.ds.gray_c50, - boxShadow: `0px 2px 10px ${theme.palette.ds.gray_c200}`, borderRadius: `${theme.shape.borderRadius}px`, }, }} @@ -152,10 +152,14 @@ const StatsTable = ({ data }) => { borderRadius: `${theme.shape.borderRadius}px`, backgroundColor: theme.palette.ds.gray_c700, }} + component="img" + src={adaPng} > - {row.name} - + + {row.name} + + {row.id} @@ -163,7 +167,7 @@ const StatsTable = ({ data }) => { - + {row.price} USD @@ -184,7 +188,9 @@ const StatsTable = ({ data }) => { transform: row['24h'] > 0 ? '' : 'rotate(180deg)', }} /> - {row['24h'] > 0 ? row['24h'] : -1 * row['24h']}% + + {row['24h'] > 0 ? row['24h'] : -1 * row['24h']}% + } sx={{ cursor: 'pointer' }} @@ -207,7 +213,9 @@ const StatsTable = ({ data }) => { transform: row['1W'] > 0 ? '' : 'rotate(180deg)', }} /> - {row['1W'] > 0 ? row['1W'] : -1 * row['1W']}% + + {row['1W'] > 0 ? row['1W'] : -1 * row['1W']}% + } sx={{ cursor: 'pointer' }} @@ -230,7 +238,9 @@ const StatsTable = ({ data }) => { transform: row['1M'] > 0 ? '' : 'rotate(180deg)', }} /> - {row['1M'] > 0 ? row['1M'] : -1 * row['1M']}% + + {row['1M'] > 0 ? row['1M'] : -1 * row['1M']}% + } sx={{ cursor: 'pointer' }} @@ -238,7 +248,7 @@ const StatsTable = ({ data }) => { - + {row.portfolioPercents.toFixed(2)} % @@ -246,10 +256,13 @@ const StatsTable = ({ data }) => { - + {row.totalAmount} {row.name} - + {row.totalAmountUsd} USD From fb56831313dd8e0d1a3aee5884b5da30db5aa04b Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Mon, 27 May 2024 13:14:11 +0700 Subject: [PATCH 034/464] update detail page --- .../app/UI/components/copy-button.js | 13 +- .../UI/components/icons/portfolio/Copied.js | 24 ++ .../app/UI/components/icons/portfolio/Copy.js | 20 ++ .../TokenDetails/TokenDetailOverview.js | 155 ++++++++++++ .../TokenDetails/TokenDetailPerformance.js | 56 +++++ .../useCases/TokenDetails/TokenDetails.js | 225 +++--------------- 6 files changed, 291 insertions(+), 202 deletions(-) create mode 100644 packages/yoroi-extension/app/UI/components/icons/portfolio/Copied.js create mode 100644 packages/yoroi-extension/app/UI/components/icons/portfolio/Copy.js create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js diff --git a/packages/yoroi-extension/app/UI/components/copy-button.js b/packages/yoroi-extension/app/UI/components/copy-button.js index 3f529208e3..cee5a1ae42 100644 --- a/packages/yoroi-extension/app/UI/components/copy-button.js +++ b/packages/yoroi-extension/app/UI/components/copy-button.js @@ -1,24 +1,25 @@ import React, { useState } from 'react'; import { IconButton } from '@mui/material'; -import { ReactComponent as CopyIcon } from '../../assets/images/copy.inline.svg'; import { CopyToClipboard } from 'react-copy-to-clipboard'; +import CopyIcon from '../components/icons/portfolio/Copy'; +import CopiedIcon from '../components/icons/portfolio/Copied'; import { StyledTooltip } from './tooltip'; -export const CopyButton = ({ textToCopy }) => { +export const CopyButton = ({ textToCopy, disabled, ...props }) => { const [copied, setCopied] = useState(false); const handleCopy = () => { setCopied(true); setTimeout(() => { setCopied(false); - }, 2000); // Reset tooltip after 2 seconds + }, 2000); }; return ( - + - - + + {copied ? : } diff --git a/packages/yoroi-extension/app/UI/components/icons/portfolio/Copied.js b/packages/yoroi-extension/app/UI/components/icons/portfolio/Copied.js new file mode 100644 index 0000000000..470d632278 --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/icons/portfolio/Copied.js @@ -0,0 +1,24 @@ +import React from 'react'; + +const Copied = props => { + return ( + + + + + + ); +}; + +export default Copied; diff --git a/packages/yoroi-extension/app/UI/components/icons/portfolio/Copy.js b/packages/yoroi-extension/app/UI/components/icons/portfolio/Copy.js new file mode 100644 index 0000000000..ecfea230ad --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/icons/portfolio/Copy.js @@ -0,0 +1,20 @@ +import React from 'react'; + +const Copy = props => { + return ( + + + + + ); +}; + +export default Copy; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js new file mode 100644 index 0000000000..ce20a26784 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js @@ -0,0 +1,155 @@ +import React from 'react'; +import { Stack, Box, Typography, Link, Button } from '@mui/material'; +import { StyledSkeleton } from '../../../../components/skeleton'; +import { CopyButton } from '../../../../components/copy-button'; +import { useTheme } from '@mui/material/styles'; +import { usePortfolio } from '../../module/PortfolioContextProvider'; +import adaPng from '../../../../../assets/images/ada.png'; + +const TokenDetailOverview = ({ tokenInfo, isLoading }) => { + const theme = useTheme(); + const { strings } = usePortfolio(); + + return ( + + + + {isLoading ? ( + + ) : ( + + )} + {isLoading ? ( + + ) : ( + + {tokenInfo.name} + + )} + + + + {isLoading ? ( + + ) : ( + {strings.description} + )} + {isLoading ? ( + <> + + + + + ) : ( + + {tokenInfo.overview.description} + + )} + + + + {isLoading ? ( + + ) : ( + {strings.website} + )} + {isLoading ? ( + + ) : ( + + cardano.org + + )} + + + + {isLoading ? ( + + ) : ( + {strings.policyId} + )} + + + {isLoading ? ( + + + + + ) : ( + + {tokenInfo.overview.policyId} + + )} + + + + + + {isLoading ? ( + + ) : ( + {strings.fingerprint} + )} + + + {isLoading ? ( + + + + + ) : ( + + {tokenInfo.overview.fingerprint} + + )} + + + + + + {isLoading ? ( + + ) : ( + {strings.detailsOn} + )} + + {isLoading ? ( + + ) : ( + + Cardanoscan + + )} + {isLoading ? ( + + ) : ( + + Adaex + + )} + + + + + ); +}; + +export default TokenDetailOverview; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js new file mode 100644 index 0000000000..9c527df7ea --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js @@ -0,0 +1,56 @@ +import React from 'react'; +import { Box, Stack, Typography, Link } from '@mui/material'; +import { useTheme } from '@mui/material/styles'; +import { usePortfolio } from '../../module/PortfolioContextProvider'; + +const PerformanceItemType = { + USD: 'usd', + TOKEN: 'token', + RANK: 'rank', +}; + +const TokenDetailPerformance = ({ tokenInfo }) => { + const theme = useTheme(); + const { strings } = usePortfolio(); + + const performanceItemList = [ + { id: 'tokenPriceChange', type: PerformanceItemType.USD, label: strings.tokenPriceChange }, + { id: 'tokenPrice', type: PerformanceItemType.USD, label: strings.tokenPrice }, + { id: 'marketCap', type: PerformanceItemType.USD, label: strings.marketCap }, + { id: 'volumn', type: PerformanceItemType.USD, label: strings['24hVolumn'] }, + { id: 'rank', type: PerformanceItemType.RANK, label: strings.rank }, + { id: 'circulating', type: PerformanceItemType.TOKEN, label: strings.circulating }, + { id: 'totalSupply', type: PerformanceItemType.TOKEN, label: strings.totalSupply }, + { id: 'maxSupply', type: PerformanceItemType.TOKEN, label: strings.maxSupply }, + { id: 'allTimeHigh', type: PerformanceItemType.USD, label: strings.allTimeHigh }, + { id: 'allTimeLow', type: PerformanceItemType.USD, label: strings.allTimeLow }, + ]; + + return ( + + + {strings.marketData} + + + {performanceItemList.map((item, index) => ( + + {item.label} + + {item.type === PerformanceItemType.RANK && '#'} + {tokenInfo.performance[index].value} {item.type === PerformanceItemType.USD && 'USD'} + {item.type === PerformanceItemType.TOKEN && tokenInfo.overview.tokenName} + + + ))} + + + ); +}; + +export default TokenDetailPerformance; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js index c11027fecf..28a7e99918 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js @@ -25,12 +25,8 @@ import { useNavigateTo } from '../../common/useNavigateTo'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import StyledChip from '../../common/chip'; import ArrowIcon from '../../../../components/icons/portfolio/Arrow'; - -const PerformanceItemType = { - USD: 'usd', - TOKEN: 'token', - RANK: 'rank', -}; +import TokenDetailPerformance from './TokenDetailPerformance'; +import TokenDetailOverview from './TokenDetailOverview'; const Header = styled(Box)({ display: 'flex', @@ -42,9 +38,11 @@ const TokenInfo = styled(Stack)({ marginTop: '25px', }); -const StyledButton = styled(Button)({ +const StyledButton = styled(Button)(({ theme }) => ({ maxHeight: '40px', -}); + width: '100%', + maxWidth: '140,25px', +})); const TabContent = styled(Box)({ flex: 1, @@ -57,29 +55,16 @@ const TokenDetails = ({ tokenInfo, mockHistory }) => { const [isLoading, setIsLoading] = useState(false); const subMenuOptions = [ - { - label: strings.overview, - className: 'overview', - route: 'overview', - }, { label: strings.performance, className: 'performance', route: 'performance', }, - ]; - - const performanceItemList = [ - { id: 'tokenPriceChange', type: PerformanceItemType.USD, label: strings.tokenPriceChange }, - { id: 'tokenPrice', type: PerformanceItemType.USD, label: strings.tokenPrice }, - { id: 'marketCap', type: PerformanceItemType.USD, label: strings.marketCap }, - { id: 'volumn', type: PerformanceItemType.USD, label: strings['24hVolumn'] }, - { id: 'rank', type: PerformanceItemType.RANK, label: strings.rank }, - { id: 'circulating', type: PerformanceItemType.TOKEN, label: strings.circulating }, - { id: 'totalSupply', type: PerformanceItemType.TOKEN, label: strings.totalSupply }, - { id: 'maxSupply', type: PerformanceItemType.TOKEN, label: strings.maxSupply }, - { id: 'allTimeHigh', type: PerformanceItemType.USD, label: strings.allTimeHigh }, - { id: 'allTimeLow', type: PerformanceItemType.USD, label: strings.allTimeLow }, + { + label: strings.overview, + className: 'overview', + route: 'overview', + }, ]; const [selectedTab, setSelectedTab] = useState(subMenuOptions[0].route); @@ -116,16 +101,25 @@ const TokenDetails = ({ tokenInfo, mockHistory }) => { - {strings.swap} - {strings.send} - {strings.receive} + + {strings.swap} + + + {strings.send} + + + {strings.receive} + - + {isLoading ? ( ) : ( @@ -237,186 +231,25 @@ const TokenDetails = ({ tokenInfo, mockHistory }) => { - + setSelectedTab(route)} isActiveItem={isActiveItem} locationId="token-details" /> - + - + {selectedTab === subMenuOptions[0].route ? ( - - - {isLoading ? ( - - ) : ( - - )} - {isLoading ? ( - - ) : ( - - {tokenInfo.name} - - )} - - - - {isLoading ? ( - - ) : ( - {strings.description} - )} - {isLoading ? ( - <> - - - - - ) : ( - - {tokenInfo.overview.description} - - )} - - - - {isLoading ? ( - - ) : ( - {strings.website} - )} - {isLoading ? ( - - ) : ( - - cardano.org - - )} - - - - {isLoading ? ( - - ) : ( - {strings.policyId} - )} - - - {isLoading ? ( - - - - - ) : ( - - {tokenInfo.overview.policyId} - - )} - - - - - - {isLoading ? ( - - ) : ( - {strings.fingerprint} - )} - - - {isLoading ? ( - - - - - ) : ( - - {tokenInfo.overview.fingerprint} - - )} - - - - - - {isLoading ? ( - - ) : ( - {strings.detailsOn} - )} - - {isLoading ? ( - - ) : ( - - Cardanoscan - - )} - {isLoading ? ( - - ) : ( - - )} - - - + ) : null} {selectedTab === subMenuOptions[1].route ? ( - - Market data - - - {performanceItemList.map((item, index) => ( - - - {item.label} - - - {item.type === PerformanceItemType.RANK && '#'} - {tokenInfo.performance[index].value}{' '} - {item.type === PerformanceItemType.USD && 'USD'} - {item.type === PerformanceItemType.TOKEN && tokenInfo.overview.tokenName} - - - ))} - + ) : null} From 262c2c89a3758a755cf2bf49e45560bc75d232eb Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Mon, 27 May 2024 11:49:11 +0300 Subject: [PATCH 035/464] refactor modal , add staking package --- packages/yoroi-extension/app/Routes.js | 324 +++++++++--------- .../app/UI/components/modals/CustomModal.js | 24 +- .../app/UI/components/modals/ModalContext.js | 104 ++++++ .../app/UI/components/modals/ModalManager.js | 87 ++++- .../app/UI/context/ModalContext.js | 21 -- .../gouvernace/common/ChooseDRepModal.js | 84 +++-- .../common/useGovernanceManagerMaker.js | 21 ++ .../module/GouvernanceContextProvider.js | 15 +- .../GouvernanceStatusSelection.js | 19 +- .../app/UI/layout/GeneralPageLayout.js | 17 +- .../app/UI/pages/Gouvernance/layout.js | 5 +- packages/yoroi-extension/package-lock.json | 60 +++- packages/yoroi-extension/package.json | 1 + 13 files changed, 529 insertions(+), 253 deletions(-) create mode 100644 packages/yoroi-extension/app/UI/components/modals/ModalContext.js delete mode 100644 packages/yoroi-extension/app/UI/context/ModalContext.js create mode 100644 packages/yoroi-extension/app/UI/features/gouvernace/common/useGovernanceManagerMaker.js diff --git a/packages/yoroi-extension/app/Routes.js b/packages/yoroi-extension/app/Routes.js index b2ebe0150b..f5804e5415 100644 --- a/packages/yoroi-extension/app/Routes.js +++ b/packages/yoroi-extension/app/Routes.js @@ -190,151 +190,169 @@ export const LazyLoadPromises: Array<() => any> = [ // populated by ConfigWebpackPlugin declare var CONFIG: ConfigType; -export const Routes = (stores: StoresMap, actions: ActionsMap): Node => ( - - - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - - wrapAssets({ ...props, stores, actions }, AssetsSubpages(stores, actions)) - } - /> - wrapNFTs({ ...props, stores, actions }, NFTsSubPages(stores, actions))} - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - - wrapWallet({ ...props, stores, actions }, WalletsSubpages(stores, actions)) - } - /> - - wrapSettings({ ...props, stores, actions }, SettingsSubpages(stores, actions)) - } - /> - wrapSwap({ ...props, stores, actions }, SwapSubpages(stores, actions))} - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - - {/* NEW UI Routes */} - - wrapGouvernance({ ...props, stores, actions }, GouvernanceSubpages(stores, actions)) - } - /> - - - -); +export const Routes = (stores: StoresMap, actions: ActionsMap): Node => { + const queryClient = new QueryClient(); + + return ( + + + + } + /> + } + /> + ( + + )} + /> + ( + + )} + /> + } + /> + } + /> + ( + + )} + /> + } + /> + } + /> + + wrapAssets({ ...props, stores, actions }, AssetsSubpages(stores, actions)) + } + /> + + wrapNFTs({ ...props, stores, actions }, NFTsSubPages(stores, actions)) + } + /> + } + /> + } + /> + } + /> + ( + + )} + /> + } + /> + } + /> + + wrapWallet({ ...props, stores, actions }, WalletsSubpages(stores, actions)) + } + /> + + wrapSettings({ ...props, stores, actions }, SettingsSubpages(stores, actions)) + } + /> + + wrapSwap({ ...props, stores, actions }, SwapSubpages(stores, actions)) + } + /> + } + /> + } + /> + } + /> + } + /> + } + /> + } + /> + + {/* NEW UI Routes */} + + wrapGouvernance({ ...props, stores, actions }, GouvernanceSubpages(stores, actions)) + } + /> + + + + + ); +}; const WalletsSubpages = (stores, actions) => ( @@ -519,7 +537,7 @@ const GouvernanceSubpages = (stores, actions) => ( ); export function wrapSwap(swapProps: StoresAndActionsProps, children: Node): Node { - const queryClient = new QueryClient(); + // const queryClient = new QueryClient(); const loader = ( @@ -528,13 +546,13 @@ export function wrapSwap(swapProps: StoresAndActionsProps, children: Node): Node ); return ( - - - - {children} - - - + // + + + {children} + + + // ); } diff --git a/packages/yoroi-extension/app/UI/components/modals/CustomModal.js b/packages/yoroi-extension/app/UI/components/modals/CustomModal.js index 256905b4ea..25744fa436 100644 --- a/packages/yoroi-extension/app/UI/components/modals/CustomModal.js +++ b/packages/yoroi-extension/app/UI/components/modals/CustomModal.js @@ -12,6 +12,7 @@ import IconButton from '@mui/material/IconButton'; import Typography from '@mui/material/Typography'; import Box from '@mui/material/Box'; import { Icon } from '../icons/index'; +import { useModal } from './ModalContext'; const BootstrapDialog = styled(Dialog)(({ theme, width }) => ({ '& .MuiDialogContent-root': { @@ -26,7 +27,7 @@ const BootstrapDialog = styled(Dialog)(({ theme, width }) => ({ margin: 0, }, '& .MuiDialogActions-root': { - padding: '24px', + padding: '0px', }, })); @@ -40,20 +41,14 @@ type CustomModalProps = {| actions: Node, |}; -export const CustomModal = ({ - onClose, - title, - confirmDRep, - dividers = false, - width = '648px', - content, - actions, -}: CustomModalProps): Node => { +export const CustomModal = (): Node => { + const { height, width, closeModal, content, title, isOpen, isLoading } = useModal(); + return ( @@ -64,7 +59,7 @@ export const CustomModal = ({ - {content} - {actions} + {content} ); }; diff --git a/packages/yoroi-extension/app/UI/components/modals/ModalContext.js b/packages/yoroi-extension/app/UI/components/modals/ModalContext.js new file mode 100644 index 0000000000..a2d1cb917e --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/modals/ModalContext.js @@ -0,0 +1,104 @@ +// @flow +import React from 'react'; +import type { Node } from 'react'; + +type ModalState = {| + isOpen: boolean, + title: string, + content: Node, + height: string, + width: string, + isLoading: boolean, +|}; +type ModalActions = {| + openModal: ({| + title: string, + content: Node, + height?: string, + width?: string, + onClose?: () => void, + |}) => void, + closeModal: () => void, + startLoading: () => void, + stopLoading: () => void, +|}; + +const ModalContext = React.createContext(undefined); + +export const useModal = (): any => { + const value = React.useContext(ModalContext); + if (!value) { + throw new Error('useModal must be used within a ModalProvider'); + } + return value; +}; + +export const ModalProvider = ({ + children, + initialState, +}: {| + children: Node, + initialState?: ModalState, +|}): Node => { + const [state, dispatch] = React.useReducer(modalReducer, { ...defaultState, ...initialState }); + const onCloseRef = React.useRef(); + const actions = React.useRef({ + closeModal: () => { + dispatch({ type: 'close' }); + }, + // openModal: (title: string, content: Node, height?: string, onClose?: () => void) => { + openModal: payload => { + dispatch({ + type: 'open', + title: payload.title, + content: payload.content, + height: payload.height, + width: payload.width, + }); + }, + startLoading: () => dispatch({ type: 'startLoading' }), + stopLoading: () => dispatch({ type: 'stopLoading' }), + }).current; + + const context = React.useMemo(() => ({ ...state, ...actions }), [state, actions]); + + return {children}; +}; + +type ModalAction = any; + +const modalReducer = (state: ModalState, action: ModalAction) => { + switch (action.type) { + case 'open': + return { + ...state, + content: action.content, + height: action.height ?? defaultState.height, + width: action.width ?? defaultState.width, + title: action.title, + isOpen: true, + isLoading: false, + }; + + case 'close': + return { ...defaultState }; + + case 'stopLoading': + return { ...state, isLoading: false }; + + case 'startLoading': + return { ...state, isLoading: true }; + + default: + throw new Error(`modalReducer invalid action`); + } +}; + +const defaultState: ModalState = Object.freeze({ + content: null, + height: '648px', + width: '648px', + title: '', + isOpen: false, + isLoading: false, +}); diff --git a/packages/yoroi-extension/app/UI/components/modals/ModalManager.js b/packages/yoroi-extension/app/UI/components/modals/ModalManager.js index 6d5adce114..76e3d07203 100644 --- a/packages/yoroi-extension/app/UI/components/modals/ModalManager.js +++ b/packages/yoroi-extension/app/UI/components/modals/ModalManager.js @@ -1,17 +1,80 @@ -import { useModal } from '../../context/ModalContext'; -import { ChooseDRepModal } from '../../features/gouvernace/common/ChooseDRepModal'; +// @flow -const ModalLookup = { - ChooseDRepModal: ChooseDRepModal, -}; +import * as React from 'react'; +import type { Node } from 'react'; +import Button from '@mui/material/Button'; +import { styled } from '@mui/material/styles'; +import Dialog from '@mui/material/Dialog'; +import DialogTitle from '@mui/material/DialogTitle'; +import DialogContent from '@mui/material/DialogContent'; +import DialogActions from '@mui/material/DialogActions'; +import IconButton from '@mui/material/IconButton'; +import Typography from '@mui/material/Typography'; +import Box from '@mui/material/Box'; +import { Icon } from '../icons/index'; +import { useModal } from './ModalContext'; -const ModalManager = () => { - const { modal, closeModal } = useModal(); +const BootstrapDialog = styled(Dialog)(({ theme, width, height }) => ({ + '& .MuiDialogContent-root': { + padding: '24px', + }, + '& .MuiDialog-root': { + maxWidth: width, + maxHeight: height, + margin: 0, + }, + '& .MuiPaper-root': { + maxWidth: width, + maxHeight: height, + margin: 0, + }, + '& .MuiDialogActions-root': { + padding: '0px', + }, +})); - if (!modal) return null; - const Modal = ModalLookup[modal.name]; +type CustomModalProps = {| + onClose: () => void, + title: string, + confirmDRep: () => void, + dividers?: boolean, + width?: string, + content: Node, + actions: Node, +|}; - return ; -}; +export const ModalManager = (): Node => { + const { height, width, closeModal, content, title, isOpen, isLoading } = useModal(); -export default ModalManager; + console.log('ModalManagerNew', { height, width, closeModal, content, title, isOpen, isLoading }); + + return ( + + + + {title} + + + theme.palette.ds.gray_c500, + }} + > + + + {content} + + ); +}; diff --git a/packages/yoroi-extension/app/UI/context/ModalContext.js b/packages/yoroi-extension/app/UI/context/ModalContext.js deleted file mode 100644 index bec5b08a8c..0000000000 --- a/packages/yoroi-extension/app/UI/context/ModalContext.js +++ /dev/null @@ -1,21 +0,0 @@ -import { createContext, useState, useContext } from 'react'; - -const ModalContext = createContext(); - -export const ModalProvider = ({ children }) => { - const [modal, setModal] = useState(null); - - const openModal = (name, props = {}) => { - setModal({ name, props }); - }; - - const closeModal = () => setModal(null); - - return ( - - {children} - - ); -}; - -export const useModal = () => useContext(ModalContext); diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/common/ChooseDRepModal.js b/packages/yoroi-extension/app/UI/features/gouvernace/common/ChooseDRepModal.js index 021e6ddf1f..8aa07a48e1 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/common/ChooseDRepModal.js +++ b/packages/yoroi-extension/app/UI/features/gouvernace/common/ChooseDRepModal.js @@ -7,59 +7,73 @@ import Typography from '@mui/material/Typography'; import Box from '@mui/material/Box'; import Stack from '@mui/material/Stack'; import { CustomModal } from '../../../components/modals/CustomModal'; -import { useGouvernance } from '../module/GouvernanceContextProvider'; +import { useGovernance } from '../module/GouvernanceContextProvider'; import { useNavigateTo } from './useNavigateTo'; import { TextInput } from '../../../components'; +import { parseDrepId, useIsValidDRepID } from '@yoroi/staking'; +import { isNonNullable } from '@yoroi/common'; +import { RustModule } from '../../../../api/ada/lib/cardanoCrypto/rustLoader'; type ChooseDRepModallProps = {| - onClose: () => void, title: string, - confirmDRep: () => void, - setDrepId: (id: string) => void, - drepId: string, |}; -export const ChooseDRepModal = ({ onClose, title }: ChooseDRepModallProps): Node => { +export const ChooseDRepModal = (): Node => { const [drepId, setDrepId] = React.useState(''); const navigateTo = useNavigateTo(); - const { dRepIdChanged, gouvernanceStatusChanged } = useGouvernance(); + const { dRepIdChanged, gouvernanceStatusChanged } = useGovernance(); + + // TODO hook endpoint not working well + const { error, isFetched, isFetching } = useIsValidDRepID(drepId, { + retry: false, + enabled: drepId.length > 0, + }); const confirmDRep = () => { // TODO add spcecific validation if needed dRepIdChanged(drepId); navigateTo.delegationForm(); + + // TODO hook endpoint not working well + // parseDrepId(drepId, RustModule.CrossCsl.init) + // .then(parsedId => { + // console.log('parsedId', parsedId); + // }) + // .catch(err => { + // console.log('err', err); + // }); }; const idInvalid = drepId.match(/\d+/g); return ( - - - Identify your preferred DRep and enter their ID below to delegate your vote - - { - setDrepId(event.target.value); - }} - value={drepId} - error={!!idInvalid} - helperText={idInvalid ? 'Incorrect format' : ' '} - /> - - } - actions={ - - } - /> + + + + Identify your preferred DRep and enter their ID below to delegate your vote + + { + setDrepId(event.target.value); + }} + value={drepId} + error={!!idInvalid} + helperText={idInvalid ? 'Incorrect format' : ' '} + /> + + + + ); }; diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/common/useGovernanceManagerMaker.js b/packages/yoroi-extension/app/UI/features/gouvernace/common/useGovernanceManagerMaker.js new file mode 100644 index 0000000000..b016f07373 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/gouvernace/common/useGovernanceManagerMaker.js @@ -0,0 +1,21 @@ +// @flow +import React from 'react'; +import { governanceApiMaker, governanceManagerMaker, useStakingKeyState } from '@yoroi/staking'; +import { RustModule } from '../../../../api/ada/lib/cardanoCrypto/rustLoader'; + +export const useGovernanceManagerMaker = (walletId: string, networkId: string): any => { + // const storage = useAsyncStorage(); + // const governanceStorage = storage.join(`wallet/${walletId}/staking-governance/`); + + return React.useMemo( + () => + governanceManagerMaker({ + walletId, + networkId, + api: governanceApiMaker({ networkId }), + cardano: RustModule.CrossCsl.init, + storage: '', + }), + [networkId, walletId] + ); +}; diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/module/GouvernanceContextProvider.js b/packages/yoroi-extension/app/UI/features/gouvernace/module/GouvernanceContextProvider.js index 2aed9cccf0..22dfa467ea 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/module/GouvernanceContextProvider.js +++ b/packages/yoroi-extension/app/UI/features/gouvernace/module/GouvernanceContextProvider.js @@ -12,6 +12,7 @@ import { } from './state'; import { getStrings } from '../common/useStrings'; +import { useGovernanceManagerMaker } from '../common/useGovernanceManagerMaker'; const initialGouvernanceProvider = { ...defaultGouvernanceState, @@ -28,12 +29,19 @@ export const GouvernanceContextProvider = ({ gouvernanceStatus: 'none', }, intl, + walletId, + networkId, }: GouvernanceProviderProps) => { const [state, dispatch] = React.useReducer(GouvernanceReducer, { ...defaultGouvernanceState, ...initialState, }); + console.log('CONTEXT walletId AND networkId', walletId, networkId); + + const gouvernanceManager = useGovernanceManagerMaker(walletId, networkId); + console.log('CONTEXT gouvernanceManager', gouvernanceManager); + const actions = React.useRef({ gouvernanceStatusChanged: (status: any) => { dispatch({ @@ -50,8 +58,11 @@ export const GouvernanceContextProvider = ({ () => ({ ...state, // ...gouvernanceApi, + // walletId, + // networkId, ...actions, strings: getStrings(intl), + gouvernanceManager, }), [state, actions] ); @@ -59,6 +70,6 @@ export const GouvernanceContextProvider = ({ return {children}; }; -export const useGouvernance = () => +export const useGovernance = () => React.useContext(GouvernanceContext) ?? - invalid('useGouvernance: needs to be wrapped in a GouvernanceManagerProvider'); + invalid('useGovernance: needs to be wrapped in a GouvernanceManagerProvider'); diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js b/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js index 1144072e5d..649351964a 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js +++ b/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js @@ -7,15 +7,16 @@ import Card from '@mui/material/Card'; import CardContent from '@mui/material/CardContent'; import Typography from '@mui/material/Typography'; import Box from '@mui/material/Box'; -import { useGouvernance } from '../../module/GouvernanceContextProvider'; +import { useGovernance } from '../../module/GouvernanceContextProvider'; import { DRepIlustration } from '../../common/ilustrations/DRepIlustration'; import { Abstein } from '../../common/ilustrations/Abstein'; import { NoConfidance } from '../../common/ilustrations/NoConfidance'; import { Stack } from '@mui/material'; import { Button } from '@mui/material'; import Link from '@mui/material/Link'; -import { useModal } from '../../../../context/ModalContext'; - +import { useModal } from '../../../../components/modals/ModalContext'; +import { ChooseDRepModal } from '../../common/ChooseDRepModal'; +import { GovernanceProvider } from '@yoroi/staking'; type Props = {| title: string, description: string, @@ -75,7 +76,7 @@ const GovernanceCard = ({ title, description, icon, selected, onClick }: Props) export const GouvernanceStatusSelection = (): Node => { const [selectedCard, setSelectedCard] = useState(null); - const { gouvernanceStatus, dRepId, strings } = useGouvernance(); + const { gouvernanceStatus, dRepId, strings, gouvernanceManager } = useGovernance(); const { openModal } = useModal(); const pageTitle = gouvernanceStatus === 'none' ? 'Governance Status' : 'Governance status'; @@ -88,7 +89,15 @@ export const GouvernanceStatusSelection = (): Node => { const hasDRep = gouvernanceStatus === 'drep'; const onChoosDRepClick = () => { - openModal('ChooseDRepModal', { title: 'Choose your Drep' }); + openModal({ + title: 'Choose your Drep', + content: ( + + + + ), + width: '648px', + }); }; const handleCardClick = card => { setSelectedCard(card); diff --git a/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js b/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js index dcd6eb202b..6731e65a83 100644 --- a/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js +++ b/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js @@ -10,10 +10,10 @@ import SidebarContainer from '../../containers/SidebarContainer'; import { Box, Typography } from '@mui/material'; import { withLayout } from '../../styles/context/layout'; import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; -import { ModalProvider } from '../context/ModalContext'; -import ModalManager from '../components/modals/ModalManager'; import { GouvernanceContextProvider } from '../features/gouvernace/module/GouvernanceContextProvider'; import globalMessages from '../../i18n/global-messages'; +import { ModalProvider } from '../components/modals/ModalContext'; +import { ModalManager } from '../components/modals/ModalManager'; type Props = {| ...StoresAndActionsProps, @@ -50,8 +50,19 @@ class GeneralPageLayout extends Component { const sidebarContainer = ; const { intl } = this.context; + const selectedWallet = this.props.stores.wallets.selected; + if (!selectedWallet) { + return null; + } + const currentWalletId = selectedWallet.getPublicDeriverId(); + const networkId = selectedWallet.getParent().getNetworkInfo().NetworkId; + return ( - + {/* TODO ModalProvider to be moved into APP after finish refactoring and bring everything in UI */} diff --git a/packages/yoroi-extension/app/UI/pages/Gouvernance/layout.js b/packages/yoroi-extension/app/UI/pages/Gouvernance/layout.js index 7d31eb128a..6886e6c0bc 100644 --- a/packages/yoroi-extension/app/UI/pages/Gouvernance/layout.js +++ b/packages/yoroi-extension/app/UI/pages/Gouvernance/layout.js @@ -5,6 +5,8 @@ import NavBarContainerRevamp from '../../../containers/NavBarContainerRevamp'; import NavBar from '../../../components/topbar/NavBar'; import NavBarTitle from '../../../components/topbar/NavBarTitle'; import { TransactionSubmitted } from '../../components/TransactionSubmitted/TransactionSubmitted'; +import { GovernanceProvider } from '@yoroi/staking'; +import { useGovernance } from '../../features/gouvernace/module/GouvernanceContextProvider'; type Props = {| stores: any, @@ -13,6 +15,7 @@ type Props = {| |}; const GouvernanceLayout = ({ stores, actions, children }: Props): any => { + const { gouvernanceManager } = useGovernance(); return ( { } // menu={menu} // ADD a menu if needed (see example in SwapPageContainer) > - {children} + {children} ); }; diff --git a/packages/yoroi-extension/package-lock.json b/packages/yoroi-extension/package-lock.json index ae49989cb1..45d84e8504 100644 --- a/packages/yoroi-extension/package-lock.json +++ b/packages/yoroi-extension/package-lock.json @@ -31,6 +31,7 @@ "@vespaiach/axios-fetch-adapter": "^0.3.0", "@yoroi/banxa": "1.5.0", "@yoroi/resolver": "2.0.2", + "@yoroi/staking": "^1.5.1", "@yoroi/swap": "1.5.2", "@yoroi/types": "1.5.0", "assert": "2.1.0", @@ -533,7 +534,6 @@ "version": "7.12.17", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.17.tgz", "integrity": "sha512-V3CuX1aBywbJvV2yzJScRxeiiw0v2KZZYYE3giywxzFJL13RiyPjaaDwhDnxmgFTTS7FgvM2ijr4QmKNIu0AtQ==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", "@babel/generator": "^7.12.17", @@ -563,7 +563,6 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, "bin": { "semver": "bin/semver" } @@ -6080,7 +6079,6 @@ "version": "1.21.0", "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.21.0.tgz", "integrity": "sha512-JL0w36KuFHFCvnbOXRekqVAUplmOyT/OuCQkogo6X98MtpSaJOKEAeZnYO8JB0U/RIEixZaGI5px73YbRm/oag==", - "optional": true, "dependencies": { "merge-options": "^3.0.4" }, @@ -7802,6 +7800,59 @@ "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-1.1.0.tgz", "integrity": "sha512-C40jQ3NzfkP53NsO8kEOFd79p4b9kDXQMwgiY1z8ZwrDZgUyom0AHwGegF4Dm99L+YoYhuaB0ceerUcXmqr1rQ==" }, + "node_modules/@yoroi/staking": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@yoroi/staking/-/staking-1.5.1.tgz", + "integrity": "sha512-CgJhPR7rf07QSstwdhPt5C+P8jNuZiqv3s4+ODlj8x60johIl6/5sz2vt+zGcx4R8pzFw1D/pDyFmdw0BDvzlg==", + "dependencies": { + "@emurgo/cip14-js": "^3.0.1", + "bech32": "^2.0.0", + "bip39": "^3.1.0", + "immer": "^10.0.2" + }, + "engines": { + "node": ">= 16.19.0" + }, + "optionalDependencies": { + "@react-native-async-storage/async-storage": "^1.19.3" + }, + "peerDependencies": { + "@react-native-async-storage/async-storage": ">= 1.19.3 <= 1.20.0", + "react": ">= 16.8.0 <= 19.0.0", + "react-query": "^3.39.3" + } + }, + "node_modules/@yoroi/staking/node_modules/@emurgo/cip14-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@emurgo/cip14-js/-/cip14-js-3.0.1.tgz", + "integrity": "sha512-u0XobeajNSlmeGBmY3ntA+NE/Vns7hKP0xrFzWyAO7YubETOifTjUddJN4gpvXE4S08DPUcNBVe3sx1m5GPIOg==", + "dependencies": { + "bech32": "2.0.0", + "blake2b": "2.1.3" + } + }, + "node_modules/@yoroi/staking/node_modules/blake2b": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/blake2b/-/blake2b-2.1.3.tgz", + "integrity": "sha512-pkDss4xFVbMb4270aCyGD3qLv92314Et+FsKzilCLxDz5DuZ2/1g3w4nmBbu6nKApPspnjG7JcwTjGZnduB1yg==", + "dependencies": { + "blake2b-wasm": "^1.1.0", + "nanoassert": "^1.0.0" + } + }, + "node_modules/@yoroi/staking/node_modules/blake2b-wasm": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/blake2b-wasm/-/blake2b-wasm-1.1.7.tgz", + "integrity": "sha512-oFIHvXhlz/DUgF0kq5B1CqxIDjIJwh9iDeUUGQUcvgiGz7Wdw03McEO7CfLBy7QKGdsydcMCgO9jFNBAFCtFcA==", + "dependencies": { + "nanoassert": "^1.0.0" + } + }, + "node_modules/@yoroi/staking/node_modules/nanoassert": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-1.1.0.tgz", + "integrity": "sha512-C40jQ3NzfkP53NsO8kEOFd79p4b9kDXQMwgiY1z8ZwrDZgUyom0AHwGegF4Dm99L+YoYhuaB0ceerUcXmqr1rQ==" + }, "node_modules/@yoroi/swap": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/@yoroi/swap/-/swap-1.5.2.tgz", @@ -12959,7 +13010,6 @@ "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, "optional": true, "dependencies": { "iconv-lite": "^0.6.2" @@ -12969,7 +13019,6 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -21478,7 +21527,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", - "optional": true, "dependencies": { "is-plain-obj": "^2.1.0" }, diff --git a/packages/yoroi-extension/package.json b/packages/yoroi-extension/package.json index bf9c5a18f8..efb1bad1b6 100644 --- a/packages/yoroi-extension/package.json +++ b/packages/yoroi-extension/package.json @@ -163,6 +163,7 @@ "@vespaiach/axios-fetch-adapter": "^0.3.0", "@yoroi/banxa": "1.5.0", "@yoroi/resolver": "2.0.2", + "@yoroi/staking": "^1.5.1", "@yoroi/swap": "1.5.2", "@yoroi/types": "1.5.0", "assert": "2.1.0", From 388d6eaffdd740dae0e8fca538407aa78ef6ed8a Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Mon, 27 May 2024 16:05:28 +0700 Subject: [PATCH 036/464] update chart and move files to common --- .../yoroi-extension/app/UI/components/card.js | 6 +- .../app/UI/components/copy-button.js | 10 +- .../icons/{portfolio => }/Copied.js | 0 .../components/icons/{portfolio => }/Copy.js | 0 .../app/UI/components/index.js | 2 +- .../app/UI/components/search-input.js | 6 +- .../app/UI/components/skeleton.js | 6 +- .../app/UI/components/tooltip.js | 10 +- .../portfolio/common/assets/icons}/Arrow.js | 0 .../portfolio/common/assets/icons}/Sort.js | 0 .../icons}/transaction-history/Arrow.js | 0 .../icons}/transaction-history/Error.js | 0 .../icons}/transaction-history/Expand.js | 0 .../icons}/transaction-history/Withdraw.js | 0 .../images/token-detail-chart-skeleton.png | Bin 0 -> 14881 bytes .../app/UI/features/portfolio/common/chip.js | 10 +- .../app/UI/features/portfolio/module/state.js | 2 +- .../useCases/TokenDetails/TokenDetailChart.js | 215 +++++++++++------- .../TokenDetails/TokenDetailOverview.js | 36 +-- .../useCases/TokenDetails/TokenDetails.js | 133 +++-------- .../useCases/TokenDetails/TransactionTable.js | 6 +- .../useCases/Wallet/PortfolioWallet.js | 18 +- .../portfolio/useCases/Wallet/StatsTable.js | 12 +- 23 files changed, 233 insertions(+), 239 deletions(-) rename packages/yoroi-extension/app/UI/components/icons/{portfolio => }/Copied.js (100%) rename packages/yoroi-extension/app/UI/components/icons/{portfolio => }/Copy.js (100%) rename packages/yoroi-extension/app/UI/{components/icons/portfolio => features/portfolio/common/assets/icons}/Arrow.js (100%) rename packages/yoroi-extension/app/UI/{components/icons/portfolio => features/portfolio/common/assets/icons}/Sort.js (100%) rename packages/yoroi-extension/app/UI/{components/icons/portfolio => features/portfolio/common/assets/icons}/transaction-history/Arrow.js (100%) rename packages/yoroi-extension/app/UI/{components/icons/portfolio => features/portfolio/common/assets/icons}/transaction-history/Error.js (100%) rename packages/yoroi-extension/app/UI/{components/icons/portfolio => features/portfolio/common/assets/icons}/transaction-history/Expand.js (100%) rename packages/yoroi-extension/app/UI/{components/icons/portfolio => features/portfolio/common/assets/icons}/transaction-history/Withdraw.js (100%) create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/assets/images/token-detail-chart-skeleton.png diff --git a/packages/yoroi-extension/app/UI/components/card.js b/packages/yoroi-extension/app/UI/components/card.js index 26a809e746..193b093549 100644 --- a/packages/yoroi-extension/app/UI/components/card.js +++ b/packages/yoroi-extension/app/UI/components/card.js @@ -1,6 +1,6 @@ import { Box, styled } from '@mui/material'; -export const Card = styled(Box)(({ theme }) => ({ +const StyledCard = styled(Box)(({ theme }) => ({ borderRadius: '8px', flex: '1 1 100%', display: 'flex', @@ -9,3 +9,7 @@ export const Card = styled(Box)(({ theme }) => ({ borderColor: theme.palette.ds.gray_c200, bgcolor: 'background.card', })); + +export const Card = props => { + return ; +}; diff --git a/packages/yoroi-extension/app/UI/components/copy-button.js b/packages/yoroi-extension/app/UI/components/copy-button.js index cee5a1ae42..9b6581a4cb 100644 --- a/packages/yoroi-extension/app/UI/components/copy-button.js +++ b/packages/yoroi-extension/app/UI/components/copy-button.js @@ -1,9 +1,9 @@ import React, { useState } from 'react'; import { IconButton } from '@mui/material'; import { CopyToClipboard } from 'react-copy-to-clipboard'; -import CopyIcon from '../components/icons/portfolio/Copy'; -import CopiedIcon from '../components/icons/portfolio/Copied'; -import { StyledTooltip } from './tooltip'; +import CopyIcon from './icons/Copy'; +import CopiedIcon from './icons/Copied'; +import { Tooltip } from './tooltip'; export const CopyButton = ({ textToCopy, disabled, ...props }) => { const [copied, setCopied] = useState(false); @@ -17,11 +17,11 @@ export const CopyButton = ({ textToCopy, disabled, ...props }) => { return ( - + {copied ? : } - + ); }; diff --git a/packages/yoroi-extension/app/UI/components/icons/portfolio/Copied.js b/packages/yoroi-extension/app/UI/components/icons/Copied.js similarity index 100% rename from packages/yoroi-extension/app/UI/components/icons/portfolio/Copied.js rename to packages/yoroi-extension/app/UI/components/icons/Copied.js diff --git a/packages/yoroi-extension/app/UI/components/icons/portfolio/Copy.js b/packages/yoroi-extension/app/UI/components/icons/Copy.js similarity index 100% rename from packages/yoroi-extension/app/UI/components/icons/portfolio/Copy.js rename to packages/yoroi-extension/app/UI/components/icons/Copy.js diff --git a/packages/yoroi-extension/app/UI/components/index.js b/packages/yoroi-extension/app/UI/components/index.js index 1adba46cb3..b8646d8d82 100644 --- a/packages/yoroi-extension/app/UI/components/index.js +++ b/packages/yoroi-extension/app/UI/components/index.js @@ -1,8 +1,8 @@ export * from './card'; +export * from './copy-button'; export * from './search-input'; export * from './tooltip'; export * from './skeleton'; -export * from './copy-button'; export * from './Input/TextInput'; export * from './Input/PasswordInput'; export * from './TransactionFailed/TransactionFailed'; diff --git a/packages/yoroi-extension/app/UI/components/search-input.js b/packages/yoroi-extension/app/UI/components/search-input.js index 7057cb902f..0c605904f4 100644 --- a/packages/yoroi-extension/app/UI/components/search-input.js +++ b/packages/yoroi-extension/app/UI/components/search-input.js @@ -1,6 +1,6 @@ import { Input, styled } from '@mui/material'; -const SearchInput = styled(Input)(({ theme }) => ({ +const StyledInput = styled(Input)(({ theme }) => ({ borderRadius: `${theme.shape.borderRadius}px`, width: '320px', height: '40px', @@ -13,6 +13,6 @@ const SearchInput = styled(Input)(({ theme }) => ({ }, })); -export const StyledInput = props => { - return ; +export const SearchInput = props => { + return ; }; diff --git a/packages/yoroi-extension/app/UI/components/skeleton.js b/packages/yoroi-extension/app/UI/components/skeleton.js index 8d3dd38883..68741b69db 100644 --- a/packages/yoroi-extension/app/UI/components/skeleton.js +++ b/packages/yoroi-extension/app/UI/components/skeleton.js @@ -1,11 +1,11 @@ -import { Skeleton } from '@mui/material'; +import { Skeleton as MuiSkeleton } from '@mui/material'; import { useTheme } from '@mui/material/styles'; -export const StyledSkeleton = props => { +export const Skeleton = props => { const theme = useTheme(); return ( - ( - +const StyledTooltip = styled(({ className, ...props }: TooltipProps) => ( + ))(({ theme }) => ({ [`& .${tooltipClasses.arrow}`]: { color: theme.palette.ds.black_static, @@ -11,3 +11,7 @@ export const StyledTooltip = styled(({ className, ...props }: TooltipProps) => ( backgroundColor: theme.palette.ds.black_static, }, })); + +export const Tooltip = ({ children, ...props }) => { + return {children}; +}; diff --git a/packages/yoroi-extension/app/UI/components/icons/portfolio/Arrow.js b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/Arrow.js similarity index 100% rename from packages/yoroi-extension/app/UI/components/icons/portfolio/Arrow.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/Arrow.js diff --git a/packages/yoroi-extension/app/UI/components/icons/portfolio/Sort.js b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/Sort.js similarity index 100% rename from packages/yoroi-extension/app/UI/components/icons/portfolio/Sort.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/Sort.js diff --git a/packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Arrow.js b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Arrow.js similarity index 100% rename from packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Arrow.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Arrow.js diff --git a/packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Error.js b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Error.js similarity index 100% rename from packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Error.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Error.js diff --git a/packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Expand.js b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Expand.js similarity index 100% rename from packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Expand.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Expand.js diff --git a/packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Withdraw.js b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Withdraw.js similarity index 100% rename from packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Withdraw.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Withdraw.js diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/images/token-detail-chart-skeleton.png b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/images/token-detail-chart-skeleton.png new file mode 100644 index 0000000000000000000000000000000000000000..0fbf62faf100dcb896d6b0ebea1f4a4d27d3749b GIT binary patch literal 14881 zcmZvD1yo%@kmbkS-66OJ2pZhoJy_5H!6CR?fM7v_OK|u&fsbo~26u+3DttUV9)SM z?bEE3Pb2nhmX0oeS8N^UbSKl5)5RR?&Io=Q^*k?>4=Zf3(%s&E`IZ2lOioBBuj>%r zZN-KG1i=r=qntU6P5)SN?$TOW66d2_^oFc_=GolG=K$xm1G>bV#7L5C0cqMgAxXyZ zwcF8}iI$|Xh!}4JFaZ#V`GBRgjGy$KBoa8nCede(u4t#m4h|sL9uQAA5s;FN&$sFv zto5OlaTup%*x>>caa79^BxLqo+nS&Voi+Pm8CalEUZFovmee~Omm1z*5_kqNm%00e zalT82r+NP@aziD`N7dn}A$@b_q1}H&DQW`oEbk^ZzFnXE6I(|~CgVos?_6sgDB6Y~ zXgIt1w)5UY2GvC-spY=)<~e|Vte@!Z<4x?Y7)12pkG>THGMxgm!ej| z2h*3Q!AG-Pr#=mVn}C;o12Yz|m57P|S<`#M z@fLr)h12{ieJOT# zE}3t5G>pRZZd8ZIuJ;7u~nSl{9`L zHt-;RfQ^y&_f3V%VA&nd5_02)_N9JB;19+h_MLuytocT~YVD)6phHPw}e2wkr!IY7o!ayWN_Z+YMA0 zaa(tC8x+u8*OTSrN=ls`IckB^StXxOFz^nwSdHSv`-gg)v$0U60ThrT3@b2jkWR)N ziGyQ{;Yk!6s3=I0iO4#7yUF^S#d;4DLSYiG=(%M3r(9-$;j5S zG$LrHh?(s7Jh+i`EwG*)&q*8^v=EwyNPP<5d`y5hj@r$-_@SAdi3XuO4;Z~JCUez= zn=O?Sj~o@H7qlG=@FI6J_KPC=EFHVEonXkmWdBgp*Q_tr7*Qb6WVJ7AUQ~I zs|ArPWBWlY@jh!^zm~mJ4H<-rCV?T2dAG_VytL=WlXA$`h@j(t4sSsRibe$}ly{XS ziquXx?th3kb$>|*u`>nbORB>qysND&+1W2cu^0Km%;K9$U@rlKPY?nqBdRf{q7~kl z3{Cs?f}5v))kYZ?gpUbO+MtGNnr}+?5ynF5hIx5?JdvSOyr0w$z98Z-A{Q^(sAx3I3$Y(X!_L2j(o!G-xYo%?CHQO=`Rz zkHAOTXwgBhH9-%qw~H0|>QgH?GoYsYNgqN5SuSU#`?qT&v@lNls)KGl+KJhuzF93( zKNAcjzDp%kQHG#o=kdSY=+)F`hqGt$Nq~`JgZI!etA{?m@9ru@ULMm;T9p7~!SmIa z!Lt^@_|3El+vBnH7e^e`i=fXjyds>4rr7pZGgPv?3^1`F$t{-30*$@TFZA$yD4czj z)5x?nns5nJee@7Jhw)5n(6wDvA4C&d*N)nyP0~WoO!s)DoTmO~VTb$m-@zg#BuBt8 zPAp6@5*^tcmiWbVSvzY+2)ar}V!Y14%(Ui2MgN}PYHuvSBo=#54=&1AYtZT(CiaKV zNvY0^TS@Vc6b-#QQ6xS!2x;lSVG_>9Y!0WL)a7|p)>)yI^N6e@^r?GpzVlaEl$|Cx z^HWbcD~L0Q@w$O%zTI0?BS+-RIc&GMz+5l{F-+G@Ku$vQz_1nV8sm)6Nf3&v!oT!; z&556o9wB$3Ri#zt3ye-|JJ{)z?`WiOQH!X>q-??dD4-8TjqhW+7)PGjp^&g7%dN@gk$Ka{%BP_ z-g?YPG;Z^uP;?&j2`3n%>!UQbqsT%^_!2zayPmON$xc%FNNv|Bucg89m3qLtwX3E$ zFR81Tps!QlgjBU7g9il+=5=^I(CxeyTGxUY{=t$x=7a8WPv68;CR)ZImG7Jo$0!AL zLqBUHZ}`aXQ!9f`5ULM|9URa7@!;i2PrB1k%Qr+e8js&2@)D336~HsmAfm>Ah7`-G z?bvi^<-<<(>dj77|An9-ZtL03D|Q|e_Obe;yY1Yg{Meo*=oSbK(QU#z5!X|^)p8WYQb6ll@WAug3NXu^> z#Hfl&LH=j-{b@tlxNBipz3e~r)F2*$>&~0li2;FA1noVLNkkRmZI@qp$66N3SP~eS zqHeCWYh4j=8E%hvpz$QejmZl-{*)f=6Zbq6D!`Dn{5xgS=vh8o@gxZ-Xz2WdfCMia z!OEN8pBLfsvEWw*UPROHU%mFIQ(OJeO`LJiB_nBU9)?*81HDZT($hM;nbcNe#N-DV zUePP5dv+TyW1fLY$GKy@>@P=Jc%Gt0=3pF9;b^RE&8JaCnF`#(kPD)NF^}erbS1)_ z1upn;iM$Yls{9Grz?@l@126H0ADDO%&}HGQl^ox>oHxv+kqu8Ta-al3NBK;u*fa7w zp0YYU?~`4!m<4{8AjbjcLk0MA%%b04+GqRdsfSS;^Dr%9N?Vp17o(o301twG->mXb zfWvV%h@naAt`Acb+f9h?j-UBw_UMbVRW<&8s~?$;K{w1B^6zI-^nMuc0Aoplf2%oa zlY>$yheB};!Jc+WMiU=jd|Th4#C*X_Rh5eCGuu{P^4-@v5#@Pg9F9 z=7WW4%HhYOlJ$DXNJl?UIZ4`VfQ zOFpPV^L%P*Dt@X`LF}cy3OG$ej4D36DKBcE1m=Mfk`5*VV!d8xa=k0*UWy02wGhd1 zicPomFdY3dm;vssDRk3hwipIK=L#Ba5sD!v36kJilm~d7yFOx{?H*tah|f~zTJPms znn@zylhbstKhl={v=@=NhU7JQ5(sz*ojBd{MVhoyzN$+?bj0R&VmQup*U#(6*(s*R z@TZF@-haJprT#k4YOPPM(y&s1Q=b_h71Xy+b4~cTtd>?E0GSgy+y;aFfkmF1z6Gp zEJ@r6BMNT$Cjh_3B_hI`=wQa%7^uqhq^L5^(22nKKYPZ!?m|>tUQ!%>fvFoU7GKYe zE_u%lm-%QuU@kFUxY?ygi7e-~5m?#b8}hHa4!!c*nTB=~g3f(_Vn^1J3A`iuwWQ05=fsBRJj`D|Z zB(TWf^6dj~VRh7K3*ol=>0iTutqa?nq#^05%xizwLiD6mrIPksI={VUTwrKKX}wTc z&Df8Yk1QmnPc#O^+y>u?a~F;K+A_r9bvhclS4PbO<6haKhqJ=vhx=t{;Nc^_S|fXj z6eDX^TqR-dZep!%Lo;|?J5U`H+KS=^eL*a^RNcWXDsP(G@cW(|Lo(OT701?a<2hFI z<8d)Y5OJ9c!6+$r+D$TsX!Rhnws=a;SmltSsETFh!xxkbyBI(@X^lO=vcXSs*4Y?`-7VnVu=EJdG&gUqmdHQ#fZqW2Je%z;4z;!NWE z?8&c)fzM2Pc`g&JdBVn3XdI9fT{ZjDz0TyjeqS3YbBMDrZ2BnxGKBkRSMytk)DHC@ zH|D%Qe_J^aVb{8Gu2A5-_Hh>GbGOJLbn14%FPRcW35rEX9xx+*sb%uBmu!mVR|_c+z&_ zv1WO%|7}smb3|0MCbu6f1P`jds4gquzBA)dmF~m>j8GA+vM3AgFdxzoNAV-Z8l|50 z1Xn3a>PCnV!(V}u{zBu1=1>;cAU&&E1fj4;o-K@?rZCs@r8t9X`Q=;}Lq z^0d|Juwi+ws`v;3uo3#!nX_i+9wdensRlW^>QB+;v8P1sPeD|Sn*ne8MXKCXRWvJm z9OxGIXhq_)6>|ehQIx$0awSURDpMAhv9{BHy?&{ zL|q1LNCN{&`)@k#tp`QKjvOZ9U+PzzR8NR3%aL9lhmlO*o zxHK~LPoN&0V2O>mKiq+_DD_q@dUN={22}K{`-1PxztEYAdH9L_x!EcS4A}W361Afd z?-{5_F%9v=ptroAmhP`cQb(-HP)G8Uv{{_{gDDfrdhg!N*- zc|U15*#+>=yT_^n6ehLl0iW_~P{UNH5w*_jbf$GsQ>7F&8(*O|S3wy-WNd@pO#dW!=w$T{ibnu{C)~H?E+_ zwxLabh{Ni94Fx&*!57wG&s`WmUK(K%jJF zmRZ-eC(>vyhE9;eA@ILL5fj#2uokR_OWu1`85XE+a$4ZVebB^zUTYWTTp& z&3*Z(I5~cjpJ&jKFHkue{I=Y%>9QeeRt2101hUGFE7OoaZn2`ezPAc)+z}Rp%^Xkk z#pytMbmWx@4xo#8Ol^G*R=S}UG`54##5sqJe7=o~6t%~RnS)oiWhOb*zTDju_HWpN zaibT%7R8ipt_-|}_Fp7FV4F(%-u0!Ql7xpy$2xsW)|>iVg$Gb+B&OQQdjTq|;wcjW z282x=uY+l>Y>Ijq`M*=&O)}<}`{|0xL^tV>Zofy6w0J%FX$=e)=XMV9hAY41Ku(tH{{&+yJ4q*j(8XyDwm1 zrGkom?+D+fZo8nshfj==efmM7k!88TMWB7Bo3uZl%Mg->_z`*B{p|~&!?b(v&A)X} zCW9uB%B>GcJT`D#=7hItNe!H^rvN1R5wI#yU!e}ri2sv@4$ypMBiikNmp`K3F0v`( zbx`)vO229r4$!QLy^$nWxgzz}n!r-Z$$j2d@c4!|!f+@g*{c6R*1$^m z(JY?e3-s6t!RoqrU(NR3DVj1dj0Dhg^3Q#f;M*BKK>mn;H37G7q;+otFlTaT3^k{FpA|loj5#eg<>E&1Fwt&7h!-{?X)QNHY z6o-RT8tHT)goa3MH=&reHHG+u0iwzPqO#TYSzqc7S9VFL{^_SxhiSH}%8I+5ANz7p zF#HaXh6j*lLppXu9&wK?%R+`M-Z^bK?i%|!MB=Mkg-+b-s|{ypY2#%=nk)E#D-a`+=dAx*QnvEXeWJGIcn%5&to#eLN^06 z7jz_8Wjz*r0YoaRJ@eE91eEdEXY~FgAJ~bX5UQt3Yw}BFNp@Yc!}f&c$_`U9M*2=Z z$s&TU{|E;fiTB=)t!y4`@d$^!a(sutVNS01 z7l?nq04W3)nAl>OgHQ}-LY#T=g(GHD$ya^gw`(A4(GO%lakLiSg6%c%M42r`6T^`z zh>wY;hgXn=R@rTg208k&M%qGq~Gs!4f?z`k~RR8sc@=|j&GWjDsr7(aj+;B-6Q?G~1qe$T+{>ZlDkWVp_-Q28kbE?(vBM@t z$c`(ZpN>6+EW5SNjg1{}*&00Tg??-B#iATboUXSL=?Hu|OwSE;oQT4+cm=&0``6OB zxSZsL?^hl=n}-8UA}nyUXT=`BcDA;!`bHRwyr$Ji#Y|Do92YR zJpFGxVASS6@PN_9+Rr^ik$0VqhL5Ml3WtXn_mq!QW4=_KcYRGtxF@?8cLA?RfN}V` z9ik%52T2`8hsP_%&|+VNqNl%k9>Ye|1F@-KnC-F;-!jg03jewr+~~{b-gzVtI8N-t zTph0<(&HuYl&GmFK;GimG;XTE~%33e=CiqQfui-gnKO~qLG(kf%ON?~!7ynPeFBLtSA{xtdl z4CW`JpV9gSi33u29ff^E?&x-lA65$C;rrO|#8HS*)kuLoYTudR`t&t{E$f}ec9LUR zkLs>yvZ?-=$}RUNqj0TLr0k5<*E2pva03Zb&BXP^gaPr;xjFL4ca*iX04^7 z3Dm`a)iDrYy6NZ!!59NLbZEO@PcK)hl1rc_M$=(xicl0Q`9ufK|I_0;IRl!TDgqYC z^^8x^II`a4ZNdJ9lH#s(Q%F{G${)I=kFO>kh&EER;}XLK6UxMvj4}E`ztD!xh$9{P z8AYt`SZ!;0Ln4gvL~))Uysb&B#3%ogKj7JhnBQiHL&(OeU8wPP{L_ouD@nM?{Om(B zXMEZ<_KxeHhDu-<#EC*sU!IN|(+kk$TQCp-0}FpkxTXVm?8!l?I!+`W#jnOI&7SjU zWp9;pbJC_X$58(9QCv5Z!Fxt$9g$ZSYDOU%Q1(UEoU^jBep7&SivtJWpeMq$G#6b} z62r-O@KTTvs*P79?G5HP+yz0%*59(I;p>O$h28^0h9)TlD`|nW=86=x?=EX$@kzz+ zaDLyfvy|}>0~QwdV=DC1N_OIPCsVtPLZ=mndPI{S0tF&Vze#9^wkZ(gjkk6m?oRZ?jFd~ryi-KxP6L4wIQyax6$Ok?fBl! z&XQ&W%kx4$?ikFiRhueHh7NdpxM-}w-t}46p?^jcs*ePcMjH=VLR0(DT~!tK*577i z@D98IO_B)Q#UU(fsB2oKm-*4{LpBdHZOW^~zZ;JM?}5&w%kqJisYrQr2F1it=*v>7 z4Dqq<=U)?O+H@VEj{B^+ZMEVnUp)UtLUR4ob;=@j6kmfG7zDcAJ3_|4u6O|)Il16> znpc%82nXg%`+56QTCCb#%cRV`meX`=!WVyUzza2=jB+1_PD9HH>E{sPBrv-2^1ZnW zPjQoVi+2u?TTUE{^z$hfQnE8o_>il#B#42q8*EtaKGhs=9ykVsW?O8r;=*IhgP3E0 zni0ckeu&pLzYmek(7PC78JYg=a4_K|<8}uztYlVRBh9^tpwxVea-NbwtLRAOG`OJG z5g!IDOkz-kzT}oP{xmAr;xiRo#Uv+$_h&3x#43S zT3@Pj=GhkuOT1PjoyCRsru9Z_5Ed7o$(Ls8nlV6K3QNQRWXW;|e4)S3gU zU&+b7yu`!k*}mEBorSN;U_C|Y)gTMlfK&Cd)%NDK-JaqEn1{;K_)@vrhpF5qekh8P zM(G{WyV=%F9x%oE3|}32ZV<6j%~0t_8j**Xr)F#7ATAoqqek;nCqo{L>nNeXe7+Jn zX6lu9zW=4*KrcyG6azqn#!Gmr`KWVcQ%ctHX7LP*%pC8%1opTghU&4LW|?9crG7rf zZKflff&Kp_gTLa19o+e6d~Z|&lBO^dse1-`ri1pRIrdV0h!Z@IoW_n@2g&Tk4AOd% zQS6UCRDR&Ii!OjMJbUojx2C$39=uUSQ)wN9qn1R8jK|I3j-<)N528&rmf9R8+ACD0 zA*ThzIHINn-+uj4NUT4JlV@}x1A;FqKhapjlm0rs-!k63TX3GxUJZaqFw zLh|erh$^S;vB~X(eL6797R>R52gBgbUYDF`47e+s4WkOQ5oCr5+0x0d!G$CqAQp8w zN;H#a3p+}nFh55)!L1#WnCxEI+4;Ss;up4j*mTYEL%QB&-ue%{`(uX~p%fx-QNRjx zA+~a;b&HB=V!*?0fBi&SUZfLTqA+(m>nMTIaKw*8Y&My~AvwS+nt6MBqD%NQz>( zbH@bmLalv2^>opS1P~_U+%1Ge_tDNLV8N&$LA!WI*tJ@9NOz`gsaY@x4shfSy7jj= zJq*<-?oxFvr5YAZ*Tb-6w$5$g&u!Oj+6VybqSY+*vOMc!rs6owKI&T%h8g=)0bw+j zy!FKz7E4^Szv!oUOLNRSbzg!Z%7S9UPU#$4Jtq4_$>#RsU(|b1Y=co8p_E0F5qLFm zerzv-2rvsoUsO=O5Ul9_lt23Bs_U#>FyW3B*Zm|`*tGKyIL##C*q}aTKW~3(`DWxg zt`~2>aM5J&0X1FNes{hy*;8<**DLJgmVJsfz*6#`gvvVJ$dse*;>@+yN=MKuOp;jD zVogOgKQ=ri$|la(t1lV;xRmRj-E+{FmiX=Dlv0!bvnkDHRn?lN1V>|D43196AAsR+ zS%yNb#p8=FVY+3A8^CGU6KR|g=CsU}mG!RLi?A$ibkg+E^(|Xbgx0h*C zRC|fh6Lsj3FqxHtu+La|^UGqkm#ybyF!&p7MDoiFS1HaSJBf}h=M4YSMhb#>&QCE6 zch<_8Sf0#d3c1+*QiBgWdUocUICk(W-(dAd=M>e)Nk?b#fJ3}IE#6(fjK2uz9R0~Q zkMY>1Do&LS`wYzESY%lW=HY2E%YKUNqrE*PYT@A{jQg`*wi0zxHNY7s?|V4tUltdC zrsM^Om%q8@_OfAt*C{r%>5D~GeE|(^=%3-HTJt^gntk!p9rkdCCYE^4xHYt|&!!h5};r$I5=|y;O z^Gt6|!rymJU9wnB#r@F-Wbo&XXY;+j8v$d9stI)v$8_#-m8(f?yJ9vOPi|LE{GCc+ z#_zS6xw+j{fe=S1+1jNLUYSQOg><6WMP1pPCm}O-?gIaF>nAl8qhgpDAUJGB9bYxB z<`(UALo7B*hK5-j0#Hi@D27gl@!+scrVNq)EJwIYqbRpuIXB^8> z;%#9XFL#q9T(U=h=CMlrUTg-d<%h+F>$E|4TL_Aq9Vg{a&o%_B!2a9?Eo1KO2dQ$O z#TVCX%8xOsh1s=)K1?rp73++>)|+=&^Kd#u+<6mEM8O=6JPO^~} zaDYX=n7#CJ#4jo}gRc)>8eatU8fICM9qalz`T_V{)wYEVU+YmNe~qQ|mStq2Eb6-n zwQMg|{rd(X()hf=JTa9{zmQg^-*f!Te(Hs`He(BMOKOiH6?0^%$1Jdnx0fy{W*L$P z!!oBVfAu~(X>F6*k~PU^xJSuH*bSAE?Z(He^FJP=zLa##=yOV%5YhFl?<}0aws6Pi zoUXqgbYi(R79YD+d4pZwq3sdwlM<|xfs7@F&eX(FzgXQDFNdA=9>yPPs6L0ZPkqdC zbpy#JEgY7<}k#-@Rtexspb+^m^rR=SW8iA17*8c2?-!JaXO#G_(+_~`mDLl7b zUnAE{QIUp!iR#{05qge2Re!;IL&6_6*#(Coy$9>4fBq?18Pj%{m=3qas*nH%`auOD zJZ;ciYo;{xT_5e`SS80jP4Uxp+J(r;y!r$47m4nPIL#{8vhmD5=0OGZ9&{?HRR3{HXBHzz{P!7K>mjS*^viI2 z)vUZLftr*Ob_5J`%XrjxBk|_`T6NQxBUEW{Y9zbp?C^**a0XF|@afUN)hQ@P1Z9lm zQP|GCwFmlIX%jfgK7`HjuzmXN0*P75OIY&q9Ro2jQOns_{oJGKD9q-VZ%ccb(&YIW@B13u_RPdZ|N?695M{|E+3^N>AI2I zjAK(E+yD43EKDaE5%sn3yBZwa#tfk`Oo^6Kyl z%*SzwVXOqTiV4VOzkJ6wW-?TlilHCGbZo{u7oYxvh^yrgM3e; zgG%sa>#qJZdzddL-r(;b+;v@pf>l#lVN}=;6Mnf5MjG>23Q8iW+vFUWT}OW?8AJG9 z&(;%>E{V=cNE{NxZiq>Lyu&5ZEuJ8}H zPpZYbbt_l_lgLFY@H)P4jQm<=2L5(drG!n!*c1eItb=r-I{E`0OWBL2CfV_M$&e_g_CJ2y$6Ag|GM3uW>*#XZ51BDsF@ zu;4lv4tmV6gxZ8@TzvoygqBhb-WZO2XPj`eDt|E1JR;Hcz%Yd&Zx`zmt2=k=R~&(< zLW+I6FgxV;{s^_iBpWDSB){qqD9?bs51l{;^=k!}Ln|){LJIKdQII4HtM z{Cf{}l2u`mqn=fm$4(~IwQIXY#b9oEFCtPaDcJpR8ga8dII`3f=TO=WRhZOCH5gO) zxlh@pp`E5z;HNsw)TWHfr(eV@2+x~*8pPmweK~C`;W+=M@h5IgNr-`GKS#B7(LW68 zq%h~;u!3f~eXs-!C}bJ?9_pVa z^HqCf^RrryfTRjObDmk&Z-TW5(ixOuWc4A8aSG8>XE=%1VlNvqn}K{fvk6V6U5@5S zL|z#*n>TG31UgdfMQ}XZhj6K`NlsdU`n$>?fi9a=Prm2?UXGWMc<$~)0!5N(eBQh$ zXNVc9kUvLE-5Z+fSKef_J#&h`FnE;r=+Iq?(CoZKW$?$HZ+i0)c>d~0-Tj!AePi47 zNpwR)u}9l6h$H49fH!N5|H#3~9XFy$6M+|chfh9k*`^Gc@mzT;VA*imQhi zujv?+)6|yXyp$P{t%p~Msl#HPl6R?yH$6=jn||vT{RW8#=i&5=La$`>=RM=8Y*5iM z$e(Md=^IGKwbX47JzOH$vFsFCu^L|j1BplStHsnX?l@;o1?g4Qcc7#w8hfiTM_HT| z9%MY#p{b5a`oSc&Q-3p_Au%kNK(y3F&4*&ScH)t4tdvPf9M4wis;u31aow6yp*MSB zcaUw(&RzuOa!Wc~ptNR5-Q4EMt`HT_EIiLT{`=C6AO>VToANeumpHkS)W56>y%NsZ z>+)(nc}|Ijl^0{NpuEqb)qMy=PGujN4Apzm3_5uG*5ANq^&s;46=5UrT%)|~eXUt? zWR3+gO-iJ)B^wqBG(@+$WIZUjc~lN-!M^&2>cL*APUCcVZ^AL`Ry9*N^J<-T-jAma zXI+wbJWjV^gsb-U&!4`r?+J4S?TxI?2RL&n^{%rL1eSh$KtZioop1j`yO-;DT2XMY zTLffvbZ*=vqHaDneRICdq5eZxJSi-q)7GP>g+6348Zcp9p|k%#;uOKRTW3`eyyAqfl$+Tk_& z=b$D4IW`{Umz;FYLT^Pzt8~NzU9z`uCUm^>v@=Blx?|_3BDpEl{OIN-Lm6?6y5tJ9 z)xw)8)a4(W=hq|+DKTul0ID@Qs#ESRmoEpcLgsFxIZdjve>ttY_1-^OroW_DxIND- zXfeLU23^J?DL1;0*LY^W1uBwsMQNSf7BUsAIuSWO(o9|{j#yjVyrT`(Iq`J;??|?m z(|zB_RUtM1W@P3eO`agBVw)+^uO2H`;De)c@Nt`QSAIvyg6j_yGmWIq3vQ|kAq9%# z4#4>Hhyvei5&5i~s^+jbpbUaDT)Up_mf=0EuPPD4FkY8!f% z7^|9drriSXrUE$@`_&=2Yx}p)oqnx0Vd?hqr|e_KEz@lOpi?D6@uS(<6|PbpNH4pl zj7!IS?blxachOuv1#3QQ@RR=>f98px^VTL%v2T))j$?jw^7ZuTxS)fW@IIS9Xns)?OCw7Ho3 zMJTl%LsvorS5IB8=B5H`lq6<;h?rKscqa*=iji)eDs6c=IMmhgci4=Pj9|S$`G>7U zD7QrTqbxesRDeAB$|t--^WmbU>p!mHz7xo0Z)r6u#DvCjUw&5d+<2u4`yW`AZ>Jhu zeuJ87hl)3)bbM-UC5{CpJv#rEND!HM8TTiil-kE3&Si=6a>>9+?t9b; zd}2x9cw1Ih*rHtws_kg5w@=0P_WklllwV1R44oRoHpRoq@zm99pzZrFXAe8r!Kbt6 zI96W1gE9@+UlVYqC~lgJijX9og9tyHCZvQ6;NY96)mo5@tbz&#pJl{Js2GAXlY_d_ zf?=`Os2vE3mIkMSP4YR*oPM&=ud4L~mMr;5&ftkF;^r(Kn?jO2PWN#pG1obPvv=yB zlgx&zZ=neiYXY!3D6H8>NhHAQEEZCt%$$cP)DCvaaysD`%ORnNbPA&_LTNYfaZW0_cUutFNP>u}jlF=QpYz*}veJEFi{ zgdrG?tY{{Sb9t=SUH+C^C4gKk;4CQOtG4TfnDUA$-f7@z^(=lH4HaW%(wa|3PEHR2 zm3VaiNzZkgYdGRMsZ|DNE}~&yg3{y8>lKPes5|)k0kJQ#$jYk0Zm#EdvU8D@MFW?y zvc3~>Mg!1ZOejtur4xD`g3j8avGZMfH=K+D4Qx{D;qai+?fh z66fK@NCQk3DjA9X=J~)<`zts|nDM~6(kujb}O-G|gm)BLKM9Ptrzi zmJWYn+5sLWN({zq?s6j(V!9sz97 z&$Do3KQ6ARF;r*P1Gms`ID6D?5+kfBs+was=qs!kcgik_5igTAXOj@L9}`jdAHDv? z-mcn&ALIMrIEZYR!@nQYRu5GyIU>g5sZJm$|Lv|k$f$CgcpXb#;Y^atX z1XV0KJ^WMIHkkBUe|h40ZvQFPbyV*o&+VF46FYBER-{R2yAjjR0~DX{=_#aS!55;R z@!nBVX5L^FH=En#P+@^R!VuCuMPb`Ca6S_waF^uy z1XVQ#v~YIrCt3fMfX1Fb$8^&z_E1lE0&w>Uzq}@$DTnecLNC?(FcP?GF9umr9!;cq~7{+?jz^eZH%u>c-#id72-fZ@xX<_wpALTDL z+yH0C8M1r}6s5fKW&MK!aPew*=lUeO!cppvo^3QY@RdqOk zroLY5y6kbfixKX$4#efZH+*H-nPbmOc>SOpL){sn)MPAP4;(3hc2H>K?i~6%1^yiJ zn8pL(IRW{^@ZHhx4VxvD!EO*}J3`t_emYG(wcz&#B*sWZsAj`~@%h6e?{{)^pm)^2 zW9m@{6d}yhiXwt};g!YgwXscG%K|k_5GY10#bM$5Xf2mwV+GT$*G(t?I6=3 ziajLpU)RoSrYY;8r~ld`YPbeMD&{_;W$jkaHC*&hG1CgO%6k|E1_J~lpLTgD>$viZ z4I^o*`<*5?Rib9{hN%H=NyEN3VEU+W`k0F4l1Y&v;Ji=+qtE7trSrBGWooTq`oF3D z{U`!pISAyrsn@rEW}*Q~v*Vt8{(tx9Zey={kWx7uldtBPGF~&%ybl)}4!H}3ah-Ql zrn3x;t63yuVD(SM3pUSPOKM5wR+@JK?_47e6nk|drxZ| zD-Q>m^fX&nb(Dd3>xT#=@Q|a=mfN|jtzHck{nxyj^}BzYeLG(^D>zeT>L{y4y^JW( zY*sp=?ENlR|DXX5c-z+lU(AxFH2B=x9P$Hx(EB0c&avqYlix|o0=BF$cW_xdwZG7y zEAaW480^J>4K~%*h?f%hJ_vi-Ks5@qwB;h~|OR6ND;X9~ER&rK==AhWsz&uV8xs literal 0 HcmV?d00001 diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/chip.js b/packages/yoroi-extension/app/UI/features/portfolio/common/chip.js index 7a41945078..cd86c61530 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/chip.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/chip.js @@ -1,12 +1,12 @@ import React from 'react'; -import { Chip, Stack, Typography } from '@mui/material'; +import { Chip as MuiChip, Stack, Typography } from '@mui/material'; import { useTheme } from '@mui/material/styles'; -const StyledChip = props => { +export const Chip = props => { const theme = useTheme(); return ( - { color: props.active ? theme.palette.ds.secondary_c800 : theme.palette.ds.sys_magenta_c700, ...props.sx, }} - > + > ); }; - -export default StyledChip; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/module/state.js b/packages/yoroi-extension/app/UI/features/portfolio/module/state.js index b6054a5793..331ec65c14 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/module/state.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/module/state.js @@ -25,7 +25,7 @@ export type PortfolioState = {| // Define default state export const defaultPortfolioState: PortfolioState = { - portfolioStatus: 'none', + portfolioStatus: 'drep', }; // Define action handlers diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js index 9b28affaac..8945ab34fb 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js @@ -1,4 +1,4 @@ -import { Box, Button, Stack, styled, Typography } from '@mui/material'; +import { Box, Button, Stack, styled, Typography, Divider } from '@mui/material'; import React, { useEffect, useMemo, useState } from 'react'; import { LineChart, @@ -6,11 +6,16 @@ import { CartesianGrid, XAxis, YAxis, - Tooltip, ResponsiveContainer, Label, + Tooltip as RechartTooltip, } from 'recharts'; import { useTheme } from '@mui/material/styles'; +import { usePortfolio } from '../../module/PortfolioContextProvider'; +import ArrowIcon from '../../common/assets/icons/Arrow'; +import { Skeleton, Tooltip } from '../../../../components'; +import chartSkeletonPng from '../../common/assets/images/token-detail-chart-skeleton.png'; +import { Chip } from '../../common/chip'; const StyledButton = styled(Button)(({ theme }) => ({ fontWeight: 500, @@ -20,36 +25,21 @@ const StyledButton = styled(Button)(({ theme }) => ({ height: '30px', })); -const StyledTooltip = styled(Box)(({ theme }) => ({ - padding: '10px', - borderRadius: `${theme.shape.borderRadius}px`, - border: `1px solid ${theme.palette.ds.sys_cyan_c100}`, - backgroundColor: theme.palette.ds.primary_c200, - color: theme.palette.ds.primary_c700, -})); - -const CustomTooltip = ({ active, payload, coordinate }) => { - if (active && payload && payload.length) { - const { x, y } = coordinate; - const tooltipX = x + 10; - const tooltipY = y - 50; +const CustomActiveDot = props => { + const { cx, cy, payload, onMouseMove } = props; - return ( - - - - {`Time: ${payload[0].payload.time}`} - {`Price: ${payload[0].value} USD`} - - - ); - } + const handleMouseMove = event => { + if (onMouseMove) { + onMouseMove(event, payload); + } + }; - return null; + return ; }; -const TokenDetailChart = ({ isLoading, data }) => { +const TokenDetailChart = ({ isLoading, tokenInfo }) => { const theme = useTheme(); + const { strings } = usePortfolio(); const [buttonPeriodProps, setButtonPeriodProps] = useState([ { label: '24H', active: true }, { label: '1W', active: false }, @@ -120,27 +110,12 @@ const TokenDetailChart = ({ isLoading, data }) => { return categorizedData; }; - const categorizedData = useMemo(() => categorizeByTime(data), [data]); + const filteredData = useMemo(() => categorizeByTime(tokenInfo.chartData), [tokenInfo.chartData]); - const SkeletonLabel = ({ x, y, width = 19, height = 13, borderRadius = 8, marginRight = 10 }) => { - return ( - - ); - }; const CustomYAxisTick = props => { const { x, y, payload } = props; - return isLoading ? ( - - ) : ( + return ( {payload.value} @@ -158,43 +133,127 @@ const TokenDetailChart = ({ isLoading, data }) => { setButtonPeriodProps(tmp); }; - return ( - - - - item.active).label]}> - - - {!isLoading && } />} - - - - + const handleMouseMove = (event, payload) => { + console.log('Mouse Move:', payload); + }; - - {buttonPeriodProps.map(period => ( - handleChoosePeriod(period.label)} + return ( + + + {isLoading ? ( + + ) : ( + + {strings.marketPrice} + + )} + + {isLoading ? ( + + ) : ( + + + {tokenInfo.price} + +  USD + + )} + + {strings.tokenPriceChange} + {strings.in24hours} + + } + placement="top" > - {period.label} - - ))} + + {isLoading ? ( + + ) : ( + 0} + label={ + + 0 + ? theme.palette.ds.secondary_c800 + : theme.palette.ds.sys_magenta_c700 + } + style={{ + marginRight: theme.spacing(0.5), + transform: tokenInfo.price > 0 ? '' : 'rotate(180deg)', + }} + /> + {tokenInfo.price}% + + } + /> + )} + + {isLoading ? ( + + ) : ( + 0} + label={ + + {tokenInfo.totalAmountUsd > 0 ? '+' : '-'} + {tokenInfo.totalAmountUsd} USD + + } + /> + )} + + + + + + + {isLoading ? null : ( + + item.active).label]}> + + + + + + )} + + + + {buttonPeriodProps.map(period => ( + handleChoosePeriod(period.label)} + > + {period.label} + + ))} + + ); }; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js index ce20a26784..4b19f00ec9 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js @@ -1,6 +1,6 @@ import React from 'react'; import { Stack, Box, Typography, Link, Button } from '@mui/material'; -import { StyledSkeleton } from '../../../../components/skeleton'; +import { Skeleton } from '../../../../components/skeleton'; import { CopyButton } from '../../../../components/copy-button'; import { useTheme } from '@mui/material/styles'; import { usePortfolio } from '../../module/PortfolioContextProvider'; @@ -20,7 +20,7 @@ const TokenDetailOverview = ({ tokenInfo, isLoading }) => { sx={{ margin: '10px 0' }} > {isLoading ? ( - + ) : ( { > )} {isLoading ? ( - + ) : ( {tokenInfo.name} @@ -44,15 +44,15 @@ const TokenDetailOverview = ({ tokenInfo, isLoading }) => { {isLoading ? ( - + ) : ( {strings.description} )} {isLoading ? ( <> - - - + + + ) : ( @@ -63,12 +63,12 @@ const TokenDetailOverview = ({ tokenInfo, isLoading }) => { {isLoading ? ( - + ) : ( {strings.website} )} {isLoading ? ( - + ) : ( cardano.org @@ -78,7 +78,7 @@ const TokenDetailOverview = ({ tokenInfo, isLoading }) => { {isLoading ? ( - + ) : ( {strings.policyId} )} @@ -86,8 +86,8 @@ const TokenDetailOverview = ({ tokenInfo, isLoading }) => { {isLoading ? ( - - + + ) : ( { {isLoading ? ( - + ) : ( {strings.fingerprint} )} @@ -110,8 +110,8 @@ const TokenDetailOverview = ({ tokenInfo, isLoading }) => { {isLoading ? ( - - + + ) : ( { {isLoading ? ( - + ) : ( {strings.detailsOn} )} {isLoading ? ( - + ) : ( Cardanoscan )} {isLoading ? ( - + ) : ( Adaex diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js index 28a7e99918..898c6b1465 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js @@ -7,24 +7,21 @@ import { Divider, IconButton, Link, - Skeleton, Stack, Typography, } from '@mui/material'; import { ReactComponent as BackIcon } from '../../../../../assets/images/assets-page/back-arrow.inline.svg'; import { styled } from '@mui/material/styles'; -import { StyledTooltip, StyledSkeleton, CopyButton, Card } from '../../../../components'; +import { Skeleton, CopyButton, Card } from '../../../../components'; import { tableCellClasses } from '@mui/material/TableCell'; import TransactionTable from './TransactionTable'; import TokenDetailChart from './TokenDetailChart'; import SubMenu from '../../../../../components/topbar/SubMenu'; -import Arrow from '../../../../components/icons/portfolio/Arrow'; +import Arrow from '../../common/assets/icons/Arrow'; import { useTheme } from '@mui/material/styles'; import mockData from '../../../../pages/portfolio/mockData'; import { useNavigateTo } from '../../common/useNavigateTo'; import { usePortfolio } from '../../module/PortfolioContextProvider'; -import StyledChip from '../../common/chip'; -import ArrowIcon from '../../../../components/icons/portfolio/Arrow'; import TokenDetailPerformance from './TokenDetailPerformance'; import TokenDetailOverview from './TokenDetailOverview'; @@ -115,119 +112,51 @@ const TokenDetails = ({ tokenInfo, mockHistory }) => { - + {isLoading ? ( - + ) : ( `${tokenInfo.name} ${strings.balance}` )} - {isLoading ? ( - - ) : ( - - - {tokenInfo.totalAmount} - - - {tokenInfo.name} - - - )} - - {isLoading ? ( - - ) : ( - - {tokenInfo.totalAmountUsd} USD - - )} - - - - - - + {isLoading ? ( - + ) : ( - {strings.marketPrice} + + + {tokenInfo.totalAmount} + + + {tokenInfo.name} + + )} - - {isLoading ? ( - - ) : ( - - - {tokenInfo.price} - -  USD - - )} - - {strings.tokenPriceChange} - {strings.in24hours} - - } - placement="top" - > - - {isLoading ? ( - - ) : ( - 0} - label={ - - 0 - ? theme.palette.ds.secondary_c800 - : theme.palette.ds.sys_magenta_c700 - } - style={{ - marginRight: '5px', - transform: tokenInfo.price > 0 ? '' : 'rotate(180deg)', - }} - /> - {tokenInfo.price}% - - } - /> - )} - {isLoading ? ( - - ) : ( - 0} - label={ - - {tokenInfo.totalAmountUsd > 0 ? '+' : '-'} - {tokenInfo.totalAmountUsd} USD - - } - /> - )} - - - + {isLoading ? ( + + ) : ( + + {tokenInfo.totalAmountUsd} USD + + )} - + + + + diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js index 6537bc62a4..e8766d905e 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js @@ -13,9 +13,9 @@ import { } from '@mui/material'; import { useTheme } from '@mui/material/styles'; import { Card } from '../../../../components'; -import { default as ArrowIcon } from '../../../../components/icons/portfolio/transaction-history/Arrow'; -import { default as ExpandIcon } from '../../../../components/icons/portfolio/transaction-history/Expand'; -import { default as ErrorIcon } from '../../../../components/icons/portfolio/transaction-history/Error'; +import { default as ArrowIcon } from '../../common/assets/icons/transaction-history/Arrow'; +import { default as ExpandIcon } from '../../common/assets/icons/transaction-history/Expand'; +import { default as ErrorIcon } from '../../common/assets/icons/transaction-history/Error'; import { usePortfolio } from '../../module/PortfolioContextProvider'; const TransactionTable = ({ history }) => { diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js index d4a359656c..9f8bb80c2c 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js @@ -1,14 +1,14 @@ import { Typography, Stack, Box, Input, InputAdornment, styled } from '@mui/material'; import { ReactComponent as Search } from '../../../../../assets/images/assets-page/search.inline.svg'; import React, { useState } from 'react'; -import { StyledTooltip, StyledInput } from '../../../../components'; +import { Tooltip, SearchInput } from '../../../../components'; import { useTheme } from '@mui/material/styles'; import { defineMessages } from 'react-intl'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import StatsTable from './StatsTable'; import mockData from '../../../../pages/portfolio/mockData'; -import StyledChip from '../../common/chip'; -import ArrowIcon from '../../../../components/icons/portfolio/Arrow'; +import ArrowIcon from '../../common/assets/icons/Arrow'; +import {Chip} from '../../common/chip'; const PortfolioWallet = ({ data }) => { const theme = useTheme(); @@ -43,7 +43,7 @@ const PortfolioWallet = ({ data }) => { {mockData.PortfolioPage.balance.usd} USD - % {strings.balancePerformance} @@ -59,7 +59,7 @@ const PortfolioWallet = ({ data }) => { spacing={theme.spacing(1)} sx={{ marginLeft: theme.spacing(2) }} > - @@ -70,7 +70,7 @@ const PortfolioWallet = ({ data }) => { : theme.palette.ds.sys_magenta_c700 } style={{ - marginRight: '5px', + marginRight: theme.spacing(0.5), transform: mockData.PortfolioPage.balance.percents.active ? '' : 'rotate(180deg)', @@ -82,7 +82,7 @@ const PortfolioWallet = ({ data }) => { } /> - @@ -92,11 +92,11 @@ const PortfolioWallet = ({ data }) => { } /> - + - setKeyword(e.target.value)} placeholder={strings.search} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js index 2f66c96288..b2829dbeed 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js @@ -11,12 +11,12 @@ import { Box, } from '@mui/material'; import { useTheme } from '@mui/material/styles'; -import { default as SortIcon } from '../../../../components/icons/portfolio/Sort'; +import { default as SortIcon } from '../../common/assets/icons/Sort'; import { useNavigateTo } from '../../common/useNavigateTo'; import { usePortfolio } from '../../module/PortfolioContextProvider'; -import StyledChip from '../../common/chip'; -import ArrowIcon from '../../../../components/icons/portfolio/Arrow'; +import ArrowIcon from '../../common/assets/icons/Arrow'; import adaPng from '../../../../../assets/images/ada.png'; +import { Chip } from '../../common/chip'; const StatsTable = ({ data }) => { const theme = useTheme(); @@ -173,7 +173,7 @@ const StatsTable = ({ data }) => { - 0} label={ @@ -198,7 +198,7 @@ const StatsTable = ({ data }) => { - 0} label={ @@ -223,7 +223,7 @@ const StatsTable = ({ data }) => { - 0} label={ From 045118de7a0b691f9da5fe569c5c189aa3f1f82f Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Mon, 27 May 2024 18:00:52 +0300 Subject: [PATCH 037/464] add mock flow --- packages/yoroi-extension/.prettierrc | 2 +- .../app/UI/components/Input/PasswordInput.js | 42 +++++++---- .../app/UI/components/Input/TextInput.js | 24 ++----- .../TransactionFailed/FailedIlustration.js | 20 ++---- .../SuccessIlustration.js | 30 ++++---- .../TransactionSubmitted.js | 12 +++- .../app/UI/components/icons/VisibilityOn.js | 8 +-- .../app/UI/components/modals/ModalManager.js | 2 - .../gouvernace/common/ChooseDRepModal.js | 12 +--- .../UI/features/gouvernace/common/helpers.js | 9 +++ .../common/useGovernanceManagerMaker.js | 2 +- .../gouvernace/common/useNavigateTo.js | 7 +- .../module/GouvernanceContextProvider.js | 43 ++++-------- .../useCases/DelagationForm/DelagationForm.js | 26 ++++--- .../GouvernanceStatusSelection.js | 65 ++++++++++++++--- .../app/UI/layout/GeneralPageLayout.js | 69 ++++++++++++++----- .../app/UI/pages/Gouvernance/layout.js | 10 +-- .../yoroi-extension/app/UI/types/index.js | 0 .../app/stores/toplevel/DelegationStore.js | 5 +- 19 files changed, 232 insertions(+), 156 deletions(-) create mode 100644 packages/yoroi-extension/app/UI/features/gouvernace/common/helpers.js create mode 100644 packages/yoroi-extension/app/UI/types/index.js diff --git a/packages/yoroi-extension/.prettierrc b/packages/yoroi-extension/.prettierrc index aeb8ba2987..e428caa7b7 100644 --- a/packages/yoroi-extension/.prettierrc +++ b/packages/yoroi-extension/.prettierrc @@ -3,6 +3,6 @@ "tabWidth": 2, "semi": true, "singleQuote": true, - "printWidth": 100, + "printWidth": 130, "arrowParens": "avoid" } diff --git a/packages/yoroi-extension/app/UI/components/Input/PasswordInput.js b/packages/yoroi-extension/app/UI/components/Input/PasswordInput.js index 6d076c890f..133a45838b 100644 --- a/packages/yoroi-extension/app/UI/components/Input/PasswordInput.js +++ b/packages/yoroi-extension/app/UI/components/Input/PasswordInput.js @@ -5,6 +5,7 @@ import type { Node } from 'react'; import { styled } from '@mui/material/styles'; import OutlinedInput from '@mui/material/OutlinedInput'; +import FormHelperText from '@mui/material/FormHelperText'; import InputAdornment from '@mui/material/InputAdornment'; import FormControl from '@mui/material/FormControl'; import IconButton from '@mui/material/IconButton'; @@ -23,15 +24,7 @@ type StyledInputProps = {| helperText?: string, |}; -export const PasswordInput = ({ - id, - label, - variant, - onChange, - value, - error, - helperText, -}: StyledInputProps): Node => { +export const PasswordInput = ({ id, label, variant, onChange, value, error, helperText }: StyledInputProps): Node => { const [showPassword, setShowPassword] = React.useState(false); const handleClickShowPassword = () => setShowPassword(show => !show); @@ -41,8 +34,10 @@ export const PasswordInput = ({ }; return ( - - {label} + + + {label} + } label={label} + error={error} /> - + {error && ( + + {helperText} + + )} + ); }; const SOutlinedInput = styled(OutlinedInput)(({ theme, error }) => ({ - // additional styles here + '& .MuiFormHelperText-root': { + marginLeft: '0px', + }, + + '& .MuiFormLabel-root': { + color: error && theme.palette.ds.sys_magenta_c500, + }, +})); +const SFormControl = styled(FormControl)(({ theme, error }) => ({ + '& .MuiFormHelperText-root': { + marginLeft: '0px', + }, + + '& .MuiFormLabel-root': { + color: error && theme.palette.ds.sys_magenta_c500, + }, })); diff --git a/packages/yoroi-extension/app/UI/components/Input/TextInput.js b/packages/yoroi-extension/app/UI/components/Input/TextInput.js index 03d825256a..30e5247c63 100644 --- a/packages/yoroi-extension/app/UI/components/Input/TextInput.js +++ b/packages/yoroi-extension/app/UI/components/Input/TextInput.js @@ -12,35 +12,19 @@ type StyledInputProps = {| onChange: (event: any) => void, value?: string, error?: boolean, - helperText: string, + helperText?: string, |}; -export const TextInput = ({ - id, - label, - variant, - onChange, - value, - error, - helperText, -}: StyledInputProps): Node => { +export const TextInput = ({ id, label, variant, onChange, value, error, helperText }: StyledInputProps): Node => { return ( - + ); }; const SInput = styled(TextField)(({ theme, error }) => ({ '& .MuiFormHelperText-root': { position: 'absolute', - bottom: -22, + bottom: -4, left: -10, }, '& .MuiInputLabel-root': { diff --git a/packages/yoroi-extension/app/UI/components/TransactionFailed/FailedIlustration.js b/packages/yoroi-extension/app/UI/components/TransactionFailed/FailedIlustration.js index 1262c70651..7e3ce73006 100644 --- a/packages/yoroi-extension/app/UI/components/TransactionFailed/FailedIlustration.js +++ b/packages/yoroi-extension/app/UI/components/TransactionFailed/FailedIlustration.js @@ -2,13 +2,7 @@ import React from 'react'; export const FailedIlustration = () => { return ( - + { y2="167.645" gradientUnits="userSpaceOnUse" > - - - - - - + + + + + + diff --git a/packages/yoroi-extension/app/UI/components/TransactionSubmitted/SuccessIlustration.js b/packages/yoroi-extension/app/UI/components/TransactionSubmitted/SuccessIlustration.js index 88af08dfc8..6018d029b4 100644 --- a/packages/yoroi-extension/app/UI/components/TransactionSubmitted/SuccessIlustration.js +++ b/packages/yoroi-extension/app/UI/components/TransactionSubmitted/SuccessIlustration.js @@ -29,12 +29,12 @@ export const SuccessIlustration = () => { y2="167.645" gradientUnits="userSpaceOnUse" > - - - - - - + + + + + + { y2="47.2271" gradientUnits="userSpaceOnUse" > - - - - - - - - - + + + + + + + + + diff --git a/packages/yoroi-extension/app/UI/components/TransactionSubmitted/TransactionSubmitted.js b/packages/yoroi-extension/app/UI/components/TransactionSubmitted/TransactionSubmitted.js index b236b4cd0a..c4518ba0fc 100644 --- a/packages/yoroi-extension/app/UI/components/TransactionSubmitted/TransactionSubmitted.js +++ b/packages/yoroi-extension/app/UI/components/TransactionSubmitted/TransactionSubmitted.js @@ -1,8 +1,11 @@ import React from 'react'; import { Stack, Typography, Button } from '@mui/material'; import { SuccessIlustration } from './SuccessIlustration'; +import { useHistory } from 'react-router-dom'; +import { ROUTES } from '../../../routes-config'; export const TransactionSubmitted = () => { + const history = useHistory(); return ( @@ -12,7 +15,14 @@ export const TransactionSubmitted = () => { Check this transaction in the list of wallet transactions - + ); }; diff --git a/packages/yoroi-extension/app/UI/components/icons/VisibilityOn.js b/packages/yoroi-extension/app/UI/components/icons/VisibilityOn.js index 0b0abfa009..ab14b3a5c0 100644 --- a/packages/yoroi-extension/app/UI/components/icons/VisibilityOn.js +++ b/packages/yoroi-extension/app/UI/components/icons/VisibilityOn.js @@ -4,14 +4,14 @@ export const VisibilityOn = () => { return ( diff --git a/packages/yoroi-extension/app/UI/components/modals/ModalManager.js b/packages/yoroi-extension/app/UI/components/modals/ModalManager.js index 76e3d07203..f40a5d9274 100644 --- a/packages/yoroi-extension/app/UI/components/modals/ModalManager.js +++ b/packages/yoroi-extension/app/UI/components/modals/ModalManager.js @@ -46,8 +46,6 @@ type CustomModalProps = {| export const ModalManager = (): Node => { const { height, width, closeModal, content, title, isOpen, isLoading } = useModal(); - console.log('ModalManagerNew', { height, width, closeModal, content, title, isOpen, isLoading }); - return ( void, |}; -export const ChooseDRepModal = (): Node => { +export const ChooseDRepModal = ({ onSubmit }: ChooseDRepModallProps): Node => { const [drepId, setDrepId] = React.useState(''); - const navigateTo = useNavigateTo(); - const { dRepIdChanged, gouvernanceStatusChanged } = useGovernance(); // TODO hook endpoint not working well const { error, isFetched, isFetching } = useIsValidDRepID(drepId, { @@ -31,9 +27,7 @@ export const ChooseDRepModal = (): Node => { const confirmDRep = () => { // TODO add spcecific validation if needed - dRepIdChanged(drepId); - navigateTo.delegationForm(); - + onSubmit?.(drepId); // TODO hook endpoint not working well // parseDrepId(drepId, RustModule.CrossCsl.init) // .then(parsedId => { diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/common/helpers.js b/packages/yoroi-extension/app/UI/features/gouvernace/common/helpers.js new file mode 100644 index 0000000000..7d0b3691a0 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/gouvernace/common/helpers.js @@ -0,0 +1,9 @@ +export const mapStakingKeyStateToGovernanceAction = state => { + if (!state.drepDelegation) return null; + const vote = state.drepDelegation; + return vote.action === 'abstain' + ? { kind: 'abstain' } + : vote.action === 'no-confidence' + ? { kind: 'no-confidence' } + : { kind: 'delegate', drepID: vote.drepID }; +}; diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/common/useGovernanceManagerMaker.js b/packages/yoroi-extension/app/UI/features/gouvernace/common/useGovernanceManagerMaker.js index b016f07373..77d6a8036f 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/common/useGovernanceManagerMaker.js +++ b/packages/yoroi-extension/app/UI/features/gouvernace/common/useGovernanceManagerMaker.js @@ -14,7 +14,7 @@ export const useGovernanceManagerMaker = (walletId: string, networkId: string): networkId, api: governanceApiMaker({ networkId }), cardano: RustModule.CrossCsl.init, - storage: '', + storage: 'wallet/${walletId}/staking-governance/', }), [networkId, walletId] ); diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/common/useNavigateTo.js b/packages/yoroi-extension/app/UI/features/gouvernace/common/useNavigateTo.js index 0b365d258e..794eaf7af9 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/common/useNavigateTo.js +++ b/packages/yoroi-extension/app/UI/features/gouvernace/common/useNavigateTo.js @@ -1,11 +1,14 @@ import { useHistory } from 'react-router-dom'; import React, { useRef } from 'react'; +import { ROUTES } from '../../../../routes-config'; export const useNavigateTo = () => { const history = useHistory(); return React.useRef({ - selectStatus: () => history.push('/gouvernance'), - delegationForm: () => history.push('/gouvernance/delagation'), + selectStatus: () => history.push(ROUTES.Gouvernance.ROOT), + delegationForm: () => history.push(ROUTES.Gouvernance.DELEGATE), + transactionSubmited: () => history.push(ROUTES.Gouvernance.SUBMITTED), + transactionFail: () => history.push(ROUTES.Gouvernance.FAIL), }).current; }; diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/module/GouvernanceContextProvider.js b/packages/yoroi-extension/app/UI/features/gouvernace/module/GouvernanceContextProvider.js index 22dfa467ea..7bd5276ffe 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/module/GouvernanceContextProvider.js +++ b/packages/yoroi-extension/app/UI/features/gouvernace/module/GouvernanceContextProvider.js @@ -22,25 +22,15 @@ const GouvernanceContext = React.createContext(initialGouvernanceProvider); type GouvernanceProviderProps = any; -export const GouvernanceContextProvider = ({ - children, - // gouvernanceApi, - initialState = { - gouvernanceStatus: 'none', - }, - intl, - walletId, - networkId, -}: GouvernanceProviderProps) => { +export const GouvernanceContextProvider = ({ children, intl, currentWallet, currentPoolInfo }: GouvernanceProviderProps) => { const [state, dispatch] = React.useReducer(GouvernanceReducer, { ...defaultGouvernanceState, - ...initialState, + gouvernanceStatus: 'none', }); - - console.log('CONTEXT walletId AND networkId', walletId, networkId); - + console.log('[CONTEXT Current Wallet Info]', currentWallet); + const { walletId, networkId, currentPool } = currentWallet; const gouvernanceManager = useGovernanceManagerMaker(walletId, networkId); - console.log('CONTEXT gouvernanceManager', gouvernanceManager); + console.log('[CONTEXT gouvernanceManager]', gouvernanceManager); const actions = React.useRef({ gouvernanceStatusChanged: (status: any) => { @@ -54,22 +44,17 @@ export const GouvernanceContextProvider = ({ }, }).current; - const context = React.useMemo( - () => ({ - ...state, - // ...gouvernanceApi, - // walletId, - // networkId, - ...actions, - strings: getStrings(intl), - gouvernanceManager, - }), - [state, actions] - ); + const context = { + ...state, + // ...gouvernanceApi, + ...actions, + strings: getStrings(intl), + gouvernanceManager: gouvernanceManager, + stakePoolKeyHash: currentPool.hash ?? '', + }; return {children}; }; export const useGovernance = () => - React.useContext(GouvernanceContext) ?? - invalid('useGovernance: needs to be wrapped in a GouvernanceManagerProvider'); + React.useContext(GouvernanceContext) ?? invalid('useGovernance: needs to be wrapped in a GouvernanceManagerProvider'); diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/useCases/DelagationForm/DelagationForm.js b/packages/yoroi-extension/app/UI/features/gouvernace/useCases/DelagationForm/DelagationForm.js index 9f45f7851f..79ecbfe6b1 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/useCases/DelagationForm/DelagationForm.js +++ b/packages/yoroi-extension/app/UI/features/gouvernace/useCases/DelagationForm/DelagationForm.js @@ -8,6 +8,7 @@ import type { Node } from 'react'; import { Button } from '@mui/material'; import { useNavigateTo } from '../../common/useNavigateTo'; import { PasswordInput } from '../../../../components'; +import { useGovernance } from '../../module/GouvernanceContextProvider'; const Container = styled(Box)(({ theme }) => ({ paddingTop: '32px', @@ -44,12 +45,18 @@ export const DelagationForm = (): Node => { const [showPassword, setShowPassword] = React.useState(false); const [passwaord, setPassword] = React.useState(''); const navigateTo = useNavigateTo(); + const { gouvernanceStatusChanged } = useGovernance(); - const handleClickShowPassword = () => setShowPassword(show => !show); - - const handleMouseDownPassword = event => { - event.preventDefault(); + const confirmDelegation = () => { + gouvernanceStatusChanged('delegate'); + // TODO mock functionality + if (passwaord.includes('oo')) { + navigateTo.transactionFail(); + } else { + navigateTo.transactionSubmited(); + } }; + const idPasswordInvalid = passwaord.match(/\d+/g); return ( @@ -58,8 +65,7 @@ export const DelagationForm = (): Node => { Delegate to a DRep - You are designating someone else to cast your vote on your behalf for all proposals now - and in the future. + You are designating someone else to cast your vote on your behalf for all proposals now and in the future. @@ -81,9 +87,7 @@ export const DelagationForm = (): Node => { Operations - - Delegate voting to drep1e93a2zvs3aw8e4naez0ynpmc48jbc7yaa3n2k8ljhwfdt70yscts - + Delegate voting to drep1e93a2zvs3aw8e4naez0ynpmc48jbc7yaa3n2k8ljhwfdt70yscts Transaction fee: 0.5 ADA @@ -93,13 +97,15 @@ export const DelagationForm = (): Node => { id="outlined-adornment-password" onChange={event => setPassword(event.target.value)} value={passwaord} + error={!!idPasswordInvalid} + helperText={idPasswordInvalid ? 'Wrong password' : ' '} /> - diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js b/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js index 649351964a..b6e6da7ec9 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js +++ b/packages/yoroi-extension/app/UI/features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js @@ -16,7 +16,9 @@ import { Button } from '@mui/material'; import Link from '@mui/material/Link'; import { useModal } from '../../../../components/modals/ModalContext'; import { ChooseDRepModal } from '../../common/ChooseDRepModal'; -import { GovernanceProvider } from '@yoroi/staking'; +import { GovernanceProvider, useStakingKeyState, useDelegationCertificate, useVotingCertificate } from '@yoroi/staking'; +import { useNavigateTo } from '../../common/useNavigateTo'; + type Props = {| title: string, description: string, @@ -75,9 +77,32 @@ const GovernanceCard = ({ title, description, icon, selected, onClick }: Props) ); export const GouvernanceStatusSelection = (): Node => { - const [selectedCard, setSelectedCard] = useState(null); - const { gouvernanceStatus, dRepId, strings, gouvernanceManager } = useGovernance(); + const [voteKind, setVotKind] = useState<'abstain' | 'no-confidence' | 'delegate' | null>(null); + const [pendingVote, setPendingVote] = React.useState(null); + const navigateTo = useNavigateTo(); + const { openModal } = useModal(); + const { + gouvernanceStatus, + strings, + gouvernanceManager, + stakePoolKeyHash, + dRepIdChanged, + gouvernanceStatusChanged, + } = useGovernance(); + + // TODO not working well - need to sync with mobile about this + // const { data: stakingStatus } = useStakingKeyState(stakePoolKeyHash, { suspense: true }); + // const action = stakingStatus ? mapStakingKeyStateToGovernanceAction(stakingStatus) : null + + const { createCertificate: createDelegationCertificate, isLoading: isCreatingDelegationCertificate } = useDelegationCertificate( + { + useErrorBoundary: true, + } + ); + const { createCertificate: createVotingCertificate, isLoading: isCreatingVotingCertificate } = useVotingCertificate({ + useErrorBoundary: true, + }); const pageTitle = gouvernanceStatus === 'none' ? 'Governance Status' : 'Governance status'; const statusRawText = mapStatus[gouvernanceStatus]; @@ -88,19 +113,39 @@ export const GouvernanceStatusSelection = (): Node => { const hasDRep = gouvernanceStatus === 'drep'; - const onChoosDRepClick = () => { + const openDRepIdModal = (onSubmit: (drepId: string) => void) => { openModal({ title: 'Choose your Drep', content: ( - + ), width: '648px', }); }; + + const handleDelegate = () => { + openDRepIdModal(drepID => { + const vote = { kind: 'delegate', drepID }; + setPendingVote(vote.kind); + dRepIdChanged(drepID); + gouvernanceStatusChanged(drepID); + navigateTo.delegationForm('delegate'); + // createDelegationCertificate( + // { drepID, stakePoolKeyHash }, + // { + // onSuccess: async certificate => { + // // const unsignedTx = await createGovernanceTxMutation TODO - should be implemented + // navigateTo.delegationForm(); + // }, + // } + // ); + }); + }; + const handleCardClick = card => { - setSelectedCard(card); + // setSelectedCard(card); }; const optionsList = [ @@ -108,21 +153,21 @@ export const GouvernanceStatusSelection = (): Node => { title: strings.delegateToDRep, description: strings.designatingSomeoneElse, icon: , - selected: selectedCard === 'drep', - onClick: onChoosDRepClick, + selected: voteKind === 'delegate', + onClick: handleDelegate, }, { title: 'Abstain', description: 'You are choosing not to cast a vote on all proposals now and in the future.', icon: , - selected: selectedCard === 'no-vote', + selected: voteKind === 'abstain', onClick: () => handleCardClick('no-vote'), }, { title: 'No Confidence', description: 'You are expressing a lack of trust for all proposals now and in the future.', icon: , - selected: selectedCard === 'lack-of-trust', + selected: voteKind === 'no-confidencet', onClick: () => handleCardClick('lack-of-trust'), }, ]; diff --git a/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js b/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js index 6731e65a83..9484971929 100644 --- a/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js +++ b/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js @@ -14,6 +14,7 @@ import { GouvernanceContextProvider } from '../features/gouvernace/module/Gouver import globalMessages from '../../i18n/global-messages'; import { ModalProvider } from '../components/modals/ModalContext'; import { ModalManager } from '../components/modals/ModalManager'; +import { PublicDeriver } from '../../api/ada/lib/storage/models/PublicDeriver/index'; type Props = {| ...StoresAndActionsProps, @@ -45,32 +46,66 @@ class GeneralPageLayout extends Component { intl: intlShape.isRequired, }; + getStakePoolMeta: () => any = () => { + const publicDeriver = this.props.stores.wallets.selected; + const delegationStore = this.props.stores.delegation; + const currentPool = delegationStore.getDelegatedPoolId(publicDeriver); + if (currentPool == null) return null; + const networkInfo = publicDeriver.getParent().getNetworkInfo(); + const poolMeta = delegationStore.getLocalPoolInfo(networkInfo, currentPool); + const poolInfo = delegationStore.getLocalRemotePoolInfo(networkInfo, currentPool) ?? {}; + if (poolMeta == null) { + // server hasn't returned information about the stake pool yet + return null; + } + const { intl } = this.context; + const name = poolMeta.info?.name ?? intl.formatMessage(globalMessages.unknownPoolLabel); + const delegatedPool = { + id: String(currentPool), + name, + websiteUrl: poolMeta.info?.homepage, + ticker: poolMeta.info?.ticker, + ...poolInfo, + }; + + return { + ...delegatedPool, + ...poolMeta, + }; + }; + + createCurrrentWalletInfo: () => any = () => { + const { wallets, delegation, substores } = this.props.stores; + const walletCurrentPoolInfo = this.getStakePoolMeta(); + + const selectedWallet = wallets.selected; + if (selectedWallet == null) { + throw new Error(`no selected Wallet. Should never happen`); + } + + const currentWalletId = selectedWallet.getPublicDeriverId(); + const networkInfo = selectedWallet.getParent().getNetworkInfo(); + const networkId = networkInfo.NetworkId; + + return { + currentPool: walletCurrentPoolInfo, + networkId, + walletId: currentWalletId, + }; + }; + render() { const { children, actions, navbar, stores } = this.props; const sidebarContainer = ; const { intl } = this.context; - const selectedWallet = this.props.stores.wallets.selected; - if (!selectedWallet) { - return null; - } - const currentWalletId = selectedWallet.getPublicDeriverId(); - const networkId = selectedWallet.getParent().getNetworkInfo().NetworkId; + const currentWalletInfo = this.createCurrrentWalletInfo(); return ( - - {/* TODO ModalProvider to be moved into APP after finish refactoring and bring everything in UI */} + - } - sidebar={sidebarContainer} - navbar={navbar} - > + } sidebar={sidebarContainer} navbar={navbar}> {children} diff --git a/packages/yoroi-extension/app/UI/pages/Gouvernance/layout.js b/packages/yoroi-extension/app/UI/pages/Gouvernance/layout.js index 6886e6c0bc..a833fd3e0d 100644 --- a/packages/yoroi-extension/app/UI/pages/Gouvernance/layout.js +++ b/packages/yoroi-extension/app/UI/pages/Gouvernance/layout.js @@ -16,17 +16,13 @@ type Props = {| const GouvernanceLayout = ({ stores, actions, children }: Props): any => { const { gouvernanceManager } = useGovernance(); + + console.log('gouvernanceManager', gouvernanceManager); return ( } - /> - } + navbar={} />} // menu={menu} // ADD a menu if needed (see example in SwapPageContainer) > {children} diff --git a/packages/yoroi-extension/app/UI/types/index.js b/packages/yoroi-extension/app/UI/types/index.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js b/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js index c256ef1861..0768b12302 100644 --- a/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js +++ b/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js @@ -240,8 +240,9 @@ export default class DelegationStore extends Store { const currentPool = this.getDelegatedPoolId(publicDeriver); try { - const transitionResult = await maybe(currentPool, - p => new PoolInfoApi().getTransition(p, RustModule.CrossCsl.init)); + const transitionResult = await maybe(currentPool, p => + new PoolInfoApi().getTransition(p, RustModule.CrossCsl.init) + ); const response = { currentPool: transitionResult?.current, From 3efeec6730ddc1dcdb47fb2520c7b28af7976036 Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Tue, 28 May 2024 08:39:25 +0700 Subject: [PATCH 038/464] update chart --- .../useCases/TokenDetails/TokenDetailChart.js | 66 +++++++++++++++---- 1 file changed, 52 insertions(+), 14 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js index 8945ab34fb..ee270800da 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js @@ -25,18 +25,6 @@ const StyledButton = styled(Button)(({ theme }) => ({ height: '30px', })); -const CustomActiveDot = props => { - const { cx, cy, payload, onMouseMove } = props; - - const handleMouseMove = event => { - if (onMouseMove) { - onMouseMove(event, payload); - } - }; - - return ; -}; - const TokenDetailChart = ({ isLoading, tokenInfo }) => { const theme = useTheme(); const { strings } = usePortfolio(); @@ -133,8 +121,56 @@ const TokenDetailChart = ({ isLoading, tokenInfo }) => { setButtonPeriodProps(tmp); }; - const handleMouseMove = (event, payload) => { - console.log('Mouse Move:', payload); + const CustomActiveDot = props => { + const { cx, cy, payload, value, index } = props; + + const rectWidth = 163; + const rectHeight = 20; + const rectYOffset = 50; + const chartBottom = 250; + + // Calculate the position adjustment + let rectX = index * (rectWidth / filteredData.length); + if (index === 0) { + // If the active dot is the first dot, align the rectangle to the right + rectX = cx; + } else if (index === filteredData.length - 1) { + // If the active dot is the last dot, align the rectangle to the left + rectX = cx - rectWidth; + } + + return ( + + + + + + + + {payload.time} + + + ); }; return ( @@ -227,7 +263,9 @@ const TokenDetailChart = ({ isLoading, tokenInfo }) => { type={'number'} tick={CustomYAxisTick} > + } /> } dot={false} type="monotone" dataKey="value" From fddbc4e3fa82b9c98452afc79ef65c497bff6789 Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Tue, 28 May 2024 11:13:00 +0700 Subject: [PATCH 039/464] update chart and mock data --- .../useCases/TokenDetails/TokenDetailChart.js | 174 ++++--- .../app/UI/pages/portfolio/mockData.js | 468 ++++++++++++++---- 2 files changed, 493 insertions(+), 149 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js index ee270800da..cac93d88d7 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js @@ -1,4 +1,4 @@ -import { Box, Button, Stack, styled, Typography, Divider } from '@mui/material'; +import { Box, Button, Stack, styled, Typography, Divider, SvgIcon } from '@mui/material'; import React, { useEffect, useMemo, useState } from 'react'; import { LineChart, @@ -16,6 +16,7 @@ import ArrowIcon from '../../common/assets/icons/Arrow'; import { Skeleton, Tooltip } from '../../../../components'; import chartSkeletonPng from '../../common/assets/images/token-detail-chart-skeleton.png'; import { Chip } from '../../common/chip'; +import moment from 'moment'; const StyledButton = styled(Button)(({ theme }) => ({ fontWeight: 500, @@ -36,6 +37,10 @@ const TokenDetailChart = ({ isLoading, tokenInfo }) => { { label: '1Y', active: false }, { label: 'ALL', active: false }, ]); + const [detailInfo, setDetailInfo] = useState({ + value: tokenInfo.chartData[0].value, + usd: tokenInfo.chartData[0].usd, + }); const categorizeByTime = data => { const now = new Date(); @@ -110,6 +115,69 @@ const TokenDetailChart = ({ isLoading, tokenInfo }) => { ); }; + const CustomActiveDot = props => { + const { cx, cy, payload, value, index, length } = props; + + const rectWidth = 93; + const rectHeight = 34; + const chartBottom = 250; + const rectMargin = 5; + + let rectX = cx - rectWidth / 2; + if (index === 0) { + rectX = cx + rectMargin; + } else if (index === length - 1) { + rectX = cx - rectWidth - rectMargin; + } else { + rectX = cx - (index * rectWidth) / length; + } + + const rectY = chartBottom - rectHeight - rectMargin; + + return ( + + + + + + + + + {moment(payload.time).format('MM/DD/YY H:mm')} + + + + ); + }; + const handleChoosePeriod = label => { const tmp = buttonPeriodProps.map(item => { if (item.label === label) return { ...item, active: true }; @@ -121,61 +189,27 @@ const TokenDetailChart = ({ isLoading, tokenInfo }) => { setButtonPeriodProps(tmp); }; - const CustomActiveDot = props => { - const { cx, cy, payload, value, index } = props; - - const rectWidth = 163; - const rectHeight = 20; - const rectYOffset = 50; - const chartBottom = 250; - - // Calculate the position adjustment - let rectX = index * (rectWidth / filteredData.length); - if (index === 0) { - // If the active dot is the first dot, align the rectangle to the right - rectX = cx; - } else if (index === filteredData.length - 1) { - // If the active dot is the last dot, align the rectangle to the left - rectX = cx - rectWidth; - } + const handleMouseMove = e => { + const value = + e.activePayload && e.activePayload.length > 0 ? e.activePayload[0].payload.value : null; + const usd = + e.activePayload && e.activePayload.length > 0 ? e.activePayload[0].payload.usd : null; - return ( - - - - - - - - {payload.time} - - - ); + if (!value || !usd) return; + setDetailInfo({ + value, + usd, + }); }; return ( - + {isLoading ? ( ) : ( @@ -189,7 +223,7 @@ const TokenDetailChart = ({ isLoading, tokenInfo }) => { ) : ( - {tokenInfo.price} + {detailInfo.value}  USD @@ -208,21 +242,21 @@ const TokenDetailChart = ({ isLoading, tokenInfo }) => { ) : ( 0} + active={detailInfo.value > 0} label={ 0 + detailInfo.value > 0 ? theme.palette.ds.secondary_c800 : theme.palette.ds.sys_magenta_c700 } style={{ marginRight: theme.spacing(0.5), - transform: tokenInfo.price > 0 ? '' : 'rotate(180deg)', + transform: detailInfo.value > 0 ? '' : 'rotate(180deg)', }} /> - {tokenInfo.price}% + {detailInfo.value}% } /> @@ -232,11 +266,11 @@ const TokenDetailChart = ({ isLoading, tokenInfo }) => { ) : ( 0} + active={detailInfo.usd > 0} label={ - {tokenInfo.totalAmountUsd > 0 ? '+' : '-'} - {tokenInfo.totalAmountUsd} USD + {detailInfo.usd > 0 ? '+' : '-'} + {detailInfo.usd} USD } /> @@ -246,15 +280,18 @@ const TokenDetailChart = ({ isLoading, tokenInfo }) => { - + {isLoading ? null : ( - - item.active).label]}> + + item.active).label]} + onMouseMove={handleMouseMove} + > { > } /> } + activeDot={props => ( + item.active).label].length + } + {...props} + /> + )} dot={false} type="monotone" dataKey="value" @@ -279,7 +323,7 @@ const TokenDetailChart = ({ isLoading, tokenInfo }) => { )} - + {buttonPeriodProps.map(period => ( Date: Tue, 28 May 2024 11:49:17 +0700 Subject: [PATCH 040/464] update chart --- .../useCases/TokenDetails/TokenDetailChart.js | 67 +++++++++---------- .../app/UI/pages/portfolio/mockData.js | 6 +- 2 files changed, 36 insertions(+), 37 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js index cac93d88d7..8708ca380b 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js @@ -17,6 +17,7 @@ import { Skeleton, Tooltip } from '../../../../components'; import chartSkeletonPng from '../../common/assets/images/token-detail-chart-skeleton.png'; import { Chip } from '../../common/chip'; import moment from 'moment'; +import { default as _ } from 'lodash'; const StyledButton = styled(Button)(({ theme }) => ({ fontWeight: 500, @@ -27,6 +28,7 @@ const StyledButton = styled(Button)(({ theme }) => ({ })); const TokenDetailChart = ({ isLoading, tokenInfo }) => { + const chartHeight = 250; const theme = useTheme(); const { strings } = usePortfolio(); const [buttonPeriodProps, setButtonPeriodProps] = useState([ @@ -45,40 +47,39 @@ const TokenDetailChart = ({ isLoading, tokenInfo }) => { const categorizeByTime = data => { const now = new Date(); - const todayStart = new Date(now); + const yesterday = new Date(now); + yesterday.setDate(now.getDate() - 1); - const yesterdayStart = new Date(todayStart); - yesterdayStart.setDate(todayStart.getDate() - 1); + const oneWeekAgo = new Date(now); + oneWeekAgo.setDate(now.getDate() - 7); - const oneWeekAgo = new Date(todayStart); - oneWeekAgo.setDate(todayStart.getDate() - 7); + const oneMonthAgo = new Date(now); + oneMonthAgo.setMonth(now.getMonth() - 1); - const oneMonthAgo = new Date(todayStart); - oneMonthAgo.setMonth(todayStart.getMonth() - 1); + const sixMonthsAgo = new Date(now); + sixMonthsAgo.setMonth(now.getMonth() - 6); - const sixMonthsAgo = new Date(todayStart); - sixMonthsAgo.setMonth(todayStart.getMonth() - 6); + const oneYearAgo = new Date(now); + oneYearAgo.setFullYear(now.getFullYear() - 1); - const oneYearAgo = new Date(todayStart); - oneYearAgo.setFullYear(todayStart.getFullYear() - 1); - - const categorizedData = data.reduce( + const categorizedData = _.reduce( + data, (acc, item) => { const itemTime = new Date(item.time); - if (itemTime >= yesterdayStart && itemTime < todayStart) { + if (itemTime >= yesterday) { acc['24H'].push(item); } - if (itemTime >= oneWeekAgo && itemTime < todayStart) { + if (itemTime >= oneWeekAgo) { acc['1W'].push(item); } - if (itemTime >= oneMonthAgo && itemTime < todayStart) { + if (itemTime >= oneMonthAgo) { acc['1M'].push(item); } - if (itemTime >= sixMonthsAgo && itemTime < todayStart) { + if (itemTime >= sixMonthsAgo) { acc['6M'].push(item); } - if (itemTime >= oneYearAgo && itemTime < todayStart) { + if (itemTime >= oneYearAgo) { acc['1Y'].push(item); } @@ -96,8 +97,8 @@ const TokenDetailChart = ({ isLoading, tokenInfo }) => { } ); - Object.keys(categorizedData).forEach(key => { - categorizedData[key].sort((a, b) => new Date(a.date) - new Date(b.date)); + _.forEach(categorizedData, (value, key) => { + categorizedData[key] = _.sortBy(value, ['time']); }); return categorizedData; @@ -116,23 +117,18 @@ const TokenDetailChart = ({ isLoading, tokenInfo }) => { }; const CustomActiveDot = props => { - const { cx, cy, payload, value, index, length } = props; - - const rectWidth = 93; - const rectHeight = 34; - const chartBottom = 250; - const rectMargin = 5; + const { cx, cy, payload, value, index, dataLength, chartBottom, rectWidth, rectHeight } = props; let rectX = cx - rectWidth / 2; if (index === 0) { - rectX = cx + rectMargin; - } else if (index === length - 1) { - rectX = cx - rectWidth - rectMargin; + rectX = cx; + } else if (index === dataLength - 1) { + rectX = cx - rectWidth; } else { - rectX = cx - (index * rectWidth) / length; + rectX = cx - (index * rectWidth) / dataLength; } - const rectY = chartBottom - rectHeight - rectMargin; + const rectY = chartBottom - rectHeight; return ( @@ -284,10 +280,10 @@ const TokenDetailChart = ({ isLoading, tokenInfo }) => { {isLoading ? null : ( - + item.active).label]} onMouseMove={handleMouseMove} @@ -304,7 +300,10 @@ const TokenDetailChart = ({ isLoading, tokenInfo }) => { ( item.active).label].length } {...props} diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js b/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js index 717c18eb9a..e38e74f184 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js @@ -4,8 +4,8 @@ function getRandomDate(start, end) { const date = new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime())); return date.toISOString(); } -const startDate = new Date(2023, 3, 4); -const endDate = new Date(2024, 5, 28); +const startDate = new Date('01-01-2023 8:30'); +const endDate = new Date('05-28-2024 11:40'); // ALL THE MOCK DATA FOR RENDERING UI @@ -45,7 +45,7 @@ const mockData = { ], chartData: [ { - time: getRandomDate(startDate, endDate), + time: '2024-05-28T04:43:27.000Z', value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, From 690b28892735ab5d2565f3e7950dcb2cd3c6ccef Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Tue, 28 May 2024 13:10:24 +0700 Subject: [PATCH 041/464] update components --- .../{copy-button.js => Button/CopyButton.js} | 13 +++++++++---- .../{search-input.js => Input/SearchInput.js} | 0 packages/yoroi-extension/app/UI/components/index.js | 10 +++++----- .../common/{chip.js => components/Chip.js} | 0 .../common/{ => components}/PortfolioMenu.js | 10 +++++----- .../portfolio/common/{ => hooks}/useNavigateTo.js | 2 +- .../portfolio/common/{ => hooks}/useStrings.js | 0 .../portfolio/module/PortfolioContextProvider.js | 2 +- .../useCases/TokenDetails/TokenDetailChart.js | 2 +- .../useCases/TokenDetails/TokenDetailOverview.js | 4 ++-- .../portfolio/useCases/TokenDetails/TokenDetails.js | 2 +- .../useCases/TokenDetails/TransactionTable.js | 2 ++ .../portfolio/useCases/Wallet/PortfolioWallet.js | 2 +- .../portfolio/useCases/Wallet/StatsTable.js | 4 ++-- .../app/UI/layout/PortfolioPageLayout.js | 2 +- 15 files changed, 31 insertions(+), 24 deletions(-) rename packages/yoroi-extension/app/UI/components/{copy-button.js => Button/CopyButton.js} (69%) rename packages/yoroi-extension/app/UI/components/{search-input.js => Input/SearchInput.js} (100%) rename packages/yoroi-extension/app/UI/features/portfolio/common/{chip.js => components/Chip.js} (100%) rename packages/yoroi-extension/app/UI/features/portfolio/common/{ => components}/PortfolioMenu.js (82%) rename packages/yoroi-extension/app/UI/features/portfolio/common/{ => hooks}/useNavigateTo.js (85%) rename packages/yoroi-extension/app/UI/features/portfolio/common/{ => hooks}/useStrings.js (100%) diff --git a/packages/yoroi-extension/app/UI/components/copy-button.js b/packages/yoroi-extension/app/UI/components/Button/CopyButton.js similarity index 69% rename from packages/yoroi-extension/app/UI/components/copy-button.js rename to packages/yoroi-extension/app/UI/components/Button/CopyButton.js index 9b6581a4cb..01e3f4a6ae 100644 --- a/packages/yoroi-extension/app/UI/components/copy-button.js +++ b/packages/yoroi-extension/app/UI/components/Button/CopyButton.js @@ -1,11 +1,16 @@ import React, { useState } from 'react'; import { IconButton } from '@mui/material'; import { CopyToClipboard } from 'react-copy-to-clipboard'; -import CopyIcon from './icons/Copy'; -import CopiedIcon from './icons/Copied'; -import { Tooltip } from './tooltip'; +import CopyIcon from '../icons/Copy'; +import CopiedIcon from '../icons/Copied'; +import { Tooltip } from '../Tooltip'; -export const CopyButton = ({ textToCopy, disabled, ...props }) => { +interface Props { + textToCopy: string; + disabled: boolean; +} + +export const CopyButton = ({ textToCopy, disabled, ...props }: Props) => { const [copied, setCopied] = useState(false); const handleCopy = () => { diff --git a/packages/yoroi-extension/app/UI/components/search-input.js b/packages/yoroi-extension/app/UI/components/Input/SearchInput.js similarity index 100% rename from packages/yoroi-extension/app/UI/components/search-input.js rename to packages/yoroi-extension/app/UI/components/Input/SearchInput.js diff --git a/packages/yoroi-extension/app/UI/components/index.js b/packages/yoroi-extension/app/UI/components/index.js index b8646d8d82..4ab65f6f1c 100644 --- a/packages/yoroi-extension/app/UI/components/index.js +++ b/packages/yoroi-extension/app/UI/components/index.js @@ -1,8 +1,8 @@ -export * from './card'; -export * from './copy-button'; -export * from './search-input'; -export * from './tooltip'; -export * from './skeleton'; +export * from './Card'; +export * from './Button/CopyButton'; +export * from './Input/SearchInput'; +export * from './Tooltip'; +export * from './Skeleton'; export * from './Input/TextInput'; export * from './Input/PasswordInput'; export * from './TransactionFailed/TransactionFailed'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/chip.js b/packages/yoroi-extension/app/UI/features/portfolio/common/components/Chip.js similarity index 100% rename from packages/yoroi-extension/app/UI/features/portfolio/common/chip.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/components/Chip.js diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/PortfolioMenu.js b/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.js similarity index 82% rename from packages/yoroi-extension/app/UI/features/portfolio/common/PortfolioMenu.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.js index 1836498898..5b570718cf 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/PortfolioMenu.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.js @@ -3,14 +3,14 @@ import { Component } from 'react'; import type { Node, ComponentType } from 'react'; import { observer } from 'mobx-react'; import { defineMessages, intlShape } from 'react-intl'; -import environmnent from '../../../../environment'; -import { ROUTES } from '../../../../routes-config'; -import globalMessages from '../../../../i18n/global-messages'; +import environmnent from '../../../../../environment'; +import { ROUTES } from '../../../../../routes-config'; +import globalMessages from '../../../../../i18n/global-messages'; import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; -import { withLayout } from '../../../../styles/context/layout'; +import { withLayout } from '../../../../../styles/context/layout'; import type { InjectedLayoutProps } from '../../styles/context/layout'; import type { SubMenuOption } from '../topbar/SubMenu'; -import SubMenu from '../../../../components/topbar/SubMenu'; +import SubMenu from '../../../../../components/topbar/SubMenu'; export const portfolioMenuMessages: Object = defineMessages({ wallet: { diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/useNavigateTo.js b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useNavigateTo.js similarity index 85% rename from packages/yoroi-extension/app/UI/features/portfolio/common/useNavigateTo.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useNavigateTo.js index e364deab49..5d91e9c15b 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/useNavigateTo.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useNavigateTo.js @@ -1,6 +1,6 @@ import { useHistory } from 'react-router-dom'; import React, { useRef } from 'react'; -import { ROUTES } from '../../../../routes-config'; +import { ROUTES } from '../../../../../routes-config'; export const useNavigateTo = () => { const history = useHistory(); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/useStrings.js b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js similarity index 100% rename from packages/yoroi-extension/app/UI/features/portfolio/common/useStrings.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js diff --git a/packages/yoroi-extension/app/UI/features/portfolio/module/PortfolioContextProvider.js b/packages/yoroi-extension/app/UI/features/portfolio/module/PortfolioContextProvider.js index 945f99e815..85ecb7e364 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/module/PortfolioContextProvider.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/module/PortfolioContextProvider.js @@ -11,7 +11,7 @@ import { PortfolioActions, } from './state'; -import { getStrings } from '../common/useStrings'; +import { getStrings } from '../common/hooks/useStrings'; const initialPortfolioProvider = { ...defaultPortfolioState, diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js index 8708ca380b..1127addc4b 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js @@ -15,7 +15,7 @@ import { usePortfolio } from '../../module/PortfolioContextProvider'; import ArrowIcon from '../../common/assets/icons/Arrow'; import { Skeleton, Tooltip } from '../../../../components'; import chartSkeletonPng from '../../common/assets/images/token-detail-chart-skeleton.png'; -import { Chip } from '../../common/chip'; +import { Chip } from '../../common/components/Chip'; import moment from 'moment'; import { default as _ } from 'lodash'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js index 4b19f00ec9..a82024ec2d 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js @@ -1,7 +1,7 @@ import React from 'react'; import { Stack, Box, Typography, Link, Button } from '@mui/material'; -import { Skeleton } from '../../../../components/skeleton'; -import { CopyButton } from '../../../../components/copy-button'; +import { Skeleton } from '../../../../components/Skeleton'; +import { CopyButton } from '../../../../components/Button/CopyButton'; import { useTheme } from '@mui/material/styles'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import adaPng from '../../../../../assets/images/ada.png'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js index 898c6b1465..973a11fbeb 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js @@ -20,7 +20,7 @@ import SubMenu from '../../../../../components/topbar/SubMenu'; import Arrow from '../../common/assets/icons/Arrow'; import { useTheme } from '@mui/material/styles'; import mockData from '../../../../pages/portfolio/mockData'; -import { useNavigateTo } from '../../common/useNavigateTo'; +import { useNavigateTo } from '../../common/hooks/useNavigateTo'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import TokenDetailPerformance from './TokenDetailPerformance'; import TokenDetailOverview from './TokenDetailOverview'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js index e8766d905e..2b61c60703 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js @@ -49,6 +49,8 @@ const TransactionTable = ({ history }) => { }; const categorizedData = useMemo(() => categorizeByTimestamp(history), [history]); + + return ( diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js index 9f8bb80c2c..082594cdd8 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js @@ -8,7 +8,7 @@ import { usePortfolio } from '../../module/PortfolioContextProvider'; import StatsTable from './StatsTable'; import mockData from '../../../../pages/portfolio/mockData'; import ArrowIcon from '../../common/assets/icons/Arrow'; -import {Chip} from '../../common/chip'; +import { Chip } from '../../common/components/Chip'; const PortfolioWallet = ({ data }) => { const theme = useTheme(); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js index b2829dbeed..1cdd8546eb 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js @@ -12,11 +12,11 @@ import { } from '@mui/material'; import { useTheme } from '@mui/material/styles'; import { default as SortIcon } from '../../common/assets/icons/Sort'; -import { useNavigateTo } from '../../common/useNavigateTo'; +import { useNavigateTo } from '../../common/hooks/useNavigateTo'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import ArrowIcon from '../../common/assets/icons/Arrow'; import adaPng from '../../../../../assets/images/ada.png'; -import { Chip } from '../../common/chip'; +import { Chip } from '../../common/components/Chip'; const StatsTable = ({ data }) => { const theme = useTheme(); diff --git a/packages/yoroi-extension/app/UI/layout/PortfolioPageLayout.js b/packages/yoroi-extension/app/UI/layout/PortfolioPageLayout.js index 9b7e2207a2..41fd075208 100644 --- a/packages/yoroi-extension/app/UI/layout/PortfolioPageLayout.js +++ b/packages/yoroi-extension/app/UI/layout/PortfolioPageLayout.js @@ -12,7 +12,7 @@ import TopBarLayout from '../../components/layout/TopBarLayout'; import NavBarTitle from '../../components/topbar/NavBarTitle'; import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; import { withLayout, type LayoutComponentMap } from '../../styles/context/layout'; -import PortfolioMenu from '../features/portfolio/common/PortfolioMenu'; +import PortfolioMenu from '../features/portfolio/common/components/PortfolioMenu'; import NavBarContainer from '../../containers/NavBarContainer'; import BannerContainer from '../../containers/banners/BannerContainer'; import SidebarContainer from '../../containers/SidebarContainer'; From 9a5781d9137dca2ba86321772d8d5c629a9aa3aa Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Tue, 28 May 2024 15:00:02 +0700 Subject: [PATCH 042/464] update transaction table --- .../app/UI/components/skeleton.js | 7 +- .../icons/transaction-history/Withdraw.js | 16 +- .../portfolio/common/hooks/useStrings.js | 48 +++- .../useCases/TokenDetails/TokenDetailChart.js | 1 - .../useCases/TokenDetails/TransactionTable.js | 221 +++++++++++++----- .../UI/pages/portfolio/PortfolioDetailPage.js | 2 +- .../app/UI/pages/portfolio/mockData.js | 118 +++++----- .../app/i18n/locales/en-US.json | 10 +- 8 files changed, 294 insertions(+), 129 deletions(-) diff --git a/packages/yoroi-extension/app/UI/components/skeleton.js b/packages/yoroi-extension/app/UI/components/skeleton.js index 68741b69db..452a9681a1 100644 --- a/packages/yoroi-extension/app/UI/components/skeleton.js +++ b/packages/yoroi-extension/app/UI/components/skeleton.js @@ -9,7 +9,12 @@ export const Skeleton = props => { variant="rectangular" animation={false} {...props} - sx={{ borderRadius: `${theme.shape.borderRadius}px`, ...props.sx }} + sx={{ + borderRadius: `${theme.shape.borderRadius}px`, + backgroundColor: theme.palette.ds.gray_c100, + opacity: 0.8, + ...props.sx, + }} /> ); }; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Withdraw.js b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Withdraw.js index aeaf772ae9..f8ce5f9df3 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Withdraw.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Withdraw.js @@ -1,21 +1,27 @@ import React from 'react'; -const Withdraw = (props) => { +const Withdraw = props => { return ( - + ); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js index 21994df250..827c112987 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js @@ -159,9 +159,41 @@ export const messages = Object.freeze( id: 'portfolio.transactionTable.timestamp.yesterday', defaultMessage: '!!!Amount', }, - inthepast: { - id: 'portfolio.transactionTable.timestamp.inthepast', - defaultMessage: '!!!In the past', + sent: { + id: 'portfolio.transactionTable.historyLabel.sent', + defaultMessage: '!!!Sent', + }, + received: { + id: 'portfolio.transactionTable.historyLabel.received', + defaultMessage: '!!!Received', + }, + transactionError: { + id: 'portfolio.transactionTable.historyLabel.transactionError', + defaultMessage: '!!!Transaction error', + }, + rewardWithdraw: { + id: 'portfolio.transactionTable.historyLabel.rewardWithdraw', + defaultMessage: '!!!Reward withdrawn', + }, + stakeDelegate: { + id: 'portfolio.transactionTable.historyLabel.stakeDelegate', + defaultMessage: '!!!Stake delegated', + }, + low: { + id: 'portfolio.transactionTable.status.low', + defaultMessage: '!!!Low', + }, + high: { + id: 'portfolio.transactionTable.status.high', + defaultMessage: '!!!High', + }, + failed: { + id: 'portfolio.transactionTable.status.failed', + defaultMessage: '!!!Failed', + }, + assets: { + id: 'portfolio.transactionTable.amount.assets', + defaultMessage: '!!!assets', }, }) ); @@ -207,6 +239,14 @@ export const getStrings = intl => { amount: intl.formatMessage(messages.amount), today: intl.formatMessage(messages.today), yesterday: intl.formatMessage(messages.yesterday), - inthepast: intl.formatMessage(messages.inthepast), + sent: intl.formatMessage(messages.sent), + received: intl.formatMessage(messages.received), + transactionError: intl.formatMessage(messages.transactionError), + rewardWithdraw: intl.formatMessage(messages.rewardWithdraw), + stakeDelegate: intl.formatMessage(messages.stakeDelegate), + low: intl.formatMessage(messages.low), + high: intl.formatMessage(messages.high), + failed: intl.formatMessage(messages.failed), + assets: intl.formatMessage(messages.assets), }).current; }; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js index 1127addc4b..ef290efa64 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js @@ -17,7 +17,6 @@ import { Skeleton, Tooltip } from '../../../../components'; import chartSkeletonPng from '../../common/assets/images/token-detail-chart-skeleton.png'; import { Chip } from '../../common/components/Chip'; import moment from 'moment'; -import { default as _ } from 'lodash'; const StyledButton = styled(Button)(({ theme }) => ({ fontWeight: 500, diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js index 2b61c60703..9cbd0e2f42 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js @@ -16,88 +16,148 @@ import { Card } from '../../../../components'; import { default as ArrowIcon } from '../../common/assets/icons/transaction-history/Arrow'; import { default as ExpandIcon } from '../../common/assets/icons/transaction-history/Expand'; import { default as ErrorIcon } from '../../common/assets/icons/transaction-history/Error'; +import { default as WithdrawIcon } from '../../common/assets/icons/transaction-history/Withdraw'; import { usePortfolio } from '../../module/PortfolioContextProvider'; +import moment from 'moment'; + +export const HistoryItemType = Object.freeze({ + SENT: 1, + RECEIVED: 2, + ERROR: 3, + WITHDRAW: 4, + DELEGATE: 5, +}); + +const Container = styled(Box)(({ theme }) => ({ + width: '100%', + margin: '30px 0 100px', +})); const TransactionTable = ({ history }) => { const theme = useTheme(); const { strings } = usePortfolio(); - const timestamps = [strings.today, strings.yesterday, strings.inthepast]; - const categorizeByTimestamp = data => { - const today = new Date(); - const yesterday = new Date(today); - yesterday.setDate(yesterday.getDate() - 1); + const mapLabel = arr => + arr.map(item => { + let labelTemp = ''; + let statusTemp = ''; + + switch (item.type) { + case HistoryItemType.SENT: + labelTemp = strings.sent; + break; + case HistoryItemType.RECEIVED: + labelTemp = strings.received; + break; + case HistoryItemType.ERROR: + labelTemp = strings.transactionError; + break; + case HistoryItemType.WITHDRAW: + labelTemp = strings.rewardWithdraw; + break; + case HistoryItemType.DELEGATE: + labelTemp = strings.stakeDelegate; + break; + + default: + break; + } - return data.reduce( - (acc, item) => { - const itemDate = new Date(item.date); - if (itemDate.toDateString() === today.toDateString()) { - acc[timestamps[0]].push(item); - } else if (itemDate.toDateString() === yesterday.toDateString()) { - acc[timestamps[1]].push(item); - } else { - acc[timestamps[2]].push(item); - } - return acc; - }, - { - Today: [], - Yesterday: [], - 'In the past': [], + switch (item.status) { + case 'Low': + statusTemp = strings.low; + break; + case 'High': + statusTemp = strings.high; + break; + case 'Failed': + statusTemp = strings.failed; + break; + default: + break; } - ); - }; - const categorizedData = useMemo(() => categorizeByTimestamp(history), [history]); + return { + ...item, + label: labelTemp, + status: statusTemp, + }; + }); + + const groupedData = useMemo(() => { + if (!history) return []; + const today = new Date(); + const yesterday = new Date(); + yesterday.setDate(today.getDate() - 1); + + return _.chain(mapLabel(history)) + .groupBy(t => { + const time = new Date(t.time); + time.setHours(0, 0, 0, 0); // set the time to 00:00:00 for grouping by day + return time.toISOString(); + }) + .map((data, title) => ({ + title: + new Date(title).getDate() === today.getDate() + ? strings.today + : new Date(title).getDate() === yesterday.getDate() + ? strings.yesterday + : moment(title).format('MMMM DD, YYYY'), + data, + })) + .value(); + }, [history]); - return ( - - {strings.transactionHistory} + + + {strings.transactionHistory} +
- + {strings.transactionType} - + {strings.status} - + {strings.fee} - + {strings.amount} - {timestamps.map((timestamp, index) => ( + {groupedData.map((item, index) => ( <> - {timestamp} + {item.title} - {categorizedData[timestamp].map((row, index) => ( + {item.data.map((row, index) => ( @@ -106,29 +166,33 @@ const TransactionTable = ({ history }) => { width: '48px', height: '48px', backgroundColor: - row.type === 'Sent' + row.type === HistoryItemType.SENT || + row.type === HistoryItemType.DELEGATE ? theme.palette.ds.primary_c100 - : row.type === 'Received' + : row.type === HistoryItemType.RECEIVED || + row.type === HistoryItemType.WITHDRAW ? theme.palette.ds.secondary_c100 : theme.palette.ds.sys_magenta_c100, '&:hover': { backgroundColor: - row.type === 'Sent' + row.type === HistoryItemType.SENT || + row.type === HistoryItemType.DELEGATE ? theme.palette.ds.primary_c100 - : row.type === 'Received' + : row.type === HistoryItemType.RECEIVED || + row.type === HistoryItemType.WITHDRAW ? theme.palette.ds.secondary_c100 : theme.palette.ds.sys_magenta_c100, }, }} > - {row.type === 'Sent' && ( + {row.type === HistoryItemType.SENT && ( )} - {row.type === 'Received' && ( + {row.type === HistoryItemType.RECEIVED && ( { style={{ transform: 'rotate(180deg)' }} /> )} - {row.type === 'Transaction error' && ( + {row.type === HistoryItemType.ERROR && ( )} + {row.type === HistoryItemType.WITHDRAW && ( + + )} + {row.type === HistoryItemType.DELEGATE && ( + + )} - {row.type} + + {row.label} + - {row.time} + {moment.utc(row.time).local().format('h:mm A')} @@ -161,7 +241,7 @@ const TransactionTable = ({ history }) => { color: row.status === 'Failed' ? theme.palette.ds.text_error - : theme.palette.ds.black_static, + : theme.palette.ds.text_gray_normal, }} > {row.status} @@ -169,28 +249,52 @@ const TransactionTable = ({ history }) => { - {row.fee ? row.fee.amount : '-'} - {row.fee ? row.fee.usd : '-'} + + {row.fee ? row.fee.amount : '-'} + + + {row.fee ? row.fee.usd : '-'} + - - {row.type === 'Received' && '+'} + + {row.type === HistoryItemType.RECEIVED && '+'} {row.amount.total} - - {row.type === 'Received' && '+'} + + {row.type === HistoryItemType.RECEIVED && '+'} {row.amount.usd} - {row.type === 'Received' && ( - - + {row.amount.asset} assets + {row.type === HistoryItemType.RECEIVED && ( + + + {row.amount.asset} {strings.assets} )} {row.type === 'Sent' && ( - + {row.amount.asset} )} @@ -210,9 +314,4 @@ const TransactionTable = ({ history }) => { ); }; -const Container = styled(Box)({ - width: '100%', - margin: '30px 0 100px', -}); - export default TransactionTable; diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js index 6716eae7db..63292dc9da 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js @@ -21,7 +21,7 @@ const PortfolioDetailPage = ({ stores, actions, match }: Props) => { return ( - + ); }; diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js b/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js index e38e74f184..6c3a3d9015 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js @@ -1,5 +1,6 @@ -// UTILS +import { HistoryItemType } from '../../features/portfolio/useCases/TokenDetails/TransactionTable'; +// UTILS function getRandomDate(start, end) { const date = new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime())); return date.toISOString(); @@ -7,8 +8,7 @@ function getRandomDate(start, end) { const startDate = new Date('01-01-2023 8:30'); const endDate = new Date('05-28-2024 11:40'); -// ALL THE MOCK DATA FOR RENDERING UI - +// ALL THE MOCK DATA FOR RENDERING UI NEW const mockData = { tokenList: [ { @@ -508,62 +508,70 @@ const mockData = { }, }, - PortfolioDetailPage: { - history: [ - { - type: 'Sent', - time: '11:30 PM', - time: '05/23/2024', - status: 'Low', - fee: { - amount: '0.17 ADA', - usd: '0.03 USD', - }, - amount: { - total: '1,169,789.34432 ADA', - usd: '0.03 USD', - asset: '200 MILK', - }, + history: [ + { + type: HistoryItemType.SENT, + time: '2024-05-28T06:28:00.000Z', + status: 'Low', + fee: { + amount: '0.17 ADA', + usd: '0.03 USD', }, - { - type: 'Received', - time: '9:12 PM', - time: '05/23/2024', - status: 'Low', - amount: { - total: '1,169,789.34432 ADA', - usd: '312,323.33 USD', - asset: 2, - }, + amount: { + total: '1,169,789.34432 ADA', + usd: '0.03 USD', + asset: '200 MILK', }, - { - type: 'Transaction error', - time: '9:12 PM', - time: '05/22/2024', - status: 'Failed', - amount: { - total: '1,169,789.34432 ADA', - usd: '312,323.33 USD', - asset: 2, - }, + }, + { + type: HistoryItemType.RECEIVED, + time: '2024-05-27T08:25:00.000Z', + status: 'Low', + amount: { + total: '1,169,789.34432 ADA', + usd: '312,323.33 USD', + asset: 2, }, - { - type: 'Sent', - time: '4:20 PM', - time: '05/20/2024', - status: 'Low', - fee: { - amount: '0.17 ADA', - usd: '0.03 USD', - }, - amount: { - total: '1,169,789.34432 ADA', - usd: '0.03 USD', - asset: '200 MILK', - }, + }, + { + type: HistoryItemType.ERROR, + time: '2024-05-24T11:04:27.000Z', + status: 'Failed', + amount: { + total: '1,169,789.34432 ADA', + usd: '312,323.33 USD', + asset: 2, }, - ], - }, + }, + { + type: HistoryItemType.WITHDRAW, + time: '2024-05-08T11:04:27.000Z', + status: 'Low', + fee: { + amount: '0.17 ADA', + usd: '0.03 USD', + }, + amount: { + total: '1,169,789.34432 ADA', + usd: '0.03 USD', + asset: '200 MILK', + }, + }, + { + type: HistoryItemType.DELEGATE, + time: '2024-05-08T11:04:27.000Z', + status: 'Low', + fee: { + amount: '0.17 ADA', + usd: '0.03 USD', + }, + amount: { + total: '1,169,789.34432 ADA', + usd: '0.03 USD', + asset: '200 MILK', + }, + }, + ], }; export default mockData; diff --git a/packages/yoroi-extension/app/i18n/locales/en-US.json b/packages/yoroi-extension/app/i18n/locales/en-US.json index 6e001581de..464e4dcd7f 100644 --- a/packages/yoroi-extension/app/i18n/locales/en-US.json +++ b/packages/yoroi-extension/app/i18n/locales/en-US.json @@ -1053,7 +1053,15 @@ "portfolio.transactionTable.headerText.amount": "Amount", "portfolio.transactionTable.timestamp.today": "Today", "portfolio.transactionTable.timestamp.yesterday": "Yesterday", - "portfolio.transactionTable.timestamp.inthepast": "In the past", + "portfolio.transactionTable.historyLabel.sent": "Sent", + "portfolio.transactionTable.historyLabel.received": "Received", + "portfolio.transactionTable.historyLabel.transactionError": "Transaction error", + "portfolio.transactionTable.historyLabel.rewardWithdraw": "Reward withdrawn", + "portfolio.transactionTable.historyLabel.stakeDelegate": "Stake delegated", + "portfolio.transactionTable.status.low": "Low", + "portfolio.transactionTable.status.high": "High", + "portfolio.transactionTable.status.failed": "Failed", + "portfolio.transactionTable.amount.assets": "assets", "gouvernace.delegateToDRep": "Delegate to a DRep", "gouvernace.designatingSomeoneElse": "You are designating someone else to cast your vote on your behalf for all proposals now and in the future." } From f815364d5872638466034c8f2be4e723984c9ae9 Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Tue, 28 May 2024 16:12:35 +0700 Subject: [PATCH 043/464] add skeleton to portfolio wallet --- .../common/components/PortfolioMenu.js | 3 +- .../useCases/TokenDetails/TokenDetailChart.js | 3 +- .../TokenDetails/TokenDetailOverview.js | 93 ++--- .../useCases/Wallet/PortfolioWallet.js | 133 ++++--- .../portfolio/useCases/Wallet/StatsTable.js | 342 ++++++++++-------- .../app/UI/pages/portfolio/mockData.js | 8 +- 6 files changed, 338 insertions(+), 244 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.js b/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.js index 5b570718cf..243d2331b8 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.js @@ -11,6 +11,7 @@ import { withLayout } from '../../../../../styles/context/layout'; import type { InjectedLayoutProps } from '../../styles/context/layout'; import type { SubMenuOption } from '../topbar/SubMenu'; import SubMenu from '../../../../../components/topbar/SubMenu'; +import mockData from '../../../../pages/portfolio/mockData'; export const portfolioMenuMessages: Object = defineMessages({ wallet: { @@ -39,7 +40,7 @@ class PortfolioMenu extends Component { const isProduction = environmnent.isProduction(); const portfolioOptions: Array = [ { - label: `${intl.formatMessage(portfolioMenuMessages.wallet)} (6)`, + label: `${intl.formatMessage(portfolioMenuMessages.wallet)} (${mockData.tokenList.length})`, route: ROUTES.PORTFOLIO.ROOT, className: 'wallet', }, diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js index ef290efa64..87fc4260c0 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js @@ -27,7 +27,8 @@ const StyledButton = styled(Button)(({ theme }) => ({ })); const TokenDetailChart = ({ isLoading, tokenInfo }) => { - const chartHeight = 250; + const isAda = tokenInfo.id === 'ada'; + const chartHeight = isAda ? 156 : 241; const theme = useTheme(); const { strings } = usePortfolio(); const [buttonPeriodProps, setButtonPeriodProps] = useState([ diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js index a82024ec2d..b42253ef23 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js @@ -7,6 +7,7 @@ import { usePortfolio } from '../../module/PortfolioContextProvider'; import adaPng from '../../../../../assets/images/ada.png'; const TokenDetailOverview = ({ tokenInfo, isLoading }) => { + const isAda = tokenInfo.id === 'ada'; const theme = useTheme(); const { strings } = usePortfolio(); @@ -76,53 +77,57 @@ const TokenDetailOverview = ({ tokenInfo, isLoading }) => { )} - - {isLoading ? ( - - ) : ( - {strings.policyId} - )} + {isAda ? null : ( + <> + + {isLoading ? ( + + ) : ( + {strings.policyId} + )} - - {isLoading ? ( - - - - - ) : ( - - {tokenInfo.overview.policyId} - - )} - - - + + {isLoading ? ( + + + + + ) : ( + + {tokenInfo.overview.policyId} + + )} + + + - - {isLoading ? ( - - ) : ( - {strings.fingerprint} - )} + + {isLoading ? ( + + ) : ( + {strings.fingerprint} + )} - - {isLoading ? ( - - - - - ) : ( - - {tokenInfo.overview.fingerprint} - - )} - - - + + {isLoading ? ( + + + + + ) : ( + + {tokenInfo.overview.fingerprint} + + )} + + + + + )} {isLoading ? ( diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js index 082594cdd8..74533e565e 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js @@ -1,6 +1,6 @@ import { Typography, Stack, Box, Input, InputAdornment, styled } from '@mui/material'; import { ReactComponent as Search } from '../../../../../assets/images/assets-page/search.inline.svg'; -import React, { useState } from 'react'; +import React, { useEffect, useState } from 'react'; import { Tooltip, SearchInput } from '../../../../components'; import { useTheme } from '@mui/material/styles'; import { defineMessages } from 'react-intl'; @@ -9,20 +9,37 @@ import StatsTable from './StatsTable'; import mockData from '../../../../pages/portfolio/mockData'; import ArrowIcon from '../../common/assets/icons/Arrow'; import { Chip } from '../../common/components/Chip'; +import { Skeleton } from '../../../../components/Skeleton'; const PortfolioWallet = ({ data }) => { const theme = useTheme(); const { strings } = usePortfolio(); const [keyword, setKeyword] = useState(''); + const [isLoading, setIsLoading] = useState(); + + useEffect(() => { + // FAKE FETCHING DATA TO SEE SKELETON + setIsLoading(true); + + const timer = setTimeout(() => { + setIsLoading(false); + }, 2000); + + return () => clearTimeout(timer); + }, []); return ( - - {mockData.PortfolioPage.balance.ada} - + {isLoading ? ( + + ) : ( + + {mockData.PortfolioPage.balance.ada} + + )} ADA { - - {mockData.PortfolioPage.balance.usd} USD - - - % {strings.balancePerformance} - +/- {strings.balanceChange} - {strings.in24hours} - - } - placement="right" - > + {isLoading ? ( + + ) : ( + + {mockData.PortfolioPage.balance.usd} USD + + )} + {isLoading ? ( - - + + + + ) : ( + + % {strings.balancePerformance} + +/- {strings.balanceChange} + {strings.in24hours} + + } + placement="right" + > + + + + + {mockData.PortfolioPage.balance.percents.value}% + + + } + /> + - {mockData.PortfolioPage.balance.percents.value}% + {mockData.PortfolioPage.balance.amount.active ? '+' : '-'} + {mockData.PortfolioPage.balance.amount.value} USD - - } - /> - - {mockData.PortfolioPage.balance.amount.active ? '+' : '-'} - {mockData.PortfolioPage.balance.amount.value} USD - - } - /> - - + } + /> + + + )} @@ -114,7 +147,7 @@ const PortfolioWallet = ({ data }) => { } /> - + ); }; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js index 1cdd8546eb..c89b6574b9 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js @@ -17,11 +17,64 @@ import { usePortfolio } from '../../module/PortfolioContextProvider'; import ArrowIcon from '../../common/assets/icons/Arrow'; import adaPng from '../../../../../assets/images/ada.png'; import { Chip } from '../../common/components/Chip'; +import { Skeleton } from '../../../../components/Skeleton'; -const StatsTable = ({ data }) => { +const TableRowSkeleton = ({ id, theme }) => ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +); + +const StatsTable = ({ data, isLoading }) => { const theme = useTheme(); const navigateTo = useNavigateTo(); const { strings } = usePortfolio(); + const [{ order, orderBy }, setSortState] = useState({ + order: null, + orderBy: null, + }); const headCells = [ { id: 'name', label: strings.name, align: 'left', sortType: 'character' }, @@ -43,11 +96,6 @@ const StatsTable = ({ data }) => { }, ]; - const [{ order, orderBy }, setSortState] = useState({ - order: null, - orderBy: null, - }); - const handleRequestSort = property => { let direction = 'asc'; if (order === 'asc') { @@ -65,7 +113,7 @@ const StatsTable = ({ data }) => { }); }; - function descendingComparator(a, b, sortType) { + const descendingComparator = (a, b, sortType) => { switch (sortType) { case 'numeric': if (parseFloat(b[orderBy]) < parseFloat(a[orderBy])) { @@ -82,7 +130,7 @@ const StatsTable = ({ data }) => { return 1; } } - } + }; const getSortedData = useCallback( data => { @@ -129,147 +177,157 @@ const StatsTable = ({ data }) => { - {getSortedData(data).map(row => ( - navigateTo.portfolioDetail(row.id)} - sx={{ - cursor: 'pointer', - transition: 'all 0.3s ease-in-out', - '& td, & th': { border: 0 }, - '&:hover': { - backgroundColor: theme.palette.ds.gray_c50, - borderRadius: `${theme.shape.borderRadius}px`, - }, - }} - > - - - - - - {row.name} - - - {row.id} - - - - - - - - {row.price} USD - - - - - 0} - label={ - - 0 - ? theme.palette.ds.secondary_c800 - : theme.palette.ds.sys_magenta_c700 - } - style={{ - marginRight: '5px', - transform: row['24h'] > 0 ? '' : 'rotate(180deg)', + {isLoading + ? Array.from([1, 2, 3]).map((item, index) => ( + + )) + : getSortedData(data).map(row => ( + navigateTo.portfolioDetail(row.id)} + sx={{ + cursor: 'pointer', + transition: 'all 0.3s ease-in-out', + borderRadius: `${theme.shape.borderRadius}px`, + '& td': { border: 0 }, + '&:hover': { + backgroundColor: theme.palette.ds.gray_c50, + }, + }} + > + + + - - {row['24h'] > 0 ? row['24h'] : -1 * row['24h']}% - + component="img" + src={adaPng} + > + + + {row.name} + + + {row.id} + + - } - sx={{ cursor: 'pointer' }} - /> - + - - 0} - label={ - - 0 - ? theme.palette.ds.secondary_c800 - : theme.palette.ds.sys_magenta_c700 - } - style={{ - marginRight: '5px', - transform: row['1W'] > 0 ? '' : 'rotate(180deg)', - }} - /> - - {row['1W'] > 0 ? row['1W'] : -1 * row['1W']}% - - - } - sx={{ cursor: 'pointer' }} - /> - + + + {row.price} USD + + - - 0} - label={ - - 0 - ? theme.palette.ds.secondary_c800 - : theme.palette.ds.sys_magenta_c700 - } - style={{ - marginRight: '5px', - transform: row['1M'] > 0 ? '' : 'rotate(180deg)', - }} - /> - - {row['1M'] > 0 ? row['1M'] : -1 * row['1M']}% - - - } - sx={{ cursor: 'pointer' }} - /> - + + 0} + label={ + + 0 + ? theme.palette.ds.secondary_c800 + : theme.palette.ds.sys_magenta_c700 + } + style={{ + marginRight: '5px', + transform: row['24h'] > 0 ? '' : 'rotate(180deg)', + }} + /> + + {row['24h'] > 0 ? row['24h'] : -1 * row['24h']}% + + + } + sx={{ cursor: 'pointer' }} + /> + - - - {row.portfolioPercents.toFixed(2)} % - - + + 0} + label={ + + 0 + ? theme.palette.ds.secondary_c800 + : theme.palette.ds.sys_magenta_c700 + } + style={{ + marginRight: '5px', + transform: row['1W'] > 0 ? '' : 'rotate(180deg)', + }} + /> + + {row['1W'] > 0 ? row['1W'] : -1 * row['1W']}% + + + } + sx={{ cursor: 'pointer' }} + /> + - - - - - {row.totalAmount} {row.name} - - - {row.totalAmountUsd} USD + + 0} + label={ + + 0 + ? theme.palette.ds.secondary_c800 + : theme.palette.ds.sys_magenta_c700 + } + style={{ + marginRight: '5px', + transform: row['1M'] > 0 ? '' : 'rotate(180deg)', + }} + /> + + {row['1M'] > 0 ? row['1M'] : -1 * row['1M']}% + + + } + sx={{ cursor: 'pointer' }} + /> + + + + + {row.portfolioPercents.toFixed(2)} % - - - - - ))} + + + + + + + {row.totalAmount} {row.name} + + + {row.totalAmountUsd} USD + + + + + + ))}
); diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js b/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js index 6c3a3d9015..0da918147a 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js @@ -172,8 +172,8 @@ const mockData = { ], }, { - name: 'DOGE', - id: 'Doge', + name: 'ADA', + id: 'ada', price: 0.23, portfolioPercents: 68, '24h': -0.59, @@ -186,10 +186,6 @@ const mockData = { "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", website: 'https://www.cardano.org', detailOn: 'https://www.yoroiwallet.com', - policyId: - 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', - fingerprint: - 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', }, performance: [ { value: '0,277' }, From bf079197c81dabc594f0bdb7f61be67751d2d1e5 Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Wed, 29 May 2024 11:41:32 +0700 Subject: [PATCH 044/464] init dapps tables, add search and strings --- .../common/assets/images/hosky-token.png | Bin 0 -> 1246 bytes .../common/assets/images/illustration.png | Bin 0 -> 36933 bytes .../common/assets/images/minswap-dex.png | Bin 0 -> 1217 bytes .../portfolio/common/components/Chip.js | 1 + .../common/components/PortfolioMenu.js | 8 +- .../portfolio/common/hooks/useStrings.js | 112 +- .../portfolio/useCases/Dapps/LendAndBorrow.js | 23 + .../useCases/Dapps/LiquidityTable.js | 319 +++++ .../portfolio/useCases/Dapps/OrderTable.js | 285 +++++ .../useCases/Dapps/PortfolioDapps.js | 291 +++++ .../useCases/Wallet/PortfolioWallet.js | 24 +- .../UI/pages/portfolio/PortfolioDappsPage.js | 4 +- .../UI/pages/portfolio/PortfolioDetailPage.js | 2 +- .../app/UI/pages/portfolio/PortfolioPage.js | 2 +- .../app/UI/pages/portfolio/mockData.js | 1043 +++++++++-------- .../app/i18n/locales/en-US.json | 43 +- 16 files changed, 1652 insertions(+), 505 deletions(-) create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/assets/images/hosky-token.png create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/assets/images/illustration.png create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/assets/images/minswap-dex.png create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.js create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/images/hosky-token.png b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/images/hosky-token.png new file mode 100644 index 0000000000000000000000000000000000000000..46be3cc7a92065ca6eb0dc9a1cc796f325a4644e GIT binary patch literal 1246 zcmV<41R?v0P))yy!faO>VqZ5 zm>69yZE3+8sTHBX1Idn@wUu(LDcf6g+qvzMkPnan@`33m67Y`tAvUB1(?;7-Emxw#NYc(O6{o;JY(XR&IiyC_iyM1D-~FY5))B=HPHR zSV>VaG*moQftBTDXw&ZkTFSK8M_7buDIm)sNzF(f39HUyVdgH9$t2d-*O8ifgRRY% z!&?`yxVV7*{e3L_F^%ZNMO$2?X2v81&wTi2EnCi3>5znFvMgs}OK$a3XsyEqNWn z5|3~x{=uC6XbqfvBpbnu!%RiGXT z)NI{Y9z3BD{6?sB;-R@sF-Bju(s^pJ#aUdW;Ku?LSSCLy1FdtXo&SY2I3 zXJ;p7AIxLun_t(O0cc>Ddngfw2F4c0I2(tgWpvc)pP0mX?;B1T;1_W^Jyk ztK&Ip8x$UzD=RA#En<=L5(osi$Vh0?If$aqZ_1bUPi zWi3vp)7H4Brw8G17^hF263=OzJA00SXrAJ498=p88;)4rl%Bh~@ey@CT~iSm?}eep znd9T*Zr3qF)MO2IpHjSG$PvAw+wpU;O_EXJX(yfgv1#Ff!t=s(M{ zWX!T+#fi$-Z}YsWs(ff?XNPl<)~SU%#G{B7EwjZmPvCuheHOU;&FL&S;XoVaAT|gu zjN?0j?%9Z_M#@K-V36PMM|E{IUV1S@WwQF-{ok;+w}<}ze#8?Ax|DIUe<}x@uFl|B zt)H_3&y~L_)biAItFuzi7riNR;}RTB1vf{3L_50V{p)7XmHQc#9!L4~~Ym37|KLZNU8@ZBy=@*cju24nS z2E{ezF+HNNQNdB%i8;xmWX_+4Vd#&WYUbm!f zsh?1F-*>j!>s!CIP8|g=h0_PEl{w%~@jaz92Bp&b$um0V^p)pyd?~CO6ucBX2=|Kq zcsS{sPh+h2;JugOaj&~a$A>=+>eKHrI0b&rY14Dgm-FI$_qx33cMD#t4};RTfc7B& zArC)%AVomZsJ{^)uX=n1_Q~T8P<*`;ukR3XZpPmo$@vwoFTahyQJ0?cTKqPsx4z2W zy9262S}uh}yhnL$!QV+drz3*8{9yy`iyx#~XGFDVkO>I0_*=r?NCF5B^4Zc8wtq%0 z3vrPW5>@o)7f~NR5ywgMk=GAnqL;Z0p2X`*PBRAE@%gcex=!M~ot6p{XiInzhZi46 zky7r(b{#=Vc?ckD9RRgwPk4O5{h@mY+|l31K$picmlo!+N2F;c_m&SM@ONAAaGGtd zKRLZj!(|<)h%d`;iu(s#T`!7d--ldG4-Sc zs|ig+ktM8SHfNk02O#+9TcLK&P|Nf4?dpKFVlE@ZR)JTjxz& zKHh7(dvX#)d4;wXNU(c*Uj$TkLxc1^TIa|{Ybadi7b4X}8BQamfpKaV^7p|l;d}s$`V>7C)Y?YixKJBndHf#i+R>3 zoPvcw>CR$by2O(eaZX#&$^QJ?6HpG!K}LB{86&3~uUVJX8jTpn^oOk&LjegabUv+A z2hQ_w-h-6Di4?PmJz684J3emj<0-LEa|CzJ_x(c=Klb9LZ6Wm%k;siUkzMg0K6xx7dDay_`sU3c#5Biht;Z5(s` zwUG2zH|YburnqCaRvk2pwZE-Y7tW(_-hmV;=irtF7{Z8<`f>YATjg`vSE5{cM$H%*iR;1fR_39%WgJ?c zP-+#)WxeP=>VRg7#mMfM)<->4hLcbXasKVB11C=u@>OpxB7*=8Z zvX`--;gR+8N`tQ-{uxAXzKloZ)t4cQ+Klm*p}!n{237Z67+j9?r}}P6%H+-(9D%ZT z7?wYM0nLFIF1+9%MKe-kVF5-4#-Kis)Mpt-VtCk|7c1D2L!jNIxz2~G2c6TUap*pQ zfbW^-MCpdZv)&LYD>#tL!;VT3z^G7sPWOiU3ahwp5CpJZ-73%V*dDf&aoF9Xz;QTV znXW2OyXd&8U4OZ_ZP}ixdM4L&NqsOt4g!QODp@ZGSYI%Z(kh|1%)>-phi1)zrsq1B zuIZeQd{4%a_Zq~a@Hph|vmw7Ds2;Ofz=%Ub=3oZEq;>Z=@G~ll?sGnA{iwiN#WP>0 zm2e%^V+y z)5`cwai5NKlgpKHIPXr=$g05g;&`&IG7gBiTraL8r|&eqoY)sQzAQ(UA?wF&;e-^Y zu|}JH{awE{TpzbuaXDPSh8PdohL9C3JYQgaUO`G4`^Yj{1T!KuVW8LIA^?Njp=>kOSha&kYU3dK@4%dh$ntuP^AhvO z2C>8NUS}{+j{@(nn-_#@s>8@CWRyP5Gs*)(e2O!;PTf{lU7M=PhvYuQY1S=&)d+>= zx#>S~Tr1!8>fqBR&-&^w<0knTu7;=7=bbL&A4i)`2GYMck(r|VpZFeYEuR@pZ)oop*WnAnWRd@z(R>m>oldFBpmTt|+_ zd6;`(MF=jtsvbOE`C#Z{OjDv_w(u89&B9p@=M1DoJ?|%HUmGT}0Y|Ocwmh=Xx3NWh zpP$h+$KgQsD2xjHjIO&$elnzGQ3e^LW~JRru~8bBciBp>C#(LIySfr2}X%jL+UZPC@+_edk^E7YSC%zm}kF@RWivC@ze^TIb zoO%LGSw19jWM5T{aeEmS7lvW_Y={779i%_4^<>_LO<4IXdXOS3Z9Uj~G71C0YvKTL zuZz4G05Aa6AxY=KC4d;!X&|ar-#~TcK(A4*PnWiLV2%1EZIX4Ys<+H1x(~2sTRC64 zFWW#-TWve3{3LRJO#e8*`uh+jPTDpyBYnW{|iDGo}s4$~wlT zNMu2$_4VW9?i+Cc;}10AdYk;QEWX!m*nC086K!sHLZ0;8#83Ln$LTn+NXDrO4VOmT z@_291T0UDxZZpWfPWpxG<*z%UO(MTq1D2lzIQneY1e_I+{u6X*&YIVKpwa2rj-vZz zCy{ILe$AEHNjkCeS%WgP{lh?NxXz(CbWWh5bWs`;A*73*i#VKziw^J%7Ohb_PLqtG zeb$MJ^PuX8_`Yrs+6fi;Q2ZXnWk9>o>tLTW?8KsHor?C!I&{vUJ)AD9Di6XK$o|gU z7*Gbiq`$dbt)V~)eGru(?#{s35*@V!(J;Q|j%L86M|#eEQU!3P zbX3Mr!&0?Apg{mBcQBX1l#s7wIr2HkIxyw!*k?6}>n-b;#(|2q@Bs63U;mD!wCTjF zoMf)PoL1(~b&Jkj8)RR=8sT(pko`vS8iM+sE^pI>Ran_E2#0_B8Bo>d1k$%@y$z@D zR!QAFB@=-g$c^Iuu5|(^xKkKgJ;#z85ITV;fQ(lK?n>~uIGjgM#u4@AftON9l%DJD zu4Q?hHAoc$lgq7%{#cKyGXP{C@p(ka8&NZSJsM&lQcl8cU=b`LCOl3epNP{m1Z5Uu z;`_?gk?v(3$mGPQyih#oppJ3kOwCo#3Z(RI5qdCo)oXS=xoKn_E8^xxR(CRAH}2Rd zE(MBT5BV0>Ky29-&$GIaAzg^BEAq&@Xp^iPg-iM8t}ax!j=0BV$asB68Sq}M8@HFs z_XAgzKUC*s`lKuRs2!7+j=lhf{ z6W7t8ijL>B9N%2aff4ydS-84T{7irsD@R-5!~<0YE(q;QZ>K@lgF;kBMO+nXy|f%p=0hXXOzM@b(RL299kRSMKF3SznWpFK3fd3_d2g+@RrP~OD+onZ zyLu~d?Dpa4ZF3*a7^LLhL<)L2!qWg$(+je$AnjOCts7(-Dc{sx>vaM~O0ONOt0z>8 z4>B#s<9w80dxk2AJY@aSXK9=$Kdyqyw_cH-OfTCZk1~zP%294kOZiHX!BAWw2FbQp zg{Xb*Pt8$nx~{qWxb0o>oYAJ8=vD9b_q9wb`^4l072Krq=Gyh{6I*N+b7%^CDy6Dt z1k$%Wt%n+0;HuKJGohAsI}_iaHxa@iYz;4QOtEM}I zIz?%c{CIHboMyNePar<0BU9`;RC5a7W|3#Nf+SV7IjuX02~rh@v&_43U#0cV+ywFC z;GV73r`!*IEbF2z5Zb|c(Gdr>Wa=o(T(53izRZXEF0=YXcc~7Kpaa0WB~A;{cP{F! z*$7;SCD$q=2%&}|^b)zH(Sxk0ts&@(JZOfel#TPCeCb}TZYcAbGLV#8`8t)Q)&#e> zT|XV)bAjucE9_()Q`wZAn!0yIpXfl*QiX?=zrF$!*+106u^e^_VGRy}0kxdTZH(%NU*Pg!O2} zlcFamPE9CFJ(stO-0Rs>(}^{F*0cH5ARPULC@*>raRqw4_?Exy+74MSe?OQN<)rPT zN#@%l3hdeC{wAN)K`qOpXR7Anxrnt|=o6V=O?0-bqpxSuM^zorH%=m$x)|HK(eV5G zrWX2DCFT1zbAO2T$$HB?K-5`|W3Rv3{+a_?kBD!j{HuMl&&K)eDQ3d%v zPD3S+^xT{?sjsuK_Fc~Va?*vxa6 zA=gWZc&xF@IuGE);|a^{uByAQlPE*B$@iV;H{AZ;6 z=dBb1%rZY&r-+S95z6J4=FRbVjO5rMz~?JLYK-(fxS}p9)a@B$n`0zjK#(&tEC4C5 zIdWc{E(*QCK{?%8_o!^N29sZ1_dR!^bc0BBDOujFC1v-V@7#5CH|bEHub5o2?WV1@ zP@XSe%#Lo&u|#*zv&dTL3(kk@R`%in~oP{nt#*=_pB6P;(p@$S*>48 z$&*RJ>A2tf%1Q7c^Otq*ioS|4(TgQ2Sx%z{y*`ls-6g#pDd?53MyRr)fdGU)`m7v-O}6B4e9H)<8EEQ(ttGprFz9U;Us zbpa~|t)0llbySDj#(5dpz1Ob*uGh|}KFJtXjg#zK=vAk!3K9oZ@g-(tbK5ny<28r3 zXuWw5;98miB|gm7X_$OY=M5)sas8R9mTsn2&F5rQF1_jjSic?qQSysxi zk|IgDOj0)~Lqac+=|sKL{!UZ_vwK)4~vg4`*S^2EAl{SOO?}g_nh(s;8!G*1$ zk5}|;I_}gC1PWy0L97fE2{q-w_3_G$$eWIhM0n>kS<+5l*QCQd5R-PLz?4cwsswTU z8=PM%14F2L+V9*x*>71zT#i>T7^K4H$}5tw;=HQLaDa-@B1NivgE(emS*1gS{s zR5`4{!-_mf80p5Ic;S_294Fv%c)${_7MU1id_Lz+_vROe=Ax?SX{eGI(tENmx$ek5Gaek--?=E0&(pSXJ*5e#CML^T zhV`gVlfJK2b@CbwuIh70@~gs6tpW_328kyAhp*R=|KET!Xjqb^0%GBouIYJck4ifk zgwybBQzD%bdAS-Xd5_Muum)uAdC?1H)df4CBl*hmkT<LJ(QuVL&mPHg{TMjrHG@_viTncn)HA>~itD$XOGO!KxULU&e zC#B23ds|rTb^kf^~HfhkGy>5K&|7s!+ zF|Z~{kIGP@kCSw31*!w~w*gYk&m0-Sja5Z{qJ4dMky#jV!s5r2#re^ME?s|6`FZHW zgC>94&2CQ*-c+ctJb>+AnV@7WyY-Sd(K=7eoTpRzz7WehM6SvrS?S}_$uy;tZ^|T3 zE}Qc!6On}T+M%v^v7enr;ZyTt_W?H{bGe6d(GIE}y54egE1c z$DjB`tkgC$;s%^G$T|o{1SmL4O6M7pAVdy|8wgk;?TDIz=HQpNUc38`$1a>Yo&}cf z>lXEus23#lmhziyv$-!Of$s+qN2ZVZE;rQHnQ+25Mdjr&CsYDNCaoM_C&$aWN^qui zfgc`TNDKCTgn)SYA7mZ9^E&yrmzLbAoGxTgo^uB zA)SdC#M)_^Z&mpmm+QY)Ji52CIy=1Y(0Bg9N^9<|NGPq`Oc9h_HDP4GZVq{?0ePq4 zKx=>*Kw1!ZGi1~C6C>Lv{$%It_xz1sLzau`m((i*E1&YfRn>Q`AjgV9B=ap}CCbY2 zfyJ8V%KoydxO`r^G=1eK@c^o^v|c+_+Hmg|ht*Nn1{=tbkFv;*W@`z@Ndal&DR^_v z8kLtp#^KqMLF^Ovam77nFjiHKOO4T`W2u}zeJ=AqI{oA&2ai7ZKbK{1t9Cbee6-Ut z`~n}BL%uQq1M@=&*a1zzM1UIhPhfS|(A+xusSAGc(ogl()zwY*#d`JAu(r{Cy|7+? zN?;=8Ds@sHe-zvboeu6dm=De{na+~V$z5e7 zRV)*Ll|sIPHNtuw&D1;-z)Tx$+=3#Xs{GQpe2)i>?;W4szvs!PANa7=5df_e2vkE^GnKjHz)QYnsSZNi^)?_i9jX`b)8b*@ERYn<8`{^B6)Vyzp}=_gBcY(G0*I1t z_;|A1gm*}J)v%UaR7CLCxrJj}9^Zf8hmnkIp-2Bcg7Zg4H^XnA*azQSa$iVNj`ic8 z3mQZ4BO_bj?@e7~0Q(=0e;*EYmyH-Oa(D~m?S>Tr5{g=@)emgFdH1gkUNm${CG7z* zs6{ehY2U6TFUhodMZ9#J_`UDn z@e3=h`J1UHK63F5aJaJq|MAG90PC$p~)HHn@E$Uhmb>XzsK3SjHg_B!b%S&${P5oc&xC#!pTkz|L zAH&R5_<=DunWI%Fz}%ee|iiWt!uJ#|lS zKJll={&n}{>PXsegiWM4Q9p4#W#7ntOWR$#@k+b{DWwit!xAXM1oOP5RBX#KU1Oub<%<6 zmm5nCq-lDx17xQcX5!@>hXyfACP`0DmckEKF7rOT|B?4(XzRS7K4jSVZ#?z5H7&6{ zlspWj1*Wk!v(76(O!xomi6`I#Pu>L|-}5?n^Vm*U**pg;+h&1Duf?`DfGt91rg()6;OeSPNuQ8kWL<61S2YmG0GM?V4j^2%Mhim`HHAH_NF zCDp%WWFJT=d`hXu5eD-TP=3Z2M!d_7XGBy4r$Yo#nU2AUtl7^PRrGgC+Ht0{i~a%O zL31*zp+ItABvntTuPm?ITD_V;_{+PmgpWM64Ao5y#-|Fr!YXdyLS**;_4jqV>fQr?~G-gxRyPQKgMAHoDzMckGY6taIM1)_86 zUmlk-0bSbuDxh&)QjnEJ-2c9Q$^EpxvTaN#2*@0V2_dILt@XhwJXV5~0*X-IGT=)a zn%is0`#Vm>GghHv-B$nyIA_)@XPq1%EoWxw%FaVRvOZOvFYft{H0;mT+25mhOS7l8 zm0i7MJZr!O14Hn1t8IbFlvG=p5{f`kl>@P)q)aO5d=c6HhYoz(oD)!2w#~ruj%hfoM#~`<5P+hq^*~gqO-J^Qt3591Y(Roe7iQiY%8}F_O(%Y3fj{SNvoh3Yz za=tDDsQgT`mCdp&q@{CaVOfP-f)Qz8GT)Jzn6+6b7ZO=VQtdJfh#w@bBZzY8w=g|@ z5drUYW1HYhr%prwrTdwosE&HN^Wbd?;()2Bpr{1cUnj*2&k3l@J7!Q$oi!y}JFE69 zZC1Xs`tz+Hw6~=4pK~!rTnrq$gi?qJWf+5Wj7rgm%*|*FB9J(+(S0*kG=`-kLNZ=f zP00-*$wFNzUM9Jh%Qxa|WwmUI#`_1>!s41BrBJKE*O7e`3_@iGJ5VjWt~mf1AeC{W z(vHhy$3jqW%*@O}Lz#;DXW)f#kkms=n!uU__2zo;;K+_?x7u3>Y&VTh!S@%JG=nn$ zFmu=J0?i_Mm4R!)trA%k3{c1N2K%=UxDwfhr@M2N+GYqL)yN~$Cb>J3VR^Zu_(iR z&A?#rxmnLZ^l>uo`L0jZ9J*9L<#jp0YDY+xe`d zrmk{pZ!wKhF0T8Tb1*MgW%9mbN#;K18^uY=%F!6L~n~0 z?WDT9D)zP6_kGfrYn>D5(zwRzA>u|quuU@03kP!UYuk@LouRT-W$}3BHZ9dR&%-r# z`H{7D(tE}rr9dVr5bT`_Gd8`#+V&WzOww~ZGjr{{N#+?Fa&vnw4Z9BDnKWGMLfq## zMJ(UYGpdV`Zws5IOwwy%no+J^_2%%jQHHczX-`1qV-b|4Agc!OWmRC*vDPo;Rl5Gj zp?&a^6FXp6a}egPJmg4^!>Q?54J)7T{IqFb9_r5uC)-c8>kn-y7uz)>c~lj#C?u$8 zCdWhCy0v>IkKT@%SC4~~m4(O=Y|*(GuRMqyDvZmw&jfpC3{o^n9qE-uJ~di+&jFKv zLYDN;6$G28)U0KL!5QOC9!0Ey8yl$rr6|Xmr+9)mR>F1h6D0TS&F9y%AW-!zZxaX? zIz1Ru4XeHLdQb;YlR+Uh`z#pxrQK9o0TO^pFq6aJ!xvr)9n|zY6H8*@0x^E2dr$RV zSIm|}#trKFmmMeG1z8Ayx_*mHRS?<@AY@b5AO7e1Fg2)ifAM6I+PO;PU0<&})Qg=x z{$3v2unSiYZ17RS)R|!Kj6q7FQ-gc4w62*&dB4rg&3bD@cby^Q32N(&!O<*tg1cKu zV>{Q$LhRqyY?zmwZW}L^hg?#25Cg%Uv5~D4PZLEvvebd`S{;b>8(FjnR26!e2WjTb zP(tn$c2ky1K?1ap@~eV-=4N04Wz^S=Zi0n9$F03o8_OvbO-Fr}OOSyuH&Ogd5EyV{ss&L2CN$v~0Uab&P1155sV0lI&9Wfcy$R*{-+hQ*7IhmLiqK~2Be{+r?z-e2x0mU}5E zA@;L#UaYm}$u-NDxe%$uM95g&3f{7u%2=(z zJ@5>|GX^PzUI*?3Ho${t-x-s8L)A*(F_FR7Xr|0EoH;_VCI~@ORKnnE8e7KNC$PpZ zD7v$!=JJ}4CNJSNqqKu#Lr*?-stvn`1_X2{^hZAetqYhu;PrWD4}ZMwAkgf&7LGHM%JoYa?= z)8!ENfn@VJFBHjy;t9q;ZqJ?Jz2wCnOf1US{h4qcerBm%Y5ND##R2>E9#HMk3&VR%*`rGO;+D=2Jqjpst{|ypA$$)i9%oLH+0!AP5B6cM5NC$h}^JRh!?|~M!)^%k1oL5FPjpYeC|Lf zz$Z0*sbD!US}}o@uRO}jTL*+m>YkZ7_=zoB(am4N^7d(9dnt$FAY5X^q0I177MToC z3h1+}M13zNrFWE6t+Vh>6tM2oQaU}v7|8LF00ftBG$s-cS?Ft&Q5TnU_y#4p zp#iDo5x9ifzzdtBrI4b}oSQL=+?1JnUBpo_$NpIi@Og1RfXLsa_o5k>?Z*lNyH{Co zkMdafys|JZG~V?(Jowj2&BL<@&k3X^bd9}>7jKxOpKX~i2QiRKkPB?NA)XQ%_9pTG zmM3{2GRvA+F4GXwJH<=MG>!t<#Tr?>_<^2}Up0BKG2Gn$NB7UcKe}eK1zRt#)ZnGO z>8Y#(p#^fD$fS8J!wO1Fzk8?W;k6S}&_)GH*Kqiy^0cBSyCj!N(~?j!{XN%L5ZHR= zxs{-TK2EY|C37;R=pR!CD^hZC4=cj_jN*DKpT%}qKQ2}TSy%$N51wUs&LI74Qys)w zJeWCw-YtlTSgz?52Qc4>SpcDD4J;azUKt3>#InTO!P=yY?*}k*>ABN0Z$&VRHMo9G zBQ+DExvlx=o%>qw)~m+NtH_yqCE2{;>DV{3ZAige=9O}*v;sgXqdLlb?}-KYiLF~q z-ksrA)UVXo@Y%}Aol&r zX+3c&;A`@`OwTktcS?$3EQc>4vZ~^|y!OhhkXdAAXq9J+%$_D*z3F>s&0hW7Lrd_sD<(j737|C#te&HqJq9Zq z`14rFiWH^*&@6HY@SbdKa*8YeRhxocCVb7h1k#pPq7$);hx%jo$OA z`xfD6ZD9HJpM#f-mx;=Yx3w)z*}TZVt~+9}WS36Qy?jE0(anX;xVJa;l^(B_Tz zst}ffq95F}cHo-P5xabkgVUeX987ZGW#A~8Yn$(9fUp)qnAmdBhdOYXoZDP*{|Z83 zY@`9`K7R&bE;x`UE|SP(kiPAE;x?u3hvyj18b~SBa`;Nrfua*U8wixvn4g%sX(s|O z_{56-Oacrb)>{395F!N+oHWH0LNQZP{BU{ICTi{GH6vgD)IH1as@+W#VQPkgnhgQE z4xqiv-K#ke=RS^Nu|QBvZ@{lmocNqTN^b|y(CS(NY}BV<_LOi2b!NwT7W!4mb_XX) zCMT?x+)4m851h)2U#zW5JE;^eoJbZqVpJB{W&Hwp_p-tt!C44r6{Me5YJW|kN5OeK zGS(2YXtqh^#|r(WXC2Wi9+G`)0Wj`(NGt-(Vq`g9L*=&zoY=u-cu@j>lW(55w=v#$ z>c8E&1poTYn;iJ^=xENnf%T_xK-|xScF)?sO6;a2m+o#3nz-eF{cMNP@eOkhFUE1( zq>Wg%ft5^dyT9ka$=t^GX&IDPf4>alA&vJ`j+1@)?ayEy#|_V;L4A`Beq&-rXa&ta8dzY4-Ba z-dbvIyS6E-aofI;N@ZZx;aV!0u3aT~6J4YfX$X0iK|5y`sh=GFH5Sg3tudMKG>J0X zOYk>vmcm&F=_gQ$%4+aAo>ANhk|KK3h>$h;dFE!R2a|i2v0Rqqp`Ez|SRu#)m0=bK z@qlC}b7FyXI~mfB#_xoUb6cSFHb~z_L2 zRIC6(InvDs!nVrFh^!muG5*$(yIQr{iGTN}i}1g`eLMo10bWE!`vK~ILiyr!EDl)E z(%Y&vq^6~}k9nCCkLm(_itEO0@^9Q`R;$lNAIM2B#UsD!DT@vN83-qe5S=`bA>_&Z zDP7P!o>H{Je{%yld>zhWI42-A885-7$owa5pmbZ>`&fCQS?q155EL(t=fGsoGw55< zqXLV{r1$^{6`*`dmyg*+rxa^Wg~FglvhMgl7`^=m$DsX%`#SK8KRN1w$qJGZ%91>K zjlY)(MJo^DfUv#Nm(O+$55Uodo>i{g27GoCJ`J_qYJuyPId?DpD}`dj?qgPZyoQ|x z&0gA#wXkQFEIwpGVf7Y*ELn*b*nM7#G-Uv`O>K$IO>6CpYRMpKYjT?fzUVoHLM8K(_xy ztoV@#1l)0=^8g_BJ4<76DF9c7XDp*eR)f+hUl0Q?DOaW7OqZAOdGjX+9~roA;GR$Z zWyb*M18*7*6w*^iaV!E$4`M*(cYO|SR+4dT{9U6B*mtaJ<8^A@eV^~vPv^{WEa<`_ z^DJI}kb&^UJK$tO>y9`M2$yEkKP3|j2pYdPVU-Z=*(JxzPmmgX5zaw4ry!+(9P-w} z%|KdCiGz@p+EGL2fo9f1=Y|bY9QXdV(K7A+VSe2rd#<&31}+V|NI5>=2{Z{Vu>_dfZTT_Zz&;BOBhkF9xDZrOWHuy=cH0htL|Ry=p$y=rpM zQ_)&$z`lOs!oa(0_m;LlOn=eOuzFW7uA{H3=*O!2lqM7RScB)jQm&7D8Lm%xOfpAd z`I+lClP0s2_6amO-3#X+oO6)guGABVv^&i#S5AXhiEC0jDxhp}s!Rp=KDp%3L4_`cNfUSKZG zJ?O}pfpZiTJWt^rtNIGGpZ+qP6NRK6F)y3zxDMtS-O#D}JF} z8_Hqx1)ENZveW$63$5Sly{dC>apShl0KfjB2K?o{T_90_O3+R{qm2D|X0L&d_}e~} z!T<7(aro8SXW{6g{eCumW+zj%_Sk!ye_p#XpI)ncr~E5ZU)N8f{whRs*NQ(zWuJ1t zK-!<-lKM)YX@6i|D=6LkTV(aqaE`+B22u*|F7z*8FWpdzdsUrLCeOEctU4Ww~k5W7m0qVnz>9L<3`m20*eKD=geRUZ zfSzsNtl-jJ8T`!a2Ml}v&A(VS+fCBQm-u|>%H~6(ZyElM8qKCN_pu8 z0I#@G!F5+=FfwGbB49poq<}Aes{;$GrKhxN3>JsqI`p-nmk*d-j!PZdEvX`lEGaeR z`uTWZK8nlU6O;n~O?g;@{H~qY9bFots=YhlvhMxmWqL`E7!Wec zcRrg`Mr~Y|eShd3gZJm7dFNTzK}>Al{%4X;zf7AxUb9cJ|DO6xu5N+nA-o_UrH}0n zl<;p5B*PMm@+bp$R@E~ZBt`CfmZX(Ro1>QMY;;END{w*getltaSZ`zM>K74?>!tiM zb*S-r_(A=$#tgk?ub$%=MDr{a2UJiVA$)n#Q)icf5_68h-Y-`rd31947oSt=6g&^% z1pz6AclGo;u`}KUab>&^AT@6#HB=BYoY{^`s{?^lsZyYl_%aR0Wmc!$KvXGsaw4P( zh*2a2`z#lrq48((9D@%2x=K(zUoQyxrF8)aO50lZs}x0P*^mk%iwCkCSqFb_9iY-&@c0}9Siu1Z)?#C6foVl5 zsSNZ{Z*$85H%;U3`&p6}TAX2I86$MG20N|q(-D$+||zT!Sj`ZK)P7y2TKhZhHLRq9T70fK__B)q$)KY*R` z(+OFSM8FE~YE6Acrl~Slt) zS+=6^htTNe^=v^k^7*WmE$4&z;xlMgUtsM$m1)l;ByzZ?t|&{KD028;kk!8gQV#Fx z>VJo|x>k0wT*adT*i_&0J$pY|?ITwSQOE>E@hhW}^i+1Iy}AiOIaYSNn|i%s6I!ic&`o&Y{dXa(5jkR$m{uh zK9nD?4cDe+-9d--1yS2|Scd>>^oeY*>?0{QM2?OiR{hRrYwC7*0mFF*(sydT6>X=# z36AZv*~PJ=K91z?Ye&EWl4B|vuii=JTNRJ-kMQ> zc>QD=hp90QvUKqk-Og0EySlC2Y466_;AQk)w*!j{v#_*03#*+Klr_7K5xT|80O8sL zl_!X<0A&JJ=XVU(_VH*w1%uf*Ow_i)Xtp^#q75V(*-Sp19j;H-{O6u^P|hM{DmB}b zwyLS@s^xPTob3A>pRKDi{wUbF3g;zADZI0*e+_%_6?7g??>Hz&5u94hiz%X2`h98e zhrrv}?X-6x)tpjpxKR0lh1qFXTAYK{@`6Kk0!Y5j_#+HX5Y5=B9|KcKfI<)!qkP>; z6BonRx}k;)Xm{4HgaJHfOshO=Wuw`_d?Y`C)U{R7J_}d@$|wlRDdpEl!P4+o2+&`L z^B|nJAbp$G+iE@deGoc&pj2-B)!IrzbU&~;Xt!5(v^y)8A{A@0=Cr!F46`Rr!0Pgn zkue!)_H_?%;B*-!)YHAc3hbMWsHm!D`I0|t0ZI@Q*~Sm}8qGJsru+ifT)WUKXsB$p z)NpnrAIpzqb!hhiQnWk0_8tw0gndtCdpZ2$+m$*F=Rr7cK}z9WJ^hcd*WMew0^x*z z$-V*N#mbf>#2%Gy(V1+oE?!F2sB}y{ z!Q~6kM`@#cMO+RtVF3`tM$Hn7ruCF zUHu0*Pr`W(()VaR((A%+V-IdKH-vIzf>eC`EeHw)Eo0L~ZMD0vuO9qSAqFTC zL|5xO^Y5YvuUDoWwJ1}TMiboBK&a34`BekFthD-NC# zxL!9btLzT9+6&j}QV(+c*2yI}_1F<(J^}&An6)RMN}dM*=?Iurpbpp2FD3v4;6nhY z=eZ!Mu*(Z#QDJBODx|De0dohSxBVxw18OQeEc-E90aev!9507|Pdm@Rc@)ljkWzSe zp??Lz_-5C+rJ{GhlUH@qfcDC5t@g^LXcI6RI}PB>V<%wo@N57}mVgxa^s*@VxCXYOOS{K;^6ROZ_s--Dg`A^+y4u=hy-Ye1C0Hs9&4?C$hh7c%kDT@5GiIttyzcA%Qz zUW}t4Hf>K&zEb)}z2J`>j_%3HR%hu-8{29kv-g~W*0B`*}E&LxpNMNCzY8Xtr4$a2Z+IUOCy6;oO0De|A_Mh4V0M zD3HFZqhE=d{(q5g+&PpYH7y$}?fI*bJeW3kbp#SE08Gc7 z!wm%L%V5{=;A!hcKqV^sS0|9#E-fOEyO9ig)8qvF$E#j$0LtOzcl{O2_qtJ;l}c6? z6e!?^nV`kQfJplvLXXw8BX6?NnWAo1kE;=w@i}mIBpQ_PsaqTBBXFLE4FysP?=1Ac zMk4qYIu|AuSZyy|jN1HWw&N5_JvjNfJ{hF;~@Oy8##+QB1sd@O# z#}2}4kix!p(>Po+F#@Bt{?(2QS_16P?AVDQoeaQg zCpTG3+uj2Y!+$&aB*cmrfVAa;=OntqVF0kJc_r)|xY~mh{}=ggb-z(O!KbGzkD)X8 zfB39AKdC5%4F^*6M2*%8_%l2m1v^I2E!$I_&dSAF#GC!n40KO+1SnZ^7n(hYYZa)g z1n>X&vfc2{Ubf5U`{Ee;P7h8q#Z*M z;QhNVf}h*H$LyU?fy9Yl-giHIY36t$ItX^3$iqT%_18Jdr`L`Bgjuk{h|EUeC`_s& zCYs|!s9Nql*LyiV*RbJ0N&(saKZP9r317EX7cVc%VwA6o#R6tNGY!0Hmq6^6DZ|Neb7DjKa@2 zC5i)q_M<2UEOZK&FPWKa`L=HE=*?c%jHTJ!<;_@@+!B?XZXdFo-rYu2=6W8sv7G@^ zJ#QO4JeRN`DJg|_b@dzZ@X>Cuy1CP9@1%RI>Cb<90eaItN99U8Zi3>;JwqcZD$G(P z#PaH^w~xXne*6kwK79uKy>~tWuSN>{&#u`8uh|kT0W7=TgBAd$%%hDQ{?}_RMKJF; zZQF>V61BYx<<`6BXRIRTL=+Pu3c5bEebtt~3pufTCa?{)oNa?2;Nx$7rlx)lHbB_0 zAf@oGp8nm{&eGp2%3?U<^_duEerrCFL#^^eAT(4ZD+AkiE`WY9pkD;|M^|rwU%7F& zFQ0%)$`yyjZV!I*kwfswCyshqm%#bnOLxNi(dH`U)sG)I3?KW!lW_Ie2)uS`0&bd` zglk4ey=*E2QQ5l?xOY3y&KF^AtF*7CE4Ao&+2pHXVqk}zz}hnYYzI7om+w6nUkW)F zVPk`|qhGz!UHk^EqW3LXMce5AwP**=QBrn)DgnlLSLQNMCf=4&Qd6U3**G72wy=3w_m>RmkTr0O|HQx;X;WI<(U&00n=gr%q z&n6HhxOwJqeQ;nDczG0Ul0-768L*Pq^*I)Aw$8IaRAm4v$$6H_x;QRw#$dKu3cP90 zC|otw?5oH7|N3#b=fr}|3k|t9ZX1Drb}fkjfyzF;(uQC8_C5nr8;>@n&;6vyoMqu2 zRLJf{G2wR)9&$F;$v)6tGdyN~52Hx%yH6i5`P+Shlmn_W9xDiLIad$5S4_j_VFQH? z4N?lUNIAT$gZ~C-F>nrLr}PUj!mdVcYlPCtqh+9!^qDxbjfVkh=@*$0nCa8v|HG@c zz>PbGE9>y9H|>F+`TQe>?f(C-+X4T-E4TS)Bm#W$@ni5?kFXMxxkV=0T{~*7`JQzJ zW$r%7wRg|V!tXwH$lSjg0ZU*#j1-h)SMzSOvnTO}RvwYqhDL2DY^~zVP8%(3c#yVx zEg0dK&>gp{ZLUG@slrl6Lovbc%`GV=xN|$eDuCDRG)8f+*fIdW^OlQzc}EsI@PB{j zB#aDX@Goz&O3<#627K)Gm%`OZWl09*@cWM*hu=amfJ6WbPBt4cTjsB-x;lZ~smurq zneqTuVhg=T7nb3X#U)1_l?Qc*qg?((GBpehj4>ndp|>A4RM_~GwCFh-w_|m9tY4Tz zv0s~|J(le&ugNp`Bv3tzcT`q8MT^dl%@y!R_s_x3u{u09y$XN$;500B?Pt&4bkUfn zuCLiX;_GzZu_gE~4;+R2PAoc*WqvWWq@tPurNw=RD5cZ5Wr**oWdJCH*-~W7{+olN zkmvPS@gVGe88#F>-S8k?YR$s7$%{R^r%-=w4LVh3**n~o+ zA`_Sdx?GfEaGkJu`<{q~t&@A~*T_sk_E~}cCcS@SDa;!lq>HU-BbU}PYKraq43+8p z0;Hw~Riq$kEvSxj{2Ny5R%mEPakW&Sj1CfH*&P$;>bhwP-g@;|WqnBV|HFr-1>4nb zZCoA$Ovf@QQ%<8q8OcKn(Ljm_u3qfgb!kCRQ)2UtfhKI4wC-Fvm&zwKav!y!DCvgu zILT0;&2XtT<3ItxVp{WOa>(oM+n>Vwqzd_6`tZ$qj zdY*P{yEKRe;@A5IPT>3{O8UG8B8bOl_p8Z~?N;$%O@9(K+rOPd=XR?sfiNvGyH$RJ z1}&5(rgE(PD{r#eHByJARck4@^9L&^2AuNp=_pQ!pS@wi)ak!_`6l?*krv!>U_sbq z!O4%hpJl7qalmpVivhZDB14fRVqkqhEfhlUa2Z|Wc+7k>QC-jhCjJ)*&E^M z9_{f&X@2LfIk*w!RI&z8_%}E2fPe7+w&BQ9H=Y1OlLx82J5v}5#4Ki*NvBy<0W1DXi1iJ_RxNRXm3(nuVFT$t9>E6-`!2fjH30PdU?_`b+6Kl0^2qmumLCMvfuBXH`eT^~r(&@6vgkYX9suq<=kL@L5PAt<1mGBi z$7f3T-@g##(=0(5oe4v2aDA|E+odZTcdQ!Rx4|`Ch#N zOMiU--Fl{`g5rMlu~qo5U!V8o{zH^g-+JYE1b$V>^jsEG(ipf9DO$OC4heM~+p-BR zdCe;4h|uQ~&o8dY?mu>Mt_4fJEC>PPFn#3GWnJ1G2CVfLB#1=PUPL z$5lZwqWpgK_Br_buN{Vw!3@6h)T#lSb|0F8$it<=IookF9jp$Ktu?IXYHk^ZZLhiz zYD0}c92NMN6U(Cr(BJQXHg8~Ou77O)hyV5y0DED>gpChUT3-$pq{i+}IKhE9HoYGf zmuBGd3vWbuZO8+dsc!8pNKs!02CT*18SqO#nKa}(kCkF0f2qCy-vUwz-@mgAXdCa? zw1$sSMJung^Gx|k0@1>4dN#Cu7$&dXiXa{FZI*$qSHIasMX3j{ zth}Xz+uz!;h?H~*Hd5I5AgyB)+8yA%%$VZQ)ynDuJi7lb*tPWv*gScmi7p3KZ9>n? zdl3Y0LB;FO5v=X8rLX;N-Rjx+JeTeoYHQKzp~%V#5UK`e%C%Ve_7L)OG`<4 z66knsL57xsfgOV|e$5m#x5g{6q?lQ@(2e`qRp@=+6zF%U_Hpo}wS5V8-?0Za62ss4 zAf>>2LH5xVjreWB{=?sc#pM~;we1Qt(+r8{PEJFx*56l}UF?hd5vWL6d*1{1&Tr{} z8hrj{!HT1#(aI?uyEvtjAd}z|090-TmKL^IrnZB-2B3K{iVT;J(Js#sCs4_8^}8Kt zePI>KWd}|zTj?!zaPp>uaP@zA9c-kq@j=?{fgTtD)gncuT79Lvr)Ceq$(h5j8-coc z>H;GIaNvzPDP`>j{Bwhb+A^lwhoJo)0`_SH&0*&o&w|gNWmMg_K2^xHl5#pA28tXO zVjC8Z%K6}BO{j0J!|>H3s0?M5Et1#W16^3Y1F7eeg?Vw0_ifKqfHCJWbNx|h%r#-7 zg^llV>UKeoBch!!KQ%U!=tv2Y6 zhSn1+(0Zr^-DAit=)F6loX+N{qM5`QS<0C?3fkVbgdjZt7v6RafKnUIHTvQJX;~PV zv>YBpdnA&R)vg=B%-KNQfXXyFXuR~Nv)Y0aM-RY>BL@v&N5?k7==c==CeatZjvS}f zKliM6J*10xx?Mthx&y0+kYXNgL+7csH{=_es?Gw1=gG&*6vNJCK2CSM4F~_;!!Uec z0w(X@zTp5$;YGmioh-T928~{qaied1}DId;Sh zJS`w5>N+$s3eAx*7#JLcI{xx{%~Q0L3`V#3MK~9@wBAw|R;OD~;IVV61MQP-=$-63 zKw3AcVp8djs)7>Q$rf%hcst{(u>WTtH0`_a_NzTN*=XTKK}j7kglw?|<@hjY1S%+` zKr0>4eJtBsR2@&{Wfuyhw8LGV@>f1_5~O91WQVC_62}gixMj8>9W!WjOTC zM-3&t8vpfn`4fIb0M z3;8`dlHVl@gS4~J=p!ZD`Di|gtuU9#PDKR1vR1gm1YP)Mdv-rs0}DK zp=zCHk+u|MQAk7rjsXctg#c(s%{wA5!B7SB1xXpB$)Fi$N~+|LV$};Qngti$_(6s5 zkYXTE9>4h@9QmmqnCsntaXCypu+7(ui`r-lOg279k*#Vi5Jv$4n$M#e+$#-0i_Jp_ z*t&TnuXg;%y;6%2M6tx^_ zfNs_yLnS3!wp%c2U4=I#2_u9NmN8t=O4wH8{8V4AmRcHF(k6z8bkeE&&=Su%1WiN`7({F{{E^PaikC~UuT4?F=ICv1GT zC@rTWQ&6`I08In2|5GcVhY+AcH4E0sI-09$kgXJG6)44bb{Ld_$|)tR0U)`squ^43 z@e-8wrmfiY6W|`OsKVwBCB$4oYX@p9YoLIoOXgtZ!X;?!SoS$ies3#mzGo-ot%hO! znRH%=^KuX;EB;0ftiKcW`4%=lyGNhBrq?DqcF@+c1sZqZGTIBFP7gt0LdwJh$Wn@{wNQYB7=WQ{lxRlk zAUGFb<$^_X&0*}ZDcE%14rt5|x{shyowG=WHA#@ZHd53U(|yD01DnB zbvpL$)(s@__*u9J<|Ffd`~({IH?JZ~UxCgfdeZ6vm{})-iHEnq*rSuEAPpMZsuoqT z;zR&CPq*%P%dCRB>~~)U8!fyT?4(+)wv`@fk_!hx7<*n^B;a>^{Ab`0tVA^%4y?s+ zjv!SQu;`Bm%&wSlsaMfR&?dkVr6r&!17hf-x3;WcaCc9gYt~DOPPi;<_!~yU{%8-n z`0I^z&`X4zL4cCO;ISbXe`FIhpB}-w)QmTZCZ5?cs&sZ%ew`co9TQLg)Dy_&(ZxGE zq+x@F7sDzjrD$dTAZqcWLy*la#}v-VjnW`5S+S8F(F0U(*@4zbQH!PpDy>{HF_2*O zh{}$09`1D&1SnU@Kj^@ozBc}#sOy_umc7(+1Vz9ux3ja4>0q_p~jT2r3l+?+B%Pr7j z!%&P2q9U}~FPlb6l@0)c*dU+~to0T5JV&rLEMQ3#Ah2p-S=J5oI?)fFV-rvY&R1&4 zz8f%jvIzqxnowVAm@kiLdd*qe#m|}4wji+eU=nlvfr!nV<~9AA!*JsD2VvWtdthJ# zE_kM}@wI!lKcZ|(%k=cnfH61b3vCf6{FNFwYv{&@4nbRImaR}0&C!CDFKSO2&8r@R zCbE@bkxCMf?Mry%_35+NL)Ikv!404y}%I-yY@*h0}OP9?U zh3n!!dN~ZtH+|mB?jQZRyI~`R4bATN-1?P?Rz8QSH>oc10B5w86j^*ZI%xd%CHn32 zd1U|X@Y03!v6&K&ZVng0&}FFKrI-e1$!K`PUy*s@SVh_C%9B zRFOi}LZf}BM0@9;rK(d+G}QNu-=5wqt&-(}P#{1i)PHaGF$l?g@<_tf-p~~Q36ig; z(x-zF*Ilj|jf9cdDqA*sFn8@Kn0>`bWb=jf-`}+xroOeq%FHe`mray=>EhX!7MPst zaM_=K<>n$UKaOD8W7uVu+0V(8ObTNP=Kc0=B~Udd{0>Adj zCLi$qIS`>Ii6y0l2A~n2x4i+w-HQ=N$^5g_+ z@E4-|+4N$H$i`pJUwslT`{a!;EigG30a^Q=d;mUdstjT9;i+C?tqcQ$>W9&EI5 z-h-6n&a9SwQ0a0nSAT=)rBq;qjj{Y+C?V4 zO|}~dsQF@PT%W272`dkDREe>+ zkzv^M?Hy+QC@syCB8OQC1^imGo6MO1@tdE7sqdctE79j$IIlr^`Ja95gQ)uKMSJ3e zUuk5XIHPpw1i1p;jA+EqmfBHz#RG4XfY)#l?6p}$;XJu0QC1z{MJDvKU$i5Tk|;oc z%~$QY77CS;*=oM+=$_W{%Cl_-akSdgn~%_QHCz}!erMAvbSApc-qMQNLyJpB_f5hu zx=9I~-bKn{L!Z3BuXAgdz3wQ?Tz?F9eEBkX>hIk5!R;Ts^}w+k-gy8vKsYZ!dfBaC zxmiK&7VO-cEn5U_y*);bv+u6ea6pGFD2=BHU81^;UZ-wwQtHTd6I3EeS@Q*Y)ue0u z^d&7aA)h@0R@aHeDzl8QOL0rLI;yJ;STe*ETO%rUAeG?%4*CGz~~Pq(1$;6JXOX)V9BFp>xqcK_FA?h5SypXA-3Ofi81bX zM^@i~^}TM#eV_SHM_>K!kHUE#&MS~!g>q+6)=?=^H=9juwPLZ1p=uUobcb6|){7v| z(Q-XnS2{KXYIfNuOEP!?Hj@9us~_N2IH59SZZ{oP@h8|KKk#6P~L1z5BgP4;5H=lwo^F?g<>Tq2ZaMa^N>0Bn?qIZdEeh@o(0<>2wG*M3D?V*o>G*R#$ zUJd?r3QWP4TA;^A%jg*}q|00`RJEZB)MK=Pse5opb^ z-rtVcZ-06~l0QFRLI3?i1GVyo0cT@o(3q0^*5hI!OeX8jf6Vt9Jgv4$owz>ymdA~v zwdYgU!ob{Mn6Vb*M0WR}`16UK-@f%`EbhbSqX?kj1rAsJ@z>v{YuQH-3=`&iMF5V- zS+-6!EJj+$qFRyrkKK!%u@%eWC=uF1iS5&%<#R1ZQJEFRe7E9B`GqE6 zKcAyB|BU0Ck4}`zKa0PLmzjmqhu--ZEMGVe+rD~{Szu!J-pBa+-}Vi(6ikEnkg>FF z*~%wS967JR`htPA z23ny{TkRP8DD57Caw==SG(aAF?r8S%1P6-b8ShpSzziP5Aoga;qHD3RL@YeX+(Hw1 z-)|;S*!cb^x7p#mBoJL376Ewm6hH5cbl}k2AA{AcE3oZr7nx;x0oWOwc=cm2bM1a8 znjMhtTf1qh(Z&ua6ak(-Peg#{9i&%%{H{GPnBRh@@3l%VZ{NXN7!oTj&|tl2*t?{f z3``r%x(+*|D?&qdO+vdVxkD)!`>5FJ#_tp&b`vorB$U$1ZB8g~&oX`{z-ZHC$&Mw; z1JZwgiO+eP9tS)~x7iU?)#jDi1=Tu>0nMN+Q~)U6Cy&yRpWJU2nr!|0g@%f9Ubf5( z7B4*p-N99uzw8Js?>YsMXktDZz#R<-pr$``wY$;ad6lmi;Tw z!f9e3NB{l&HP+#|^&1z!R-~dJKC8nN_tYy7zyMkdjP(w=)$BC~U}ftZ^o*ZEZG=BTVu35|+$)pqnl~WR=Ysjo1*?7dh15iE1ORoLKWd5tlnX%nU zzy=wVDXIHfo?!KKBm=+k-(Ppa`R{9R!EINdEp@_EKBbdqbB!s2CfF!zd+W)&0#GVt&G;-zL^ zd=>-Dw@P^;5EXsxVW@ut^BF$D_vss- zKY8_>fRtGKsLF0Bf!I6aEm*tFj!8%{Tia(*@mT^kJF`z*CrVQNsV0nkVKZd&HJ63r zM{w*v97JP!+wA)!(})>ifri?5IW~yqq}>U=C7WH`Ik-m#U=H{25kSUi(&YwG0)yJ_wCV? znm+N~@4&YIybHQT3seKeri%wa)w0ko{1L&JyW$WmB3N16cbmKfc@>o_Z2J3;z51PZ zz&Q?Q9i*@L_=C4-U3>@|HW8dXo_-on(dwoJ^sp@0ZyU*Kq^2SaLw_>`&HKh}EETG4 zSFI~J_J2HydFIAW>URuD*}gDa>A@QM?HlGLJD*#JJWqB-6upnsZ=$jm04)`$QdMg4 zRoZQbl-JxV zj>FQ0b1?BoQ_w3~u21p#_6B5=^`JaDOG$xXJ^q?U&_%lvTLGv?%&Z04Aovr-IhI$? z8c47IuMgf_DE)Cf-2>j7WT~e81dTSf&gI=F(cRb+g$Ih~Wj{J1dmsJGR-~eXYgW0~ zRKTeZK4HH;vbgMAqJl+>{C&QTT0kR5Hd!<8+{<8q>VEl(kWr;5P|9N#0n-k2mc$8^ zGrG@d3i;fEtU&iEZ4R-rYuUIp4aWX(JNne?kuS*m zQ4sXSR1ao;aTc*N4bVh3-l#)1>qG|~=V!_+wWknlf-+!6R#%MW2CQV9k2;5dNsCKp zLkQX+g5I%jrLt*CAq5zdc;22W**#s;m&(UzgNQC#HagHjKYnjGUQ$Os{2^rLqx;Z@ ze`GYa07PJ?^W4j@ERUY}v4f~w9fNCr{cpjk$%Bv`E|bODSjKoAYTF0Bhyy%1UBAs< z^%N{z@ig>mJ*W8Uc;^(*2NZ(!=^NkvNjQt)S%dU?lslm_fUI4A$mZm|MV`Hv$l6zS zOhb#z8-4=zQ#l{-JfEu@fCl-KJ3;wbTx=>~76DpJp*%S=XOy0DV$^)gNiD4gaO$`W zmCBqtuxDefrHvtm5v*>JNo9x8pqWh}tgqgD{(Chu76ba~a%3G4Af*i=XkiI?rD#D3 zUDK{5#ZYfepT5~3;?RiE#A$;F+Q*53ofWYG-z!;OVG3V!UbuW34!-AM)cUW1P2brG zPrU!z(EM@(nhy?#o8pcOFnt)zdzT3Hi;NKMVmtm zLSuH&Y^@{Z)~t-#dP+%yTb0Fz3`LqYJn?hig|SCB!-cnAW0j{5d>dA_&%@T=+79(2 z19sx7Kn(K92Gq7RfgKtuu^$shAXC-TZ@eG6!>f{#fLD=~lUKX?!^d9t+~n0~1kxKn zvhU`iM)pp)&O%f03kTND7~0`3IfAatZlqy{NdC+OZ=}aC^d(f1?j4Klr)hO(e{l{v zmv_RQnK|Eiw9O8=MKdxa z&~T=Ks4n^K?FJDwvvWypIX63(DD>rf7iVGR+eq^-*YM#B&}QCCrHpCnz|THt6!Ob{ z?*?ehG)=w)Qu0jYGd0-pA9jLj<$gev8_sn7_5Gn z!|T{usl7*D{q_&TvkYeh((6C+$evu)tlSAY5I@1%dxIUAzx-(fQf{b%@OGsSI+6R_ zv>SL}1cq#PVYd<;zKzxVvP4hQE6A_!0Lg;<%r!&D(Y>V z8X}p@w4{WD@+z+&Wsb@aU}K|xP?Sg%$l7*taQq;r#*0IwT~kubJ_Siw0Mdmf^m_AC z?|jU(g}y#Abac$8A$Ct7r7(Ku7);zY1wk*+etqh|MdP5TFP#lJoxoN>wbl*->h#N> zj1gtVPBVu^c~w0td3D{Tde?ts|3s$C4`M?}nC@j8V0Y(t0wV7Jn|MICIje6ipg;$J_Ip6f)#W41R zoiP21Cy|pLwN#-5xvkG0DD)?G-gDdDvea*UCL+L^n?ts)IvAR9>zD$A+LLE$|E_y)`}p>|ZruZC5c)uR{oef(ul}_IAJ25{cae-w z%9T63fTGNLaO(OeVE(eFjRr5tqmIWRnsI*bA{94s@Sf3>OZ25)eQg`60=;){89C2s zunS6N5va7OE*kCW>m$YJfDr?X6)v>#3qR5zu8s-znm~C(zOUsj|Hu zlu=o_Z$3({G;{rNWaAIO(xtOzd!0)^aUFV~#(kb%f52aB$6}QC@@wQ~5do(3ueaD1 zuTTYEBgsix_kr0_xb!oxhwWd#7U~OjjX<2xaF+MwD*Nuvd;aVeI8EpSX?-BO1%dfK z`g)69&7=C{tW&St2knW_P|2RXuq-oGBA$+jgfTU#V|7Pm`)4!X>0I80%22QQyyUl* z%);mSmi@2;T@KZuH#KNpXNC$&ZD63|z7!ctZX9iOYBz}p1Xq$bm39h1M0u;YkJh@H zqC;597&;UIw`&m&y>lO&eElIqNk^WTgiC+#70^JSYA1+z@j}x#oM!vVESn|vjazk- zKBJc#%Rqos(vCiADY(GI6T9Hz+kXVMeD`u2mu31;%miNT-F45O?Z@AHVT};Uq&NQR z({ESk(gYB@UhoWY6(APh8Et`ILI>cL8{Zw=k$ofX8YpDC+Q9+aOy59}z_HEVR0(Sa zdgtCPFo|BH;Ia^;d8-S>q+JbFOwd|W`ua#0jr3(u>WpU9=QgkhXV8wQq_3jm4jRJt zI*Dv4Een;wEveygg8_TP5#%p@t{#48Q?MLeF>mvkKyUR1ZF$!%hIz6RuI_i80 zws_dW9r*zV{|O%MORzGT%o*r_wAop9w>f^U91sE^+NY%HCO{ik~jaTz-6pgC2pISp_0Ml zgq~8S&+$(-my7rSQnRvgVy&_&(AP(@?g~_qs>ssN>OpO#aEnap_8lc!96g-dMJ7w7 zc~x1hCV=!EDY&gHDxsYAM%J&TyF4<_5|w{osHBoy$v&nfdCOPKqe*EQR=3H;B^gXS z=oXi(*6l(RQB;=j1ZqEh*dbM#eEgR3qDu%ak8Ua6QmvlG7Sw@M*)51vUtVJew?p&P zI2?S--Hs!ta5q4C-*7v-8NPe#4FpsV((B*x-HFbLmGL?%8TK`I25J~ADzkZX3Rbqv zLPR^2U};IkqhS(2mTt}f>9}K+8_aB_ze}P(pKcsPD|@T6W(}h5La^46)t5uL`5C`` zgTx9)FUZBYLZG!id$Tf1guRv7ybD3^%3*i+P^`> z_(NM@^1;mrteQ36i;N6~R)LSO)Yu(gg=07GhqZ#L?BnpNUbq%w9zY+LlmscFrb6VY zFAl-BZ(ak3e&X8@6EcT8o5!A^75EU6(!Cy}9q8^+txT=%pM$|Y6P1Hae?|{&HU8VV z%MOPsc$SucGD@5R*)@N#=|{xamlFJAfkC>B)CFZp(};VYxr|u@l4?k{QZYutw3+G4m>dcQd9|+ z3p~q(i`n;PeDv+qDR@=PeO!X(^n@8-r64HYY=d`^>nDfNJ}*Fu&7Pp=-RTw-iyau) zISMuU!m(X}YzuP*Ogwr4y7C6?>jt!fyN`XvA*PJt9<65D)~$>iu5769TOXvxyhEEq zpp8^l$p_jxO;nP#>3E`?r+U`B#vgKUKNHpLW`e&_PDsDft~#O}OlUv+Lb&Uo{46jc*6l` zZC`s&(!mFskysFTgUwLYa#%YsrA$Y^qK@KGXJkbTuLP^|4ayd36F0nb-y3RG1(uxx zS_kKlEF)NVpbfK;86`kcx{;^0!pNa5#=Ee9{@Y@xBQXX1%_M+GFz9PwZ+jPH!Z6{a zbcZwVD+ADa6WZ*WRs7Ng>`Xn{G(e4nX-Dq;Yb78jOxQKqZ1m;6*90?GK-A*vBPD@O zEN`WiOuA|FcrITcp@k*%fd|?kqA@ps;2bu__-JjYQr@o1u3InPa-%?q94^ojy%Rt7 z)Vk%5eqj^>ACrDJS4Ok$i;%?yN-0^ks3Yg&J$eDm^GM*7X5IrnCn+KgeS1o0nZCZy zE$Z4%WLI^kS9E831qQZ`LSsu)sexKVRjEL7g$*6uWL`H|-W|4P?Uzx*rnOp#2gRNa z+V@K9*9H)l1;P4hfKae+et7^^etH$w3%Y@IM7Jn?)WNEuQZnLt2=g#&-jc#|hmq+C z*?Ugs2kg;MO;6GwI?sEV0V92Vgf@quV`ILKB1he{T`sdzZgbv9 zuG7wisv#0(e2L7ebm;rzKl&7${L%FRI&{wvIzAkwbd#9_<&x8vt#jwQUn5wB%R$zN z8{tVTK3LI+96@vF2(nRvtX@J8)rRlh1dYQ@yj@-#Yxg!w6%-sR#&%9DLJz6az_u|U z#mZA3myX|a_P~+^SnP`IyN8hv`W^OzR>xFzehY_Tr+`kd(9boHYgF-ZdwR?!u zXb^UA2B@`kl=U7=U-zWJNU*cVray%fcKGf|XntpsS>L#CV-I=md?t5wWjC!3`C{MIXzzm1Ij+1= z2?-K^>e#g_o4j_|;SZkr!&<2g5M=2fJbDJG9ehkQY299fZNTF7#wC zh`GxNv?@D2z4GKV)Tf5^;EqwH8o3)3A+H{?@+v7-ODF;q&34?mNg#Ibsi~52w79l6 zvuO*|xqo#AA16RIRidZKtb|(WB{H($kP%_7m;fF*f;&htB56~k%xDeKH%$d!p;f_t zWtJ!-$d&O#k!G!^T5b}|+;ALD-E_pbM^6_>4jp`OkVyc^_8@&_Iey9R83^C{z9n3H(&9jA0J zCtfp}iFKurysT&CSGyjyJ++Fm=V4gcwRlEdG4h2Gr!0k@j`?YOy)-ggq~ zNUIh?b3c`}9?V|zlp$1W$_pqqHSa~U+V{qi8U}4245@H0Qu+}}^1`#3x>#!N2&ZeloqM)8!7 zmx(;X@<%5&$$EW$0~w}=ELaWu?3A{PmGWSM z04V?gF23^MVUP)GqxwLc#PR84a4P{wTSg}2eTcwG?$J{>9fgxWb{Hpq>x`ORJ6wZJ z|7i*u`x@XGu3uXK-l{?XZSI*eW9TPNRr?{H)P^u_T7Y9e`VcJdm_{Nm_f!b+>PH4) z^ww>5Uqy+_aQZ<3;lmaC?VHqx9slMw4oS)6h8Wb6$v$cZ5jC`*Y(xGFj1{M6@0?$P)Hp<9=i{w~s=oawv7JInY`+zH34dGRD3m#3h1WWZ5zr4-^m``c)i zDcKYI9-+4_7@1~Z+qkc&2dvXHx+t&C8+r8<=jGWD$)?TUA9wEs32btMRNNQ}L{VEm z-GTN^YpgvzO`t_4W>bhI>;4R{en6nI4t(bG-V8{V#RMp$y`LO_P49?zpTZlS%6`k9 z7+=B7; zvU0=bC~sLw3$s8~qD=45$`#J8VH;tNIe_->av3Z!SZ(<1sy?xaM2`=OBTt==!N=$dmh!9Z3^vZ#do)u=F4+b-dabmxLPvH~JW|7HV^`y1bs{F&MhE_C1Zoe& zFTTsK*nwa%zL)SuxmiDFu*zT-nUF}(K~D^Qfn>$`?7QTv&->YXa!sZ-vt1+l?a7Z% z*JhE)C|arUSoQUhXA&5k^~dX;?Nab|VXegaO?#hSw5x9!>a$*G2BZKiUDFnw=B?n7 zmd~3Bj?u=ksrk_c41RMIodtC;i-AKu!Uf~h6y!KCfV4gyxc}B`E;cdYG~ueZ-t|6Y z|F>Ws7s>l9<$7-g6V<-e1mr6$z2Gr0h4wiV0f?aoH zX@2bFhyV&IW^MMS@y9oIrRLtFQlt{ts= zwjC(D)yX0aQ0xW@*KzptMd#*w@ zjdI=t4f7+G&IT7X+`T(mfm*vgu!~?qhF{Gj&lF`pNkO+Y6?G~)XdrfD!cSF3) z3M})6dE;=bR7&~iAIhuEt>aLi9Pz$sPxM_Ukh$vA4f_zZ9X|nSHGlo{a?cqV)xPM5|{#ZVet)1^ouOy{d1mQWg zf%ZiI@co~?Ci(!{GXg0GBd-?f<0uB)Y^tl>{vh0IV1Zj{4Upz4H=FXI28>*|&B(1% zp#rhT)Y7h#uyEN?WA5ONwO}29+Cz(Z8OVo$_ki(LJ1H(C<}KeUy~;ccP8v%plBBm9eSBe3pLSVK(eE)4X^lcsatU$`a%B#xAt3vZv6#x1b`K zH7!p0(S=IV8^G+!MUeJ(mBwN~l-4*7+}o>s@0kQzdq5cz5Obu68UI?AS{f?J?Se`P z$~407iVYQmNQ<5a5!_n_Am1_QmfFP{dSnN6_h{c(+5xdWwIDLpcCok{54D^bajSNy z?rW)eDHCYrM`y^=v&{{tZAFn_ zyb<}@nM%riofw>Cd{~`aFmCHIE5aOBVi_G8NNSHYAb+G`WKh>%TAC#@rGhz!>qv33 z00u#240|NXbU{0=xxI4dBfAmr8eB}F(N{DW=mfynSR*;H0gBwJ2(v3YyqtRPvww5Y}saYNVtx)SU7;B^^1Tk-HQFWCDaeR zn8L&4&1h}{M6bOh#>BLnJQYPnDBD7t-=Zgn-g?cfyH)YtQ<@hni+g3DqO=>{%GOyZ z8~jNY<|g1LOTNE`@;`!eIj(^?*LI?T3ZA5@KvcDyM>r#E?|iI^wO56+22u_NtYvm9 zR{DBZgcMKgNif_&>__t>=0kmS2!^(ALV2|oa*-4k16cs*H5S_0&$Bc!y7U$041L$x z6F7(`k)@totFxg(o{FEU^&<77HKKo&teNu_T>>JzsubB2_QeQ_3kc49q7HrbOtA&O%RuEcJCOr(Jy|D5;XOAD97)CnNs>RQp!-W_ z3eM0w=O|qDwtL=-neW9K?}=!P0_m~xUe|ys+dyf;pui$P-l&6jt$G|<5n$=U6R>o_ z3D5eS@gbO5+`t*R6~SsKECMz=h48;2yG8M^mx*~QRxA7CjipyK%m>}Zmw~~_L*R?0w`0FsGZfUb3a+L099;)7 z&gSCR%nCwdC@adHc;~}s!rIsFw{sY-ddppVvrPRW7BwkkE6rVF2iy5=EjzTc(AO^W zGnH263~m~S=G3_3VDZeSAANsl@#3RqB~AdV%S?y_2LJ5UqJIchHIKu1ihg)bpq*Cc z^EvBvQ)-`NRvA%O9~UYVA@`R)TTXx+M=*^e#iut_$LN>|_bOC?lV43yP^GQQwX*c3 zLE1TlRwx0)lUzA)s(m;a9?zZJDW@nv)s*emJ#3FVk#0YpAvmx7Bs_<3&Ou7Sn5;^o zs@Z!@p$Uf<)zQk6KL)Qf4BH1;qpq7LNNV5RioB&`^nZ>&1RpyS%W63te@;ApST(y9J*Kke3BkfnChOH81fQcZ? zhE)al((``9dp{_l51d3l=|c?Ni6yfj!~;|5Xr&TO%(y(&B}Amw1es=k7a+aqS9B|fTO9+Osrphbq)F$O2bpt)tz%d37Z zfFRbichx+-a&6>Q0ROEl0bB+r1Jm9QgRW9QGcY{x!LL*|sRf99-swFVS5BZvG!b=h zz&jmCBl#37Mjr?^N>ONZn9Ot!A(TCs8BQVt^Kx+AVQz?V@Y_K8K~pTA-G&k`$(;w_ zEQRM4q#W43iWKW2QwinVV_JLaY47(@T=&dZ+aw^0+T1*4!RiU6H_#dv>%yL+(AqiM zPdz;_0V3ZuKtF|ogjxylK?1Lj>WREq%m^Y#yy89vDL9Q>Qbw`dPgj83F`{Ci14Xmz z`oVUd@Sa zC!%bpZXs~Lhow)K$^*~!X6Q&Joe=qw`9#O(cjQ3cqO&J=t{2W5ka7s?0T`@;wFDVR z0G8u$6s=g{A_NSftlAhKhnfLvN>w!~R9!0qY@3PX&Xl#Q3fAvEIaMrrJ*rzpT|xB& zQwv+CXZwPZLjS5Ho3$0PY4cz>P(Zn_wBjVNxT&^jQX2mdyl+ zBj45DdIvV^#Sa$_dnlq=Xzm7fs}#~ z0eXPS6@eAl_%FOu;l)4(X^0n#1q73v?5mp)tYc#y1fD`MSkYTGchw>D>NTWtXdm?h z=#xnk`LiFCG1aAeH3VmEWiY(M$e?5fLF;Odcc6E0RTCBUW;<>=x6-ri{srJZBRi4j zP~k$>o_+L%WbIX9!-158ak2JbFSg*l(QX)h(m*P++Ix!0jEhTPo!ET=kW+va5+&CI zU^M!m#nJ_*(9PHlpaTIg$->ROtkSF`OOdEHMv17|1Ir4X%sA-mmoEMsE{w$G%-aM0x&z5G!}-SwlpYr z#tqYpCQMO6_uw*gkBiTCdySngM@ajs$?zTov61h!iU_C)MYN%m-u5 z);(!ibnKPTIlcnDV=GYhbV3Ggj@%aOV-KudODmPTNpfdVW*_?gpWpCjumQr02BZ|O z`Y99vYTE1%Ak8RJ42bVr%9B}n&eJ4*lGjLH-2x=9hIfw~a2%DTg&efiVSz45>lt$B zk;)W6h3tt+(aHccPmVjSUHb{4#j#lG!0MB8P_~OiRp;u1Ul8I=Z+>K#V+!`q` zo|9{{7bm@^PM>~})KizS;-rcU2IfYL+*w;`IKTs>)Vf?na2{Gfkh-rVvl1x%>@N5f zAZ!89v8BT;tNTQuvJXG{Jh?K@W_VG8lmm+Z*vLIz@dXIT0$}f7Sj57Tf$q<*IfnA; zac?S1giUwJ2N(D0%LDTk|m`mXn)GO`zhyvjlOzq(I$jUq87 zvmAydreGMs>Xj*G(UKxUuncI3pGmi@SI+R*K7rKu*1oFu;y}I^ zbo64Nu%S~7-5ecPB(K)$jeau{K;(Aqww9qaI|rSm@Eug|H3J7f$GYvVAbQPqIDP5< zQtJ;r`sc5?6JCVjhZdw9u6)bgv?TCDVSfNe!c-)RMzSj;Hdph+QQKN$K-C8Z&5A2y z4IuCpJ?NoARCYVa+R@fomeEQrzxc!ZMU~H63GtE$>K^7t4{pJ77&c$k+PK<(F4`>cOz-jpGm+*e{@m}ICDDoj>EShUw#{1r>#+=2~zTLrn6qea0XQSL1umK4f}G(QgN zvV8xepL^XM@Iw|}0_i&8s<+&A3--|a5OfzQDVDM-6)&^~UY}{7xrMCY9_!ez?hWyY z`_`Hev@?5}7_?cyfBOFIuiFbhq~Rryo+gmIS{CIknRc&SE3Z*khg5bAdYJbNK`_%+ z=iyya`aiX51Ly4$y5}pr1ky7MB(LgPc`E|TY-#Bh10<`EAht~%wDe)j*bOY#n9|gcKc@2Jdkl;K}X!T2v zf9|!n!Arr1mq7X~1IepoU)A&-R-IB-8^pp7uUvWR$%>M(7?kr`=O10IHC{BX%(EF@ z0_k%Ik$shdwDo&Cm2@SE*RX>{;FFNUhkuw%O3yUB1k$q*%zA(xZ4sodOL|ne2Kc=| zcMfnTKo8~4AG-ry3hRcKKzbI#Rd4;~8<1$e6Oniw%BI)jx%ni!abK1&S7!Q-T*3XV hZ0M6OvGp?#{~zt)|9PhKiSPgb002ovPDHLkV1hyyDF*-m literal 0 HcmV?d00001 diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/images/minswap-dex.png b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/images/minswap-dex.png new file mode 100644 index 0000000000000000000000000000000000000000..d7f65d1a86a4d3ba8989c53dd67bee052e8d5e40 GIT binary patch literal 1217 zcmV;y1U~zTP))ml!2N1+U|3w7@+sg+;)ChU-z7|=bUxc zUVEPbSi%w(g1HTBj12Dq#!OwqIM_*^auD@3q`UYIW6^X{~Xr+mGiZ%z+ z#F$UQ?eA6;pM{%=9!6mMQya70hc<br&y z%n=YU88m;{)1!b3WF#?qaq>mZ*qZrsh_GP+0a8kmp?UrsLoEE;$Sa3zNxa=N6lAhg zw`jVTL}_{YC`w}RX6K)U9O3&LnN0w~Wg=;cfvjt*zy;)Vi{7NXo32!l8sQ}4e4nJv zb{JgQUb1TBXhZkN19a#LTFa$?ell(=1LSdqjO}Z#2z>z=kj@iN&9Nlc?@UX;3S^*oeW3V!kc>|YW&C8$&l`S^ zz6=>)tHj?=czPlsPAR6Y`>JEC-K2!9!fswjtdsfv2bqzv zg%_kUhKr-aq=v`(?mgB9eaC(jZTtyvfJ2`!a_#JLB{l|;)~{hhO)a2l!iDG{%uZc{ zM_+l1#%RUp$s`Q@dJ;PNdo48r!4>dObsh1=s+XvZe^pkdxg)`up6YoEad+u@c zF!1wnFbxBOYwm;4#?2Oip{@=%f9{NR=$02=gRA2)OErI9kPPY-)#F`h=I7Hk6Rt?0 z0Tax@MuFg6P`+!=P4lK{Ks53TJpA~RmP$T3efqftg8w8UG1xbV;EdQjmNFN zP_$_q;C(5t^X@GR|#MHlVrn4Q|KRgJd zr+>4$~>Uw5mt)c)*jh3}!XsxsSG%e0xhInmUJqs+XVUz}DKWtFtp; zs4Ap`P{A7zZygRcR~Fyz6zBMMG;J%noY3`Z`i$AF%c2i3=SP^4LS8Z_VNB;nHKZd8 z8Su^@(bY`H_et5>#fOS2uv#2j8O!a3x|sg{b; fzhDVV$O8WXlgG2rG8gxO00000NkvXXu0mjfrYb;0 literal 0 HcmV?d00001 diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/components/Chip.js b/packages/yoroi-extension/app/UI/features/portfolio/common/components/Chip.js index cd86c61530..43bf8b1c41 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/components/Chip.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/components/Chip.js @@ -10,6 +10,7 @@ export const Chip = props => { label={props.label} {...props} sx={{ + maxWidth: 'fit-content', backgroundColor: props.active ? theme.palette.ds.secondary_c100 : theme.palette.ds.sys_magenta_c100, diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.js b/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.js index 243d2331b8..1ebb4ae453 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.js @@ -40,12 +40,16 @@ class PortfolioMenu extends Component { const isProduction = environmnent.isProduction(); const portfolioOptions: Array = [ { - label: `${intl.formatMessage(portfolioMenuMessages.wallet)} (${mockData.tokenList.length})`, + label: `${intl.formatMessage(portfolioMenuMessages.wallet)} (${ + mockData.wallet.tokenList.length + })`, route: ROUTES.PORTFOLIO.ROOT, className: 'wallet', }, { - label: `${intl.formatMessage(portfolioMenuMessages.dapps)} (10)`, + label: `${intl.formatMessage(portfolioMenuMessages.dapps)} (${ + mockData.dapps.liquidityList.length + mockData.dapps.orderList.length + })`, route: ROUTES.PORTFOLIO.DAPPS, className: 'dapps', }, diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js index 827c112987..b702a1d244 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js @@ -3,6 +3,26 @@ import { defineMessages } from 'react-intl'; export const messages = Object.freeze( defineMessages({ + dapps: { + id: 'portfolio.tooltip.dapps', + defaultMessage: '!!!DApps', + }, + soonAvailable: { + id: 'portfolio.common.soonAvailable', + defaultMessage: '!!!Soon available', + }, + dex: { + id: 'portfolio.common.dex', + defaultMessage: '!!!DEX', + }, + totalValue: { + id: 'portfolio.common.totalValue', + defaultMessage: '!!!Total value', + }, + noResultsForThisSearch: { + id: 'portfolio.common.noResultsForThisSearch', + defaultMessage: '!!!No results for this search', + }, search: { id: 'portfolio.main.search.text', defaultMessage: '!!!Search by asset name or ID', @@ -39,6 +59,18 @@ export const messages = Object.freeze( id: 'portfolio.button.receive', defaultMessage: '!!!Receive', }, + liquidityPool: { + id: 'portfolio.button.liquidityPool', + defaultMessage: '!!!Liquidity pool', + }, + openOrders: { + id: 'portfolio.button.openOrders', + defaultMessage: '!!!Open orders', + }, + lendAndBorrow: { + id: 'portfolio.button.lendAndBorrow', + defaultMessage: '!!!Lend & Borrow', + }, balance: { id: 'portfolio.tokenInfo.balance', defaultMessage: '!!!balance', @@ -116,19 +148,19 @@ export const messages = Object.freeze( defaultMessage: '!!!All time low', }, name: { - id: 'portfolio.statsTable.headerText.name', + id: 'portfolio.statsTable.header.name', defaultMessage: '!!!Name', }, price: { - id: 'portfolio.statsTable.headerText.price', + id: 'portfolio.statsTable.header.price', defaultMessage: '!!!Price', }, portfolio: { - id: 'portfolio.statsTable.headerText.portfolio', + id: 'portfolio.statsTable.header.portfolio', defaultMessage: '!!!Portfolio', }, totalAmount: { - id: 'portfolio.statsTable.headerText.totalAmount', + id: 'portfolio.statsTable.header.totalAmount', defaultMessage: '!!!Total amount', }, transactionHistory: { @@ -136,19 +168,19 @@ export const messages = Object.freeze( defaultMessage: '!!!Transaction history', }, transactionType: { - id: 'portfolio.transactionTable.headerText.transactionType', + id: 'portfolio.transactionTable.header.transactionType', defaultMessage: '!!!Transaction type', }, status: { - id: 'portfolio.transactionTable.headerText.status', + id: 'portfolio.transactionTable.header.status', defaultMessage: '!!!Status', }, fee: { - id: 'portfolio.transactionTable.headerText.fee', + id: 'portfolio.transactionTable.header.fee', defaultMessage: '!!!Fee', }, amount: { - id: 'portfolio.transactionTable.headerText.amount', + id: 'portfolio.transactionTable.header.amount', defaultMessage: '!!!Amount', }, today: { @@ -160,23 +192,23 @@ export const messages = Object.freeze( defaultMessage: '!!!Amount', }, sent: { - id: 'portfolio.transactionTable.historyLabel.sent', + id: 'portfolio.transactionTable.label.sent', defaultMessage: '!!!Sent', }, received: { - id: 'portfolio.transactionTable.historyLabel.received', + id: 'portfolio.transactionTable.label.received', defaultMessage: '!!!Received', }, transactionError: { - id: 'portfolio.transactionTable.historyLabel.transactionError', + id: 'portfolio.transactionTable.label.transactionError', defaultMessage: '!!!Transaction error', }, rewardWithdraw: { - id: 'portfolio.transactionTable.historyLabel.rewardWithdraw', + id: 'portfolio.transactionTable.label.rewardWithdraw', defaultMessage: '!!!Reward withdrawn', }, stakeDelegate: { - id: 'portfolio.transactionTable.historyLabel.stakeDelegate', + id: 'portfolio.transactionTable.label.stakeDelegate', defaultMessage: '!!!Stake delegated', }, low: { @@ -195,11 +227,51 @@ export const messages = Object.freeze( id: 'portfolio.transactionTable.amount.assets', defaultMessage: '!!!assets', }, + tokenPair: { + id: 'portfolio.liquidityTable.header.tokenPair', + defaultMessage: '!!!Token pair', + }, + + firstTokenValue: { + id: 'portfolio.liquidityTable.header.firstTokenValue', + defaultMessage: '!!!Token value 1', + }, + secondTokenValue: { + id: 'portfolio.liquidityTable.header.secondTokenValue', + defaultMessage: '!!!Token value 2', + }, + pnl: { + id: 'portfolio.liquidityTable.header.pnl', + defaultMessage: '!!!PNL', + }, + lpTokens: { + id: 'portfolio.liquidityTable.header.lpTokens', + defaultMessage: '!!!LP tokens', + }, + pair: { + id: 'portfolio.orderTable.header.pair', + defaultMessage: '!!!Pair (From / To)', + }, + assetPrice: { + id: 'portfolio.orderTable.header.assetPrice', + defaultMessage: '!!!Asset price', + }, + assetAmount: { + id: 'portfolio.orderTable.header.assetAmount', + defaultMessage: '!!!Asset amount', + }, + transactionId: { + id: 'portfolio.orderTable.header.transactionId', + defaultMessage: '!!!Transaction ID', + }, }) ); export const getStrings = intl => { return React.useRef({ + dapps: intl.formatMessage(messages.dapps), + soonAvailable: intl.formatMessage(messages.soonAvailable), + noResultsForThisSearch: intl.formatMessage(messages.noResultsForThisSearch), search: intl.formatMessage(messages.search), balancePerformance: intl.formatMessage(messages.balancePerformance), balanceChange: intl.formatMessage(messages.balanceChange), @@ -209,6 +281,9 @@ export const getStrings = intl => { swap: intl.formatMessage(messages.swap), send: intl.formatMessage(messages.send), receive: intl.formatMessage(messages.receive), + liquidityPool: intl.formatMessage(messages.liquidityPool), + openOrders: intl.formatMessage(messages.openOrders), + lendAndBorrow: intl.formatMessage(messages.lendAndBorrow), balance: intl.formatMessage(messages.balance), marketPrice: intl.formatMessage(messages.marketPrice), description: intl.formatMessage(messages.description), @@ -248,5 +323,16 @@ export const getStrings = intl => { high: intl.formatMessage(messages.high), failed: intl.formatMessage(messages.failed), assets: intl.formatMessage(messages.assets), + tokenPair: intl.formatMessage(messages.tokenPair), + dex: intl.formatMessage(messages.dex), + firstTokenValue: intl.formatMessage(messages.firstTokenValue), + secondTokenValue: intl.formatMessage(messages.secondTokenValue), + pnl: intl.formatMessage(messages.pnl), + lpTokens: intl.formatMessage(messages.lpTokens), + totalValue: intl.formatMessage(messages.totalValue), + pair: intl.formatMessage(messages.pair), + assetPrice: intl.formatMessage(messages.assetPrice), + assetAmount: intl.formatMessage(messages.assetAmount), + transactionId: intl.formatMessage(messages.transactionId), }).current; }; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.js new file mode 100644 index 0000000000..7e90205ab7 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.js @@ -0,0 +1,23 @@ +import React from 'react'; +import { Box, Stack, Typography } from '@mui/material'; +import { useTheme } from '@mui/material'; +import illustrationPng from '../../common/assets/images/illustration.png'; +import { usePortfolio } from '../../module/PortfolioContextProvider'; + +const LendAndBorrow = () => { + const theme = useTheme(); + const { strings } = usePortfolio(); + + return ( + + + + + {strings.soonAvailable} + + + + ); +}; + +export default LendAndBorrow; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js new file mode 100644 index 0000000000..b718dbcddf --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js @@ -0,0 +1,319 @@ +import React, { useCallback, useState } from 'react'; +import { + Table, + TableBody, + TableCell, + TableHead, + TableRow, + TableSortLabel, + Typography, + Stack, + Box, +} from '@mui/material'; +import { useTheme } from '@mui/material/styles'; +import { default as SortIcon } from '../../common/assets/icons/Sort'; +import { useNavigateTo } from '../../common/hooks/useNavigateTo'; +import { usePortfolio } from '../../module/PortfolioContextProvider'; +import ArrowIcon from '../../common/assets/icons/Arrow'; +import adaPng from '../../../../../assets/images/ada.png'; +import hoskyPng from '../../common/assets/images/hosky-token.png'; +import minswapPng from '../../common/assets/images/minswap-dex.png'; +import { Chip } from '../../common/components/Chip'; +import { Skeleton } from '../../../../components/Skeleton'; + +const TableRowSkeleton = ({ id, theme }) => ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +); + +const LiquidityTable = ({ data, isLoading }) => { + const theme = useTheme(); + const navigateTo = useNavigateTo(); + const { strings } = usePortfolio(); + const [{ order, orderBy }, setSortState] = useState({ + order: null, + orderBy: null, + }); + + const headCells = [ + { id: 'tokenPair', label: strings.tokenPair, align: 'left', sortType: 'character' }, + { id: 'DEX', label: strings.dex, align: 'left', sortType: 'character' }, + { id: 'tokenValue1', label: strings.firstTokenValue, align: 'left', sortType: 'numeric' }, + { id: 'tokenValue2', label: strings.secondTokenValue, align: 'left', sortType: 'numeric' }, + { id: 'PNL', label: strings.pnl, align: 'left', sortType: 'numeric' }, + { + id: 'lpTokens', + label: strings.lpTokens, + align: 'left', + sortType: 'numeric', + }, + { + id: 'totalValue', + label: strings.totalValue, + align: 'right', + sortType: 'numeric', + }, + ]; + + const handleRequestSort = property => { + let direction = 'asc'; + if (order === 'asc') { + if (property === orderBy) { + direction = 'desc'; + } + } else if (order === 'desc') { + if (property === orderBy) { + direction = null; + } + } + setSortState({ + order: direction, + orderBy: property, + }); + }; + + const descendingComparator = (a, b, sortType) => { + switch (sortType) { + case 'numeric': + if (parseFloat(b[orderBy]) < parseFloat(a[orderBy])) { + return -1; + } else { + return 1; + } + case 'character': + return String(a[orderBy]).localeCompare(b[orderBy]); + default: + if (b[orderBy] < a[orderBy]) { + return -1; + } else { + return 1; + } + } + }; + + const getSortedData = useCallback( + data => { + if (!orderBy || !order) return data; + const sortColumn = headCells.find(cell => cell.id === orderBy); + const sortType = sortColumn?.sortType ?? 'character'; + return data.sort((a, b) => { + return order === 'desc' + ? descendingComparator(a, b, sortType) + : -descendingComparator(a, b, sortType); + }); + }, + [order, orderBy, headCells] + ); + + return ( + + + + {headCells.map(({ label, align, id }) => ( + + handleRequestSort(id)} + sx={{ float: align, cursor: 'pointer' }} + > + + {label} + + + + + ))} + + + + {isLoading + ? Array.from([1, 2, 3]).map((item, index) => ( + + )) + : getSortedData(data).map(row => ( + + + + + + + + + {row.firstToken.name} - {row.secondToken.name} + + + + + + + + + {row.DEX} + + + + + + + + {row.firstToken.value} {row.firstToken.name} + + + {row.firstToken.usdValue} USD + + + + + + + + {row.secondToken.value} {row.secondToken.name} + + + {row.secondToken.usdValue} USD + + + + + + + + {row.PNL.value} {row.firstToken.name} + + 0} + label={ + + {row.PNL.usdValue > 0 ? '+' : '-'} + {row.PNL.usdValue} USD + + } + /> + + + + + + {row.lpTokens} + + + + + + + {row.totalValue.value} {row.firstToken.name} + + + {row.totalValue.usdValue} USD + + + + + ))} + +
+ ); +}; + +export default LiquidityTable; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js new file mode 100644 index 0000000000..a1b1f8397a --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js @@ -0,0 +1,285 @@ +import React, { useCallback, useState } from 'react'; +import { + Table, + TableBody, + TableCell, + TableHead, + TableRow, + TableSortLabel, + Typography, + Stack, + Box, +} from '@mui/material'; +import { useTheme } from '@mui/material/styles'; +import { default as SortIcon } from '../../common/assets/icons/Sort'; +import { useNavigateTo } from '../../common/hooks/useNavigateTo'; +import { usePortfolio } from '../../module/PortfolioContextProvider'; +import ArrowIcon from '../../common/assets/icons/Arrow'; +import adaPng from '../../../../../assets/images/ada.png'; +import hoskyPng from '../../common/assets/images/hosky-token.png'; +import minswapPng from '../../common/assets/images/minswap-dex.png'; +import { Chip } from '../../common/components/Chip'; +import { Skeleton } from '../../../../components/Skeleton'; +import { truncateAddressShort } from '../../../../../utils/formatters'; + +const TableRowSkeleton = ({ id, theme }) => ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +); + +const OrderTable = ({ data, isLoading }) => { + const theme = useTheme(); + const navigateTo = useNavigateTo(); + const { strings } = usePortfolio(); + const [{ order, orderBy }, setSortState] = useState({ + order: null, + orderBy: null, + }); + + const headCells = [ + { id: 'pair', label: strings.pair, align: 'left', disabledSort: true }, + { id: 'DEX', label: strings.dex, align: 'left', disabledSort: true }, + { id: 'assetPrice', label: strings.assetPrice, align: 'left', disabledSort: true }, + { id: 'assetAmount', label: strings.assetAmount, align: 'left', disabledSort: true }, + { id: 'transactionId', label: strings.transactionId, align: 'left', disabledSort: true }, + { + id: 'totalValue', + label: strings.totalValue, + align: 'right', + disabledSort: false, + sortType: 'numeric', + }, + ]; + + const handleRequestSort = property => { + let direction = 'asc'; + if (order === 'asc') { + if (property === orderBy) { + direction = 'desc'; + } + } else if (order === 'desc') { + if (property === orderBy) { + direction = null; + } + } + setSortState({ + order: direction, + orderBy: property, + }); + }; + + const descendingComparator = (a, b, sortType) => { + switch (sortType) { + case 'numeric': + if (parseFloat(b[orderBy]) < parseFloat(a[orderBy])) { + return -1; + } else { + return 1; + } + case 'character': + return String(a[orderBy]).localeCompare(b[orderBy]); + default: + if (b[orderBy] < a[orderBy]) { + return -1; + } else { + return 1; + } + } + }; + + const getSortedData = useCallback( + data => { + if (!orderBy || !order) return data; + const sortColumn = headCells.find(cell => cell.id === orderBy); + const sortType = sortColumn?.sortType ?? 'character'; + return data.sort((a, b) => { + return order === 'desc' + ? descendingComparator(a, b, sortType) + : -descendingComparator(a, b, sortType); + }); + }, + [order, orderBy, headCells] + ); + + return ( + + + + {headCells.map(({ label, align, id, disabledSort }) => ( + + !disabledSort && handleRequestSort(id)} + sx={{ float: align, cursor: disabledSort ? 'normal' : 'pointer' }} + > + + {label} + + {disabledSort ? null : } + + + ))} + + + + {isLoading + ? Array.from([1, 2, 3]).map((item, index) => ( + + )) + : getSortedData(data).map(row => ( + + + + + + {row.firstToken.name} + + + / + + + + {row.secondToken.name} + + + + + + + + + {row.DEX} + + + + + + + {row.assetPrice} + + + + + + {row.assetAmount} + + + + + + {truncateAddressShort(row.transactionId)} + + + + + + + {row.totalValue} {row.firstToken.name} + + + {row.totalValueUsd} USD + + + + + ))} + +
+ ); +}; + +export default OrderTable; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js new file mode 100644 index 0000000000..53d68ad4b4 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js @@ -0,0 +1,291 @@ +import { Typography, Stack, Box, Input, InputAdornment, Button, styled } from '@mui/material'; +import { ReactComponent as Search } from '../../../../../assets/images/assets-page/search.inline.svg'; +import React, { useEffect, useState } from 'react'; +import { Tooltip, SearchInput } from '../../../../components'; +import { useTheme } from '@mui/material/styles'; +import { defineMessages } from 'react-intl'; +import { usePortfolio } from '../../module/PortfolioContextProvider'; +import LiquidityTable from './LiquidityTable'; +import mockData from '../../../../pages/portfolio/mockData'; +import ArrowIcon from '../../common/assets/icons/Arrow'; +import illustrationPng from '../../common/assets/images/illustration.png'; +import { Chip } from '../../common/components/Chip'; +import { Skeleton } from '../../../../components/Skeleton'; +import OrderTable from './OrderTable'; +import LendAndBorrow from './LendAndBorrow'; + +const StyledButton = styled(Button)(({ theme }) => ({ + height: '40px', + textTransform: 'none', + color: theme.palette.ds.black_static, + padding: `${theme.spacing(1)} !important`, +})); + +const TableTabs = { + LIQUIDITY: 1, + ORDER: 2, + LENDBORROW: 3, +}; + +const PortfolioDapps = ({ data }) => { + const theme = useTheme(); + const { strings } = usePortfolio(); + const [keyword, setKeyword] = useState(''); + const [isLoading, setIsLoading] = useState(); + const [liquidityList, setLiquidlityList] = useState(data.liquidityList); + const [orderList, setOrderList] = useState(data.orderList); + const [buttonProps, setButtonProps] = useState([ + { + id: TableTabs.LIQUIDITY, + label: `${strings.liquidityPool}`, + active: true, + }, + { id: TableTabs.ORDER, label: `${strings.openOrders}`, active: false }, + { id: TableTabs.LENDBORROW, label: `${strings.lendAndBorrow}`, active: false }, + ]); + + useEffect(() => { + // FAKE FETCHING DATA TO SEE SKELETON + setIsLoading(true); + + const timer = setTimeout(() => { + setIsLoading(false); + }, 2000); + + return () => clearTimeout(timer); + }, []); + + useEffect(() => { + if (!keyword) { + setLiquidlityList(data.liquidityList); + setOrderList(data.orderList); + return; + } + + const lowercaseKeyword = keyword.toLowerCase(); + + const liquidityTemp = liquidityList.filter(item => { + return item.tokenPair.toLowerCase().includes(lowercaseKeyword); + }); + const orderTemp = orderList.filter(item => { + return item.pair.toLowerCase().includes(lowercaseKeyword); + }); + if (liquidityTemp && liquidityTemp.length > 0) { + setLiquidlityList(liquidityTemp); + } else { + setLiquidlityList([]); + } + if (orderTemp && orderTemp.length > 0) { + setOrderList(orderTemp); + } else { + setOrderList([]); + } + }, [keyword]); + + const handleChangeTab = id => { + const temp = buttonProps.map(prop => { + if (prop.id === id) + return { + ...prop, + active: true, + }; + return { + ...prop, + active: false, + }; + }); + setButtonProps(temp); + }; + + return ( + + + + + + {isLoading ? ( + + ) : ( + + {mockData.PortfolioPage.balance.ada} + + )} + + ADA + + /USD + + + + + + {isLoading ? ( + + ) : ( + + {mockData.PortfolioPage.balance.usd} USD + + )} + {isLoading ? ( + + + + + ) : ( + + % {strings.balancePerformance} + +/- {strings.balanceChange} + + {strings.in24hours} ({strings.dapps}) + + + } + placement="right" + > + + + + + {mockData.PortfolioPage.balance.percents.value}% + + + } + /> + + {mockData.PortfolioPage.balance.amount.active ? '+' : '-'} + {mockData.PortfolioPage.balance.amount.value} USD + + } + /> + + + )} + + + + setKeyword(e.target.value)} + placeholder={strings.search} + startAdornment={ + svg > use': { + fill: '#242838', + }, + }} + position="start" + > + + + } + /> + + + + {buttonProps.map(button => ( + handleChangeTab(button.id)} + sx={{ backgroundColor: button.active ? theme.palette.ds.gray_c200 : 'transparent' }} + > + + {button.label} ( + {button.id === TableTabs.LIQUIDITY + ? liquidityList.length + : button.id === TableTabs.ORDER + ? orderList.length + : button.id === TableTabs.LENDBORROW + ? 0 + : null} + ) + + + ))} + + + {buttonProps[0].active ? ( + liquidityList.length > 0 ? ( + + ) : ( + + + + + {strings.noResultsForThisSearch} + + + + ) + ) : null} + {buttonProps[1].active ? ( + orderList.length > 0 ? ( + + ) : ( + + + + + {strings.noResultsForThisSearch} + + + + ) + ) : null} + {buttonProps[2].active ? : null} + + + ); +}; + +export default PortfolioDapps; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js index 74533e565e..68aaf77609 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js @@ -16,6 +16,7 @@ const PortfolioWallet = ({ data }) => { const { strings } = usePortfolio(); const [keyword, setKeyword] = useState(''); const [isLoading, setIsLoading] = useState(); + const [tokenList, setTokenList] = useState(data); useEffect(() => { // FAKE FETCHING DATA TO SEE SKELETON @@ -28,6 +29,27 @@ const PortfolioWallet = ({ data }) => { return () => clearTimeout(timer); }, []); + useEffect(() => { + if (!keyword) { + setTokenList(data); + return; + } + + const lowercaseKeyword = keyword.toLowerCase(); + + const temp = tokenList.filter(item => { + return ( + item.name.toLowerCase().includes(lowercaseKeyword) || + item.id.toLowerCase().includes(lowercaseKeyword) + ); + }); + if (temp && temp.length > 0) { + setTokenList(temp); + } else { + setTokenList([]); + } + }, [keyword]); + return ( @@ -147,7 +169,7 @@ const PortfolioWallet = ({ data }) => { } /> - + ); }; diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDappsPage.js b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDappsPage.js index 786b85f033..da2b93bb83 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDappsPage.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDappsPage.js @@ -1,6 +1,8 @@ // @flow import React from 'react'; import PortfolioPageLayout from '../../layout/PortfolioPageLayout'; +import PortfolioDapps from '../../features/portfolio/useCases/Dapps/PortfolioDapps'; +import mockData from './mockData'; type Props = {| stores: any, @@ -10,7 +12,7 @@ type Props = {| const PortfolioDappsPage = ({ stores, actions }: Props) => { return ( -
PortfolioDappsPage
+
); }; diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js index 63292dc9da..797eab04d0 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js @@ -14,7 +14,7 @@ const PortfolioDetailPage = ({ stores, actions, match }: Props) => { const tokenId = match.params.tokenId; const tokenInfo = React.useMemo(() => { - const tmp = mockData.tokenList.find(item => item.id === tokenId); + const tmp = mockData.wallet.tokenList.find(item => item.id === tokenId); if (tmp) return tmp; return {}; }, [tokenId]); diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js index 1eb06a941c..f2bf3062ac 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js @@ -12,7 +12,7 @@ type Props = {| const PortfolioPage = ({ stores, actions }: Props) => { return ( - + ); }; diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js b/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js index 0da918147a..2a45fd5be0 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js @@ -10,484 +10,581 @@ const endDate = new Date('05-28-2024 11:40'); // ALL THE MOCK DATA FOR RENDERING UI NEW const mockData = { - tokenList: [ - { - name: 'AGIX', - id: 'Agix', - price: 0.23, - portfolioPercents: 75, - '24h': -0.03, - '1W': 0.83, - '1M': 0.89, - totalAmount: 281023, - totalAmountUsd: 372561, - overview: { - description: - "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", - website: 'https://www.cardano.org', - detailOn: 'https://www.yoroiwallet.com', - policyId: - 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', - fingerprint: - 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', + wallet: { + tokenList: [ + { + name: 'AGIX', + id: 'Agix', + price: 0.23, + portfolioPercents: 75, + '24h': -0.03, + '1W': 0.83, + '1M': 0.89, + totalAmount: 281023, + totalAmountUsd: 372561, + overview: { + description: + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", + website: 'https://www.cardano.org', + detailOn: 'https://www.yoroiwallet.com', + policyId: + 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + fingerprint: + 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', + }, + performance: [ + { value: '0,277' }, + { value: '0,48' }, + { value: '557M' }, + { value: '34M' }, + { value: '55' }, + { value: '67,00' }, + { value: '100,67' }, + { value: '400,60' }, + { value: '3,01' }, + { value: '0,00002' }, + ], + chartData: [ + { + time: '2024-05-28T04:43:27.000Z', + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + ], }, - performance: [ - { value: '0,277' }, - { value: '0,48' }, - { value: '557M' }, - { value: '34M' }, - { value: '55' }, - { value: '67,00' }, - { value: '100,67' }, - { value: '400,60' }, - { value: '3,01' }, - { value: '0,00002' }, - ], - chartData: [ - { - time: '2024-05-28T04:43:27.000Z', - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - ], - }, - { - name: 'ADA', - id: 'ada', - price: 0.23, - portfolioPercents: 68, - '24h': -0.59, - '1W': 0.24, - '1M': 0.17, - totalAmount: 321023, - totalAmountUsd: 2561, - overview: { - description: - "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", - website: 'https://www.cardano.org', - detailOn: 'https://www.yoroiwallet.com', + { + name: 'ADA', + id: 'ada', + price: 0.23, + portfolioPercents: 68, + '24h': -0.59, + '1W': 0.24, + '1M': 0.17, + totalAmount: 321023, + totalAmountUsd: 2561, + overview: { + description: + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", + website: 'https://www.cardano.org', + detailOn: 'https://www.yoroiwallet.com', + }, + performance: [ + { value: '0,277' }, + { value: '0,48' }, + { value: '557M' }, + { value: '34M' }, + { value: '1' }, + { value: '67,00' }, + { value: '100,67' }, + { value: '400,60' }, + { value: '3,01' }, + { value: '0,00002' }, + ], + chartData: [ + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + ], }, - performance: [ - { value: '0,277' }, - { value: '0,48' }, - { value: '557M' }, - { value: '34M' }, - { value: '1' }, - { value: '67,00' }, - { value: '100,67' }, - { value: '400,60' }, - { value: '3,01' }, - { value: '0,00002' }, - ], - chartData: [ - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - ], - }, - { - name: 'TKN', - id: 'Tkn', - price: 0.82, - portfolioPercents: 34, - '24h': -0.93, - '1W': 0.23, - '1M': 0.829, - totalAmount: 1281023, - totalAmountUsd: 372561, - overview: { - description: - "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", - website: 'https://www.cardano.org', - detailOn: 'https://www.yoroiwallet.com', - policyId: - 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', - fingerprint: - 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', + { + name: 'TKN', + id: 'Tkn', + price: 0.82, + portfolioPercents: 34, + '24h': -0.93, + '1W': 0.23, + '1M': 0.829, + totalAmount: 1281023, + totalAmountUsd: 372561, + overview: { + description: + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", + website: 'https://www.cardano.org', + detailOn: 'https://www.yoroiwallet.com', + policyId: + 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + fingerprint: + 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', + }, + performance: [ + { value: '0,277' }, + { value: '0,48' }, + { value: '557M' }, + { value: '34M' }, + { value: '55' }, + { value: '67,00' }, + { value: '100,67' }, + { value: '400,60' }, + { value: '3,01' }, + { value: '0,00002' }, + ], + chartData: [ + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + ], }, - performance: [ - { value: '0,277' }, - { value: '0,48' }, - { value: '557M' }, - { value: '34M' }, - { value: '55' }, - { value: '67,00' }, - { value: '100,67' }, - { value: '400,60' }, - { value: '3,01' }, - { value: '0,00002' }, - ], - chartData: [ - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + ], + }, + + dapps: { + liquidityList: [ + { + id: Math.random(), + tokenPair: 'ADA/LVLC', + DEX: 'Minswap', + PNL: { + value: 60.0, + usdValue: 30.0, + }, + lpTokens: 3911837.63, + totalValue: { + value: 1000.0, + usdValue: 500.0, + }, + firstToken: { + name: 'ADA', + id: 'ada', + value: 200.0, + usdValue: 100.0, + }, + secondToken: { + name: 'LVLC', + id: 'lvlc', + value: 16223.02, + usdValue: 20.0, }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + }, + { + id: Math.random(), + tokenPair: 'ADA/Hosky', + DEX: 'Sundaeswap', + PNL: { + value: 40.0, + usdValue: 70.0, + }, + lpTokens: 2391837.63, + totalValue: { + value: 500.0, + usdValue: 100.0, + }, + firstToken: { + name: 'ADA', + id: 'ada', + value: 100.0, + usdValue: 20.0, + }, + secondToken: { + name: 'Hosky', + id: 'hosky', + value: 9323.02, + usdValue: 10.0, }, - ], - }, - ], + }, + ], + orderList: [ + { + id: Math.random(), + pair: 'ADA/LVLC', + firstToken: { + name: 'ADA', + id: 'ada', + }, + secondToken: { + name: 'LVLC', + id: 'lvlc', + }, + DEX: 'Minswap', + assetPrice: 3, + assetAmount: 5, + transactionId: 'ebc533812j3jajsdkasdkaskd91286b54', + totalValue: 9.0, + totalValueUsd: 3.0, + }, + { + id: Math.random(), + pair: 'MILK/LVLC', + firstToken: { + name: 'MILK', + id: 'milk', + }, + secondToken: { + name: 'LVLC', + id: 'lvlc', + }, + DEX: 'Sundaeswap', + assetPrice: 1, + assetAmount: 2, + transactionId: 'ebc533812j3jajsdkasdkaskd91286b54', + totalValue: 50.0, + totalValueUsd: 10.0, + }, + ], + }, PortfolioPage: { balance: { diff --git a/packages/yoroi-extension/app/i18n/locales/en-US.json b/packages/yoroi-extension/app/i18n/locales/en-US.json index 464e4dcd7f..1d370a83d6 100644 --- a/packages/yoroi-extension/app/i18n/locales/en-US.json +++ b/packages/yoroi-extension/app/i18n/locales/en-US.json @@ -1012,6 +1012,10 @@ "yoroiTransfer.waiting.title.label": "Wallet is being restored", "portfolio.main.header.text": "Tokens", "portfolio.main.search.text": "Search by asset name or ID", + "portfolio.common.soonAvailable": "Soon available", + "portfolio.common.noResultsForThisSearch": "No results for this search", + "portfolio.common.dex": "DEX", + "portfolio.common.totalValue": "Total value", "portfolio.detail.header.text": "Token details", "portfolio.menu.wallet.link.label": "Wallet", "portfolio.menu.dapps.link.label": "Dapps", @@ -1019,10 +1023,14 @@ "portfolio.tooltip.balanceChange": "Balance change", "portfolio.tooltip.tokenPriceChange": "Token price change", "portfolio.tooltip.in24hours": "in 24 hours", + "portfolio.tooltip.dapps": "DApps", "portfolio.button.backToPortfolio": "Back to portfolio", "portfolio.button.swap": "Swap", "portfolio.button.send": "Send", "portfolio.button.receive": "Receive", + "portfolio.button.liquidityPool": "Liquidity pool", + "portfolio.button.openOrders": "Open orders", + "portfolio.button.lendAndBorrow": "Lend & Borrow", "portfolio.tokenInfo.balance": "balance", "portfolio.tokenInfo.marketPrice": "Market price", "portfolio.tokenInfo.menuLabel.overview": "Overview", @@ -1042,26 +1050,35 @@ "portfolio.tokenInfo.performance.maxSupply": "Max supply", "portfolio.tokenInfo.performance.allTimeHigh": "All time high", "portfolio.tokenInfo.performance.allTimeLow": "All time low", - "portfolio.statsTable.headerText.name": "Name", - "portfolio.statsTable.headerText.price": "Price", - "portfolio.statsTable.headerText.portfolio": "Portfolio", - "portfolio.statsTable.headerText.totalAmount": "Total amount", + "portfolio.statsTable.header.name": "Name", + "portfolio.statsTable.header.price": "Price", + "portfolio.statsTable.header.portfolio": "Portfolio", + "portfolio.statsTable.header.totalAmount": "Total amount", "portfolio.transactionTable.title": "Transaction history", - "portfolio.transactionTable.headerText.transactionType": "Transaction type", - "portfolio.transactionTable.headerText.status": "Status", - "portfolio.transactionTable.headerText.fee": "Fee", - "portfolio.transactionTable.headerText.amount": "Amount", + "portfolio.transactionTable.header.transactionType": "Transaction type", + "portfolio.transactionTable.header.status": "Status", + "portfolio.transactionTable.header.fee": "Fee", + "portfolio.transactionTable.header.amount": "Amount", "portfolio.transactionTable.timestamp.today": "Today", "portfolio.transactionTable.timestamp.yesterday": "Yesterday", - "portfolio.transactionTable.historyLabel.sent": "Sent", - "portfolio.transactionTable.historyLabel.received": "Received", - "portfolio.transactionTable.historyLabel.transactionError": "Transaction error", - "portfolio.transactionTable.historyLabel.rewardWithdraw": "Reward withdrawn", - "portfolio.transactionTable.historyLabel.stakeDelegate": "Stake delegated", + "portfolio.transactionTable.label.sent": "Sent", + "portfolio.transactionTable.label.received": "Received", + "portfolio.transactionTable.label.transactionError": "Transaction error", + "portfolio.transactionTable.label.rewardWithdraw": "Reward withdrawn", + "portfolio.transactionTable.label.stakeDelegate": "Stake delegated", "portfolio.transactionTable.status.low": "Low", "portfolio.transactionTable.status.high": "High", "portfolio.transactionTable.status.failed": "Failed", "portfolio.transactionTable.amount.assets": "assets", + "portfolio.liquidityTable.header.tokenPair": "Token pair", + "portfolio.liquidityTable.header.firstTokenValue": "Token value 1", + "portfolio.liquidityTable.header.secondTokenValue": "Token value 2", + "portfolio.liquidityTable.header.pnl": "PNL", + "portfolio.liquidityTable.header.lpTokens": "LP tokens", + "portfolio.orderTable.header.pair": "Pair (From / To)", + "portfolio.orderTable.header.assetPrice": "Asset price", + "portfolio.orderTable.header.assetAmount": "Asset amount", + "portfolio.orderTable.header.transactionId": "Transaction ID", "gouvernace.delegateToDRep": "Delegate to a DRep", "gouvernace.designatingSomeoneElse": "You are designating someone else to cast your vote on your behalf for all proposals now and in the future." } From 8b7ad2ca56c46b53b140a1f883e7eed597e261fb Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Wed, 29 May 2024 11:59:57 +0700 Subject: [PATCH 045/464] update skeleton & mock data --- .../useCases/Dapps/LiquidityTable.js | 42 +- .../portfolio/useCases/Dapps/OrderTable.js | 37 +- .../app/UI/pages/portfolio/mockData.js | 476 ++++++++++++++++++ 3 files changed, 522 insertions(+), 33 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js index b718dbcddf..27d9579d87 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js @@ -29,29 +29,45 @@ const TableRowSkeleton = ({ id, theme }) => ( }} > - - - - - + + + + + - + + + + - + + + + - + + + + - + + + + @@ -59,11 +75,9 @@ const TableRowSkeleton = ({ id, theme }) => ( - - - - - + + + diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js index a1b1f8397a..6ccc96b158 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js @@ -30,41 +30,40 @@ const TableRowSkeleton = ({ id, theme }) => ( }} > - - - - - - + + + + + / + + + - - - - - + + + + - + - + - + - - - - - + + + diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js b/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js index 2a45fd5be0..cc8b91f360 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js @@ -488,6 +488,482 @@ const mockData = { }, ], }, + { + name: 'AGIX', + id: 'Agix', + price: 0.23, + portfolioPercents: 75, + '24h': -0.03, + '1W': 0.83, + '1M': 0.89, + totalAmount: 281023, + totalAmountUsd: 372561, + overview: { + description: + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", + website: 'https://www.cardano.org', + detailOn: 'https://www.yoroiwallet.com', + policyId: + 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + fingerprint: + 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', + }, + performance: [ + { value: '0,277' }, + { value: '0,48' }, + { value: '557M' }, + { value: '34M' }, + { value: '55' }, + { value: '67,00' }, + { value: '100,67' }, + { value: '400,60' }, + { value: '3,01' }, + { value: '0,00002' }, + ], + chartData: [ + { + time: '2024-05-28T04:43:27.000Z', + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + ], + }, + { + name: 'ADA', + id: 'ada', + price: 0.23, + portfolioPercents: 68, + '24h': -0.59, + '1W': 0.24, + '1M': 0.17, + totalAmount: 321023, + totalAmountUsd: 2561, + overview: { + description: + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", + website: 'https://www.cardano.org', + detailOn: 'https://www.yoroiwallet.com', + }, + performance: [ + { value: '0,277' }, + { value: '0,48' }, + { value: '557M' }, + { value: '34M' }, + { value: '1' }, + { value: '67,00' }, + { value: '100,67' }, + { value: '400,60' }, + { value: '3,01' }, + { value: '0,00002' }, + ], + chartData: [ + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + ], + }, + { + name: 'TKN', + id: 'Tkn', + price: 0.82, + portfolioPercents: 34, + '24h': -0.93, + '1W': 0.23, + '1M': 0.829, + totalAmount: 1281023, + totalAmountUsd: 372561, + overview: { + description: + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", + website: 'https://www.cardano.org', + detailOn: 'https://www.yoroiwallet.com', + policyId: + 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + fingerprint: + 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', + }, + performance: [ + { value: '0,277' }, + { value: '0,48' }, + { value: '557M' }, + { value: '34M' }, + { value: '55' }, + { value: '67,00' }, + { value: '100,67' }, + { value: '400,60' }, + { value: '3,01' }, + { value: '0,00002' }, + ], + chartData: [ + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + ], + }, ], }, From d7c41cd06625e33e22a1fb50863ffd794debaeec Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Wed, 29 May 2024 13:29:23 +0700 Subject: [PATCH 046/464] fix display issues --- .../portfolio/useCases/Dapps/LiquidityTable.js | 7 +------ .../features/portfolio/useCases/Dapps/OrderTable.js | 7 +------ .../portfolio/useCases/Dapps/PortfolioDapps.js | 4 ++-- .../portfolio/useCases/Wallet/PortfolioWallet.js | 6 +++--- .../features/portfolio/useCases/Wallet/StatsTable.js | 7 +------ .../app/UI/pages/portfolio/mockData.js | 12 ++++++------ 6 files changed, 14 insertions(+), 29 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js index 27d9579d87..d35baa17f8 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js @@ -163,12 +163,7 @@ const LiquidityTable = ({ data, isLoading }) => { ); return ( - +
{headCells.map(({ label, align, id }) => ( diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js index 6ccc96b158..6dccf1995d 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js @@ -144,12 +144,7 @@ const OrderTable = ({ data, isLoading }) => { ); return ( -
+
{headCells.map(({ label, align, id, disabledSort }) => ( diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js index 53d68ad4b4..77780966f2 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js @@ -32,8 +32,8 @@ const PortfolioDapps = ({ data }) => { const { strings } = usePortfolio(); const [keyword, setKeyword] = useState(''); const [isLoading, setIsLoading] = useState(); - const [liquidityList, setLiquidlityList] = useState(data.liquidityList); - const [orderList, setOrderList] = useState(data.orderList); + const [liquidityList, setLiquidlityList] = useState([]); + const [orderList, setOrderList] = useState([]); const [buttonProps, setButtonProps] = useState([ { id: TableTabs.LIQUIDITY, diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js index 68aaf77609..9701408f3a 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js @@ -16,7 +16,7 @@ const PortfolioWallet = ({ data }) => { const { strings } = usePortfolio(); const [keyword, setKeyword] = useState(''); const [isLoading, setIsLoading] = useState(); - const [tokenList, setTokenList] = useState(data); + const [tokenList, setTokenList] = useState([]); useEffect(() => { // FAKE FETCHING DATA TO SEE SKELETON @@ -51,7 +51,7 @@ const PortfolioWallet = ({ data }) => { }, [keyword]); return ( - + @@ -170,7 +170,7 @@ const PortfolioWallet = ({ data }) => { /> - + ); }; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js index c89b6574b9..058606b855 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js @@ -147,12 +147,7 @@ const StatsTable = ({ data, isLoading }) => { ); return ( -
+
{headCells.map(({ label, align, id }) => ( diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js b/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js index cc8b91f360..cba6c8811f 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js @@ -489,8 +489,8 @@ const mockData = { ], }, { - name: 'AGIX', - id: 'Agix', + name: 'DOGE', + id: 'Doge', price: 0.23, portfolioPercents: 75, '24h': -0.03, @@ -649,8 +649,8 @@ const mockData = { ], }, { - name: 'ADA', - id: 'ada', + name: 'Shiba', + id: 'shiba', price: 0.23, portfolioPercents: 68, '24h': -0.59, @@ -805,8 +805,8 @@ const mockData = { ], }, { - name: 'TKN', - id: 'Tkn', + name: 'TKN1', + id: 'Tkn1', price: 0.82, portfolioPercents: 34, '24h': -0.93, From 160c33f10997523983b1bf43cd12369f5d2f37cd Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Wed, 29 May 2024 16:33:13 +0700 Subject: [PATCH 047/464] update mock data and UI --- .../useCases/Dapps/LiquidityTable.js | 33 +- .../portfolio/useCases/Dapps/OrderTable.js | 5 +- .../portfolio/useCases/Wallet/StatsTable.js | 3 +- .../app/UI/pages/portfolio/mockData.js | 1056 ++++++++++++++++- 4 files changed, 1032 insertions(+), 65 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js index d35baa17f8..8fa54c2751 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js @@ -65,8 +65,8 @@ const TableRowSkeleton = ({ id, theme }) => ( - - + + @@ -95,9 +95,9 @@ const LiquidityTable = ({ data, isLoading }) => { const headCells = [ { id: 'tokenPair', label: strings.tokenPair, align: 'left', sortType: 'character' }, { id: 'DEX', label: strings.dex, align: 'left', sortType: 'character' }, - { id: 'tokenValue1', label: strings.firstTokenValue, align: 'left', sortType: 'numeric' }, - { id: 'tokenValue2', label: strings.secondTokenValue, align: 'left', sortType: 'numeric' }, - { id: 'PNL', label: strings.pnl, align: 'left', sortType: 'numeric' }, + { id: 'firstTokenValue', label: strings.firstTokenValue, align: 'left', sortType: 'numeric' }, + { id: 'secondTokenValue', label: strings.secondTokenValue, align: 'left', sortType: 'numeric' }, + { id: 'PNLValue', label: strings.pnl, align: 'left', sortType: 'numeric' }, { id: 'lpTokens', label: strings.lpTokens, @@ -212,7 +212,6 @@ const LiquidityTable = ({ data, isLoading }) => { height="24px" sx={{ borderRadius: `${theme.shape.borderRadius}px`, - backgroundColor: theme.palette.ds.gray_c700, }} component="img" src={adaPng} @@ -222,7 +221,6 @@ const LiquidityTable = ({ data, isLoading }) => { height="24px" sx={{ borderRadius: `${theme.shape.borderRadius}px`, - backgroundColor: theme.palette.ds.gray_c700, position: 'absolute', top: 0, left: '22px', @@ -244,7 +242,6 @@ const LiquidityTable = ({ data, isLoading }) => { height="32px" sx={{ borderRadius: `${theme.shape.borderRadius}px`, - backgroundColor: 'transparent', }} component="img" src={minswapPng} @@ -261,10 +258,10 @@ const LiquidityTable = ({ data, isLoading }) => { - {row.firstToken.value} {row.firstToken.name} + {row.firstTokenValue} {row.firstToken.name} - {row.firstToken.usdValue} USD + {row.firstTokenValueUsd} USD @@ -272,10 +269,10 @@ const LiquidityTable = ({ data, isLoading }) => { - {row.secondToken.value} {row.secondToken.name} + {row.secondTokenValue} {row.secondToken.name} - {row.secondToken.usdValue} USD + {row.secondTokenValueUsd} USD @@ -283,14 +280,14 @@ const LiquidityTable = ({ data, isLoading }) => { - {row.PNL.value} {row.firstToken.name} + {row.PNLValue} {row.firstToken.name} 0} + active={row.PNLValueUsd > 0} label={ - {row.PNL.usdValue > 0 ? '+' : '-'} - {row.PNL.usdValue} USD + {row.PNLValueUsd > 0 ? '+' : '-'} + {row.PNLValueUsd} USD } /> @@ -308,13 +305,13 @@ const LiquidityTable = ({ data, isLoading }) => { - {row.totalValue.value} {row.firstToken.name} + {row.totalValue} {row.firstToken.name} - {row.totalValue.usdValue} USD + {row.totalValueUsd} USD diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js index 6dccf1995d..f6ba090335 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js @@ -188,7 +188,6 @@ const OrderTable = ({ data, isLoading }) => { height="24px" sx={{ borderRadius: `${theme.shape.borderRadius}px`, - backgroundColor: theme.palette.ds.gray_c700, }} component="img" src={adaPng} @@ -204,7 +203,6 @@ const OrderTable = ({ data, isLoading }) => { height="24px" sx={{ borderRadius: `${theme.shape.borderRadius}px`, - backgroundColor: theme.palette.ds.gray_c700, }} component="img" src={hoskyPng} @@ -222,7 +220,6 @@ const OrderTable = ({ data, isLoading }) => { height="32px" sx={{ borderRadius: `${theme.shape.borderRadius}px`, - backgroundColor: 'transparent', }} component="img" src={minswapPng} @@ -250,7 +247,7 @@ const OrderTable = ({ data, isLoading }) => { - {truncateAddressShort(row.transactionId)} + {truncateAddressShort(row.transactionId, 10)} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js index 058606b855..26de6b9fda 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js @@ -161,7 +161,7 @@ const StatsTable = ({ data, isLoading }) => { > {label} @@ -197,7 +197,6 @@ const StatsTable = ({ data, isLoading }) => { height="40px" sx={{ borderRadius: `${theme.shape.borderRadius}px`, - backgroundColor: theme.palette.ds.gray_c700, }} component="img" src={adaPng} diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js b/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js index cba6c8811f..74458070a7 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js @@ -805,8 +805,968 @@ const mockData = { ], }, { - name: 'TKN1', - id: 'Tkn1', + name: 'TKN2', + id: 'Tkn2', + price: 0.82, + portfolioPercents: 34, + '24h': -0.93, + '1W': 0.23, + '1M': 0.829, + totalAmount: 1281023, + totalAmountUsd: 372561, + overview: { + description: + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", + website: 'https://www.cardano.org', + detailOn: 'https://www.yoroiwallet.com', + policyId: + 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + fingerprint: + 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', + }, + performance: [ + { value: '0,277' }, + { value: '0,48' }, + { value: '557M' }, + { value: '34M' }, + { value: '55' }, + { value: '67,00' }, + { value: '100,67' }, + { value: '400,60' }, + { value: '3,01' }, + { value: '0,00002' }, + ], + chartData: [ + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + ], + }, + { + name: 'TKN3', + id: 'Tkn3', + price: 0.82, + portfolioPercents: 34, + '24h': -0.93, + '1W': 0.23, + '1M': 0.829, + totalAmount: 1281023, + totalAmountUsd: 372561, + overview: { + description: + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", + website: 'https://www.cardano.org', + detailOn: 'https://www.yoroiwallet.com', + policyId: + 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + fingerprint: + 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', + }, + performance: [ + { value: '0,277' }, + { value: '0,48' }, + { value: '557M' }, + { value: '34M' }, + { value: '55' }, + { value: '67,00' }, + { value: '100,67' }, + { value: '400,60' }, + { value: '3,01' }, + { value: '0,00002' }, + ], + chartData: [ + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + ], + }, + { + name: 'TKN4', + id: 'Tkn4', + price: 0.82, + portfolioPercents: 34, + '24h': -0.93, + '1W': 0.23, + '1M': 0.829, + totalAmount: 1281023, + totalAmountUsd: 372561, + overview: { + description: + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", + website: 'https://www.cardano.org', + detailOn: 'https://www.yoroiwallet.com', + policyId: + 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + fingerprint: + 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', + }, + performance: [ + { value: '0,277' }, + { value: '0,48' }, + { value: '557M' }, + { value: '34M' }, + { value: '55' }, + { value: '67,00' }, + { value: '100,67' }, + { value: '400,60' }, + { value: '3,01' }, + { value: '0,00002' }, + ], + chartData: [ + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + ], + }, + { + name: 'TKN5', + id: 'Tkn5', + price: 0.82, + portfolioPercents: 34, + '24h': -0.93, + '1W': 0.23, + '1M': 0.829, + totalAmount: 1281023, + totalAmountUsd: 372561, + overview: { + description: + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", + website: 'https://www.cardano.org', + detailOn: 'https://www.yoroiwallet.com', + policyId: + 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + fingerprint: + 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', + }, + performance: [ + { value: '0,277' }, + { value: '0,48' }, + { value: '557M' }, + { value: '34M' }, + { value: '55' }, + { value: '67,00' }, + { value: '100,67' }, + { value: '400,60' }, + { value: '3,01' }, + { value: '0,00002' }, + ], + chartData: [ + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + ], + }, + { + name: 'TKN6', + id: 'Tkn6', + price: 0.82, + portfolioPercents: 34, + '24h': -0.93, + '1W': 0.23, + '1M': 0.829, + totalAmount: 1281023, + totalAmountUsd: 372561, + overview: { + description: + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", + website: 'https://www.cardano.org', + detailOn: 'https://www.yoroiwallet.com', + policyId: + 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + fingerprint: + 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', + }, + performance: [ + { value: '0,277' }, + { value: '0,48' }, + { value: '557M' }, + { value: '34M' }, + { value: '55' }, + { value: '67,00' }, + { value: '100,67' }, + { value: '400,60' }, + { value: '3,01' }, + { value: '0,00002' }, + ], + chartData: [ + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + ], + }, + { + name: 'TKN7', + id: 'Tkn7', + price: 0.82, + portfolioPercents: 34, + '24h': -0.93, + '1W': 0.23, + '1M': 0.829, + totalAmount: 1281023, + totalAmountUsd: 372561, + overview: { + description: + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", + website: 'https://www.cardano.org', + detailOn: 'https://www.yoroiwallet.com', + policyId: + 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + fingerprint: + 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', + }, + performance: [ + { value: '0,277' }, + { value: '0,48' }, + { value: '557M' }, + { value: '34M' }, + { value: '55' }, + { value: '67,00' }, + { value: '100,67' }, + { value: '400,60' }, + { value: '3,01' }, + { value: '0,00002' }, + ], + chartData: [ + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomDate(startDate, endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + ], + }, + { + name: 'TKN8', + id: 'Tkn8', price: 0.82, portfolioPercents: 34, '24h': -0.93, @@ -973,53 +1933,67 @@ const mockData = { id: Math.random(), tokenPair: 'ADA/LVLC', DEX: 'Minswap', - PNL: { - value: 60.0, - usdValue: 30.0, - }, - lpTokens: 3911837.63, - totalValue: { - value: 1000.0, - usdValue: 500.0, - }, firstToken: { name: 'ADA', id: 'ada', - value: 200.0, - usdValue: 100.0, }, secondToken: { name: 'LVLC', id: 'lvlc', - value: 16223.02, - usdValue: 20.0, }, + PNLValue: (Math.random() * 10).toFixed(2), + PNLValueUsd: (Math.random() * 10).toFixed(2), + lpTokens: (Math.random() * 1000000).toFixed(2), + totalValue: (Math.random() * 1000).toFixed(2), + totalValueUsd: (Math.random() * 100).toFixed(2), + firstTokenValue: (Math.random() * 100).toFixed(2), + firstTokenValueUsd: (Math.random() * 100).toFixed(2), + secondTokenValue: (Math.random() * 10000).toFixed(2), + secondTokenValueUsd: (Math.random() * 10).toFixed(2), }, { id: Math.random(), - tokenPair: 'ADA/Hosky', + tokenPair: 'DOGE/Shiba', DEX: 'Sundaeswap', - PNL: { - value: 40.0, - usdValue: 70.0, + firstToken: { + name: 'DOGE', + id: 'doge', }, - lpTokens: 2391837.63, - totalValue: { - value: 500.0, - usdValue: 100.0, + secondToken: { + name: 'Shiba', + id: 'shiba', }, + PNLValue: (Math.random() * 10).toFixed(2), + PNLValueUsd: (Math.random() * 10).toFixed(2), + lpTokens: (Math.random() * 1000000).toFixed(2), + totalValue: (Math.random() * 1000).toFixed(2), + totalValueUsd: (Math.random() * 100).toFixed(2), + firstTokenValue: (Math.random() * 100).toFixed(2), + firstTokenValueUsd: (Math.random() * 100).toFixed(2), + secondTokenValue: (Math.random() * 10000).toFixed(2), + secondTokenValueUsd: (Math.random() * 10).toFixed(2), + }, + { + id: Math.random(), + tokenPair: 'DBZ/ADA', + DEX: 'Sundaeswap', firstToken: { - name: 'ADA', - id: 'ada', - value: 100.0, - usdValue: 20.0, + name: 'DBZ', + id: 'dbz', }, secondToken: { - name: 'Hosky', - id: 'hosky', - value: 9323.02, - usdValue: 10.0, + name: 'ADA', + id: 'ada', }, + PNLValue: (Math.random() * 10).toFixed(2), + PNLValueUsd: (Math.random() * 10).toFixed(2), + lpTokens: (Math.random() * 1000000).toFixed(2), + totalValue: (Math.random() * 1000).toFixed(2), + totalValueUsd: (Math.random() * 100).toFixed(2), + firstTokenValue: (Math.random() * 100).toFixed(2), + firstTokenValueUsd: (Math.random() * 100).toFixed(2), + secondTokenValue: (Math.random() * 10000).toFixed(2), + secondTokenValueUsd: (Math.random() * 10).toFixed(2), }, ], orderList: [ @@ -1035,11 +2009,11 @@ const mockData = { id: 'lvlc', }, DEX: 'Minswap', - assetPrice: 3, - assetAmount: 5, - transactionId: 'ebc533812j3jajsdkasdkaskd91286b54', - totalValue: 9.0, - totalValueUsd: 3.0, + assetPrice: Math.round(Math.random() * 10), + assetAmount: Math.round(Math.random() * 10), + transactionId: 'ebc533812j3jajsasdaasdasdkasdkaskd91286b54', + totalValue: (Math.random() * 10).toFixed(2), + totalValueUsd: (Math.random() * 10).toFixed(2), }, { id: Math.random(), @@ -1053,11 +2027,11 @@ const mockData = { id: 'lvlc', }, DEX: 'Sundaeswap', - assetPrice: 1, - assetAmount: 2, - transactionId: 'ebc533812j3jajsdkasdkaskd91286b54', - totalValue: 50.0, - totalValueUsd: 10.0, + assetPrice: Math.round(Math.random() * 10), + assetAmount: Math.round(Math.random() * 10), + transactionId: 'a2hd33812j3jajsasdaasdasdkasdkaskd912i5gr12', + totalValue: (Math.random() * 10).toFixed(2), + totalValueUsd: (Math.random() * 10).toFixed(2), }, ], }, From dd0dae9814246e0b1d8d78b7b81eea602692feea Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Wed, 29 May 2024 17:46:42 +0700 Subject: [PATCH 048/464] fix search and update mocks --- .../portfolio/useCases/Dapps/OrderTable.js | 14 +- .../useCases/Dapps/PortfolioDapps.js | 24 +- .../useCases/TokenDetails/TokenDetailChart.js | 2 +- .../TokenDetails/TokenDetailOverview.js | 8 +- .../useCases/Wallet/PortfolioWallet.js | 22 +- .../app/UI/pages/portfolio/mockData.js | 1210 ++++++----------- 6 files changed, 490 insertions(+), 790 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js index f6ba090335..44a6ac5dc3 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js @@ -21,6 +21,7 @@ import minswapPng from '../../common/assets/images/minswap-dex.png'; import { Chip } from '../../common/components/Chip'; import { Skeleton } from '../../../../components/Skeleton'; import { truncateAddressShort } from '../../../../../utils/formatters'; +import { Link } from 'react-router-dom'; const TableRowSkeleton = ({ id, theme }) => ( { - - {truncateAddressShort(row.transactionId, 10)} - + + + {truncateAddressShort(row.transactionId, 10)} + + diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js index 77780966f2..049a356c12 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js @@ -64,10 +64,10 @@ const PortfolioDapps = ({ data }) => { const lowercaseKeyword = keyword.toLowerCase(); - const liquidityTemp = liquidityList.filter(item => { + const liquidityTemp = data.liquidityList.filter(item => { return item.tokenPair.toLowerCase().includes(lowercaseKeyword); }); - const orderTemp = orderList.filter(item => { + const orderTemp = data.orderList.filter(item => { return item.pair.toLowerCase().includes(lowercaseKeyword); }); if (liquidityTemp && liquidityTemp.length > 0) { @@ -168,34 +168,36 @@ const PortfolioDapps = ({ data }) => { sx={{ marginLeft: theme.spacing(2) }} > 0} label={ 0 ? theme.palette.ds.secondary_c800 : theme.palette.ds.sys_magenta_c700 } style={{ marginRight: theme.spacing(0.5), - transform: mockData.PortfolioPage.balance.percents.active - ? '' - : 'rotate(180deg)', + transform: + mockData.PortfolioPage.balance.percents > 0 ? '' : 'rotate(180deg)', }} /> - {mockData.PortfolioPage.balance.percents.value}% + {mockData.PortfolioPage.balance.percents > 0 + ? mockData.PortfolioPage.balance.percents + : -1 * mockData.PortfolioPage.balance.percents} + % } /> 0} label={ - {mockData.PortfolioPage.balance.amount.active ? '+' : '-'} - {mockData.PortfolioPage.balance.amount.value} USD + {mockData.PortfolioPage.balance.amount > 0 ? '+' : ''} + {mockData.PortfolioPage.balance.amount} USD } /> diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js index 87fc4260c0..cec5ebedbc 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js @@ -27,7 +27,7 @@ const StyledButton = styled(Button)(({ theme }) => ({ })); const TokenDetailChart = ({ isLoading, tokenInfo }) => { - const isAda = tokenInfo.id === 'ada'; + const isAda = tokenInfo.id.toLowerCase() === 'ada'; const chartHeight = isAda ? 156 : 241; const theme = useTheme(); const { strings } = usePortfolio(); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js index b42253ef23..443d10eb79 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js @@ -7,7 +7,7 @@ import { usePortfolio } from '../../module/PortfolioContextProvider'; import adaPng from '../../../../../assets/images/ada.png'; const TokenDetailOverview = ({ tokenInfo, isLoading }) => { - const isAda = tokenInfo.id === 'ada'; + const isAda = tokenInfo.id.toLowerCase() === 'ada'; const theme = useTheme(); const { strings } = usePortfolio(); @@ -71,7 +71,7 @@ const TokenDetailOverview = ({ tokenInfo, isLoading }) => { {isLoading ? ( ) : ( - + cardano.org )} @@ -139,14 +139,14 @@ const TokenDetailOverview = ({ tokenInfo, isLoading }) => { {isLoading ? ( ) : ( - + Cardanoscan )} {isLoading ? ( ) : ( - + Adaex )} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js index 9701408f3a..af1a0f5e2e 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js @@ -37,7 +37,7 @@ const PortfolioWallet = ({ data }) => { const lowercaseKeyword = keyword.toLowerCase(); - const temp = tokenList.filter(item => { + const temp = data.filter(item => { return ( item.name.toLowerCase().includes(lowercaseKeyword) || item.id.toLowerCase().includes(lowercaseKeyword) @@ -114,34 +114,36 @@ const PortfolioWallet = ({ data }) => { sx={{ marginLeft: theme.spacing(2) }} > 0} label={ 0 ? theme.palette.ds.secondary_c800 : theme.palette.ds.sys_magenta_c700 } style={{ marginRight: theme.spacing(0.5), - transform: mockData.PortfolioPage.balance.percents.active - ? '' - : 'rotate(180deg)', + transform: + mockData.PortfolioPage.balance.percents > 0 ? '' : 'rotate(180deg)', }} /> - {mockData.PortfolioPage.balance.percents.value}% + {mockData.PortfolioPage.balance.percents > 0 + ? mockData.PortfolioPage.balance.percents + : -1 * mockData.PortfolioPage.balance.percents} + % } /> 0} label={ - {mockData.PortfolioPage.balance.amount.active ? '+' : '-'} - {mockData.PortfolioPage.balance.amount.value} USD + {mockData.PortfolioPage.balance.amount > 0 ? '+' : ''} + {mockData.PortfolioPage.balance.amount} USD } /> diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js b/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js index 74458070a7..f5377227cc 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js @@ -1,12 +1,18 @@ import { HistoryItemType } from '../../features/portfolio/useCases/TokenDetails/TransactionTable'; // UTILS -function getRandomDate(start, end) { - const date = new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime())); +const getRandomTime = (startDate, endDate) => { + const date = new Date( + startDate.getTime() + Math.random() * (endDate.getTime() - startDate.getTime()) + ); return date.toISOString(); -} +}; const startDate = new Date('01-01-2023 8:30'); const endDate = new Date('05-28-2024 11:40'); +const now = new Date(); +const start24HoursAgo = new Date(now.getTime() - 24 * 60 * 60 * 1000); +const start1WeekAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000); +const start1MonthAgo = new Date(now.getFullYear(), now.getMonth() - 1, now.getDate()); // ALL THE MOCK DATA FOR RENDERING UI NEW const mockData = { @@ -15,13 +21,13 @@ const mockData = { { name: 'AGIX', id: 'Agix', - price: 0.23, - portfolioPercents: 75, - '24h': -0.03, - '1W': 0.83, - '1M': 0.89, - totalAmount: 281023, - totalAmountUsd: 372561, + price: (10 * Math.random()).toFixed(2), + portfolioPercents: Math.round(100 * Math.random()), + '24h': -(10 * Math.random()).toFixed(2), + '1W': (10 * Math.random()).toFixed(2), + '1M': (10 * Math.random()).toFixed(2), + totalAmount: Math.round(100000 * Math.random()), + totalAmountUsd: Math.round(100000 * Math.random()), overview: { description: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", @@ -33,311 +39,155 @@ const mockData = { 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', }, performance: [ - { value: '0,277' }, - { value: '0,48' }, - { value: '557M' }, - { value: '34M' }, - { value: '55' }, - { value: '67,00' }, - { value: '100,67' }, - { value: '400,60' }, - { value: '3,01' }, - { value: '0,00002' }, + { value: Math.random().toFixed(3) }, + { value: Math.random().toFixed(2) }, + { value: `${Math.round(1000 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}` }, + { value: (100 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: (10 * Math.random()).toFixed(2) }, + { value: (10 * Math.random()).toFixed(5) }, ], chartData: [ { - time: '2024-05-28T04:43:27.000Z', + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1MonthAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1MonthAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1MonthAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, ], }, { - name: 'ADA', - id: 'ada', - price: 0.23, - portfolioPercents: 68, - '24h': -0.59, - '1W': 0.24, - '1M': 0.17, - totalAmount: 321023, - totalAmountUsd: 2561, - overview: { - description: - "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", - website: 'https://www.cardano.org', - detailOn: 'https://www.yoroiwallet.com', - }, - performance: [ - { value: '0,277' }, - { value: '0,48' }, - { value: '557M' }, - { value: '34M' }, - { value: '1' }, - { value: '67,00' }, - { value: '100,67' }, - { value: '400,60' }, - { value: '3,01' }, - { value: '0,00002' }, - ], - chartData: [ - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - ], - }, - { - name: 'TKN', - id: 'Tkn', - price: 0.82, - portfolioPercents: 34, - '24h': -0.93, - '1W': 0.23, - '1M': 0.829, - totalAmount: 1281023, - totalAmountUsd: 372561, + name: 'DOGE', + id: 'Doge', + price: (10 * Math.random()).toFixed(2), + portfolioPercents: Math.round(100 * Math.random()), + '24h': -(10 * Math.random()).toFixed(2), + '1W': (10 * Math.random()).toFixed(2), + '1M': (10 * Math.random()).toFixed(2), + totalAmount: Math.round(100000 * Math.random()), + totalAmountUsd: Math.round(100000 * Math.random()), overview: { description: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", @@ -349,155 +199,155 @@ const mockData = { 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', }, performance: [ - { value: '0,277' }, - { value: '0,48' }, - { value: '557M' }, - { value: '34M' }, - { value: '55' }, - { value: '67,00' }, - { value: '100,67' }, - { value: '400,60' }, - { value: '3,01' }, - { value: '0,00002' }, + { value: Math.random().toFixed(3) }, + { value: Math.random().toFixed(2) }, + { value: `${Math.round(1000 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}` }, + { value: (100 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: (10 * Math.random()).toFixed(2) }, + { value: (10 * Math.random()).toFixed(5) }, ], chartData: [ { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1MonthAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1MonthAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1MonthAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, ], }, { - name: 'DOGE', - id: 'Doge', - price: 0.23, - portfolioPercents: 75, - '24h': -0.03, - '1W': 0.83, - '1M': 0.89, - totalAmount: 281023, - totalAmountUsd: 372561, + name: 'ADA', + id: 'Ada', + price: (10 * Math.random()).toFixed(2), + portfolioPercents: Math.round(100 * Math.random()), + '24h': -(10 * Math.random()).toFixed(2), + '1W': (10 * Math.random()).toFixed(2), + '1M': (10 * Math.random()).toFixed(2), + totalAmount: Math.round(100000 * Math.random()), + totalAmountUsd: Math.round(100000 * Math.random()), overview: { description: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", @@ -509,140 +359,140 @@ const mockData = { 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', }, performance: [ - { value: '0,277' }, - { value: '0,48' }, - { value: '557M' }, - { value: '34M' }, - { value: '55' }, - { value: '67,00' }, - { value: '100,67' }, - { value: '400,60' }, - { value: '3,01' }, - { value: '0,00002' }, + { value: Math.random().toFixed(3) }, + { value: Math.random().toFixed(2) }, + { value: `${Math.round(1000 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}` }, + { value: (100 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: (10 * Math.random()).toFixed(2) }, + { value: (10 * Math.random()).toFixed(5) }, ], chartData: [ { - time: '2024-05-28T04:43:27.000Z', + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1MonthAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1MonthAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1MonthAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, @@ -651,169 +501,13 @@ const mockData = { { name: 'Shiba', id: 'shiba', - price: 0.23, - portfolioPercents: 68, - '24h': -0.59, - '1W': 0.24, - '1M': 0.17, - totalAmount: 321023, - totalAmountUsd: 2561, - overview: { - description: - "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", - website: 'https://www.cardano.org', - detailOn: 'https://www.yoroiwallet.com', - }, - performance: [ - { value: '0,277' }, - { value: '0,48' }, - { value: '557M' }, - { value: '34M' }, - { value: '1' }, - { value: '67,00' }, - { value: '100,67' }, - { value: '400,60' }, - { value: '3,01' }, - { value: '0,00002' }, - ], - chartData: [ - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomDate(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - ], - }, - { - name: 'TKN2', - id: 'Tkn2', - price: 0.82, - portfolioPercents: 34, - '24h': -0.93, - '1W': 0.23, - '1M': 0.829, - totalAmount: 1281023, - totalAmountUsd: 372561, + price: (10 * Math.random()).toFixed(2), + portfolioPercents: Math.round(100 * Math.random()), + '24h': -(10 * Math.random()).toFixed(2), + '1W': (10 * Math.random()).toFixed(2), + '1M': (10 * Math.random()).toFixed(2), + totalAmount: Math.round(100000 * Math.random()), + totalAmountUsd: Math.round(100000 * Math.random()), overview: { description: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", @@ -825,155 +519,155 @@ const mockData = { 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', }, performance: [ - { value: '0,277' }, - { value: '0,48' }, - { value: '557M' }, - { value: '34M' }, - { value: '55' }, - { value: '67,00' }, - { value: '100,67' }, - { value: '400,60' }, - { value: '3,01' }, - { value: '0,00002' }, + { value: Math.random().toFixed(3) }, + { value: Math.random().toFixed(2) }, + { value: `${Math.round(1000 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}` }, + { value: (100 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: (10 * Math.random()).toFixed(2) }, + { value: (10 * Math.random()).toFixed(5) }, ], chartData: [ { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1MonthAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1MonthAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1MonthAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, ], }, { - name: 'TKN3', - id: 'Tkn3', - price: 0.82, - portfolioPercents: 34, - '24h': -0.93, - '1W': 0.23, - '1M': 0.829, - totalAmount: 1281023, - totalAmountUsd: 372561, + name: 'ALT', + id: 'alt', + price: (10 * Math.random()).toFixed(2), + portfolioPercents: Math.round(100 * Math.random()), + '24h': -(10 * Math.random()).toFixed(2), + '1W': (10 * Math.random()).toFixed(2), + '1M': (10 * Math.random()).toFixed(2), + totalAmount: Math.round(100000 * Math.random()), + totalAmountUsd: Math.round(100000 * Math.random()), overview: { description: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", @@ -985,155 +679,155 @@ const mockData = { 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', }, performance: [ - { value: '0,277' }, - { value: '0,48' }, - { value: '557M' }, - { value: '34M' }, - { value: '55' }, - { value: '67,00' }, - { value: '100,67' }, - { value: '400,60' }, - { value: '3,01' }, - { value: '0,00002' }, + { value: Math.random().toFixed(3) }, + { value: Math.random().toFixed(2) }, + { value: `${Math.round(1000 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}` }, + { value: (100 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: (10 * Math.random()).toFixed(2) }, + { value: (10 * Math.random()).toFixed(5) }, ], chartData: [ { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1MonthAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1MonthAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1MonthAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, ], }, { - name: 'TKN4', - id: 'Tkn4', - price: 0.82, - portfolioPercents: 34, - '24h': -0.93, - '1W': 0.23, - '1M': 0.829, - totalAmount: 1281023, - totalAmountUsd: 372561, + name: 'TKN1', + id: 'Tkn1', + price: (10 * Math.random()).toFixed(2), + portfolioPercents: Math.round(100 * Math.random()), + '24h': -(10 * Math.random()).toFixed(2), + '1W': (10 * Math.random()).toFixed(2), + '1M': (10 * Math.random()).toFixed(2), + totalAmount: Math.round(100000 * Math.random()), + totalAmountUsd: Math.round(100000 * Math.random()), overview: { description: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", @@ -1145,155 +839,155 @@ const mockData = { 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', }, performance: [ - { value: '0,277' }, - { value: '0,48' }, - { value: '557M' }, - { value: '34M' }, - { value: '55' }, - { value: '67,00' }, - { value: '100,67' }, - { value: '400,60' }, - { value: '3,01' }, - { value: '0,00002' }, + { value: Math.random().toFixed(3) }, + { value: Math.random().toFixed(2) }, + { value: `${Math.round(1000 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}` }, + { value: (100 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: (10 * Math.random()).toFixed(2) }, + { value: (10 * Math.random()).toFixed(5) }, ], chartData: [ { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1MonthAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1MonthAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1MonthAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, ], }, { - name: 'TKN5', - id: 'Tkn5', - price: 0.82, - portfolioPercents: 34, - '24h': -0.93, - '1W': 0.23, - '1M': 0.829, - totalAmount: 1281023, - totalAmountUsd: 372561, + name: 'TKN2', + id: 'Tkn2', + price: (10 * Math.random()).toFixed(2), + portfolioPercents: Math.round(100 * Math.random()), + '24h': -(10 * Math.random()).toFixed(2), + '1W': (10 * Math.random()).toFixed(2), + '1M': (10 * Math.random()).toFixed(2), + totalAmount: Math.round(100000 * Math.random()), + totalAmountUsd: Math.round(100000 * Math.random()), overview: { description: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", @@ -1305,155 +999,155 @@ const mockData = { 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', }, performance: [ - { value: '0,277' }, - { value: '0,48' }, - { value: '557M' }, - { value: '34M' }, - { value: '55' }, - { value: '67,00' }, - { value: '100,67' }, - { value: '400,60' }, - { value: '3,01' }, - { value: '0,00002' }, + { value: Math.random().toFixed(3) }, + { value: Math.random().toFixed(2) }, + { value: `${Math.round(1000 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}` }, + { value: (100 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: (10 * Math.random()).toFixed(2) }, + { value: (10 * Math.random()).toFixed(5) }, ], chartData: [ { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1MonthAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1MonthAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1MonthAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, ], }, { - name: 'TKN6', - id: 'Tkn6', - price: 0.82, - portfolioPercents: 34, - '24h': -0.93, - '1W': 0.23, - '1M': 0.829, - totalAmount: 1281023, - totalAmountUsd: 372561, + name: 'TKN3', + id: 'Tkn3', + price: (10 * Math.random()).toFixed(2), + portfolioPercents: Math.round(100 * Math.random()), + '24h': -(10 * Math.random()).toFixed(2), + '1W': (10 * Math.random()).toFixed(2), + '1M': (10 * Math.random()).toFixed(2), + totalAmount: Math.round(100000 * Math.random()), + totalAmountUsd: Math.round(100000 * Math.random()), overview: { description: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", @@ -1465,155 +1159,155 @@ const mockData = { 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', }, performance: [ - { value: '0,277' }, - { value: '0,48' }, - { value: '557M' }, - { value: '34M' }, - { value: '55' }, - { value: '67,00' }, - { value: '100,67' }, - { value: '400,60' }, - { value: '3,01' }, - { value: '0,00002' }, + { value: Math.random().toFixed(3) }, + { value: Math.random().toFixed(2) }, + { value: `${Math.round(1000 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}` }, + { value: (100 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: (10 * Math.random()).toFixed(2) }, + { value: (10 * Math.random()).toFixed(5) }, ], chartData: [ { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1MonthAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1MonthAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1MonthAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, ], }, { - name: 'TKN7', - id: 'Tkn7', - price: 0.82, - portfolioPercents: 34, - '24h': -0.93, - '1W': 0.23, - '1M': 0.829, - totalAmount: 1281023, - totalAmountUsd: 372561, + name: 'TKN6', + id: 'Tkn6', + price: (10 * Math.random()).toFixed(2), + portfolioPercents: Math.round(100 * Math.random()), + '24h': -(10 * Math.random()).toFixed(2), + '1W': (10 * Math.random()).toFixed(2), + '1M': (10 * Math.random()).toFixed(2), + totalAmount: Math.round(100000 * Math.random()), + totalAmountUsd: Math.round(100000 * Math.random()), overview: { description: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", @@ -1625,140 +1319,140 @@ const mockData = { 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', }, performance: [ - { value: '0,277' }, - { value: '0,48' }, - { value: '557M' }, - { value: '34M' }, - { value: '55' }, - { value: '67,00' }, - { value: '100,67' }, - { value: '400,60' }, - { value: '3,01' }, - { value: '0,00002' }, + { value: Math.random().toFixed(3) }, + { value: Math.random().toFixed(2) }, + { value: `${Math.round(1000 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}` }, + { value: (100 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: (10 * Math.random()).toFixed(2) }, + { value: (10 * Math.random()).toFixed(5) }, ], chartData: [ { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1MonthAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1MonthAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1MonthAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, @@ -1767,13 +1461,13 @@ const mockData = { { name: 'TKN8', id: 'Tkn8', - price: 0.82, - portfolioPercents: 34, - '24h': -0.93, - '1W': 0.23, - '1M': 0.829, - totalAmount: 1281023, - totalAmountUsd: 372561, + price: (10 * Math.random()).toFixed(2), + portfolioPercents: Math.round(100 * Math.random()), + '24h': -(10 * Math.random()).toFixed(2), + '1W': (10 * Math.random()).toFixed(2), + '1M': (10 * Math.random()).toFixed(2), + totalAmount: Math.round(100000 * Math.random()), + totalAmountUsd: Math.round(100000 * Math.random()), overview: { description: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", @@ -1785,140 +1479,140 @@ const mockData = { 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', }, performance: [ - { value: '0,277' }, - { value: '0,48' }, - { value: '557M' }, - { value: '34M' }, - { value: '55' }, - { value: '67,00' }, - { value: '100,67' }, - { value: '400,60' }, - { value: '3,01' }, - { value: '0,00002' }, + { value: Math.random().toFixed(3) }, + { value: Math.random().toFixed(2) }, + { value: `${Math.round(1000 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}` }, + { value: (100 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: (10 * Math.random()).toFixed(2) }, + { value: (10 * Math.random()).toFixed(5) }, ], chartData: [ { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start24HoursAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1WeekAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1MonthAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1MonthAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(start1MonthAgo, now), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomDate(startDate, endDate), + time: getRandomTime(startDate, endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, @@ -2011,7 +1705,7 @@ const mockData = { DEX: 'Minswap', assetPrice: Math.round(Math.random() * 10), assetAmount: Math.round(Math.random() * 10), - transactionId: 'ebc533812j3jajsasdaasdasdkasdkaskd91286b54', + transactionId: '043a2bfbb1d66d9883a068059a4e35bb53b7bdc6f5637d7b934150c453ffb116', totalValue: (Math.random() * 10).toFixed(2), totalValueUsd: (Math.random() * 10).toFixed(2), }, @@ -2029,7 +1723,7 @@ const mockData = { DEX: 'Sundaeswap', assetPrice: Math.round(Math.random() * 10), assetAmount: Math.round(Math.random() * 10), - transactionId: 'a2hd33812j3jajsasdaasdasdkasdkaskd912i5gr12', + transactionId: 'a0a863e8eb398c04caebdbd3a3e50733bcb6c06e118c36eadb7f7b53424668a5', totalValue: (Math.random() * 10).toFixed(2), totalValueUsd: (Math.random() * 10).toFixed(2), }, @@ -2038,16 +1732,10 @@ const mockData = { PortfolioPage: { balance: { - ada: '289869,04', - usd: '940,64', - percents: { - active: true, - value: '0,03', - }, - amount: { - active: true, - value: '0,56', - }, + ada: (100000 * Math.random()).toFixed(2), + usd: (1000 * Math.random()).toFixed(2), + percents: -Math.random().toFixed(2), + amount: -Math.random().toFixed(2), }, }, From 52f43b316e2c5dd0a3839bde1f3eeab850a71a0b Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Thu, 30 May 2024 11:18:34 +0700 Subject: [PATCH 049/464] modify icons and strings --- .../assets/icons/transaction-history/Arrow.js | 2 + .../icons/transaction-history/Expand.js | 15 +- .../portfolio/common/hooks/useStrings.js | 15 + .../useCases/Dapps/LiquidityTable.js | 26 +- .../portfolio/useCases/Dapps/OrderTable.js | 19 +- .../useCases/Dapps/PortfolioDapps.js | 22 +- .../useCases/TokenDetails/TokenDetails.js | 4 +- .../useCases/TokenDetails/TransactionTable.js | 311 +++++++-------- .../useCases/Wallet/PortfolioWallet.js | 38 +- .../portfolio/useCases/Wallet/StatsTable.js | 8 +- .../UI/pages/portfolio/PortfolioDetailPage.js | 2 +- .../app/UI/pages/portfolio/mockData.js | 361 +++++++++++++++--- .../app/i18n/locales/en-US.json | 3 + 13 files changed, 560 insertions(+), 266 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Arrow.js b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Arrow.js index d002455690..4f002c8b33 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Arrow.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Arrow.js @@ -12,10 +12,12 @@ const Arrow = props => { > diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Expand.js b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Expand.js index d02d82de75..0e2f84e352 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Expand.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Expand.js @@ -3,17 +3,18 @@ import React from 'react'; const Expand = props => { return ( ); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js index b702a1d244..7b5c0516c2 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js @@ -155,6 +155,18 @@ export const messages = Object.freeze( id: 'portfolio.statsTable.header.price', defaultMessage: '!!!Price', }, + '24h': { + id: 'portfolio.statsTable.header.24h', + defaultMessage: '!!!24h', + }, + '1W': { + id: 'portfolio.statsTable.header.1w', + defaultMessage: '!!!1W', + }, + '1M': { + id: 'portfolio.statsTable.header.1m', + defaultMessage: '!!!1M', + }, portfolio: { id: 'portfolio.statsTable.header.portfolio', defaultMessage: '!!!Portfolio', @@ -305,6 +317,9 @@ export const getStrings = intl => { allTimeLow: intl.formatMessage(messages.allTimeLow), name: intl.formatMessage(messages.name), price: intl.formatMessage(messages.price), + '24h': intl.formatMessage(messages['24h']), + '1W': intl.formatMessage(messages['1W']), + '1M': intl.formatMessage(messages['1M']), portfolio: intl.formatMessage(messages.portfolio), totalAmount: intl.formatMessage(messages.totalAmount), transactionHistory: intl.formatMessage(messages.transactionHistory), diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js index 8fa54c2751..b3d002f80d 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js @@ -166,14 +166,22 @@ const LiquidityTable = ({ data, isLoading }) => {
- {headCells.map(({ label, align, id }) => ( - + {headCells.map(({ label, align, id }, index) => ( + handleRequestSort(id)} - sx={{ float: align, cursor: 'pointer' }} + onClick={() => + index === 0 || index === headCells.length - 1 ? handleRequestSort(id) : null + } + sx={{ + float: align, + cursor: index === 0 || index === headCells.length - 1 ? 'pointer' : 'normal', + justifyContent: + index === 0 || index === headCells.length - 1 ? 'flex-start' : 'space-between', + width: index === 0 || index === headCells.length - 1 ? 'fit-content' : '100%', + }} > { > {label} - + + index === 0 || index === headCells.length - 1 ? null : handleRequestSort(id) + } + /> ))} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js index 44a6ac5dc3..674cdfe228 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js @@ -21,7 +21,6 @@ import minswapPng from '../../common/assets/images/minswap-dex.png'; import { Chip } from '../../common/components/Chip'; import { Skeleton } from '../../../../components/Skeleton'; import { truncateAddressShort } from '../../../../../utils/formatters'; -import { Link } from 'react-router-dom'; const TableRowSkeleton = ({ id, theme }) => ( { - + chrome.tabs.create({ + url: `https://cardanoscan.io/transaction/${row.transactionId}`, + }) + } + sx={{ color: theme.palette.ds.text_primary_medium, cursor: 'pointer' }} > - - {truncateAddressShort(row.transactionId, 10)} - - + {truncateAddressShort(row.transactionId, 10)} + diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js index 049a356c12..4ce1333843 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js @@ -111,7 +111,7 @@ const PortfolioDapps = ({ data }) => { ) : ( - {mockData.PortfolioPage.balance.ada} + {mockData.common.balance.ada} )} @@ -135,7 +135,7 @@ const PortfolioDapps = ({ data }) => { ) : ( - {mockData.PortfolioPage.balance.usd} USD + {mockData.common.balance.usd} USD )} {isLoading ? ( @@ -168,36 +168,36 @@ const PortfolioDapps = ({ data }) => { sx={{ marginLeft: theme.spacing(2) }} > 0} + active={mockData.common.balance.percents > 0} label={ 0 + mockData.common.balance.percents > 0 ? theme.palette.ds.secondary_c800 : theme.palette.ds.sys_magenta_c700 } style={{ marginRight: theme.spacing(0.5), transform: - mockData.PortfolioPage.balance.percents > 0 ? '' : 'rotate(180deg)', + mockData.common.balance.percents > 0 ? '' : 'rotate(180deg)', }} /> - {mockData.PortfolioPage.balance.percents > 0 - ? mockData.PortfolioPage.balance.percents - : -1 * mockData.PortfolioPage.balance.percents} + {mockData.common.balance.percents > 0 + ? mockData.common.balance.percents + : -1 * mockData.common.balance.percents} % } /> 0} + active={mockData.common.balance.amount > 0} label={ - {mockData.PortfolioPage.balance.amount > 0 ? '+' : ''} - {mockData.PortfolioPage.balance.amount} USD + {mockData.common.balance.amount > 0 ? '+' : ''} + {mockData.common.balance.amount} USD } /> diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js index 973a11fbeb..614e5488a1 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js @@ -45,7 +45,7 @@ const TabContent = styled(Box)({ flex: 1, }); -const TokenDetails = ({ tokenInfo, mockHistory }) => { +const TokenDetails = ({ tokenInfo, transactionHistory }) => { const theme = useTheme(); const navigateTo = useNavigateTo(); const { strings } = usePortfolio(); @@ -185,7 +185,7 @@ const TokenDetails = ({ tokenInfo, mockHistory }) => { - + ); }; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js index 9cbd0e2f42..39d16e6167 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js @@ -1,4 +1,4 @@ -import React, { useMemo } from 'react'; +import React, { useMemo, useState } from 'react'; import { Box, Stack, @@ -13,10 +13,10 @@ import { } from '@mui/material'; import { useTheme } from '@mui/material/styles'; import { Card } from '../../../../components'; -import { default as ArrowIcon } from '../../common/assets/icons/transaction-history/Arrow'; -import { default as ExpandIcon } from '../../common/assets/icons/transaction-history/Expand'; -import { default as ErrorIcon } from '../../common/assets/icons/transaction-history/Error'; -import { default as WithdrawIcon } from '../../common/assets/icons/transaction-history/Withdraw'; +import ArrowIcon from '../../common/assets/icons/transaction-history/Arrow'; +import ExpandIcon from '../../common/assets/icons/transaction-history/Expand'; +import ErrorIcon from '../../common/assets/icons/transaction-history/Error'; +import WithdrawIcon from '../../common/assets/icons/transaction-history/Withdraw'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import moment from 'moment'; @@ -28,6 +28,12 @@ export const HistoryItemType = Object.freeze({ DELEGATE: 5, }); +export const HistoryItemStatus = Object.freeze({ + LOW: 'Low', + HIGH: 'High', + FAILED: 'Failed', +}); + const Container = styled(Box)(({ theme }) => ({ width: '100%', margin: '30px 0 100px', @@ -37,7 +43,7 @@ const TransactionTable = ({ history }) => { const theme = useTheme(); const { strings } = usePortfolio(); - const mapLabel = arr => + const mapStrings = arr => arr.map(item => { let labelTemp = ''; let statusTemp = ''; @@ -64,13 +70,13 @@ const TransactionTable = ({ history }) => { } switch (item.status) { - case 'Low': + case HistoryItemStatus.LOW: statusTemp = strings.low; break; - case 'High': + case HistoryItemStatus.HIGH: statusTemp = strings.high; break; - case 'Failed': + case HistoryItemStatus.FAILED: statusTemp = strings.failed; break; default: @@ -90,7 +96,7 @@ const TransactionTable = ({ history }) => { const yesterday = new Date(); yesterday.setDate(today.getDate() - 1); - return _.chain(mapLabel(history)) + return _.chain(mapStrings(history)) .groupBy(t => { const time = new Date(t.time); time.setHours(0, 0, 0, 0); // set the time to 00:00:00 for grouping by day @@ -158,151 +164,12 @@ const TransactionTable = ({ history }) => { {item.title} {item.data.map((row, index) => ( - - - - - {row.type === HistoryItemType.SENT && ( - - )} - {row.type === HistoryItemType.RECEIVED && ( - - )} - {row.type === HistoryItemType.ERROR && ( - - )} - {row.type === HistoryItemType.WITHDRAW && ( - - )} - {row.type === HistoryItemType.DELEGATE && ( - - )} - - - - {row.label} - - - {moment.utc(row.time).local().format('h:mm A')} - - - - - - - {row.status} - - - - - - {row.fee ? row.fee.amount : '-'} - - - {row.fee ? row.fee.usd : '-'} - - - - - - - - {row.type === HistoryItemType.RECEIVED && '+'} - {row.amount.total} - - - {row.type === HistoryItemType.RECEIVED && '+'} - {row.amount.usd} - - {row.type === HistoryItemType.RECEIVED && ( - - + {row.amount.asset} {strings.assets} - - )} - {row.type === 'Sent' && ( - - {row.amount.asset} - - )} - - - - - + ))} ))} @@ -314,4 +181,138 @@ const TransactionTable = ({ history }) => { ); }; +const TransactionHistoryItem = ({ index, row, theme, strings }) => { + const [isExpanded, setIsExpanded] = useState(false); + + return ( + + + + + {row.type === HistoryItemType.SENT && ( + + )} + {row.type === HistoryItemType.RECEIVED && ( + + )} + {row.type === HistoryItemType.ERROR && ( + + )} + {row.type === HistoryItemType.WITHDRAW && ( + + )} + {row.type === HistoryItemType.DELEGATE && ( + + )} + + + {row.label} + + {moment.utc(row.time).local().format('h:mm A')} + + + + + + + {row.status} + + + + + + {row.feeValue ? `${row.feeValue} ADA` : '-'} + + + {row.feeValueUsd ? `${row.feeValueUsd} USD` : '-'} + + + + + + + + {(row.type === HistoryItemType.RECEIVED || + row.type === HistoryItemType.WITHDRAW || + row.type === HistoryItemType.DELEGATE) && + '+ '} + {row.amountTotal} ADA + + {isExpanded ? ( + + + {(row.type === HistoryItemType.RECEIVED || + row.type === HistoryItemType.WITHDRAW || + row.type === HistoryItemType.DELEGATE) && + '+ '} + {row.amountTotalUsd} USD + + {row.type === HistoryItemType.RECEIVED && ( + + + {row.amountAsset} {strings.assets} + + )} + {row.type === HistoryItemType.SENT && ( + + {row.amountAsset} + + )} + + ) : null} + + setIsExpanded(!isExpanded)} + /> + + + + ); +}; + export default TransactionTable; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js index af1a0f5e2e..97ddef07a0 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js @@ -8,6 +8,7 @@ import { usePortfolio } from '../../module/PortfolioContextProvider'; import StatsTable from './StatsTable'; import mockData from '../../../../pages/portfolio/mockData'; import ArrowIcon from '../../common/assets/icons/Arrow'; +import illustrationPng from '../../common/assets/images/illustration.png'; import { Chip } from '../../common/components/Chip'; import { Skeleton } from '../../../../components/Skeleton'; @@ -51,7 +52,7 @@ const PortfolioWallet = ({ data }) => { }, [keyword]); return ( - + @@ -59,7 +60,7 @@ const PortfolioWallet = ({ data }) => { ) : ( - {mockData.PortfolioPage.balance.ada} + {mockData.common.balance.ada} )} @@ -83,7 +84,7 @@ const PortfolioWallet = ({ data }) => { ) : ( - {mockData.PortfolioPage.balance.usd} USD + {mockData.common.balance.usd} USD )} {isLoading ? ( @@ -114,36 +115,36 @@ const PortfolioWallet = ({ data }) => { sx={{ marginLeft: theme.spacing(2) }} > 0} + active={mockData.common.balance.percents > 0} label={ 0 + mockData.common.balance.percents > 0 ? theme.palette.ds.secondary_c800 : theme.palette.ds.sys_magenta_c700 } style={{ marginRight: theme.spacing(0.5), transform: - mockData.PortfolioPage.balance.percents > 0 ? '' : 'rotate(180deg)', + mockData.common.balance.percents > 0 ? '' : 'rotate(180deg)', }} /> - {mockData.PortfolioPage.balance.percents > 0 - ? mockData.PortfolioPage.balance.percents - : -1 * mockData.PortfolioPage.balance.percents} + {mockData.common.balance.percents > 0 + ? mockData.common.balance.percents + : -1 * mockData.common.balance.percents} % } /> 0} + active={mockData.common.balance.amount > 0} label={ - {mockData.PortfolioPage.balance.amount > 0 ? '+' : ''} - {mockData.PortfolioPage.balance.amount} USD + {mockData.common.balance.amount > 0 ? '+' : ''} + {mockData.common.balance.amount} USD } /> @@ -171,7 +172,18 @@ const PortfolioWallet = ({ data }) => { } /> - + {tokenList.length > 0 ? ( + + ) : ( + + + + + {strings.noResultsForThisSearch} + + + + )} ); }; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js index 26de6b9fda..61411138d4 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js @@ -79,9 +79,9 @@ const StatsTable = ({ data, isLoading }) => { const headCells = [ { id: 'name', label: strings.name, align: 'left', sortType: 'character' }, { id: 'price', label: strings.price, align: 'left', sortType: 'numeric' }, - { id: '24h', label: '24H', align: 'left', sortType: 'numeric' }, - { id: '1W', label: '1W', align: 'left', sortType: 'numeric' }, - { id: '1M', label: '1M', align: 'left', sortType: 'numeric' }, + { id: '24h', label: strings['24h'], align: 'left', sortType: 'numeric' }, + { id: '1W', label: strings['1W'], align: 'left', sortType: 'numeric' }, + { id: '1M', label: strings['1M'], align: 'left', sortType: 'numeric' }, { id: 'portfolioPercents', label: `${strings.portfolio} %`, @@ -151,7 +151,7 @@ const StatsTable = ({ data, isLoading }) => { {headCells.map(({ label, align, id }) => ( - + { return ( - + ); }; diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js b/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js index f5377227cc..6eca5d161e 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js @@ -1,4 +1,7 @@ -import { HistoryItemType } from '../../features/portfolio/useCases/TokenDetails/TransactionTable'; +import { + HistoryItemStatus, + HistoryItemType, +} from '../../features/portfolio/useCases/TokenDetails/TransactionTable'; // UTILS const getRandomTime = (startDate, endDate) => { @@ -16,6 +19,15 @@ const start1MonthAgo = new Date(now.getFullYear(), now.getMonth() - 1, now.getDa // ALL THE MOCK DATA FOR RENDERING UI NEW const mockData = { + common: { + balance: { + ada: (100000 * Math.random()).toFixed(2), + usd: (1000 * Math.random()).toFixed(2), + percents: -Math.random().toFixed(2), + amount: -Math.random().toFixed(2), + }, + }, + wallet: { tokenList: [ { @@ -1689,6 +1701,138 @@ const mockData = { secondTokenValue: (Math.random() * 10000).toFixed(2), secondTokenValueUsd: (Math.random() * 10).toFixed(2), }, + { + id: Math.random(), + tokenPair: 'ADA/BRICKS', + DEX: 'Minswap', + firstToken: { + name: 'ADA', + id: 'ada', + }, + secondToken: { + name: 'BRICKS', + id: 'bricks', + }, + PNLValue: (Math.random() * 10).toFixed(2), + PNLValueUsd: (Math.random() * 10).toFixed(2), + lpTokens: (Math.random() * 1000000).toFixed(2), + totalValue: (Math.random() * 1000).toFixed(2), + totalValueUsd: (Math.random() * 100).toFixed(2), + firstTokenValue: (Math.random() * 100).toFixed(2), + firstTokenValueUsd: (Math.random() * 100).toFixed(2), + secondTokenValue: (Math.random() * 10000).toFixed(2), + secondTokenValueUsd: (Math.random() * 10).toFixed(2), + }, + { + id: Math.random(), + tokenPair: 'ADA/POPPA', + DEX: 'Sundaeswap', + firstToken: { + name: 'ADA', + id: 'ada', + }, + secondToken: { + name: 'POPPA', + id: 'poppa', + }, + PNLValue: (Math.random() * 10).toFixed(2), + PNLValueUsd: (Math.random() * 10).toFixed(2), + lpTokens: (Math.random() * 1000000).toFixed(2), + totalValue: (Math.random() * 1000).toFixed(2), + totalValueUsd: (Math.random() * 100).toFixed(2), + firstTokenValue: (Math.random() * 100).toFixed(2), + firstTokenValueUsd: (Math.random() * 100).toFixed(2), + secondTokenValue: (Math.random() * 10000).toFixed(2), + secondTokenValueUsd: (Math.random() * 10).toFixed(2), + }, + { + id: Math.random(), + tokenPair: 'CUBY/VALDO', + DEX: 'Sundaeswap', + firstToken: { + name: 'CUBY', + id: 'cuby', + }, + secondToken: { + name: 'VALDO', + id: 'valdo', + }, + PNLValue: (Math.random() * 10).toFixed(2), + PNLValueUsd: (Math.random() * 10).toFixed(2), + lpTokens: (Math.random() * 1000000).toFixed(2), + totalValue: (Math.random() * 1000).toFixed(2), + totalValueUsd: (Math.random() * 100).toFixed(2), + firstTokenValue: (Math.random() * 100).toFixed(2), + firstTokenValueUsd: (Math.random() * 100).toFixed(2), + secondTokenValue: (Math.random() * 10000).toFixed(2), + secondTokenValueUsd: (Math.random() * 10).toFixed(2), + }, + { + id: Math.random(), + tokenPair: 'SNEK/USDTST', + DEX: 'Minswap', + firstToken: { + name: 'SNEK', + id: 'snek', + }, + secondToken: { + name: 'USDTST', + id: 'usdtst', + }, + PNLValue: (Math.random() * 10).toFixed(2), + PNLValueUsd: (Math.random() * 10).toFixed(2), + lpTokens: (Math.random() * 1000000).toFixed(2), + totalValue: (Math.random() * 1000).toFixed(2), + totalValueUsd: (Math.random() * 100).toFixed(2), + firstTokenValue: (Math.random() * 100).toFixed(2), + firstTokenValueUsd: (Math.random() * 100).toFixed(2), + secondTokenValue: (Math.random() * 10000).toFixed(2), + secondTokenValueUsd: (Math.random() * 10).toFixed(2), + }, + { + id: Math.random(), + tokenPair: 'GERO/NMKR', + DEX: 'Minswap', + firstToken: { + name: 'GERO', + id: 'gero', + }, + secondToken: { + name: 'NMKR', + id: 'nmkr', + }, + PNLValue: (Math.random() * 10).toFixed(2), + PNLValueUsd: (Math.random() * 10).toFixed(2), + lpTokens: (Math.random() * 1000000).toFixed(2), + totalValue: (Math.random() * 1000).toFixed(2), + totalValueUsd: (Math.random() * 100).toFixed(2), + firstTokenValue: (Math.random() * 100).toFixed(2), + firstTokenValueUsd: (Math.random() * 100).toFixed(2), + secondTokenValue: (Math.random() * 10000).toFixed(2), + secondTokenValueUsd: (Math.random() * 10).toFixed(2), + }, + { + id: Math.random(), + tokenPair: 'SMOKES/CPASS', + DEX: 'Minswap', + firstToken: { + name: 'SMOKES', + id: 'smokes', + }, + secondToken: { + name: 'CPASS', + id: 'cpass', + }, + PNLValue: (Math.random() * 10).toFixed(2), + PNLValueUsd: (Math.random() * 10).toFixed(2), + lpTokens: (Math.random() * 1000000).toFixed(2), + totalValue: (Math.random() * 1000).toFixed(2), + totalValueUsd: (Math.random() * 100).toFixed(2), + firstTokenValue: (Math.random() * 100).toFixed(2), + firstTokenValueUsd: (Math.random() * 100).toFixed(2), + secondTokenValue: (Math.random() * 10000).toFixed(2), + secondTokenValueUsd: (Math.random() * 10).toFixed(2), + }, ], orderList: [ { @@ -1727,80 +1871,181 @@ const mockData = { totalValue: (Math.random() * 10).toFixed(2), totalValueUsd: (Math.random() * 10).toFixed(2), }, + { + id: Math.random(), + pair: 'DICE/WTAB', + firstToken: { + name: 'DICE', + id: 'dice', + }, + secondToken: { + name: 'WTAB', + id: 'wtab', + }, + DEX: 'Minswap', + assetPrice: Math.round(Math.random() * 10), + assetAmount: Math.round(Math.random() * 10), + transactionId: '043a2bfbb1d66d9883a068059a4e35bb53b7bdc6f5637d7b934150c453ffb116', + totalValue: (Math.random() * 10).toFixed(2), + totalValueUsd: (Math.random() * 10).toFixed(2), + }, + { + id: Math.random(), + pair: 'FREN/SMOKES', + firstToken: { + name: 'FREN', + id: 'fren', + }, + secondToken: { + name: 'SMOKES', + id: 'smokes', + }, + DEX: 'Sundaeswap', + assetPrice: Math.round(Math.random() * 10), + assetAmount: Math.round(Math.random() * 10), + transactionId: 'a0a863e8eb398c04caebdbd3a3e50733bcb6c06e118c36eadb7f7b53424668a5', + totalValue: (Math.random() * 10).toFixed(2), + totalValueUsd: (Math.random() * 10).toFixed(2), + }, + { + id: Math.random(), + pair: 'CCCC/HOSKY', + firstToken: { + name: 'CCCC', + id: 'cccc', + }, + secondToken: { + name: 'HOSKY', + id: 'hosky', + }, + DEX: 'Minswap', + assetPrice: Math.round(Math.random() * 10), + assetAmount: Math.round(Math.random() * 10), + transactionId: '043a2bfbb1d66d9883a068059a4e35bb53b7bdc6f5637d7b934150c453ffb116', + totalValue: (Math.random() * 10).toFixed(2), + totalValueUsd: (Math.random() * 10).toFixed(2), + }, + { + id: Math.random(), + pair: 'CCCC/DRIP', + firstToken: { + name: 'CCCC', + id: 'cccc', + }, + secondToken: { + name: 'DRIP', + id: 'drip', + }, + DEX: 'Sundaeswap', + assetPrice: Math.round(Math.random() * 10), + assetAmount: Math.round(Math.random() * 10), + transactionId: 'a0a863e8eb398c04caebdbd3a3e50733bcb6c06e118c36eadb7f7b53424668a5', + totalValue: (Math.random() * 10).toFixed(2), + totalValueUsd: (Math.random() * 10).toFixed(2), + }, + { + id: Math.random(), + pair: 'ATH/CATSKY', + firstToken: { + name: 'ATH', + id: 'ath', + }, + secondToken: { + name: 'CATSKY', + id: 'catsky', + }, + DEX: 'Minswap', + assetPrice: Math.round(Math.random() * 10), + assetAmount: Math.round(Math.random() * 10), + transactionId: '043a2bfbb1d66d9883a068059a4e35bb53b7bdc6f5637d7b934150c453ffb116', + totalValue: (Math.random() * 10).toFixed(2), + totalValueUsd: (Math.random() * 10).toFixed(2), + }, + { + id: Math.random(), + pair: 'ADA/USDC', + firstToken: { + name: 'ADA', + id: 'ada', + }, + secondToken: { + name: 'USDC', + id: 'usdc', + }, + DEX: 'Minswap', + assetPrice: Math.round(Math.random() * 10), + assetAmount: Math.round(Math.random() * 10), + transactionId: 'a0a863e8eb398c04caebdbd3a3e50733bcb6c06e118c36eadb7f7b53424668a5', + totalValue: (Math.random() * 10).toFixed(2), + totalValueUsd: (Math.random() * 10).toFixed(2), + }, + { + id: Math.random(), + pair: 'AVAX/COPI', + firstToken: { + name: 'AVAX', + id: 'avax', + }, + secondToken: { + name: 'COPI', + id: 'copi', + }, + DEX: 'Sundaeswap', + assetPrice: Math.round(Math.random() * 10), + assetAmount: Math.round(Math.random() * 10), + transactionId: 'a0a863e8eb398c04caebdbd3a3e50733bcb6c06e118c36eadb7f7b53424668a5', + totalValue: (Math.random() * 10).toFixed(2), + totalValueUsd: (Math.random() * 10).toFixed(2), + }, ], }, - PortfolioPage: { - balance: { - ada: (100000 * Math.random()).toFixed(2), - usd: (1000 * Math.random()).toFixed(2), - percents: -Math.random().toFixed(2), - amount: -Math.random().toFixed(2), - }, - }, - - history: [ + transactionHistory: [ { type: HistoryItemType.SENT, - time: '2024-05-28T06:28:00.000Z', - status: 'Low', - fee: { - amount: '0.17 ADA', - usd: '0.03 USD', - }, - amount: { - total: '1,169,789.34432 ADA', - usd: '0.03 USD', - asset: '200 MILK', - }, + status: HistoryItemStatus.LOW, + time: getRandomTime(start24HoursAgo, now), + feeValue: Math.random().toFixed(2), + feeValueUsd: Math.random().toFixed(2), + amountTotal: (1000000 * Math.random()).toFixed(5), + amountTotalUsd: (100000 * Math.random()).toFixed(2), + amountAsset: `${Math.round(100 * Math.random())} MILK`, }, { type: HistoryItemType.RECEIVED, - time: '2024-05-27T08:25:00.000Z', - status: 'Low', - amount: { - total: '1,169,789.34432 ADA', - usd: '312,323.33 USD', - asset: 2, - }, + status: HistoryItemStatus.LOW, + time: getRandomTime(start24HoursAgo, now), + amountTotal: (1000000 * Math.random()).toFixed(5), + amountTotalUsd: (100000 * Math.random()).toFixed(2), + amountAsset: Math.round(10 * Math.random()), }, { type: HistoryItemType.ERROR, - time: '2024-05-24T11:04:27.000Z', - status: 'Failed', - amount: { - total: '1,169,789.34432 ADA', - usd: '312,323.33 USD', - asset: 2, - }, + status: HistoryItemStatus.FAILED, + time: getRandomTime(start24HoursAgo, now), + amountTotal: (1000000 * Math.random()).toFixed(5), + amountTotalUsd: (100000 * Math.random()).toFixed(2), + amountAsset: Math.round(10 * Math.random()), }, { type: HistoryItemType.WITHDRAW, - time: '2024-05-08T11:04:27.000Z', - status: 'Low', - fee: { - amount: '0.17 ADA', - usd: '0.03 USD', - }, - amount: { - total: '1,169,789.34432 ADA', - usd: '0.03 USD', - asset: '200 MILK', - }, + status: HistoryItemStatus.HIGH, + time: getRandomTime(start1WeekAgo, now), + feeValue: Math.random().toFixed(2), + feeValueUsd: Math.random().toFixed(2), + amountTotal: (1000000 * Math.random()).toFixed(5), + amountTotalUsd: (100000 * Math.random()).toFixed(2), + amountAsset: `${Math.round(100 * Math.random())} MILK`, }, { type: HistoryItemType.DELEGATE, - time: '2024-05-08T11:04:27.000Z', - status: 'Low', - fee: { - amount: '0.17 ADA', - usd: '0.03 USD', - }, - amount: { - total: '1,169,789.34432 ADA', - usd: '0.03 USD', - asset: '200 MILK', - }, + status: HistoryItemStatus.HIGH, + time: getRandomTime(start24HoursAgo, now), + feeValue: Math.random().toFixed(2), + feeValueUsd: Math.random().toFixed(2), + amountTotal: (1000000 * Math.random()).toFixed(5), + amountTotalUsd: (100000 * Math.random()).toFixed(2), + amountAsset: `${Math.round(100 * Math.random())} MILK`, }, ], }; diff --git a/packages/yoroi-extension/app/i18n/locales/en-US.json b/packages/yoroi-extension/app/i18n/locales/en-US.json index 1d370a83d6..36932196ab 100644 --- a/packages/yoroi-extension/app/i18n/locales/en-US.json +++ b/packages/yoroi-extension/app/i18n/locales/en-US.json @@ -1052,6 +1052,9 @@ "portfolio.tokenInfo.performance.allTimeLow": "All time low", "portfolio.statsTable.header.name": "Name", "portfolio.statsTable.header.price": "Price", + "portfolio.statsTable.header.24h": "24H", + "portfolio.statsTable.header.1w": "1W", + "portfolio.statsTable.header.1m": "1M", "portfolio.statsTable.header.portfolio": "Portfolio", "portfolio.statsTable.header.totalAmount": "Total amount", "portfolio.transactionTable.title": "Transaction history", From 49e0dd014271e6dc8c2f8fea7095523118432784 Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Thu, 30 May 2024 13:10:18 +0700 Subject: [PATCH 050/464] import icons from index file --- .../UI/features/portfolio/common/assets/icons/Arrow.js | 4 +--- .../UI/features/portfolio/common/assets/icons/Sort.js | 4 +--- .../UI/features/portfolio/common/assets/icons/index.js | 2 ++ .../common/assets/icons/transaction-history/Arrow.js | 4 +--- .../common/assets/icons/transaction-history/Error.js | 4 +--- .../common/assets/icons/transaction-history/Expand.js | 4 +--- .../assets/icons/transaction-history/Withdraw.js | 4 +--- .../common/assets/icons/transaction-history/index.js | 4 ++++ .../portfolio/useCases/Dapps/LiquidityTable.js | 3 +-- .../UI/features/portfolio/useCases/Dapps/OrderTable.js | 3 +-- .../portfolio/useCases/Dapps/PortfolioDapps.js | 2 +- .../useCases/TokenDetails/TokenDetailChart.js | 2 +- .../portfolio/useCases/TokenDetails/TokenDetails.js | 1 - .../useCases/TokenDetails/TransactionTable.js | 10 ++++++---- .../portfolio/useCases/Wallet/PortfolioWallet.js | 5 ++--- .../features/portfolio/useCases/Wallet/StatsTable.js | 5 ++--- 16 files changed, 26 insertions(+), 35 deletions(-) create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/index.js create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/index.js diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/Arrow.js b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/Arrow.js index 60287b1bf8..3359eacfdf 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/Arrow.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/Arrow.js @@ -1,6 +1,6 @@ import React from 'react'; -const Arrow = props => { +export const ArrowIcon = props => { return ( { ); }; - -export default Arrow; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/Sort.js b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/Sort.js index 48de86ca5a..6d796ebc51 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/Sort.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/Sort.js @@ -1,6 +1,6 @@ import React from 'react'; -const Sort = props => { +export const SortIcon = props => { return ( { ); }; - -export default Sort; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/index.js b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/index.js new file mode 100644 index 0000000000..8be7780042 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/index.js @@ -0,0 +1,2 @@ +export * from './Arrow'; +export * from './Sort'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Arrow.js b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Arrow.js index 4f002c8b33..7057fa2bce 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Arrow.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Arrow.js @@ -1,6 +1,6 @@ import React from 'react'; -const Arrow = props => { +export const ArrowIcon = props => { return ( { ); }; - -export default Arrow; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Error.js b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Error.js index d9775e796b..18dc37ca22 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Error.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Error.js @@ -1,6 +1,6 @@ import React from 'react'; -const Error = props => { +export const ErrorIcon = props => { return ( { ); }; - -export default Error; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Expand.js b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Expand.js index 0e2f84e352..80db7dc500 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Expand.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Expand.js @@ -1,6 +1,6 @@ import React from 'react'; -const Expand = props => { +export const ExpandIcon = props => { return ( { ); }; - -export default Expand; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Withdraw.js b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Withdraw.js index f8ce5f9df3..e1d6fbfa36 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Withdraw.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Withdraw.js @@ -1,6 +1,6 @@ import React from 'react'; -const Withdraw = props => { +export const WithdrawIcon = props => { return ( { ); }; - -export default Withdraw; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/index.js b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/index.js new file mode 100644 index 0000000000..4389af7aac --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/index.js @@ -0,0 +1,4 @@ +export * from './Arrow'; +export * from './Error'; +export * from './Expand'; +export * from './Withdraw'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js index b3d002f80d..6b58952b70 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js @@ -11,10 +11,9 @@ import { Box, } from '@mui/material'; import { useTheme } from '@mui/material/styles'; -import { default as SortIcon } from '../../common/assets/icons/Sort'; +import { ArrowIcon, SortIcon } from '../../common/assets/icons/'; import { useNavigateTo } from '../../common/hooks/useNavigateTo'; import { usePortfolio } from '../../module/PortfolioContextProvider'; -import ArrowIcon from '../../common/assets/icons/Arrow'; import adaPng from '../../../../../assets/images/ada.png'; import hoskyPng from '../../common/assets/images/hosky-token.png'; import minswapPng from '../../common/assets/images/minswap-dex.png'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js index 674cdfe228..f09112629d 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js @@ -11,10 +11,9 @@ import { Box, } from '@mui/material'; import { useTheme } from '@mui/material/styles'; -import { default as SortIcon } from '../../common/assets/icons/Sort'; +import { ArrowIcon, SortIcon } from '../../common/assets/icons/'; import { useNavigateTo } from '../../common/hooks/useNavigateTo'; import { usePortfolio } from '../../module/PortfolioContextProvider'; -import ArrowIcon from '../../common/assets/icons/Arrow'; import adaPng from '../../../../../assets/images/ada.png'; import hoskyPng from '../../common/assets/images/hosky-token.png'; import minswapPng from '../../common/assets/images/minswap-dex.png'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js index 4ce1333843..72145d4976 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js @@ -7,7 +7,7 @@ import { defineMessages } from 'react-intl'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import LiquidityTable from './LiquidityTable'; import mockData from '../../../../pages/portfolio/mockData'; -import ArrowIcon from '../../common/assets/icons/Arrow'; +import { ArrowIcon } from '../../common/assets/icons'; import illustrationPng from '../../common/assets/images/illustration.png'; import { Chip } from '../../common/components/Chip'; import { Skeleton } from '../../../../components/Skeleton'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js index cec5ebedbc..7e44074934 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js @@ -12,7 +12,7 @@ import { } from 'recharts'; import { useTheme } from '@mui/material/styles'; import { usePortfolio } from '../../module/PortfolioContextProvider'; -import ArrowIcon from '../../common/assets/icons/Arrow'; +import { ArrowIcon } from '../../common/assets/icons'; import { Skeleton, Tooltip } from '../../../../components'; import chartSkeletonPng from '../../common/assets/images/token-detail-chart-skeleton.png'; import { Chip } from '../../common/components/Chip'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js index 614e5488a1..ab1cb143ea 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js @@ -17,7 +17,6 @@ import { tableCellClasses } from '@mui/material/TableCell'; import TransactionTable from './TransactionTable'; import TokenDetailChart from './TokenDetailChart'; import SubMenu from '../../../../../components/topbar/SubMenu'; -import Arrow from '../../common/assets/icons/Arrow'; import { useTheme } from '@mui/material/styles'; import mockData from '../../../../pages/portfolio/mockData'; import { useNavigateTo } from '../../common/hooks/useNavigateTo'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js index 39d16e6167..01871cb1a6 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js @@ -13,10 +13,12 @@ import { } from '@mui/material'; import { useTheme } from '@mui/material/styles'; import { Card } from '../../../../components'; -import ArrowIcon from '../../common/assets/icons/transaction-history/Arrow'; -import ExpandIcon from '../../common/assets/icons/transaction-history/Expand'; -import ErrorIcon from '../../common/assets/icons/transaction-history/Error'; -import WithdrawIcon from '../../common/assets/icons/transaction-history/Withdraw'; +import { + ArrowIcon, + ExpandIcon, + ErrorIcon, + WithdrawIcon, +} from '../../common/assets/icons/transaction-history'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import moment from 'moment'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js index 97ddef07a0..1dfe77a04c 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js @@ -7,7 +7,7 @@ import { defineMessages } from 'react-intl'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import StatsTable from './StatsTable'; import mockData from '../../../../pages/portfolio/mockData'; -import ArrowIcon from '../../common/assets/icons/Arrow'; +import { ArrowIcon } from '../../common/assets/icons'; import illustrationPng from '../../common/assets/images/illustration.png'; import { Chip } from '../../common/components/Chip'; import { Skeleton } from '../../../../components/Skeleton'; @@ -126,8 +126,7 @@ const PortfolioWallet = ({ data }) => { } style={{ marginRight: theme.spacing(0.5), - transform: - mockData.common.balance.percents > 0 ? '' : 'rotate(180deg)', + transform: mockData.common.balance.percents > 0 ? '' : 'rotate(180deg)', }} /> diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js index 61411138d4..e4ccc8fd5b 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js @@ -11,11 +11,10 @@ import { Box, } from '@mui/material'; import { useTheme } from '@mui/material/styles'; -import { default as SortIcon } from '../../common/assets/icons/Sort'; +import { ArrowIcon, SortIcon } from '../../common/assets/icons/'; +import adaPng from '../../../../../assets/images/ada.png'; import { useNavigateTo } from '../../common/hooks/useNavigateTo'; import { usePortfolio } from '../../module/PortfolioContextProvider'; -import ArrowIcon from '../../common/assets/icons/Arrow'; -import adaPng from '../../../../../assets/images/ada.png'; import { Chip } from '../../common/components/Chip'; import { Skeleton } from '../../../../components/Skeleton'; From 99dee57b6c5299ae43b9e06ac25cb31685747d97 Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Thu, 30 May 2024 13:22:42 +0700 Subject: [PATCH 051/464] update tables sort logic --- .../UI/features/portfolio/useCases/Dapps/LiquidityTable.js | 7 ++++--- .../app/UI/features/portfolio/useCases/Dapps/OrderTable.js | 7 ++++--- .../UI/features/portfolio/useCases/Wallet/StatsTable.js | 7 ++++--- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js index 6b58952b70..1b337beb16 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js @@ -90,6 +90,7 @@ const LiquidityTable = ({ data, isLoading }) => { order: null, orderBy: null, }); + const [list, setList] = useState([...data]); const headCells = [ { id: 'tokenPair', label: strings.tokenPair, align: 'left', sortType: 'character' }, @@ -148,11 +149,11 @@ const LiquidityTable = ({ data, isLoading }) => { }; const getSortedData = useCallback( - data => { + arr => { if (!orderBy || !order) return data; const sortColumn = headCells.find(cell => cell.id === orderBy); const sortType = sortColumn?.sortType ?? 'character'; - return data.sort((a, b) => { + return arr.sort((a, b) => { return order === 'desc' ? descendingComparator(a, b, sortType) : -descendingComparator(a, b, sortType); @@ -207,7 +208,7 @@ const LiquidityTable = ({ data, isLoading }) => { ? Array.from([1, 2, 3]).map((item, index) => ( )) - : getSortedData(data).map(row => ( + : getSortedData(list).map(row => ( { order: null, orderBy: null, }); + const [list, setList] = useState([...data]); const headCells = [ { id: 'pair', label: strings.pair, align: 'left', disabledSort: true }, @@ -129,11 +130,11 @@ const OrderTable = ({ data, isLoading }) => { }; const getSortedData = useCallback( - data => { + arr => { if (!orderBy || !order) return data; const sortColumn = headCells.find(cell => cell.id === orderBy); const sortType = sortColumn?.sortType ?? 'character'; - return data.sort((a, b) => { + return arr.sort((a, b) => { return order === 'desc' ? descendingComparator(a, b, sortType) : -descendingComparator(a, b, sortType); @@ -172,7 +173,7 @@ const OrderTable = ({ data, isLoading }) => { ? Array.from([1, 2, 3]).map((item, index) => ( )) - : getSortedData(data).map(row => ( + : getSortedData(list).map(row => ( { order: null, orderBy: null, }); + const [list, setList] = useState([...data]); const headCells = [ { id: 'name', label: strings.name, align: 'left', sortType: 'character' }, @@ -132,11 +133,11 @@ const StatsTable = ({ data, isLoading }) => { }; const getSortedData = useCallback( - data => { + arr => { if (!orderBy || !order) return data; const sortColumn = headCells.find(cell => cell.id === orderBy); const sortType = sortColumn?.sortType ?? 'character'; - return data.sort((a, b) => { + return arr.sort((a, b) => { return order === 'desc' ? descendingComparator(a, b, sortType) : -descendingComparator(a, b, sortType); @@ -175,7 +176,7 @@ const StatsTable = ({ data, isLoading }) => { ? Array.from([1, 2, 3]).map((item, index) => ( )) - : getSortedData(data).map(row => ( + : getSortedData(list).map(row => ( navigateTo.portfolioDetail(row.id)} From eab6657af70ea307b0aa9888883612c381053e75 Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Thu, 30 May 2024 16:00:23 +0700 Subject: [PATCH 052/464] fix combining search&sort and update UI --- .../app/UI/components/Input/SearchInput.js | 42 ++++++- .../{Button => buttons}/CopyButton.js | 8 +- .../app/UI/components/index.js | 2 +- .../portfolio/common/assets/icons/Sort.js | 4 +- .../assets/icons/transaction-history/Arrow.js | 4 +- .../assets/icons/transaction-history/Error.js | 9 +- .../icons/transaction-history/Withdraw.js | 8 +- .../common/components/PortfolioMenu.js | 2 +- .../portfolio/common/hooks/useStrings.js | 10 ++ .../portfolio/common}/mockData.js | 118 ++++++++++++++---- .../useCases/Dapps/LiquidityTable.js | 8 +- .../portfolio/useCases/Dapps/OrderTable.js | 6 +- .../useCases/Dapps/PortfolioDapps.js | 22 +--- .../TokenDetails/TokenDetailOverview.js | 2 +- .../useCases/TokenDetails/TokenDetails.js | 2 +- .../useCases/TokenDetails/TransactionTable.js | 18 +-- .../useCases/Wallet/PortfolioWallet.js | 25 +--- .../portfolio/useCases/Wallet/StatsTable.js | 4 +- .../UI/pages/portfolio/PortfolioDappsPage.js | 2 +- .../UI/pages/portfolio/PortfolioDetailPage.js | 2 +- .../app/UI/pages/portfolio/PortfolioPage.js | 2 +- 21 files changed, 189 insertions(+), 111 deletions(-) rename packages/yoroi-extension/app/UI/components/{Button => buttons}/CopyButton.js (73%) rename packages/yoroi-extension/app/UI/{pages/portfolio => features/portfolio/common}/mockData.js (92%) diff --git a/packages/yoroi-extension/app/UI/components/Input/SearchInput.js b/packages/yoroi-extension/app/UI/components/Input/SearchInput.js index 0c605904f4..f8ffb329e6 100644 --- a/packages/yoroi-extension/app/UI/components/Input/SearchInput.js +++ b/packages/yoroi-extension/app/UI/components/Input/SearchInput.js @@ -1,18 +1,48 @@ -import { Input, styled } from '@mui/material'; +import { Input, InputAdornment, styled } from '@mui/material'; +import { ReactComponent as SearchIcon } from '../../../assets/images/assets-page/search.inline.svg'; +import { useRef } from 'react'; const StyledInput = styled(Input)(({ theme }) => ({ borderRadius: `${theme.shape.borderRadius}px`, width: '320px', height: '40px', - padding: '8px 16px 8px 8px', - backgroundColor: 'transparent', + padding: `${theme.spacing(1)} ${theme.spacing(2)} ${theme.spacing(1)} ${theme.spacing(1)}`, border: '1px solid', - borderColor: theme.palette.grayscale[400], + borderColor: theme.palette.ds.el_gray_low, 'input::placeholder': { - color: theme.palette.grayscale[600], + color: theme.palette.el_gray_medium, + }, +})); + +const StyledInputAdornment = styled(InputAdornment)(({ theme }) => ({ + '&:hover': { + cursor: 'pointer', + }, + + '> svg > use': { + fill: theme.palette.ds.text_gray_normal, }, })); export const SearchInput = props => { - return ; + const ref = useRef(); + + const focusInput = () => { + if (ref.current) { + ref.current.focus(); + } + }; + + return ( + + + + } + {...props} + /> + ); }; diff --git a/packages/yoroi-extension/app/UI/components/Button/CopyButton.js b/packages/yoroi-extension/app/UI/components/buttons/CopyButton.js similarity index 73% rename from packages/yoroi-extension/app/UI/components/Button/CopyButton.js rename to packages/yoroi-extension/app/UI/components/buttons/CopyButton.js index 01e3f4a6ae..6da45648ae 100644 --- a/packages/yoroi-extension/app/UI/components/Button/CopyButton.js +++ b/packages/yoroi-extension/app/UI/components/buttons/CopyButton.js @@ -4,6 +4,7 @@ import { CopyToClipboard } from 'react-copy-to-clipboard'; import CopyIcon from '../icons/Copy'; import CopiedIcon from '../icons/Copied'; import { Tooltip } from '../Tooltip'; +import { usePortfolio } from '../../features/portfolio/module/PortfolioContextProvider'; interface Props { textToCopy: string; @@ -12,6 +13,7 @@ interface Props { export const CopyButton = ({ textToCopy, disabled, ...props }: Props) => { const [copied, setCopied] = useState(false); + const { strings } = usePortfolio(); const handleCopy = () => { setCopied(true); @@ -22,7 +24,11 @@ export const CopyButton = ({ textToCopy, disabled, ...props }: Props) => { return ( - + {copied ? : } diff --git a/packages/yoroi-extension/app/UI/components/index.js b/packages/yoroi-extension/app/UI/components/index.js index 4ab65f6f1c..ef5f6f8fce 100644 --- a/packages/yoroi-extension/app/UI/components/index.js +++ b/packages/yoroi-extension/app/UI/components/index.js @@ -1,5 +1,5 @@ export * from './Card'; -export * from './Button/CopyButton'; +export * from './buttons/CopyButton'; export * from './Input/SearchInput'; export * from './Tooltip'; export * from './Skeleton'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/Sort.js b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/Sort.js index 6d796ebc51..00f72ea424 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/Sort.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/Sort.js @@ -3,8 +3,8 @@ import React from 'react'; export const SortIcon = props => { return ( { return ( { return ( - + { return ( - + { return React.useRef({ dapps: intl.formatMessage(messages.dapps), + copyToClipboard: intl.formatMessage(messages.copyToClipboard), + copied: intl.formatMessage(messages.copied), soonAvailable: intl.formatMessage(messages.soonAvailable), noResultsForThisSearch: intl.formatMessage(messages.noResultsForThisSearch), search: intl.formatMessage(messages.search), diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js b/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js similarity index 92% rename from packages/yoroi-extension/app/UI/pages/portfolio/mockData.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js index 6eca5d161e..984d80ac4e 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js @@ -1,7 +1,4 @@ -import { - HistoryItemStatus, - HistoryItemType, -} from '../../features/portfolio/useCases/TokenDetails/TransactionTable'; +import { HistoryItemStatus, HistoryItemType } from '../useCases/TokenDetails/TransactionTable'; // UTILS const getRandomTime = (startDate, endDate) => { @@ -23,8 +20,8 @@ const mockData = { balance: { ada: (100000 * Math.random()).toFixed(2), usd: (1000 * Math.random()).toFixed(2), - percents: -Math.random().toFixed(2), - amount: -Math.random().toFixed(2), + percents: Math.random().toFixed(2), + amount: Math.random().toFixed(2), }, }, @@ -197,7 +194,7 @@ const mockData = { portfolioPercents: Math.round(100 * Math.random()), '24h': -(10 * Math.random()).toFixed(2), '1W': (10 * Math.random()).toFixed(2), - '1M': (10 * Math.random()).toFixed(2), + '1M': -(10 * Math.random()).toFixed(2), totalAmount: Math.round(100000 * Math.random()), totalAmountUsd: Math.round(100000 * Math.random()), overview: { @@ -355,8 +352,8 @@ const mockData = { id: 'Ada', price: (10 * Math.random()).toFixed(2), portfolioPercents: Math.round(100 * Math.random()), - '24h': -(10 * Math.random()).toFixed(2), - '1W': (10 * Math.random()).toFixed(2), + '24h': (10 * Math.random()).toFixed(2), + '1W': -(10 * Math.random()).toFixed(2), '1M': (10 * Math.random()).toFixed(2), totalAmount: Math.round(100000 * Math.random()), totalAmountUsd: Math.round(100000 * Math.random()), @@ -516,7 +513,7 @@ const mockData = { price: (10 * Math.random()).toFixed(2), portfolioPercents: Math.round(100 * Math.random()), '24h': -(10 * Math.random()).toFixed(2), - '1W': (10 * Math.random()).toFixed(2), + '1W': -(10 * Math.random()).toFixed(2), '1M': (10 * Math.random()).toFixed(2), totalAmount: Math.round(100000 * Math.random()), totalAmountUsd: Math.round(100000 * Math.random()), @@ -677,7 +674,7 @@ const mockData = { portfolioPercents: Math.round(100 * Math.random()), '24h': -(10 * Math.random()).toFixed(2), '1W': (10 * Math.random()).toFixed(2), - '1M': (10 * Math.random()).toFixed(2), + '1M': -(10 * Math.random()).toFixed(2), totalAmount: Math.round(100000 * Math.random()), totalAmountUsd: Math.round(100000 * Math.random()), overview: { @@ -835,7 +832,7 @@ const mockData = { id: 'Tkn1', price: (10 * Math.random()).toFixed(2), portfolioPercents: Math.round(100 * Math.random()), - '24h': -(10 * Math.random()).toFixed(2), + '24h': (10 * Math.random()).toFixed(2), '1W': (10 * Math.random()).toFixed(2), '1M': (10 * Math.random()).toFixed(2), totalAmount: Math.round(100000 * Math.random()), @@ -996,8 +993,8 @@ const mockData = { price: (10 * Math.random()).toFixed(2), portfolioPercents: Math.round(100 * Math.random()), '24h': -(10 * Math.random()).toFixed(2), - '1W': (10 * Math.random()).toFixed(2), - '1M': (10 * Math.random()).toFixed(2), + '1W': -(10 * Math.random()).toFixed(2), + '1M': -(10 * Math.random()).toFixed(2), totalAmount: Math.round(100000 * Math.random()), totalAmountUsd: Math.round(100000 * Math.random()), overview: { @@ -1157,7 +1154,7 @@ const mockData = { portfolioPercents: Math.round(100 * Math.random()), '24h': -(10 * Math.random()).toFixed(2), '1W': (10 * Math.random()).toFixed(2), - '1M': (10 * Math.random()).toFixed(2), + '1M': -(10 * Math.random()).toFixed(2), totalAmount: Math.round(100000 * Math.random()), totalAmountUsd: Math.round(100000 * Math.random()), overview: { @@ -1315,7 +1312,7 @@ const mockData = { id: 'Tkn6', price: (10 * Math.random()).toFixed(2), portfolioPercents: Math.round(100 * Math.random()), - '24h': -(10 * Math.random()).toFixed(2), + '24h': (10 * Math.random()).toFixed(2), '1W': (10 * Math.random()).toFixed(2), '1M': (10 * Math.random()).toFixed(2), totalAmount: Math.round(100000 * Math.random()), @@ -1475,9 +1472,9 @@ const mockData = { id: 'Tkn8', price: (10 * Math.random()).toFixed(2), portfolioPercents: Math.round(100 * Math.random()), - '24h': -(10 * Math.random()).toFixed(2), + '24h': (10 * Math.random()).toFixed(2), '1W': (10 * Math.random()).toFixed(2), - '1M': (10 * Math.random()).toFixed(2), + '1M': -(10 * Math.random()).toFixed(2), totalAmount: Math.round(100000 * Math.random()), totalAmountUsd: Math.round(100000 * Math.random()), overview: { @@ -1624,7 +1621,82 @@ const mockData = { usd: Math.random().toFixed(3) * 1000, }, { - time: getRandomTime(startDate, endDate), + time: getRandomTime(new Date('03-03-2020 8:30'), endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomTime(new Date('03-03-2020 8:30'), endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomTime(new Date('03-03-2020 8:30'), endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomTime(new Date('03-03-2020 8:30'), endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomTime(new Date('03-03-2020 8:30'), endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomTime(new Date('03-03-2020 8:30'), endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomTime(new Date('03-03-2020 8:30'), endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomTime(new Date('03-03-2020 8:30'), endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomTime(new Date('03-03-2020 8:30'), endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomTime(new Date('03-03-2020 8:30'), endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomTime(new Date('03-03-2020 8:30'), endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomTime(new Date('03-03-2020 8:30'), endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomTime(new Date('03-03-2020 8:30'), endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomTime(new Date('03-03-2020 8:30'), endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomTime(new Date('03-03-2020 8:30'), endDate), + value: Math.random().toFixed(3), + usd: Math.random().toFixed(3) * 1000, + }, + { + time: getRandomTime(new Date('03-03-2020 8:30'), endDate), value: Math.random().toFixed(3), usd: Math.random().toFixed(3) * 1000, }, @@ -1648,7 +1720,7 @@ const mockData = { id: 'lvlc', }, PNLValue: (Math.random() * 10).toFixed(2), - PNLValueUsd: (Math.random() * 10).toFixed(2), + PNLValueUsd: -(Math.random() * 10).toFixed(2), lpTokens: (Math.random() * 1000000).toFixed(2), totalValue: (Math.random() * 1000).toFixed(2), totalValueUsd: (Math.random() * 100).toFixed(2), @@ -1714,7 +1786,7 @@ const mockData = { id: 'bricks', }, PNLValue: (Math.random() * 10).toFixed(2), - PNLValueUsd: (Math.random() * 10).toFixed(2), + PNLValueUsd: -(Math.random() * 10).toFixed(2), lpTokens: (Math.random() * 1000000).toFixed(2), totalValue: (Math.random() * 1000).toFixed(2), totalValueUsd: (Math.random() * 100).toFixed(2), @@ -1736,7 +1808,7 @@ const mockData = { id: 'poppa', }, PNLValue: (Math.random() * 10).toFixed(2), - PNLValueUsd: (Math.random() * 10).toFixed(2), + PNLValueUsd: -(Math.random() * 10).toFixed(2), lpTokens: (Math.random() * 1000000).toFixed(2), totalValue: (Math.random() * 1000).toFixed(2), totalValueUsd: (Math.random() * 100).toFixed(2), @@ -1802,7 +1874,7 @@ const mockData = { id: 'nmkr', }, PNLValue: (Math.random() * 10).toFixed(2), - PNLValueUsd: (Math.random() * 10).toFixed(2), + PNLValueUsd: -(Math.random() * 10).toFixed(2), lpTokens: (Math.random() * 1000000).toFixed(2), totalValue: (Math.random() * 1000).toFixed(2), totalValueUsd: (Math.random() * 100).toFixed(2), diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js index 1b337beb16..47797bc51f 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js @@ -1,4 +1,4 @@ -import React, { useCallback, useState } from 'react'; +import React, { useCallback, useMemo, useState } from 'react'; import { Table, TableBody, @@ -11,7 +11,7 @@ import { Box, } from '@mui/material'; import { useTheme } from '@mui/material/styles'; -import { ArrowIcon, SortIcon } from '../../common/assets/icons/'; +import { SortIcon } from '../../common/assets/icons/'; import { useNavigateTo } from '../../common/hooks/useNavigateTo'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import adaPng from '../../../../../assets/images/ada.png'; @@ -90,7 +90,7 @@ const LiquidityTable = ({ data, isLoading }) => { order: null, orderBy: null, }); - const [list, setList] = useState([...data]); + const list = useMemo(() => [...data], [data]); const headCells = [ { id: 'tokenPair', label: strings.tokenPair, align: 'left', sortType: 'character' }, @@ -302,7 +302,7 @@ const LiquidityTable = ({ data, isLoading }) => { active={row.PNLValueUsd > 0} label={ - {row.PNLValueUsd > 0 ? '+' : '-'} + {row.PNLValueUsd > 0 && '+'} {row.PNLValueUsd} USD } diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js index 2657c58c9d..b139bdcfc7 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js @@ -1,4 +1,4 @@ -import React, { useCallback, useState } from 'react'; +import React, { useCallback, useMemo, useState } from 'react'; import { Table, TableBody, @@ -11,7 +11,7 @@ import { Box, } from '@mui/material'; import { useTheme } from '@mui/material/styles'; -import { ArrowIcon, SortIcon } from '../../common/assets/icons/'; +import { SortIcon } from '../../common/assets/icons/'; import { useNavigateTo } from '../../common/hooks/useNavigateTo'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import adaPng from '../../../../../assets/images/ada.png'; @@ -76,7 +76,7 @@ const OrderTable = ({ data, isLoading }) => { order: null, orderBy: null, }); - const [list, setList] = useState([...data]); + const list = useMemo(() => [...data], [data]); const headCells = [ { id: 'pair', label: strings.pair, align: 'left', disabledSort: true }, diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js index 72145d4976..77b7bf6d4b 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js @@ -6,7 +6,7 @@ import { useTheme } from '@mui/material/styles'; import { defineMessages } from 'react-intl'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import LiquidityTable from './LiquidityTable'; -import mockData from '../../../../pages/portfolio/mockData'; +import mockData from '../../common/mockData'; import { ArrowIcon } from '../../common/assets/icons'; import illustrationPng from '../../common/assets/images/illustration.png'; import { Chip } from '../../common/components/Chip'; @@ -196,7 +196,7 @@ const PortfolioDapps = ({ data }) => { active={mockData.common.balance.amount > 0} label={ - {mockData.common.balance.amount > 0 ? '+' : ''} + {mockData.common.balance.amount > 0 && '+'} {mockData.common.balance.amount} USD } @@ -207,23 +207,7 @@ const PortfolioDapps = ({ data }) => { - setKeyword(e.target.value)} - placeholder={strings.search} - startAdornment={ - svg > use': { - fill: '#242838', - }, - }} - position="start" - > - - - } - /> + setKeyword(e.target.value)} placeholder={strings.search} /> diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js index 443d10eb79..3b8c264d8b 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js @@ -1,7 +1,7 @@ import React from 'react'; import { Stack, Box, Typography, Link, Button } from '@mui/material'; import { Skeleton } from '../../../../components/Skeleton'; -import { CopyButton } from '../../../../components/Button/CopyButton'; +import { CopyButton } from '../../../../components/buttons/CopyButton'; import { useTheme } from '@mui/material/styles'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import adaPng from '../../../../../assets/images/ada.png'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js index ab1cb143ea..633ab1a417 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js @@ -18,7 +18,7 @@ import TransactionTable from './TransactionTable'; import TokenDetailChart from './TokenDetailChart'; import SubMenu from '../../../../../components/topbar/SubMenu'; import { useTheme } from '@mui/material/styles'; -import mockData from '../../../../pages/portfolio/mockData'; +import mockData from '../../common/mockData'; import { useNavigateTo } from '../../common/hooks/useNavigateTo'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import TokenDetailPerformance from './TokenDetailPerformance'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js index 01871cb1a6..61d372cf36 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js @@ -211,28 +211,20 @@ const TransactionHistoryItem = ({ index, row, theme, strings }) => { }} > {row.type === HistoryItemType.SENT && ( - + )} {row.type === HistoryItemType.RECEIVED && ( )} - {row.type === HistoryItemType.ERROR && ( - - )} + {row.type === HistoryItemType.ERROR && } {row.type === HistoryItemType.WITHDRAW && ( - + )} {row.type === HistoryItemType.DELEGATE && ( - + )} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js index 1dfe77a04c..aa5f155760 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js @@ -1,12 +1,11 @@ -import { Typography, Stack, Box, Input, InputAdornment, styled } from '@mui/material'; -import { ReactComponent as Search } from '../../../../../assets/images/assets-page/search.inline.svg'; +import { Typography, Stack, Box, Input, styled } from '@mui/material'; import React, { useEffect, useState } from 'react'; import { Tooltip, SearchInput } from '../../../../components'; import { useTheme } from '@mui/material/styles'; import { defineMessages } from 'react-intl'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import StatsTable from './StatsTable'; -import mockData from '../../../../pages/portfolio/mockData'; +import mockData from '../../common/mockData'; import { ArrowIcon } from '../../common/assets/icons'; import illustrationPng from '../../common/assets/images/illustration.png'; import { Chip } from '../../common/components/Chip'; @@ -142,7 +141,7 @@ const PortfolioWallet = ({ data }) => { active={mockData.common.balance.amount > 0} label={ - {mockData.common.balance.amount > 0 ? '+' : ''} + {mockData.common.balance.amount > 0 && '+'} {mockData.common.balance.amount} USD } @@ -153,23 +152,7 @@ const PortfolioWallet = ({ data }) => { - setKeyword(e.target.value)} - placeholder={strings.search} - startAdornment={ - svg > use': { - fill: '#242838', - }, - }} - position="start" - > - - - } - /> + setKeyword(e.target.value)} placeholder={strings.search} /> {tokenList.length > 0 ? ( diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js index 9b3ca69018..3c787532c4 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js @@ -1,4 +1,4 @@ -import React, { useCallback, useState } from 'react'; +import React, { useCallback, useMemo, useState } from 'react'; import { Table, TableBody, @@ -74,7 +74,7 @@ const StatsTable = ({ data, isLoading }) => { order: null, orderBy: null, }); - const [list, setList] = useState([...data]); + const list = useMemo(() => [...data], [data]); const headCells = [ { id: 'name', label: strings.name, align: 'left', sortType: 'character' }, diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDappsPage.js b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDappsPage.js index da2b93bb83..901b87fcb4 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDappsPage.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDappsPage.js @@ -2,7 +2,7 @@ import React from 'react'; import PortfolioPageLayout from '../../layout/PortfolioPageLayout'; import PortfolioDapps from '../../features/portfolio/useCases/Dapps/PortfolioDapps'; -import mockData from './mockData'; +import mockData from '../../features/portfolio/common/mockData'; type Props = {| stores: any, diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js index c14ab30313..a0b9a4ce2e 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js @@ -2,7 +2,7 @@ import React from 'react'; import TokenDetails from '../../features/portfolio/useCases/TokenDetails/TokenDetails'; import PortfolioPageLayout from '../../layout/PortfolioPageLayout'; -import mockData from './mockData'; +import mockData from '../../features/portfolio/common/mockData'; type Props = {| stores: any, diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js index f2bf3062ac..8f0c744b11 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js @@ -2,7 +2,7 @@ import React from 'react'; import PortfolioWallet from '../../features/portfolio/useCases/Wallet/PortfolioWallet'; import PortfolioPageLayout from '../../layout/PortfolioPageLayout'; -import mockData from './mockData'; +import mockData from '../../features/portfolio/common/mockData'; type Props = {| stores: any, From e140cfd1c99ba7d5610cb4e29ff0402f11193b79 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 30 May 2024 12:40:18 +0300 Subject: [PATCH 053/464] governance updates and fixes --- packages/yoroi-extension/app/Routes.js | 190 +++++------------ .../app/UI/context/IntlProvider.js | 12 ++ .../UI/features/gouvernace/common/helpers.js | 9 - .../gouvernace/common/useNavigateTo.js | 14 -- .../module/GouvernanceContextProvider.js | 60 ------ .../UI/features/gouvernace/module/state.js | 63 ------ ...eCreateAndSendDrepDelegationTransaction.js | 11 + .../governace/api/useDrepDelegationState.js | 38 ++++ .../common/ChooseDRepModal.js | 50 ++--- .../governace/common/GovernanceVoteingCard.js | 77 +++++++ .../governace/common/VotingSkeletonCard.js | 29 +++ .../UI/features/governace/common/helpers.js | 56 +++++ .../common/ilustrations/Abstein.js | 0 .../common/ilustrations/DRepIlustration.js | 0 .../common/ilustrations/NoConfidance.js | 0 .../common/useGovernanceManagerMaker.js | 7 +- .../governace/common/useNavigateTo.js | 14 ++ .../common/useStrings.js | 6 +- .../module/GovernanceContextProvider.js | 61 ++++++ .../app/UI/features/governace/module/state.js | 61 ++++++ .../useCases/DelagationForm/DelagationForm.js | 29 ++- .../GovernanceStatusSelection.js} | 197 ++++++++---------- .../app/UI/layout/GeneralPageLayout.js | 6 +- .../GouvernanceDelegationFormPage.js | 19 -- .../Gouvernance/GouvernanceStatusPage.js | 19 -- .../GovernanceDelegationFormPage.js | 19 ++ .../pages/Governance/GovernanceStatusPage.js | 19 ++ .../GovernanceTransactionFailedPage.js} | 10 +- .../GovernanceTransactionSubmittedPage.js} | 10 +- .../{Gouvernance => Governance}/layout.js | 14 +- .../sidebar/revamp/governance.inline.svg | 3 + .../app/i18n/global-messages.js | 33 ++- .../app/i18n/locales/en-US.json | 2 +- packages/yoroi-extension/app/routes-config.js | 10 +- .../app/stores/stateless/sidebarCategories.js | 22 +- 35 files changed, 651 insertions(+), 519 deletions(-) create mode 100644 packages/yoroi-extension/app/UI/context/IntlProvider.js delete mode 100644 packages/yoroi-extension/app/UI/features/gouvernace/common/helpers.js delete mode 100644 packages/yoroi-extension/app/UI/features/gouvernace/common/useNavigateTo.js delete mode 100644 packages/yoroi-extension/app/UI/features/gouvernace/module/GouvernanceContextProvider.js delete mode 100644 packages/yoroi-extension/app/UI/features/gouvernace/module/state.js create mode 100644 packages/yoroi-extension/app/UI/features/governace/api/useCreateAndSendDrepDelegationTransaction.js create mode 100644 packages/yoroi-extension/app/UI/features/governace/api/useDrepDelegationState.js rename packages/yoroi-extension/app/UI/features/{gouvernace => governace}/common/ChooseDRepModal.js (57%) create mode 100644 packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.js create mode 100644 packages/yoroi-extension/app/UI/features/governace/common/VotingSkeletonCard.js create mode 100644 packages/yoroi-extension/app/UI/features/governace/common/helpers.js rename packages/yoroi-extension/app/UI/features/{gouvernace => governace}/common/ilustrations/Abstein.js (100%) rename packages/yoroi-extension/app/UI/features/{gouvernace => governace}/common/ilustrations/DRepIlustration.js (100%) rename packages/yoroi-extension/app/UI/features/{gouvernace => governace}/common/ilustrations/NoConfidance.js (100%) rename packages/yoroi-extension/app/UI/features/{gouvernace => governace}/common/useGovernanceManagerMaker.js (74%) create mode 100644 packages/yoroi-extension/app/UI/features/governace/common/useNavigateTo.js rename packages/yoroi-extension/app/UI/features/{gouvernace => governace}/common/useStrings.js (77%) create mode 100644 packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.js create mode 100644 packages/yoroi-extension/app/UI/features/governace/module/state.js rename packages/yoroi-extension/app/UI/features/{gouvernace => governace}/useCases/DelagationForm/DelagationForm.js (76%) rename packages/yoroi-extension/app/UI/features/{gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection.js => governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js} (50%) delete mode 100644 packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernanceDelegationFormPage.js delete mode 100644 packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernanceStatusPage.js create mode 100644 packages/yoroi-extension/app/UI/pages/Governance/GovernanceDelegationFormPage.js create mode 100644 packages/yoroi-extension/app/UI/pages/Governance/GovernanceStatusPage.js rename packages/yoroi-extension/app/UI/pages/{Gouvernance/GouvernanceTransactionFailedPage.js => Governance/GovernanceTransactionFailedPage.js} (50%) rename packages/yoroi-extension/app/UI/pages/{Gouvernance/GouvernanceTransactionSubmittedPage.js => Governance/GovernanceTransactionSubmittedPage.js} (51%) rename packages/yoroi-extension/app/UI/pages/{Gouvernance => Governance}/layout.js (55%) create mode 100644 packages/yoroi-extension/app/assets/images/sidebar/revamp/governance.inline.svg diff --git a/packages/yoroi-extension/app/Routes.js b/packages/yoroi-extension/app/Routes.js index f5804e5415..373ef6ee99 100644 --- a/packages/yoroi-extension/app/Routes.js +++ b/packages/yoroi-extension/app/Routes.js @@ -10,17 +10,11 @@ import React, { Suspense } from 'react'; import StakingPage, { StakingPageContentPromise } from './containers/wallet/staking/StakingPage'; import Transfer, { WalletTransferPagePromise } from './containers/transfer/Transfer'; import VotingPage, { VotingPageContentPromise } from './containers/wallet/voting/VotingPage'; -import ConnectedWebsitesPage, { - ConnectedWebsitesPagePromise, -} from './containers/dapp-connector/ConnectedWebsitesContainer'; +import ConnectedWebsitesPage, { ConnectedWebsitesPagePromise } from './containers/dapp-connector/ConnectedWebsitesContainer'; import AddWalletPage, { AddAnotherWalletPromise } from './containers/wallet/AddWalletPage'; // Todo: Add lazy loading -import RestoreWalletPage, { - RestoreWalletPagePromise, -} from './containers/wallet/restore/RestoreWalletPage'; -import CreateWalletPage, { - CreateWalletPagePromise, -} from './containers/wallet/CreateWalletPageContainer'; +import RestoreWalletPage, { RestoreWalletPagePromise } from './containers/wallet/restore/RestoreWalletPage'; +import CreateWalletPage, { CreateWalletPagePromise } from './containers/wallet/CreateWalletPageContainer'; import { QueryClient, QueryClientProvider } from 'react-query'; import LoadingPage from './containers/LoadingPage'; import Wallet from './containers/wallet/Wallet'; @@ -34,10 +28,12 @@ import LoadingSpinner from './components/widgets/LoadingSpinner'; import FullscreenLayout from './components/layout/FullscreenLayout'; // New UI pages -import GouvernanceStatusPage from './UI/pages/Gouvernance/GouvernanceStatusPage'; -import GouvernanceDelegationFormPage from './UI/pages/Gouvernance/GouvernanceDelegationFormPage'; -import GouvernanceTransactionSubmittedPage from './UI/pages/Gouvernance/GouvernanceTransactionSubmittedPage'; -import GouvernanceTransactionFailedPage from './UI/pages/Gouvernance/GouvernanceTransactionFailedPage'; +import { GovernanceContextProvider } from './UI/features/governace/module/GovernanceContextProvider'; +import { createCurrrentWalletInfo } from './UI/features/governace/common/helpers'; +import GovernanceStatusPage from './UI/pages/Governance/GovernanceStatusPage'; +import GovernanceDelegationFormPage from './UI/pages/Governance/GovernanceDelegationFormPage'; +import GovernanceTransactionSubmittedPage from './UI/pages/Governance/GovernanceTransactionSubmittedPage'; +import GovernanceTransactionFailedPage from './UI/pages/Governance/GovernanceTransactionFailedPage'; // PAGES const LanguageSelectionPagePromise = () => import('./containers/profile/LanguageSelectionPage'); @@ -50,25 +46,19 @@ const OptForAnalyticsPagePromise = () => import('./containers/profile/OptForAnal const OptForAnalyticsPage = React.lazy(OptForAnalyticsPagePromise); // SETTINGS -const GeneralSettingsPagePromise = () => - import('./containers/settings/categories/GeneralSettingsPage'); +const GeneralSettingsPagePromise = () => import('./containers/settings/categories/GeneralSettingsPage'); const GeneralSettingsPage = React.lazy(GeneralSettingsPagePromise); -const WalletSettingsPagePromise = () => - import('./containers/settings/categories/WalletSettingsPage'); +const WalletSettingsPagePromise = () => import('./containers/settings/categories/WalletSettingsPage'); const WalletSettingsPage = React.lazy(WalletSettingsPagePromise); -const ExternalStorageSettingsPagePromise = () => - import('./containers/settings/categories/ExternalStorageSettingsPage'); +const ExternalStorageSettingsPagePromise = () => import('./containers/settings/categories/ExternalStorageSettingsPage'); const ExternalStorageSettingsPage = React.lazy(ExternalStorageSettingsPagePromise); const OAuthDropboxPagePromise = () => import('./containers/settings/categories/OAuthDropboxPage'); const OAuthDropboxPage = React.lazy(OAuthDropboxPagePromise); -const TermsOfUseSettingsPagePromise = () => - import('./containers/settings/categories/TermsOfUseSettingsPage'); +const TermsOfUseSettingsPagePromise = () => import('./containers/settings/categories/TermsOfUseSettingsPage'); const TermsOfUseSettingsPage = React.lazy(TermsOfUseSettingsPagePromise); -const SupportSettingsPagePromise = () => - import('./containers/settings/categories/SupportSettingsPage'); +const SupportSettingsPagePromise = () => import('./containers/settings/categories/SupportSettingsPage'); const SupportSettingsPage = React.lazy(SupportSettingsPagePromise); -const AnalyticsSettingsPagePromise = () => - import('./containers/settings/categories/AnalyticsSettingsPage'); +const AnalyticsSettingsPagePromise = () => import('./containers/settings/categories/AnalyticsSettingsPage'); const AnalyticsSettingsPage = React.lazy(AnalyticsSettingsPagePromise); const NightlyPagePromise = () => import('./containers/profile/NightlyPage'); @@ -95,22 +85,19 @@ const URILandingPage = React.lazy(URILandingPagePromise); const ReceivePromise = () => import('./containers/wallet/Receive'); const Receive = React.lazy(ReceivePromise); -const StakingDashboardPagePromise = () => - import('./containers/wallet/staking/StakingDashboardPage'); +const StakingDashboardPagePromise = () => import('./containers/wallet/staking/StakingDashboardPage'); const StakingDashboardPage = React.lazy(StakingDashboardPagePromise); const CardanoStakingPagePromise = () => import('./containers/wallet/staking/CardanoStakingPage'); const CardanoStakingPage = React.lazy(CardanoStakingPagePromise); -const ComplexityLevelSettingsPagePromise = () => - import('./containers/settings/categories/ComplexityLevelSettingsPage'); +const ComplexityLevelSettingsPagePromise = () => import('./containers/settings/categories/ComplexityLevelSettingsPage'); const ComplexityLevelSettingsPage = React.lazy(ComplexityLevelSettingsPagePromise); const ComplexityLevelPagePromise = () => import('./containers/profile/ComplexityLevelPage'); const ComplexityLevelPage = React.lazy(ComplexityLevelPagePromise); -const BlockchainSettingsPagePromise = () => - import('./containers/settings/categories/BlockchainSettingsPage'); +const BlockchainSettingsPagePromise = () => import('./containers/settings/categories/BlockchainSettingsPage'); const BlockchainSettingsPage = React.lazy(BlockchainSettingsPagePromise); const WalletSwitchPromise = () => import('./containers/WalletSwitch'); @@ -197,11 +184,7 @@ export const Routes = (stores: StoresMap, actions: ActionsMap): Node => { - } - /> + } /> { ( - - )} + component={props => } /> ( - - )} + component={props => } /> { ( - - )} + component={props => } /> } /> - } - /> + } /> - wrapAssets({ ...props, stores, actions }, AssetsSubpages(stores, actions)) - } + component={props => wrapAssets({ ...props, stores, actions }, AssetsSubpages(stores, actions))} /> - wrapNFTs({ ...props, stores, actions }, NFTsSubPages(stores, actions)) - } + component={props => wrapNFTs({ ...props, stores, actions }, NFTsSubPages(stores, actions))} /> { ( - - )} + component={props => } /> { /> - wrapWallet({ ...props, stores, actions }, WalletsSubpages(stores, actions)) - } + component={props => wrapWallet({ ...props, stores, actions }, WalletsSubpages(stores, actions))} /> - wrapSettings({ ...props, stores, actions }, SettingsSubpages(stores, actions)) - } + component={props => wrapSettings({ ...props, stores, actions }, SettingsSubpages(stores, actions))} /> - wrapSwap({ ...props, stores, actions }, SwapSubpages(stores, actions)) - } - /> - } + component={props => wrapSwap({ ...props, stores, actions }, SwapSubpages(stores, actions))} /> + } /> { path={ROUTES.OAUTH_FROM_EXTERNAL.DROPBOX} component={props => } /> - } - /> + } /> { {/* NEW UI Routes */} - wrapGouvernance({ ...props, stores, actions }, GouvernanceSubpages(stores, actions)) - } + path={ROUTES.Governance.ROOT} + component={props => wrapGovernance({ ...props, stores, actions }, GovernanceSubpages(stores, actions))} /> @@ -366,17 +318,11 @@ const WalletsSubpages = (stores, actions) => ( path={ROUTES.WALLETS.SEND} component={props => } /> - } - /> + } /> - wrapReceive( - { ...props, stores, actions }, - - ) + wrapReceive({ ...props, stores, actions }, ) } /> ( exact path={ROUTES.WALLETS.ADAPOOL_DELEGATION_SIMPLE} component={props => ( - + )} /> ( const SwapSubpages = (stores, actions) => ( - } - /> - } - /> + } /> + } /> ); @@ -450,9 +383,7 @@ const SettingsSubpages = (stores, actions) => ( ( - - )} + component={props => } /> ( ( - - )} + component={props => } /> ( const NFTsSubPages = (stores, actions) => ( - } - /> + } /> ( ); -const GouvernanceSubpages = (stores, actions) => ( +const GovernanceSubpages = (stores, actions) => ( } + path={ROUTES.Governance.ROOT} + component={props => } /> ( - - )} + path={ROUTES.Governance.DELEGATE} + component={props => } /> ( - - )} + path={ROUTES.Governance.SUBMITTED} + component={props => } /> ( - - )} + path={ROUTES.Governance.FAIL} + component={props => } /> ); @@ -593,6 +512,11 @@ export function wrapReceive(receiveProps: StoresAndActionsProps, children: Node) } // NEW UI - TODO: to be refactred -export function wrapGouvernance(gouvernanceProps: StoresAndActionsProps, children: Node): Node { - return {children}; +export function wrapGovernance(governanceProps: StoresAndActionsProps, children: Node): Node { + const currentWalletInfo = createCurrrentWalletInfo(governanceProps.stores); + return ( + + {children}; + + ); } diff --git a/packages/yoroi-extension/app/UI/context/IntlProvider.js b/packages/yoroi-extension/app/UI/context/IntlProvider.js new file mode 100644 index 0000000000..de4d8b33f6 --- /dev/null +++ b/packages/yoroi-extension/app/UI/context/IntlProvider.js @@ -0,0 +1,12 @@ +// flow +import * as React from 'react'; +import type { Node } from 'react'; + +const IntlProviderContext = React.createContext(null); + +export const IntlProvider = ({ children, intl }: Node) => { + return {children}; +}; + +export const useIntl = () => + React.useContext(IntlProviderContext) ?? invalid('IntlProviderontext: needs to be wrapped in a IntlProvider'); diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/common/helpers.js b/packages/yoroi-extension/app/UI/features/gouvernace/common/helpers.js deleted file mode 100644 index 7d0b3691a0..0000000000 --- a/packages/yoroi-extension/app/UI/features/gouvernace/common/helpers.js +++ /dev/null @@ -1,9 +0,0 @@ -export const mapStakingKeyStateToGovernanceAction = state => { - if (!state.drepDelegation) return null; - const vote = state.drepDelegation; - return vote.action === 'abstain' - ? { kind: 'abstain' } - : vote.action === 'no-confidence' - ? { kind: 'no-confidence' } - : { kind: 'delegate', drepID: vote.drepID }; -}; diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/common/useNavigateTo.js b/packages/yoroi-extension/app/UI/features/gouvernace/common/useNavigateTo.js deleted file mode 100644 index 794eaf7af9..0000000000 --- a/packages/yoroi-extension/app/UI/features/gouvernace/common/useNavigateTo.js +++ /dev/null @@ -1,14 +0,0 @@ -import { useHistory } from 'react-router-dom'; -import React, { useRef } from 'react'; -import { ROUTES } from '../../../../routes-config'; - -export const useNavigateTo = () => { - const history = useHistory(); - - return React.useRef({ - selectStatus: () => history.push(ROUTES.Gouvernance.ROOT), - delegationForm: () => history.push(ROUTES.Gouvernance.DELEGATE), - transactionSubmited: () => history.push(ROUTES.Gouvernance.SUBMITTED), - transactionFail: () => history.push(ROUTES.Gouvernance.FAIL), - }).current; -}; diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/module/GouvernanceContextProvider.js b/packages/yoroi-extension/app/UI/features/gouvernace/module/GouvernanceContextProvider.js deleted file mode 100644 index 7bd5276ffe..0000000000 --- a/packages/yoroi-extension/app/UI/features/gouvernace/module/GouvernanceContextProvider.js +++ /dev/null @@ -1,60 +0,0 @@ -// flow -import * as React from 'react'; - -import { - GouvernanceAction, - GouvernanceActionType, - GouvernanceReducer, - defaultGouvernanceActions, - defaultGouvernanceState, - GouvernanceState, - GouvernanceActions, -} from './state'; - -import { getStrings } from '../common/useStrings'; -import { useGovernanceManagerMaker } from '../common/useGovernanceManagerMaker'; - -const initialGouvernanceProvider = { - ...defaultGouvernanceState, - ...defaultGouvernanceActions, -}; -const GouvernanceContext = React.createContext(initialGouvernanceProvider); - -type GouvernanceProviderProps = any; - -export const GouvernanceContextProvider = ({ children, intl, currentWallet, currentPoolInfo }: GouvernanceProviderProps) => { - const [state, dispatch] = React.useReducer(GouvernanceReducer, { - ...defaultGouvernanceState, - gouvernanceStatus: 'none', - }); - console.log('[CONTEXT Current Wallet Info]', currentWallet); - const { walletId, networkId, currentPool } = currentWallet; - const gouvernanceManager = useGovernanceManagerMaker(walletId, networkId); - console.log('[CONTEXT gouvernanceManager]', gouvernanceManager); - - const actions = React.useRef({ - gouvernanceStatusChanged: (status: any) => { - dispatch({ - type: GouvernanceActionType.GouvernanceStatusChanged, - gouvernanceStatus: status, - }); - }, - dRepIdChanged: (id: string) => { - dispatch({ type: GouvernanceActionType.DRepIdChanged, dRepId: id }); - }, - }).current; - - const context = { - ...state, - // ...gouvernanceApi, - ...actions, - strings: getStrings(intl), - gouvernanceManager: gouvernanceManager, - stakePoolKeyHash: currentPool.hash ?? '', - }; - - return {children}; -}; - -export const useGovernance = () => - React.useContext(GouvernanceContext) ?? invalid('useGovernance: needs to be wrapped in a GouvernanceManagerProvider'); diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/module/state.js b/packages/yoroi-extension/app/UI/features/gouvernace/module/state.js deleted file mode 100644 index 29c8cfbb6c..0000000000 --- a/packages/yoroi-extension/app/UI/features/gouvernace/module/state.js +++ /dev/null @@ -1,63 +0,0 @@ -// @flow -import { invalid } from '@yoroi/common'; -import { produce } from 'immer'; - -type status = 'none' | 'drep' | 'abstain' | 'noConfidence'; - -// Define types -export type GouvernanceActions = {| - +gouvernanceStatusChanged: (status: status) => void, - +dRepIdChanged: (id: string) => void, -|}; - -export const GouvernanceActionType = Object.freeze({ - GouvernanceStatusChanged: 'gouvernanceStatusChanged', - DRepIdChanged: 'dRepIdChanged', -}); - -export type GouvernanceAction = - | {| - type: typeof GouvernanceActionType.GouvernanceStatusChanged, - gouvernanceStatus: status, - |} - | {| - type: typeof GouvernanceActionType.DRepIdChanged, - dRepId: '', - |}; - -// Define state type -export type GouvernanceState = {| - gouvernanceStatus: status, - dRepId: string, -|}; - -// Define default state -export const defaultGouvernanceState: GouvernanceState = { - gouvernanceStatus: 'none', - dRepId: '', -}; - -// Define action handlers -export const defaultGouvernanceActions: GouvernanceActions = { - gouvernanceStatusChanged: () => invalid('missing init gouvernanceStatusChanged'), - dRepIdChanged: () => invalid('missing init dRepIdChanged'), -}; - -// Reducer function -export const GouvernanceReducer = ( - state: GouvernanceState, - action: GouvernanceAction -): GouvernanceState => { - return produce(state, draft => { - switch (action.type) { - case GouvernanceActionType.GouvernanceStatusChanged: - draft.gouvernanceStatus = action.gouvernanceStatus; - break; - case GouvernanceActionType.DRepIdChanged: - draft.dRepId = action.dRepId; - break; - default: - return; - } - }); -}; diff --git a/packages/yoroi-extension/app/UI/features/governace/api/useCreateAndSendDrepDelegationTransaction.js b/packages/yoroi-extension/app/UI/features/governace/api/useCreateAndSendDrepDelegationTransaction.js new file mode 100644 index 0000000000..559b6ecf6c --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/governace/api/useCreateAndSendDrepDelegationTransaction.js @@ -0,0 +1,11 @@ +// @flow + +export const useCreateAndSendDrepDelegationTransaction = ({ + walletId, + governanceVote, +}: {| + walletId: string, + governanceVote: {| kind: string, drepID: string | null |}, +|}): void => { + localStorage.setItem(`Governance - ${walletId}`, JSON.stringify(governanceVote)); +}; diff --git a/packages/yoroi-extension/app/UI/features/governace/api/useDrepDelegationState.js b/packages/yoroi-extension/app/UI/features/governace/api/useDrepDelegationState.js new file mode 100644 index 0000000000..ff39a156d6 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/governace/api/useDrepDelegationState.js @@ -0,0 +1,38 @@ +// @flow +import { useQuery } from 'react-query'; + +type PoolTransition = {| + kind: null | 'none' | 'delegate' | 'abstain' | 'no-confidence', + drepID: 'drep1c93a2zvs3aw8e4naez0ynpmc48jbc7yaa3n2k8ljhwfdt70yscts' | null, +|}; + +// TODO mock impementation - add real endpoint +const getDrepDelegationState = async (walletId: string): Promise => { + const storage = localStorage.getItem(`Governance - ${walletId}`); + + if (storage === null || storage === undefined) { + return new Promise(resolve => { + resolve({ + kind: 'none', + drepID: null, + }); + }); + } else { + const parsedStorage = JSON.parse(storage); + return new Promise(resolve => { + resolve({ + kind: parsedStorage.kind, + drepID: parsedStorage?.drepID ?? null, + }); + }); + } +}; + +export const useDrepDelegationState = (walletId: string): any => { + const DrepDelegationQuery = useQuery({ + queryKey: [walletId, 'DrepDelegationState'], + queryFn: () => getDrepDelegationState(walletId), + }); + + return DrepDelegationQuery; +}; diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/common/ChooseDRepModal.js b/packages/yoroi-extension/app/UI/features/governace/common/ChooseDRepModal.js similarity index 57% rename from packages/yoroi-extension/app/UI/features/gouvernace/common/ChooseDRepModal.js rename to packages/yoroi-extension/app/UI/features/governace/common/ChooseDRepModal.js index 21f98fd3bf..2e09be58ac 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/common/ChooseDRepModal.js +++ b/packages/yoroi-extension/app/UI/features/governace/common/ChooseDRepModal.js @@ -11,6 +11,7 @@ import { TextInput } from '../../../components'; import { parseDrepId, useIsValidDRepID } from '@yoroi/staking'; import { isNonNullable } from '@yoroi/common'; import { RustModule } from '../../../../api/ada/lib/cardanoCrypto/rustLoader'; +import { useGovernance } from '../module/GovernanceContextProvider'; type ChooseDRepModallProps = {| onSubmit?: (drepId: string) => void, @@ -18,31 +19,35 @@ type ChooseDRepModallProps = {| export const ChooseDRepModal = ({ onSubmit }: ChooseDRepModallProps): Node => { const [drepId, setDrepId] = React.useState(''); + const [error, setError] = React.useState(false); + + const { dRepIdChanged, governanceVoteChanged } = useGovernance(); // TODO hook endpoint not working well - const { error, isFetched, isFetching } = useIsValidDRepID(drepId, { - retry: false, - enabled: drepId.length > 0, - }); + // const { error, isFetched, isFetching } = useIsValidDRepID(drepId, { + // retry: false, + // enabled: drepId.length > 0, + // }); + + React.useEffect(() => { + setError(false); + }, [drepId]); const confirmDRep = () => { - // TODO add spcecific validation if needed - onSubmit?.(drepId); - // TODO hook endpoint not working well - // parseDrepId(drepId, RustModule.CrossCsl.init) - // .then(parsedId => { - // console.log('parsedId', parsedId); - // }) - // .catch(err => { - // console.log('err', err); - // }); + parseDrepId(drepId, RustModule.CrossCsl.init('any')) + .then(parsedId => { + onSubmit?.(drepId); + }) + .catch(err => { + setError(true); + }); }; const idInvalid = drepId.match(/\d+/g); return ( - + Identify your preferred DRep and enter their ID below to delegate your vote @@ -51,21 +56,18 @@ export const ChooseDRepModal = ({ onSubmit }: ChooseDRepModallProps): Node => { label="DRep ID" variant="outlined" onChange={event => { + dRepIdChanged(event.target.value); + governanceVoteChanged({ kind: 'delegate', drepID: event.target.value }); setDrepId(event.target.value); }} value={drepId} - error={!!idInvalid} - helperText={idInvalid ? 'Incorrect format' : ' '} + error={error} + helperText={error ? 'Incorrect format' : ' '} + defaultValue="drep1wn0dklu87w8d9pkuyr7jalulgvl9w2he0hn0fne9k5a6y4d55mt" /> - diff --git a/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.js b/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.js new file mode 100644 index 0000000000..1991b22444 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.js @@ -0,0 +1,77 @@ +// @flow +import * as React from 'react'; +import type { Node } from 'react'; +import { styled } from '@mui/material/styles'; +import Card from '@mui/material/Card'; +import CardContent from '@mui/material/CardContent'; +import Typography from '@mui/material/Typography'; +import Box from '@mui/material/Box'; +import { Stack } from '@mui/material'; +import LoadingSpinner from '../../../../components/widgets/LoadingSpinner'; + +type Props = {| + title: string, + description: string, + icon: React.Node, + selected: boolean, + onClick: () => void, + pending: boolean, +|}; + +const StyledCard = styled(Stack)(({ theme, selected, pending }) => ({ + position: 'relative', + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + width: '294px', + borderRadius: '8px', + ...(!selected && { + backgroundImage: theme.palette.ds?.bg_gradient_1, + backgroundOrigin: 'border-box', + boxShadow: 'inset 0 100vw white', + border: '2px solid transparent', + }), + ...(selected && { + background: theme.palette.ds.bg_gradient_2, + border: 'none', + }), + cursor: 'pointer', + ...(pending && { + opacity: selected ? 1 : 0.5, + cursor: 'not-allowed', + }), +})); + +const IconContainer = styled(Box)(({ theme }) => ({ + display: 'flex', + justifyContent: 'center', +})); + +const Description = styled(Typography)(({ theme }) => ({ + marginTop: theme.spacing(1), +})); + +const SpinnerBox = styled(Box)(({ theme }) => ({ + position: 'absolute', + right: 15, + top: 15, +})); + +export const GovernanceVoteingCard = ({ title, description, icon, selected, onClick, pending }: Props): Node => ( + + {pending && selected && ( + + + + )} + + {icon} + + {title} + + + {description} + + + +); diff --git a/packages/yoroi-extension/app/UI/features/governace/common/VotingSkeletonCard.js b/packages/yoroi-extension/app/UI/features/governace/common/VotingSkeletonCard.js new file mode 100644 index 0000000000..3c26875437 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/governace/common/VotingSkeletonCard.js @@ -0,0 +1,29 @@ +// @flow +import * as React from 'react'; +import type { Node } from 'react'; +import { Stack } from '@mui/material'; +import { Skeleton } from '@mui/material'; +import { styled } from '@mui/material/styles'; + +const StyledCard = styled(Stack)(({ theme, selected, pending }) => ({ + position: 'relative', + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + width: '294px', + borderRadius: '8px', + padding: '16px', + backgroundImage: theme.palette.ds?.bg_gradient_1, + backgroundOrigin: 'border-box', + boxShadow: 'inset 0 100vw white', + border: '2px solid transparent', +})); +export const VotingSkeletonCard = (): Node => { + return ( + + + + + + ); +}; diff --git a/packages/yoroi-extension/app/UI/features/governace/common/helpers.js b/packages/yoroi-extension/app/UI/features/governace/common/helpers.js new file mode 100644 index 0000000000..23d1aa2bd8 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/governace/common/helpers.js @@ -0,0 +1,56 @@ +export const mapStakingKeyStateToGovernanceAction = state => { + if (!state.drepDelegation) return null; + const vote = state.drepDelegation; + return vote.action === 'abstain' + ? { kind: 'abstain' } + : vote.action === 'no-confidence' + ? { kind: 'no-confidence' } + : { kind: 'delegate', drepID: vote.drepID }; +}; + +const getStakePoolMeta = stores => { + const publicDeriver = stores.wallets.selected; + const delegationStore = stores.delegation; + const currentPool = delegationStore.getDelegatedPoolId(publicDeriver); + if (currentPool == null) return null; + const networkInfo = publicDeriver.getParent().getNetworkInfo(); + const poolMeta = delegationStore.getLocalPoolInfo(networkInfo, currentPool); + const poolInfo = delegationStore.getLocalRemotePoolInfo(networkInfo, currentPool) ?? {}; + if (poolMeta == null) { + // server hasn't returned information about the stake pool yet + return null; + } + const name = poolMeta.info?.name ?? 'unknown'; + const delegatedPool = { + id: String(currentPool), + name, + websiteUrl: poolMeta.info?.homepage, + ticker: poolMeta.info?.ticker, + ...poolInfo, + }; + + return { + ...delegatedPool, + ...poolMeta, + }; +}; + +export const createCurrrentWalletInfo = stores => { + const { wallets, delegation, substores } = stores; + const walletCurrentPoolInfo = getStakePoolMeta(stores); + + const selectedWallet = wallets.selected; + if (selectedWallet == null) { + throw new Error(`no selected Wallet. Should never happen`); + } + + const currentWalletId = selectedWallet.getPublicDeriverId(); + const networkInfo = selectedWallet.getParent().getNetworkInfo(); + const networkId = networkInfo.NetworkId; + + return { + currentPool: walletCurrentPoolInfo, + networkId, + walletId: currentWalletId, + }; +}; diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/Abstein.js b/packages/yoroi-extension/app/UI/features/governace/common/ilustrations/Abstein.js similarity index 100% rename from packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/Abstein.js rename to packages/yoroi-extension/app/UI/features/governace/common/ilustrations/Abstein.js diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/DRepIlustration.js b/packages/yoroi-extension/app/UI/features/governace/common/ilustrations/DRepIlustration.js similarity index 100% rename from packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/DRepIlustration.js rename to packages/yoroi-extension/app/UI/features/governace/common/ilustrations/DRepIlustration.js diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/NoConfidance.js b/packages/yoroi-extension/app/UI/features/governace/common/ilustrations/NoConfidance.js similarity index 100% rename from packages/yoroi-extension/app/UI/features/gouvernace/common/ilustrations/NoConfidance.js rename to packages/yoroi-extension/app/UI/features/governace/common/ilustrations/NoConfidance.js diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/common/useGovernanceManagerMaker.js b/packages/yoroi-extension/app/UI/features/governace/common/useGovernanceManagerMaker.js similarity index 74% rename from packages/yoroi-extension/app/UI/features/gouvernace/common/useGovernanceManagerMaker.js rename to packages/yoroi-extension/app/UI/features/governace/common/useGovernanceManagerMaker.js index 77d6a8036f..ade47d06cf 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/common/useGovernanceManagerMaker.js +++ b/packages/yoroi-extension/app/UI/features/governace/common/useGovernanceManagerMaker.js @@ -4,16 +4,15 @@ import { governanceApiMaker, governanceManagerMaker, useStakingKeyState } from ' import { RustModule } from '../../../../api/ada/lib/cardanoCrypto/rustLoader'; export const useGovernanceManagerMaker = (walletId: string, networkId: string): any => { - // const storage = useAsyncStorage(); - // const governanceStorage = storage.join(`wallet/${walletId}/staking-governance/`); - + // TODO - sancho testnet networkId id 450 - can't use it for now as the network is not working + // TODO - add proper storage for manager return React.useMemo( () => governanceManagerMaker({ walletId, networkId, api: governanceApiMaker({ networkId }), - cardano: RustModule.CrossCsl.init, + cardano: RustModule.CrossCsl.init('any'), storage: 'wallet/${walletId}/staking-governance/', }), [networkId, walletId] diff --git a/packages/yoroi-extension/app/UI/features/governace/common/useNavigateTo.js b/packages/yoroi-extension/app/UI/features/governace/common/useNavigateTo.js new file mode 100644 index 0000000000..d0dcc86c8b --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/governace/common/useNavigateTo.js @@ -0,0 +1,14 @@ +import { useHistory } from 'react-router-dom'; +import React, { useRef } from 'react'; +import { ROUTES } from '../../../../routes-config'; + +export const useNavigateTo = () => { + const history = useHistory(); + + return React.useRef({ + selectStatus: () => history.push(ROUTES.Governance.ROOT), + delegationForm: () => history.push(ROUTES.Governance.DELEGATE), + transactionSubmited: () => history.push(ROUTES.Governance.SUBMITTED), + transactionFail: () => history.push(ROUTES.Governance.FAIL), + }).current; +}; diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/common/useStrings.js b/packages/yoroi-extension/app/UI/features/governace/common/useStrings.js similarity index 77% rename from packages/yoroi-extension/app/UI/features/gouvernace/common/useStrings.js rename to packages/yoroi-extension/app/UI/features/governace/common/useStrings.js index fe2a5ab659..cfff9910fb 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/common/useStrings.js +++ b/packages/yoroi-extension/app/UI/features/governace/common/useStrings.js @@ -1,5 +1,6 @@ import React from 'react'; -import { defineMessages } from 'react-intl'; +import { defineMessages, IntlProvider } from 'react-intl'; +import { useIntl } from '../../../context/IntlProvider'; export const messages = Object.freeze( defineMessages({ @@ -15,7 +16,8 @@ export const messages = Object.freeze( }) ); -export const getStrings = intl => { +export const useStrings = () => { + const { intl } = useIntl(); return React.useRef({ delegateToDRep: intl.formatMessage(messages.delegateToDRep), designatingSomeoneElse: intl.formatMessage(messages.designatingSomeoneElse), diff --git a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.js b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.js new file mode 100644 index 0000000000..8aa671f3b4 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.js @@ -0,0 +1,61 @@ +// flow +import * as React from 'react'; + +import { + GovernanceAction, + GovernanceActionType, + GovernanceReducer, + defaultGovernanceActions, + defaultGovernanceState, + GovernanceState, + GovernanceActions, +} from './state'; + +import { getStrings } from '../common/useStrings'; +import { useGovernanceManagerMaker } from '../common/useGovernanceManagerMaker'; +import type { Node } from 'react'; + +const initialGovernanceProvider = { + ...defaultGovernanceState, + ...defaultGovernanceActions, +}; +const GovernanceContext = React.createContext(initialGovernanceProvider); + +type GovernanceProviderProps = { + children: Node, + currentWallet: any, // TODO to be defined +}; + +export const GovernanceContextProvider = ({ children, currentWallet }: GovernanceProviderProps) => { + const [state, dispatch] = React.useReducer(GovernanceReducer, { + ...defaultGovernanceState, + }); + console.log('[CONTEXT Current Wallet]', currentWallet); + const { walletId, networkId, currentPool } = currentWallet; + const governanceManager = useGovernanceManagerMaker(walletId, networkId); + + const actions = React.useRef({ + governanceVoteChanged: (vote: any) => { + dispatch({ + type: GovernanceActionType.GovernanceVoteChanged, + governanceVote: vote, + }); + }, + dRepIdChanged: (drepID: string) => { + dispatch({ type: GovernanceActionType.DRepIdChanged, drepID }); + }, + }).current; + + const context = { + ...state, + ...actions, + governanceManager: governanceManager, + stakePoolKeyHash: currentPool.hash ?? '', + walletId: currentWallet.walletId, + }; + + return {children}; +}; + +export const useGovernance = () => + React.useContext(GovernanceContext) ?? invalid('useGovernance: needs to be wrapped in a GovernanceManagerProvider'); diff --git a/packages/yoroi-extension/app/UI/features/governace/module/state.js b/packages/yoroi-extension/app/UI/features/governace/module/state.js new file mode 100644 index 0000000000..2d99334e98 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/governace/module/state.js @@ -0,0 +1,61 @@ +// @flow +import { invalid } from '@yoroi/common'; +import { produce } from 'immer'; + +type VoteKind = 'none' | 'delegate' | 'abstain' | 'no-confidence'; +type Vote = {| kind: VoteKind, drepID?: string |}; + +// Define types +export type GovernanceActions = {| + +governanceVoteChanged: (vote: Vote) => void, + +dRepIdChanged: (id: string) => void, +|}; + +export const GovernanceActionType = Object.freeze({ + GovernanceVoteChanged: 'governanceVoteChanged', + DRepIdChanged: 'dRepIdChanged', +}); + +export type GovernanceAction = + | {| + type: typeof GovernanceActionType.GovernanceVoteChanged, + governanceVote: Vote, + |} + | {| + type: typeof GovernanceActionType.DRepIdChanged, + dRepId: '', + |}; + +// Define state type +export type GovernanceState = {| + governanceVote: Vote, + dRepId: ?string, +|}; + +// Define default state +export const defaultGovernanceState: GovernanceState = { + governanceVote: { kind: 'abstain', drepID: '' }, + dRepId: '', +}; + +// Define action handlers +export const defaultGovernanceActions: GovernanceActions = { + governanceVoteChanged: () => invalid('missing init governanceVoteChanged'), + dRepIdChanged: () => invalid('missing init dRepIdChanged'), +}; + +// Reducer function +export const GovernanceReducer = (state: GovernanceState, action: GovernanceAction): GovernanceState => { + return produce(state, draft => { + switch (action.type) { + case GovernanceActionType.GovernanceVoteChanged: + draft.governanceVote = action.governanceVote; + break; + case GovernanceActionType.DRepIdChanged: + draft.dRepId = action.dRepId; + break; + default: + return; + } + }); +}; diff --git a/packages/yoroi-extension/app/UI/features/gouvernace/useCases/DelagationForm/DelagationForm.js b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.js similarity index 76% rename from packages/yoroi-extension/app/UI/features/gouvernace/useCases/DelagationForm/DelagationForm.js rename to packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.js index 79ecbfe6b1..ef57a07311 100644 --- a/packages/yoroi-extension/app/UI/features/gouvernace/useCases/DelagationForm/DelagationForm.js +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.js @@ -8,7 +8,8 @@ import type { Node } from 'react'; import { Button } from '@mui/material'; import { useNavigateTo } from '../../common/useNavigateTo'; import { PasswordInput } from '../../../../components'; -import { useGovernance } from '../../module/GouvernanceContextProvider'; +import { useGovernance } from '../../module/GovernanceContextProvider'; +import { useCreateAndSendDrepDelegationTransaction } from '../../api/useCreateAndSendDrepDelegationTransaction'; const Container = styled(Box)(({ theme }) => ({ paddingTop: '32px', @@ -45,15 +46,15 @@ export const DelagationForm = (): Node => { const [showPassword, setShowPassword] = React.useState(false); const [passwaord, setPassword] = React.useState(''); const navigateTo = useNavigateTo(); - const { gouvernanceStatusChanged } = useGovernance(); + const { dRepId, governanceVote, walletId } = useGovernance(); const confirmDelegation = () => { - gouvernanceStatusChanged('delegate'); // TODO mock functionality if (passwaord.includes('oo')) { navigateTo.transactionFail(); } else { navigateTo.transactionSubmited(); + useCreateAndSendDrepDelegationTransaction({ walletId, governanceVote }); } }; const idPasswordInvalid = passwaord.match(/\d+/g); @@ -87,10 +88,24 @@ export const DelagationForm = (): Node => { Operations - Delegate voting to drep1e93a2zvs3aw8e4naez0ynpmc48jbc7yaa3n2k8ljhwfdt70yscts - - Transaction fee: 0.5 ADA - + {governanceVote.kind === 'delegate' && ( + <> + {`Delegate voting to ${governanceVote.drepID}`} + + Transaction fee: 0.5 ADA + + + )} + {governanceVote.kind === 'abstain' && ( + <> + Select abstain + + )} + {governanceVote.kind === 'no-confidence' && ( + <> + Select no confidence + + )} void, -|}; +import { useDrepDelegationState } from '../../api/useDrepDelegationState'; +import { VotingSkeletonCard } from '../../common/VotingSkeletonCard'; const Container = styled(Box)(({ theme }) => ({ display: 'flex', @@ -35,89 +29,46 @@ const Container = styled(Box)(({ theme }) => ({ paddingTop: '24px', })); -const Description = styled(Typography)(({ theme }) => ({ - color: theme.palette.ds.gray_c800, - marginTop: theme.spacing(1), -})); - -const StyledCard = styled(Stack)(({ theme, selected }) => ({ - display: 'flex', - flexDirection: 'column', - alignItems: 'center', - width: '294px', - borderRadius: '8px', - backgroundImage: theme.palette.ds?.bg_gradient_1, - backgroundOrigin: 'border-box', - boxShadow: 'inset 0 100vw white', - border: '2px solid transparent', - cursor: 'pointer', -})); - -const IconContainer = styled(Box)(({ theme }) => ({ - display: 'flex', - justifyContent: 'center', -})); - const mapStatus = { drep: 'Delegate to a Drep', abstain: 'Abstaining', - noConfidence: 'No confidence', + 'no-confidence': 'No confidence', }; -const GovernanceCard = ({ title, description, icon, selected, onClick }: Props) => ( - - - {icon} - - {title} - - {description} - - -); - -export const GouvernanceStatusSelection = (): Node => { - const [voteKind, setVotKind] = useState<'abstain' | 'no-confidence' | 'delegate' | null>(null); - const [pendingVote, setPendingVote] = React.useState(null); +export const GovernanceStatusSelection = (): Node => { + const [pendingVote, setPendingVote] = React.useState(false); + const [pendingPage, setPendingPage] = React.useState(false); const navigateTo = useNavigateTo(); const { openModal } = useModal(); - const { - gouvernanceStatus, - strings, - gouvernanceManager, - stakePoolKeyHash, - dRepIdChanged, - gouvernanceStatusChanged, - } = useGovernance(); - - // TODO not working well - need to sync with mobile about this + const { governanceVote, governanceManager, stakePoolKeyHash, dRepIdChanged, governanceVoteChanged, walletId } = useGovernance(); + const { data } = useDrepDelegationState(walletId); + + const strings = useStrings(); + + // TODO not woking - the sancho testnet is down and other networks throw error // const { data: stakingStatus } = useStakingKeyState(stakePoolKeyHash, { suspense: true }); // const action = stakingStatus ? mapStakingKeyStateToGovernanceAction(stakingStatus) : null - const { createCertificate: createDelegationCertificate, isLoading: isCreatingDelegationCertificate } = useDelegationCertificate( - { - useErrorBoundary: true, - } - ); + const { createCertificate, isLoading: isCreatingDelegationCertificate } = useDelegationCertificate({ + useErrorBoundary: true, + }); const { createCertificate: createVotingCertificate, isLoading: isCreatingVotingCertificate } = useVotingCertificate({ useErrorBoundary: true, }); - const pageTitle = gouvernanceStatus === 'none' ? 'Governance Status' : 'Governance status'; - const statusRawText = mapStatus[gouvernanceStatus]; + const pageTitle = governanceVote === 'none' ? 'Register in Governance' : 'Governance status'; + const statusRawText = mapStatus[governanceVote]; const pageSubtitle = - gouvernanceStatus === 'none' + governanceVote === 'none' ? 'Review the selections carefully to assign yourself a Governance Status' : `You have selected ${statusRawText} as your governance status. You can change it at any time by clicking in the card bellow`; - const hasDRep = gouvernanceStatus === 'drep'; - - const openDRepIdModal = (onSubmit: (drepId: string) => void) => { + const openDRepIdModal = (onSubmit: (drepID: string) => void) => { openModal({ title: 'Choose your Drep', content: ( - + ), @@ -128,24 +79,52 @@ export const GouvernanceStatusSelection = (): Node => { const handleDelegate = () => { openDRepIdModal(drepID => { const vote = { kind: 'delegate', drepID }; - setPendingVote(vote.kind); - dRepIdChanged(drepID); - gouvernanceStatusChanged(drepID); - navigateTo.delegationForm('delegate'); - // createDelegationCertificate( + governanceVoteChanged(vote); + navigateTo.delegationForm(); + // createCertificate( // { drepID, stakePoolKeyHash }, // { // onSuccess: async certificate => { // // const unsignedTx = await createGovernanceTxMutation TODO - should be implemented - // navigateTo.delegationForm(); + // const vote = { kind: 'delegate', drepID }; + // setPendingVote(vote.kind); + // dRepIdChanged(drepID); + // governanceStatusChanged(drepID); + // navigateTo.delegationForm('delegate'); // }, // } // ); }); }; - const handleCardClick = card => { - // setSelectedCard(card); + const handleAbstain = () => { + const vote = { kind: 'abstain' }; + // setPendingVote(vote.kind); + governanceVoteChanged(vote); + navigateTo.delegationForm(); + // createVotingCertificate( + // { vote: 'abstain', stakingKey }, + // { + // onSuccess: async certificate => { + // navigateTo.delegationForm('delegate'); + // }, + // } + // ); + }; + + const handleNoConfidence = () => { + const vote = { kind: 'no-confidence' }; + // setPendingVote(vote.kind); + governanceVoteChanged(vote); + navigateTo.delegationForm(); + // createVotingCertificate( + // { vote: 'no-confidence', stakePoolKeyHash }, + // { + // onSuccess: async certificate => { + // navigateTo.confirmTx({ unsignedTx, vote }); + // }, + // } + // ); }; const optionsList = [ @@ -153,25 +132,30 @@ export const GouvernanceStatusSelection = (): Node => { title: strings.delegateToDRep, description: strings.designatingSomeoneElse, icon: , - selected: voteKind === 'delegate', + selected: data?.kind === 'delegate', onClick: handleDelegate, + pending: pendingVote, }, { title: 'Abstain', description: 'You are choosing not to cast a vote on all proposals now and in the future.', icon: , - selected: voteKind === 'abstain', - onClick: () => handleCardClick('no-vote'), + selected: data?.kind === 'abstain', + onClick: handleAbstain, + pending: pendingVote, }, { title: 'No Confidence', description: 'You are expressing a lack of trust for all proposals now and in the future.', icon: , - selected: voteKind === 'no-confidencet', - onClick: () => handleCardClick('lack-of-trust'), + selected: data?.kind === 'no-confidence', + onClick: handleNoConfidence, + pending: pendingVote, }, ]; + const skeletonsCards = new Array(optionsList.length).fill(null); + return ( @@ -181,20 +165,23 @@ export const GouvernanceStatusSelection = (): Node => { {pageSubtitle} - {optionsList.map((option, index) => { - return ( - - ); - })} + {!pendingPage + ? optionsList.map((option, index) => { + return ( + + ); + }) + : skeletonsCards.map(() => )} - {gouvernanceStatus === 'none' && ( + {governanceVote.kind === 'none' && ( Want to became a Drep? @@ -205,16 +192,16 @@ export const GouvernanceStatusSelection = (): Node => { )} - {hasDRep && ( - + + {data?.drepID && ( Drep ID: drep1c93a2zvs3aw8e4naez0ynpmc48jbc7yaa3n2k8ljhwfdt70yscts - - Learn more About Governance - - - )} + )} + + Learn more About Governance + + ); }; diff --git a/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js b/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js index 9484971929..12592d0ab8 100644 --- a/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js +++ b/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js @@ -10,11 +10,11 @@ import SidebarContainer from '../../containers/SidebarContainer'; import { Box, Typography } from '@mui/material'; import { withLayout } from '../../styles/context/layout'; import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; -import { GouvernanceContextProvider } from '../features/gouvernace/module/GouvernanceContextProvider'; import globalMessages from '../../i18n/global-messages'; import { ModalProvider } from '../components/modals/ModalContext'; import { ModalManager } from '../components/modals/ModalManager'; import { PublicDeriver } from '../../api/ada/lib/storage/models/PublicDeriver/index'; +import { IntlProvider } from '../context/IntlProvider'; type Props = {| ...StoresAndActionsProps, @@ -102,14 +102,14 @@ class GeneralPageLayout extends Component { const currentWalletInfo = this.createCurrrentWalletInfo(); return ( - + } sidebar={sidebarContainer} navbar={navbar}> {children} - + ); } } diff --git a/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernanceDelegationFormPage.js b/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernanceDelegationFormPage.js deleted file mode 100644 index 9ee38f1100..0000000000 --- a/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernanceDelegationFormPage.js +++ /dev/null @@ -1,19 +0,0 @@ -// @flow -import { DelagationForm } from '../../features/gouvernace/useCases/DelagationForm/DelagationForm'; -import GouvernanceLayout from './layout'; - -type Props = {| - stores: any, - actions: any, - children?: React$Node, -|}; - -const GouvernanceDelegationFormPage = (props: Props): any => { - return ( - - - - ); -}; - -export default GouvernanceDelegationFormPage; diff --git a/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernanceStatusPage.js b/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernanceStatusPage.js deleted file mode 100644 index 55d83f0498..0000000000 --- a/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernanceStatusPage.js +++ /dev/null @@ -1,19 +0,0 @@ -// @flow -import { GouvernanceStatusSelection } from '../../features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection'; -import GouvernanceLayout from './layout'; - -type Props = {| - stores: any, - actions: any, - children?: React$Node, -|}; - -const GouvernanceStatusPage = (props: Props): any => { - return ( - - - - ); -}; - -export default GouvernanceStatusPage; diff --git a/packages/yoroi-extension/app/UI/pages/Governance/GovernanceDelegationFormPage.js b/packages/yoroi-extension/app/UI/pages/Governance/GovernanceDelegationFormPage.js new file mode 100644 index 0000000000..61735e546d --- /dev/null +++ b/packages/yoroi-extension/app/UI/pages/Governance/GovernanceDelegationFormPage.js @@ -0,0 +1,19 @@ +// @flow +import { DelagationForm } from '../../features/governace/useCases/DelagationForm/DelagationForm'; +import GovernanceLayout from './layout'; + +type Props = {| + stores: any, + actions: any, + children?: React$Node, +|}; + +const GovernanceDelegationFormPage = (props: Props): any => { + return ( + + + + ); +}; + +export default GovernanceDelegationFormPage; diff --git a/packages/yoroi-extension/app/UI/pages/Governance/GovernanceStatusPage.js b/packages/yoroi-extension/app/UI/pages/Governance/GovernanceStatusPage.js new file mode 100644 index 0000000000..38cdb90d9f --- /dev/null +++ b/packages/yoroi-extension/app/UI/pages/Governance/GovernanceStatusPage.js @@ -0,0 +1,19 @@ +// @flow +import { GovernanceStatusSelection } from '../../features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection'; +import GovernanceLayout from './layout'; + +type Props = {| + stores: any, + actions: any, + children?: React$Node, +|}; + +const GovernanceStatusPage = (props: Props): any => { + return ( + + + + ); +}; + +export default GovernanceStatusPage; diff --git a/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernanceTransactionFailedPage.js b/packages/yoroi-extension/app/UI/pages/Governance/GovernanceTransactionFailedPage.js similarity index 50% rename from packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernanceTransactionFailedPage.js rename to packages/yoroi-extension/app/UI/pages/Governance/GovernanceTransactionFailedPage.js index 090084bf42..48b1e78427 100644 --- a/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernanceTransactionFailedPage.js +++ b/packages/yoroi-extension/app/UI/pages/Governance/GovernanceTransactionFailedPage.js @@ -1,6 +1,6 @@ // @flow import { TransactionFailed } from '../../components/TransactionFailed/TransactionFailed'; -import GouvernanceLayout from './layout'; +import GovernanceLayout from './layout'; type Props = {| stores: any, @@ -8,12 +8,12 @@ type Props = {| children?: React$Node, |}; -const GouvernanceTransactionFailedPage = (props: Props): any => { +const GovernanceTransactionFailedPage = (props: Props): any => { return ( - + - + ); }; -export default GouvernanceTransactionFailedPage; +export default GovernanceTransactionFailedPage; diff --git a/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernanceTransactionSubmittedPage.js b/packages/yoroi-extension/app/UI/pages/Governance/GovernanceTransactionSubmittedPage.js similarity index 51% rename from packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernanceTransactionSubmittedPage.js rename to packages/yoroi-extension/app/UI/pages/Governance/GovernanceTransactionSubmittedPage.js index 70a326e0b6..2360d3a6e5 100644 --- a/packages/yoroi-extension/app/UI/pages/Gouvernance/GouvernanceTransactionSubmittedPage.js +++ b/packages/yoroi-extension/app/UI/pages/Governance/GovernanceTransactionSubmittedPage.js @@ -1,6 +1,6 @@ // @flow import { TransactionSubmitted } from '../../components/TransactionSubmitted/TransactionSubmitted'; -import GouvernanceLayout from './layout'; +import GovernanceLayout from './layout'; type Props = {| stores: any, @@ -8,12 +8,12 @@ type Props = {| children?: React$Node, |}; -const GouvernanceTransactionSubmittedPage = (props: Props): any => { +const GovernanceTransactionSubmittedPage = (props: Props): any => { return ( - + - + ); }; -export default GouvernanceTransactionSubmittedPage; +export default GovernanceTransactionSubmittedPage; diff --git a/packages/yoroi-extension/app/UI/pages/Gouvernance/layout.js b/packages/yoroi-extension/app/UI/pages/Governance/layout.js similarity index 55% rename from packages/yoroi-extension/app/UI/pages/Gouvernance/layout.js rename to packages/yoroi-extension/app/UI/pages/Governance/layout.js index a833fd3e0d..459400c1b1 100644 --- a/packages/yoroi-extension/app/UI/pages/Gouvernance/layout.js +++ b/packages/yoroi-extension/app/UI/pages/Governance/layout.js @@ -1,12 +1,12 @@ // @flow import GeneralPageLayout from '../../layout/GeneralPageLayout'; -import { GouvernanceStatusSelection } from '../../features/gouvernace/useCases/SelectGouvernanceStatus/GouvernanceStatusSelection'; +import { GovernanceStatusSelection } from '../../features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection'; import NavBarContainerRevamp from '../../../containers/NavBarContainerRevamp'; import NavBar from '../../../components/topbar/NavBar'; import NavBarTitle from '../../../components/topbar/NavBarTitle'; import { TransactionSubmitted } from '../../components/TransactionSubmitted/TransactionSubmitted'; import { GovernanceProvider } from '@yoroi/staking'; -import { useGovernance } from '../../features/gouvernace/module/GouvernanceContextProvider'; +import { useGovernance } from '../../features/governace/module/GovernanceContextProvider'; type Props = {| stores: any, @@ -14,20 +14,18 @@ type Props = {| children?: React$Node, |}; -const GouvernanceLayout = ({ stores, actions, children }: Props): any => { - const { gouvernanceManager } = useGovernance(); +const GovernanceLayout = ({ stores, actions, children }: Props): any => { + const { governanceManager } = useGovernance(); - console.log('gouvernanceManager', gouvernanceManager); return ( } />} - // menu={menu} // ADD a menu if needed (see example in SwapPageContainer) > - {children} + {children} ); }; -export default GouvernanceLayout; +export default GovernanceLayout; diff --git a/packages/yoroi-extension/app/assets/images/sidebar/revamp/governance.inline.svg b/packages/yoroi-extension/app/assets/images/sidebar/revamp/governance.inline.svg new file mode 100644 index 0000000000..f30bb93653 --- /dev/null +++ b/packages/yoroi-extension/app/assets/images/sidebar/revamp/governance.inline.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/yoroi-extension/app/i18n/global-messages.js b/packages/yoroi-extension/app/i18n/global-messages.js index d77c4e9c87..f54520c7cf 100644 --- a/packages/yoroi-extension/app/i18n/global-messages.js +++ b/packages/yoroi-extension/app/i18n/global-messages.js @@ -338,8 +338,7 @@ const globalMessages: * = defineMessages({ }, hwConnectDialogAboutPrerequisite4: { id: 'wallet.connect.hw.dialog.step.about.prerequisite.4', - defaultMessage: - '!!!Your computer must remain connected to the Internet throughout the process.', + defaultMessage: '!!!Your computer must remain connected to the Internet throughout the process.', }, hwConnectDialogAboutPrerequisiteHeader: { id: 'wallet.connect.hw.dialog.step.about.prerequisite.header', @@ -371,8 +370,7 @@ const globalMessages: * = defineMessages({ }, trezorError101: { id: 'wallet.connect.trezor.error.101', - defaultMessage: - '!!!Failed to connect trezor.io. Please check your Internet connection and retry.', + defaultMessage: '!!!Failed to connect trezor.io. Please check your Internet connection and retry.', }, hwError101: { id: 'wallet.hw.common.error.101', @@ -517,8 +515,7 @@ const globalMessages: * = defineMessages({ }, uriExplanation: { id: 'global.uriExplanation', - defaultMessage: - '!!!These allow you to easily share invoices with friends and businesses by simply clicking a URL.', + defaultMessage: '!!!These allow you to easily share invoices with friends and businesses by simply clicking a URL.', }, uriExplanationRevamp: { id: 'global.uriExplanation.revamp', @@ -542,8 +539,7 @@ const globalMessages: * = defineMessages({ }, sendingIsDisabled: { id: 'wallet.send.form.sendingIsDisabled', - defaultMessage: - '!!!Unable to process. Please retry after the previous transaction has been completed.', + defaultMessage: '!!!Unable to process. Please retry after the previous transaction has been completed.', }, passwordDisclaimer: { id: 'wallet.restore.dialog.passwordDisclaimer', @@ -596,8 +592,7 @@ const globalMessages: * = defineMessages({ }, restoreByronEraWalletDescription: { id: 'wallet.add.optionDialog.walletEra.byronEra.description', - defaultMessage: - '!!!Wallets created before July 29th, 2020 are Byron-era wallets and cannot delegate.', + defaultMessage: '!!!Wallets created before July 29th, 2020 are Byron-era wallets and cannot delegate.', }, sendButtonLabel: { id: 'wallet.send.confirmationDialog.submit', @@ -679,9 +674,9 @@ const globalMessages: * = defineMessages({ id: 'sidebar.settings', defaultMessage: '!!!Settings', }, - sidebarGouvernance: { - id: 'sidebar.gouvernance', - defaultMessage: '!!!Gouvernance', + sidebarGovernance: { + id: 'sidebar.governance', + defaultMessage: '!!!Governance', }, sidebarTransfer: { id: 'sidebar.transfer', @@ -742,8 +737,7 @@ const globalMessages: * = defineMessages({ }, roaHelperMessage: { id: 'wallet.staking.banner.roaHelperMessage', - defaultMessage: - '!!!Estimated ROA (Return of ADA) based on staking result from the last 30 days', + defaultMessage: '!!!Estimated ROA (Return of ADA) based on staking result from the last 30 days', }, stakePoolDelegated: { id: 'wallet.dashboard.upcomingRewards.stakePoolDelegated', @@ -787,8 +781,7 @@ const globalMessages: * = defineMessages({ }, auditAddressWarning: { id: 'wallet.receive.page.internalWarning2', - defaultMessage: - '!!!addresses are shown here for personal auditing purposes and should never be used.', + defaultMessage: '!!!addresses are shown here for personal auditing purposes and should never be used.', }, lastSyncMessage: { id: 'myWallets.wallets.lastSyncText', @@ -816,8 +809,7 @@ const globalMessages: * = defineMessages({ }, pendingTxWarning: { id: 'wallet.staking.warning.pendingTx', - defaultMessage: - '!!!You cannot change your delegation preference while a transaction is pending', + defaultMessage: '!!!You cannot change your delegation preference while a transaction is pending', }, stakePoolHash: { id: 'wallet.delegation.transaction.stakePoolHash', @@ -945,8 +937,7 @@ const globalMessages: * = defineMessages({ }, txConfirmationLedgerNanoLine2: { id: 'wallet.send.ledger.confirmationDialog.info.line.2', - defaultMessage: - '!!!Make sure Cardano ADA app must remain open on the Ledger device throughout the process.', + defaultMessage: '!!!Make sure Cardano ADA app must remain open on the Ledger device throughout the process.', }, txConfirmationTrezorTLine2: { id: 'wallet.send.trezor.confirmationDialog.info.line.2', diff --git a/packages/yoroi-extension/app/i18n/locales/en-US.json b/packages/yoroi-extension/app/i18n/locales/en-US.json index 8975b43ae3..f90590ed1c 100644 --- a/packages/yoroi-extension/app/i18n/locales/en-US.json +++ b/packages/yoroi-extension/app/i18n/locales/en-US.json @@ -334,7 +334,7 @@ "sidebar.newUpdates": "New updates", "sidebar.nfts": "NFTs", "sidebar.settings": "Settings", - "sidebar.gouvernance": "Gouvernance", + "sidebar.governance": "Governance", "sidebar.staking": "Staking", "sidebar.stakingDashboard": "Staking Dashboard", "sidebar.swap": "Swap", diff --git a/packages/yoroi-extension/app/routes-config.js b/packages/yoroi-extension/app/routes-config.js index 902d8ab936..7e814b3000 100644 --- a/packages/yoroi-extension/app/routes-config.js +++ b/packages/yoroi-extension/app/routes-config.js @@ -79,10 +79,10 @@ export const ROUTES = { EXCHANGE_END: '/exchange-end', // NEW UI ROUTES - Gouvernance: { - ROOT: '/gouvernance', - DELEGATE: '/gouvernance/delagation', - SUBMITTED: '/gouvernance/submitted', - FAIL: '/gouvernance/failed', + Governance: { + ROOT: '/governance', + DELEGATE: '/governance/delagation', + SUBMITTED: '/governance/submitted', + FAIL: '/governance/failed', }, }; diff --git a/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js b/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js index 6000a321e2..9d9fb51255 100644 --- a/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js +++ b/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js @@ -15,6 +15,7 @@ import { ReactComponent as nftsIcon } from '../../assets/images/sidebar/revamp/n import { ReactComponent as votingIcon } from '../../assets/images/sidebar/revamp/voting.inline.svg'; import { ReactComponent as swapIcon } from '../../assets/images/sidebar/revamp/swap.inline.svg'; import { ReactComponent as settingIcon } from '../../assets/images/sidebar/revamp/setting.inline.svg'; +import { ReactComponent as governanceIcon } from '../../assets/images/sidebar/revamp/governance.inline.svg'; import { PublicDeriver } from '../../api/ada/lib/storage/models/PublicDeriver'; import { isCardanoHaskell } from '../../api/ada/lib/storage/database/prepackaged/networks'; import environment from '../../environment'; @@ -122,17 +123,14 @@ export const allCategoriesRevamp: Array = [ icon: stakingIcon, label: globalMessages.sidebarStaking, isVisible: ({ selected, isRewardWallet }) => - !!selected && - isCardanoHaskell(selected.getParent().getNetworkInfo()) && - isRewardWallet(selected), + !!selected && isCardanoHaskell(selected.getParent().getNetworkInfo()) && isRewardWallet(selected), }, { className: 'swap', route: ROUTES.SWAP.ROOT, icon: swapIcon, label: globalMessages.sidebarSwap, - isVisible: ({ selected }) => - (environment.isDev() || environment.isNightly()) && !!selected?.isMainnet(), + isVisible: ({ selected }) => (environment.isDev() || environment.isNightly()) && !!selected?.isMainnet(), }, { className: 'assets', @@ -171,17 +169,17 @@ export const allCategoriesRevamp: Array = [ // isVisible: _request => true, // }, { - className: 'settings', - route: '/settings', - icon: settingIcon, - label: globalMessages.sidebarSettings, + className: 'governance', + route: '/governance', + icon: governanceIcon, + label: globalMessages.sidebarGovernance, isVisible: _request => true, }, { - className: 'gouvernance', - route: '/gouvernance', + className: 'settings', + route: '/settings', icon: settingIcon, - label: globalMessages.sidebarGouvernance, + label: globalMessages.sidebarSettings, isVisible: _request => true, }, // { From 02dab1cec4fc4222ff233ba2c0f3e9ae5e3c7dae Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 30 May 2024 14:25:49 +0300 Subject: [PATCH 054/464] add mock function and new warning modal --- .../app/UI/components/Input/TextInput.js | 2 +- .../governace/api/useDrepDelegationState.js | 2 +- .../staking/dashboard-revamp/SummaryCard.js | 12 ++-- .../wallet/staking/dashboard/UserSummary.js | 25 ++------ .../dialogs/GovernanceParticipateDialog.js | 56 ++++++++++++++++++ .../wallet/staking/StakingPageContent.js | 54 +++++++++-------- .../app/stores/toplevel/DelegationStore.js | 58 ++++++++++--------- 7 files changed, 127 insertions(+), 82 deletions(-) create mode 100644 packages/yoroi-extension/app/containers/wallet/dialogs/GovernanceParticipateDialog.js diff --git a/packages/yoroi-extension/app/UI/components/Input/TextInput.js b/packages/yoroi-extension/app/UI/components/Input/TextInput.js index 30e5247c63..9478c92752 100644 --- a/packages/yoroi-extension/app/UI/components/Input/TextInput.js +++ b/packages/yoroi-extension/app/UI/components/Input/TextInput.js @@ -24,7 +24,7 @@ export const TextInput = ({ id, label, variant, onChange, value, error, helperTe const SInput = styled(TextField)(({ theme, error }) => ({ '& .MuiFormHelperText-root': { position: 'absolute', - bottom: -4, + bottom: -2, left: -10, }, '& .MuiInputLabel-root': { diff --git a/packages/yoroi-extension/app/UI/features/governace/api/useDrepDelegationState.js b/packages/yoroi-extension/app/UI/features/governace/api/useDrepDelegationState.js index ff39a156d6..c1d193ddb4 100644 --- a/packages/yoroi-extension/app/UI/features/governace/api/useDrepDelegationState.js +++ b/packages/yoroi-extension/app/UI/features/governace/api/useDrepDelegationState.js @@ -7,7 +7,7 @@ type PoolTransition = {| |}; // TODO mock impementation - add real endpoint -const getDrepDelegationState = async (walletId: string): Promise => { +export const getDrepDelegationState = async (walletId: string): Promise => { const storage = localStorage.getItem(`Governance - ${walletId}`); if (storage === null || storage === undefined) { diff --git a/packages/yoroi-extension/app/components/wallet/staking/dashboard-revamp/SummaryCard.js b/packages/yoroi-extension/app/components/wallet/staking/dashboard-revamp/SummaryCard.js index a52ba56b50..8641d0af1d 100644 --- a/packages/yoroi-extension/app/components/wallet/staking/dashboard-revamp/SummaryCard.js +++ b/packages/yoroi-extension/app/components/wallet/staking/dashboard-revamp/SummaryCard.js @@ -90,8 +90,7 @@ function SummaryCard({ const renderAmountWithUnitOfAccount: (?MultiToken) => ?Node = token => { const unitOfAccountCalculated = maybe(token, t => unitOfAccount(t.getDefaultEntry())); - return maybe(unitOfAccountCalculated, - u => `${shouldHideBalance ? hiddenAmount : u.amount} ${u.currency}`); + return maybe(unitOfAccountCalculated, u => `${shouldHideBalance ? hiddenAmount : u.amount} ${u.currency}`); }; return ( @@ -127,11 +126,7 @@ function SummaryCard({ - + {intl.formatMessage(globalMessages.totalRewardsLabel)} @@ -150,7 +145,8 @@ function SummaryCard({ - { {intl.formatMessage(globalMessages.totalTokenLabel, { ticker: truncateToken(getTokenName(this.props.defaultTokenInfo)), })} - : - {this.props.isDelegated && ( - - {intl.formatMessage(messages.delegated)} - - )} + :{this.props.isDelegated && {intl.formatMessage(messages.delegated)}} {this.renderAmount(this.props.totalSum)} @@ -128,11 +122,7 @@ export default class UserSummary extends Component {

{intl.formatMessage(globalMessages.totalRewardsLabel)}: -

@@ -196,9 +186,7 @@ export default class UserSummary extends Component { if (!token) throw new Error('Token is not defined - Should never happend'); const unitOfAccount = this.props.unitOfAccount(token.getDefaultEntry()); - const entryNode = ( -
{this.formatTokenEntry(token.getDefaultEntry())}
- ); + const entryNode =
{this.formatTokenEntry(token.getDefaultEntry())}
; const unitOfAccountNode = unitOfAccount ? (
{unitOfAccount.amount} {unitOfAccount.currency} @@ -215,10 +203,7 @@ export default class UserSummary extends Component { ); }; - formatWithAmount: ($npm$ReactIntl$MessageDescriptor, TokenEntry) => Node = ( - message, - tokenEntry - ) => { + formatWithAmount: ($npm$ReactIntl$MessageDescriptor, TokenEntry) => Node = (message, tokenEntry) => { const tokenInfo = this.props.getTokenInfo(tokenEntry); const amount = tokenEntry.amount .shiftedBy(-tokenInfo.Metadata.numberOfDecimals) diff --git a/packages/yoroi-extension/app/containers/wallet/dialogs/GovernanceParticipateDialog.js b/packages/yoroi-extension/app/containers/wallet/dialogs/GovernanceParticipateDialog.js new file mode 100644 index 0000000000..f187c16926 --- /dev/null +++ b/packages/yoroi-extension/app/containers/wallet/dialogs/GovernanceParticipateDialog.js @@ -0,0 +1,56 @@ +// @flow +import Dialog from '../../../components/widgets/Dialog'; +import { Typography, Button, Grid, Stack } from '@mui/material'; +import { styled } from '@mui/material/styles'; +import DialogCloseButton from '../../../components/widgets/DialogCloseButton'; + +import type { PoolTransition } from '../../../stores/toplevel/DelegationStore'; +import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; +import { ROUTES } from '../../../routes-config'; + +type Props = {| + onClose: () => void, + actions: any, + intl: $npm$ReactIntl$IntlFormat, +|}; + +export const GovernanceParticipateDialog = ({ onClose, actions, intl }: Props): React$Node => { + return ( + } + > + + To withdraw your rewards, you need to participate in the Cardano Governance. Your rewards will continue to accumulate, but + you are only able to withdraw it once you join the Governance process. + + + { + onClose(); + actions.router.goToRoute.trigger({ + route: ROUTES.Governance.ROOT, + }); + }} + sx={{ marginTop: '12px' }} + > + Participate on governance + + + ); +}; + +const CustomButton = styled(Button)(({ _theme, _color }) => ({ + width: '100%', + fontSize: '16px', + marginLeft: '24px', + marginRight: '24px', + maxWidth: '600px', +})); diff --git a/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js b/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js index f9eaefb96e..8abeaab4fb 100644 --- a/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js +++ b/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js @@ -30,12 +30,10 @@ import { generateGraphData } from '../../../utils/graph'; import RewardHistoryDialog from '../../../components/wallet/staking/dashboard-revamp/RewardHistoryDialog'; import DelegatedStakePoolCard from '../../../components/wallet/staking/dashboard-revamp/DelegatedStakePoolCard'; import WithdrawRewardsDialog from './WithdrawRewardsDialog'; -import { - formatLovelacesHumanReadableShort, - roundOneDecimal, - roundTwoDecimal, -} from '../../../utils/formatters'; +import { formatLovelacesHumanReadableShort, roundOneDecimal, roundTwoDecimal } from '../../../utils/formatters'; import { compose, maybe } from '../../../coreUtils'; +import { getDrepDelegationState } from '../../../UI/features/governace/api/useDrepDelegationState'; +import { GovernanceParticipateDialog } from '../dialogs/GovernanceParticipateDialog'; // populated by ConfigWebpackPlugin declare var CONFIG: ConfigType; @@ -116,8 +114,7 @@ class StakingPageContent extends Component { const networkInfo = publicDeriver.getParent().getNetworkInfo(); const poolMeta = delegationStore.getLocalPoolInfo(networkInfo, currentPool); - const { stake, roa, saturation, pic } = - delegationStore.getLocalRemotePoolInfo(networkInfo, currentPool) ?? {}; + const { stake, roa, saturation, pic } = delegationStore.getLocalRemotePoolInfo(networkInfo, currentPool) ?? {}; if (poolMeta == null) { // server hasn't returned information about the stake pool yet return null; @@ -198,9 +195,7 @@ class StakingPageContent extends Component { toUnitOfAccount: TokenEntry => void | {| currency: string, amount: string |} = entry => { const { stores } = this.props; - const tokenRow = stores.tokenInfoStore.tokenInfo - .get(entry.networkId.toString()) - ?.get(entry.identifier); + const tokenRow = stores.tokenInfoStore.tokenInfo.get(entry.networkId.toString())?.get(entry.identifier); if (tokenRow == null) return undefined; if (!stores.profile.unitOfAccount.enabled) return undefined; @@ -224,33 +219,31 @@ class StakingPageContent extends Component { if (publicDeriver == null) { throw new Error(`${nameof(StakingPageContent)} no public deriver. Should never happen`); } + const { actions, stores } = this.props; const { uiDialogs, delegation: delegationStore } = stores; const delegationRequests = delegationStore.getDelegationRequests(publicDeriver); if (delegationRequests == null) { throw new Error(`${nameof(StakingPageContent)} opened for non-reward wallet`); } + stores.delegation.checkGouvernanceStatus(); const balance = stores.transactions.getBalance(publicDeriver); const isWalletWithNoFunds = balance != null && balance.getDefaultEntry().amount.isZero(); const errorIfPresent = maybe(delegationRequests.error, error => ({ error })); - const showRewardAmount = - errorIfPresent == null && stores.delegation.isExecutedDelegatedBalance(publicDeriver); + const showRewardAmount = errorIfPresent == null && stores.delegation.isExecutedDelegatedBalance(publicDeriver); const isStakeRegistered = stores.delegation.isStakeRegistered(publicDeriver); const currentlyDelegating = stores.delegation.isCurrentlyDelegating(publicDeriver); const delegatedUtxo = stores.delegation.getDelegatedUtxoBalance(publicDeriver); const delegatedRewards = stores.delegation.getRewardBalanceOrZero(publicDeriver); + const isParticipatingToGouvernance = stores.delegation.isParticipatingToGouvernance; return ( {isWalletWithNoFunds ? ( - - this.props.actions.dialogs.open.trigger({ dialog: BuySellDialog }) - } - /> + this.props.actions.dialogs.open.trigger({ dialog: BuySellDialog })} /> ) : null} {isStakeRegistered ? ( @@ -262,7 +255,13 @@ class StakingPageContent extends Component { }) } withdrawRewards={ - isStakeRegistered + isParticipatingToGouvernance === false + ? async () => { + this.props.actions.dialogs.open.trigger({ + dialog: GovernanceParticipateDialog, + }); + } + : isStakeRegistered ? async () => this.createWithdrawalTx(false) // shouldDeregister=false : undefined } @@ -279,8 +278,7 @@ class StakingPageContent extends Component { graphData={generateGraphData({ publicDeriver, delegationRequests, - currentEpoch: stores.substores.ada.time.getCurrentTimeRequests(publicDeriver) - .currentEpoch, + currentEpoch: stores.substores.ada.time.getCurrentTimeRequests(publicDeriver).currentEpoch, shouldHideBalance: stores.profile.shouldHideBalance, getLocalPoolInfo: stores.delegation.getLocalPoolInfo, tokenInfo: stores.tokenInfoStore.tokenInfo, @@ -313,10 +311,16 @@ class StakingPageContent extends Component { shouldHideBalance={this.props.stores.profile.shouldHideBalance} unitOfAccount={this.toUnitOfAccount} withdrawRewards={ - isStakeRegistered + isParticipatingToGouvernance === false + ? () => { + this.props.actions.dialogs.open.trigger({ + dialog: GovernanceParticipateDialog, + }); + } + : isStakeRegistered ? () => { this.props.actions.dialogs.open.trigger({ - dialog: DeregisterDialogContainer, + dialog: GovernanceParticipateDialog, }); } : undefined @@ -340,6 +344,9 @@ class StakingPageContent extends Component { }} /> ) : null} + {uiDialogs.isOpen(GovernanceParticipateDialog) ? ( + + ) : null} {uiDialogs.isOpen(UnmangleTxDialogContainer) ? ( ) : null} @@ -373,8 +380,7 @@ class StakingPageContent extends Component { graphData={generateGraphData({ delegationRequests, publicDeriver, - currentEpoch: stores.substores.ada.time.getCurrentTimeRequests(publicDeriver) - .currentEpoch, + currentEpoch: stores.substores.ada.time.getCurrentTimeRequests(publicDeriver).currentEpoch, shouldHideBalance: stores.profile.shouldHideBalance, getLocalPoolInfo: stores.delegation.getLocalPoolInfo, tokenInfo: stores.tokenInfoStore.tokenInfo, diff --git a/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js b/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js index 0768b12302..0106190db1 100644 --- a/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js +++ b/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js @@ -24,6 +24,7 @@ import type { import { RustModule } from '../../api/ada/lib/cardanoCrypto/rustLoader'; import { environment } from '../../environment'; +import { getDrepDelegationState } from '../../UI/features/governace/api/useDrepDelegationState'; export type DelegationRequests = {| publicDeriver: PublicDeriver<>, @@ -61,6 +62,7 @@ type PoolTransitionModal = {| show: 'open' | 'closed' | 'idle', shouldUpdatePool export default class DelegationStore extends Store { @observable delegationRequests: Array = []; + @observable isParticipatingToGouvernance: boolean = false; @observable poolTransitionRequestInfo: ?PoolTransition = null; @observable poolTransitionConfig: PoolTransitionModal = { show: 'closed', @@ -72,9 +74,9 @@ export default class DelegationStore extends Store { this.poolTransitionConfig.shouldUpdatePool = config.shouldUpdatePool; }; - @observable poolInfoQuery: LocalizedRequest< + @observable poolInfoQuery: LocalizedRequest<(Array) => Promise> = new LocalizedRequest< (Array) => Promise - > = new LocalizedRequest<(Array) => Promise>(async poolIds => { + >(async poolIds => { const { selectedNetwork } = this.stores.profile; if (selectedNetwork == null) throw new Error(`${nameof(DelegationStore)} no network selected`); await this.stores.substores.ada.delegation.updatePoolInfo({ @@ -110,6 +112,7 @@ export default class DelegationStore extends Store { this.registerReactions([this._changeWallets]); delegation.setSelectedPage.listen(this._setSelectedPage); this.checkPoolTransition(); + this.checkGouvernanceStatus(); } @action @@ -140,14 +143,12 @@ export default class DelegationStore extends Store { }; canUnmangleSomeUtxo: (PublicDeriver<>) => boolean = publicDeriver => { - const canUnmangleAmount: ?MultiToken = this.getDelegationRequests(publicDeriver)?.mangledAmounts - .result?.canUnmangle; + const canUnmangleAmount: ?MultiToken = this.getDelegationRequests(publicDeriver)?.mangledAmounts.result?.canUnmangle; return maybe(canUnmangleAmount, t => t.getDefault().gt(0)) ?? false; }; getMangledAmountsOrZero: (PublicDeriver<>) => MangledAmountsResponse = publicDeriver => { - const resp: ?MangledAmountsResponse = this.getDelegationRequests(publicDeriver)?.mangledAmounts - .result; + const resp: ?MangledAmountsResponse = this.getDelegationRequests(publicDeriver)?.mangledAmounts.result; return { canUnmangle: resp?.canUnmangle ?? publicDeriver.getParent().getDefaultMultiToken(), cannotUnmangle: resp?.cannotUnmangle ?? publicDeriver.getParent().getDefaultMultiToken(), @@ -168,10 +169,7 @@ export default class DelegationStore extends Store { // We cancel out any still present reward, in case it has not synced yet return publicDeriver.getParent().getDefaultMultiToken(); } - return ( - this._getDelegatedBalanceResult(publicDeriver)?.accountPart ?? - publicDeriver.getParent().getDefaultMultiToken() - ); + return this._getDelegatedBalanceResult(publicDeriver)?.accountPart ?? publicDeriver.getParent().getDefaultMultiToken(); }; getDelegatedUtxoBalance: (PublicDeriver<>) => ?MultiToken = publicDeriver => { @@ -194,13 +192,8 @@ export default class DelegationStore extends Store { return find(this.poolInfo, { networkId: network.NetworkId, poolId })?.poolInfo; }; - getLocalRemotePoolInfo: ($ReadOnly, string) => void | PoolInfo = ( - network, - poolId - ) => { - return ( - find(this.poolInfo, { networkId: network.NetworkId, poolId })?.poolRemoteInfo ?? undefined - ); + getLocalRemotePoolInfo: ($ReadOnly, string) => void | PoolInfo = (network, poolId) => { + return find(this.poolInfo, { networkId: network.NetworkId, poolId })?.poolRemoteInfo ?? undefined; }; // exports.EMURGO_POOLS = { @@ -231,7 +224,7 @@ export default class DelegationStore extends Store { checkPoolTransition: () => Promise = async () => { const publicDeriver = this.stores.wallets.selected; - if (publicDeriver === null) { + if (publicDeriver == null) { return; } @@ -240,23 +233,16 @@ export default class DelegationStore extends Store { const currentPool = this.getDelegatedPoolId(publicDeriver); try { - const transitionResult = await maybe(currentPool, p => - new PoolInfoApi().getTransition(p, RustModule.CrossCsl.init) - ); + const transitionResult = await maybe(currentPool, p => new PoolInfoApi().getTransition(p, RustModule.CrossCsl.init)); const response = { currentPool: transitionResult?.current, suggestedPool: transitionResult?.suggested, deadlineMilliseconds: transitionResult?.deadlineMilliseconds, - shouldShowTransitionFunnel: environment.isDev(), + shouldShowTransitionFunnel: environment.isDev() && transitionResult !== null, }; - if ( - isStakeRegistered && - currentlyDelegating && - transitionResult && - this.poolTransitionConfig.show === 'closed' - ) { + if (isStakeRegistered && currentlyDelegating && transitionResult && this.poolTransitionConfig.show === 'closed') { this.setPoolTransitionConfig({ show: 'open' }); } @@ -267,6 +253,22 @@ export default class DelegationStore extends Store { console.warn(error); } }; + checkGouvernanceStatus: () => Promise = async () => { + const publicDeriver = this.stores.wallets.selected; + if (publicDeriver == null) { + return; + } + const walletId = publicDeriver?.getPublicDeriverId(); + const gouvernanceResult = await getDrepDelegationState(String(walletId)); + + try { + runInAction(() => { + this.isParticipatingToGouvernance = gouvernanceResult.kind !== 'none' && gouvernanceResult.drepID !== null; + }); + } catch (error) { + console.warn(error); + } + }; delegateToSpecificPool: (?string) => Promise = async poolId => { this.stores.delegation.poolInfoQuery.reset(); From 00d0710b46a49efd3182555d8f9e4bbe27f601b3 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 30 May 2024 18:20:46 +0300 Subject: [PATCH 055/464] add links and part of the text --- .../governace/common/GovernanceVoteingCard.js | 6 +++ .../UI/features/governace/common/constants.js | 3 ++ .../features/governace/common/useStrings.js | 51 +++++++++++++++++++ .../GovernanceStatusSelection.js | 34 ++++++------- .../dialogs/GovernanceParticipateDialog.js | 24 +++++++-- .../app/i18n/locales/en-US.json | 15 +++++- 6 files changed, 109 insertions(+), 24 deletions(-) create mode 100644 packages/yoroi-extension/app/UI/features/governace/common/constants.js diff --git a/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.js b/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.js index 1991b22444..326edf773f 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.js +++ b/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.js @@ -40,6 +40,12 @@ const StyledCard = styled(Stack)(({ theme, selected, pending }) => ({ opacity: selected ? 1 : 0.5, cursor: 'not-allowed', }), + '&:hover': { + backgroundImage: theme.palette.ds.bg_gradient_1, + backgroundOrigin: 'content-box', + boxShadow: 'none', + transition: 'all 250ms ease-in-out', + }, })); const IconContainer = styled(Box)(({ theme }) => ({ diff --git a/packages/yoroi-extension/app/UI/features/governace/common/constants.js b/packages/yoroi-extension/app/UI/features/governace/common/constants.js new file mode 100644 index 0000000000..8bd19f404a --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/governace/common/constants.js @@ -0,0 +1,3 @@ +// @flow +export const BECOME_DREP_LINK = 'https://emurgohelpdesk.zendesk.com/hc/en-us/articles/8600742035855-Who-are-DReps-on-Cardano'; +export const LEARN_MORE_LINK = 'https://emurgohelpdesk.zendesk.com/hc/en-us/sections/8582793481231-Governance'; diff --git a/packages/yoroi-extension/app/UI/features/governace/common/useStrings.js b/packages/yoroi-extension/app/UI/features/governace/common/useStrings.js index cfff9910fb..3356797a4a 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/useStrings.js +++ b/packages/yoroi-extension/app/UI/features/governace/common/useStrings.js @@ -4,10 +4,51 @@ import { useIntl } from '../../../context/IntlProvider'; export const messages = Object.freeze( defineMessages({ + governanceStatus: { + id: 'gouvernace.governanceStatus', + defaultMessage: '!!!Governance status', + }, + governanceStatusInfo: { + id: 'gouvernace.governanceStatusInfo', + defaultMessage: + '!!!You have selected undefined as your governance status. You can change it at any time by clicking in the card bellow', + }, + abstain: { + id: 'gouvernace.abstain', + defaultMessage: '!!!Abstain', + }, + abstainInfo: { + id: 'gouvernace.abstainInfo', + defaultMessage: '!!!You are choosing not to cast a vote on all proposals now and in the future.', + }, + noConfidence: { + id: 'gouvernace.noConfidence', + defaultMessage: '!!!No Confidence', + }, + noConfidenceInfo: { + id: 'gouvernace.noConfidenceInfo', + defaultMessage: '!!!You are expressing a lack of trust for all proposals now and in the future.', + }, + learnMore: { + id: 'gouvernace.learnMore', + defaultMessage: '!!!Learn more About Governance', + }, + becomeADrep: { + id: 'gouvernace.becomeADrep', + defaultMessage: '!!!Want to became a Drep?', + }, + drepId: { + id: 'gouvernace.drepId', + defaultMessage: '!!!Drep ID:', + }, delegateToDRep: { id: 'gouvernace.delegateToDRep', defaultMessage: '!!!Delegate to a DRep', }, + delegateingToDRep: { + id: 'gouvernace.delegateingToDRep', + defaultMessage: '!!!Delegating to a DRep', + }, designatingSomeoneElse: { id: 'gouvernace.designatingSomeoneElse', defaultMessage: @@ -20,6 +61,16 @@ export const useStrings = () => { const { intl } = useIntl(); return React.useRef({ delegateToDRep: intl.formatMessage(messages.delegateToDRep), + delegateingToDRep: intl.formatMessage(messages.delegateingToDRep), designatingSomeoneElse: intl.formatMessage(messages.designatingSomeoneElse), + governanceStatus: intl.formatMessage(messages.governanceStatus), + governanceStatusInfo: intl.formatMessage(messages.governanceStatusInfo), + abstain: intl.formatMessage(messages.abstain), + abstainInfo: intl.formatMessage(messages.abstainInfo), + noConfidence: intl.formatMessage(messages.noConfidence), + noConfidenceInfo: intl.formatMessage(messages.noConfidenceInfo), + learnMore: intl.formatMessage(messages.learnMore), + becomeADrep: intl.formatMessage(messages.becomeADrep), + drepId: intl.formatMessage(messages.drepId), }).current; }; diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js index be9109618a..478b9c7de1 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js @@ -20,6 +20,7 @@ import { GovernanceProvider, useStakingKeyState, useDelegationCertificate, useVo import { useNavigateTo } from '../../common/useNavigateTo'; import { useDrepDelegationState } from '../../api/useDrepDelegationState'; import { VotingSkeletonCard } from '../../common/VotingSkeletonCard'; +import { BECOME_DREP_LINK, LEARN_MORE_LINK } from '../../common/constants'; const Container = styled(Box)(({ theme }) => ({ display: 'flex', @@ -42,7 +43,7 @@ export const GovernanceStatusSelection = (): Node => { const { openModal } = useModal(); const { governanceVote, governanceManager, stakePoolKeyHash, dRepIdChanged, governanceVoteChanged, walletId } = useGovernance(); - const { data } = useDrepDelegationState(walletId); + const { data: governanceData } = useDrepDelegationState(walletId); const strings = useStrings(); @@ -57,7 +58,7 @@ export const GovernanceStatusSelection = (): Node => { useErrorBoundary: true, }); - const pageTitle = governanceVote === 'none' ? 'Register in Governance' : 'Governance status'; + const pageTitle = governanceVote === 'none' ? 'Register in Governance' : strings.governanceStatus; const statusRawText = mapStatus[governanceVote]; const pageSubtitle = governanceVote === 'none' @@ -129,10 +130,10 @@ export const GovernanceStatusSelection = (): Node => { const optionsList = [ { - title: strings.delegateToDRep, + title: governanceData?.kind === 'delegate' ? strings.delegateingToDRep : strings.delegateToDRep, description: strings.designatingSomeoneElse, icon: , - selected: data?.kind === 'delegate', + selected: governanceData?.kind === 'delegate', onClick: handleDelegate, pending: pendingVote, }, @@ -140,7 +141,7 @@ export const GovernanceStatusSelection = (): Node => { title: 'Abstain', description: 'You are choosing not to cast a vote on all proposals now and in the future.', icon: , - selected: data?.kind === 'abstain', + selected: governanceData?.kind === 'abstain', onClick: handleAbstain, pending: pendingVote, }, @@ -148,7 +149,7 @@ export const GovernanceStatusSelection = (): Node => { title: 'No Confidence', description: 'You are expressing a lack of trust for all proposals now and in the future.', icon: , - selected: data?.kind === 'no-confidence', + selected: governanceData?.kind === 'no-confidence', onClick: handleNoConfidence, pending: pendingVote, }, @@ -181,24 +182,19 @@ export const GovernanceStatusSelection = (): Node => { }) : skeletonsCards.map(() => )} - {governanceVote.kind === 'none' && ( - - - Want to became a Drep? - - - Learn more About Governance - - - )} - {data?.drepID && ( + {governanceData?.kind === 'delegate' && ( - Drep ID: drep1c93a2zvs3aw8e4naez0ynpmc48jbc7yaa3n2k8ljhwfdt70yscts + `Drep ID: ${governanceData?.drepID}` )} - + {governanceData?.kind === 'none' && ( + + Want to became a Drep? + + )} + Learn more About Governance diff --git a/packages/yoroi-extension/app/containers/wallet/dialogs/GovernanceParticipateDialog.js b/packages/yoroi-extension/app/containers/wallet/dialogs/GovernanceParticipateDialog.js index f187c16926..0def25209e 100644 --- a/packages/yoroi-extension/app/containers/wallet/dialogs/GovernanceParticipateDialog.js +++ b/packages/yoroi-extension/app/containers/wallet/dialogs/GovernanceParticipateDialog.js @@ -3,6 +3,7 @@ import Dialog from '../../../components/widgets/Dialog'; import { Typography, Button, Grid, Stack } from '@mui/material'; import { styled } from '@mui/material/styles'; import DialogCloseButton from '../../../components/widgets/DialogCloseButton'; +import { defineMessages, FormattedMessage } from 'react-intl'; import type { PoolTransition } from '../../../stores/toplevel/DelegationStore'; import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; @@ -14,19 +15,34 @@ type Props = {| intl: $npm$ReactIntl$IntlFormat, |}; +const messages = defineMessages({ + title: { + id: 'gouvernace.participateDialog.title', + defaultMessage: '!!!Withdraw warning', + }, + contentInfo: { + id: 'gouvernace.participateDialog.contentInfo', + defaultMessage: + '!!!To withdraw your rewards, you need to participate in the Cardano Governance. Your rewards will continue to accumulate, but you are only able to withdraw it once you join the Governance process.', + }, + buttonText: { + id: 'gouvernace.participateDialog.buttonText', + defaultMessage: '!!!Participate on governance', + }, +}); + export const GovernanceParticipateDialog = ({ onClose, actions, intl }: Props): React$Node => { return ( } > - To withdraw your rewards, you need to participate in the Cardano Governance. Your rewards will continue to accumulate, but - you are only able to withdraw it once you join the Governance process. + {intl.formatMessage(messages.contentInfo)} - Participate on governance + {intl.formatMessage(messages.buttonText)} ); diff --git a/packages/yoroi-extension/app/i18n/locales/en-US.json b/packages/yoroi-extension/app/i18n/locales/en-US.json index f90590ed1c..6122db0529 100644 --- a/packages/yoroi-extension/app/i18n/locales/en-US.json +++ b/packages/yoroi-extension/app/i18n/locales/en-US.json @@ -1024,5 +1024,18 @@ "yoroiTransfer.waiting.progressInfo.restoringAddresses": "Fetching addresses", "yoroiTransfer.waiting.title.label": "Wallet is being restored", "gouvernace.delegateToDRep":"Delegate to a DRep", - "gouvernace.designatingSomeoneElse":"You are designating someone else to cast your vote on your behalf for all proposals now and in the future." + "gouvernace.delegateingToDRep":"Delegateing to a DRep", + "gouvernace.designatingSomeoneElse":"You are designating someone else to cast your vote on your behalf for all proposals now and in the future.", + "gouvernace.governanceStatus":"Governance status", + "gouvernace.governanceStatusInfo":"Governance status", + "gouvernace.abstain":"Abstain", + "gouvernace.abstainInfo":"You are choosing not to cast a vote on all proposals now and in the future.", + "gouvernace.noConfidence":"No Confidence", + "gouvernace.noConfidenceInfo":"You are expressing a lack of trust for all proposals now and in the future.", + "gouvernace.learnMore":"Learn more About Governance", + "gouvernace.becomeADrep":"Want to became a Drep?", + "gouvernace.drepId":"Drep ID:", + "gouvernace.participateDialog.title":"Withdraw warning", + "gouvernace.participateDialog.contentInfo":"To withdraw your rewards, you need to participate in the Cardano Governance. Your rewards will continue to accumulate, but you are only able to withdraw it once you join the Governance process.", + "gouvernace.participateDialog.buttonText":"Participate on governance" } From 8e9c35bde7b0a73f53b1739fdb844e54ce8c4f2e Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Fri, 31 May 2024 10:40:58 +0700 Subject: [PATCH 056/464] update hook useStrings and change portfolio fiat currency --- packages/yoroi-extension/app/Routes.js | 19 ++-- .../app/UI/components/buttons/CopyButton.js | 4 +- .../portfolio/common/hooks/useNavigateTo.js | 3 + .../portfolio/common/hooks/useStrings.js | 4 +- .../UI/features/portfolio/common/mockData.js | 10 ++- .../module/PortfolioContextProvider.js | 15 ++-- .../app/UI/features/portfolio/module/state.js | 25 +++--- .../portfolio/useCases/Dapps/LendAndBorrow.js | 4 +- .../useCases/Dapps/LiquidityTable.js | 90 ++++++------------- .../portfolio/useCases/Dapps/OrderTable.js | 59 ++++-------- .../useCases/Dapps/PortfolioDapps.js | 77 ++++++++-------- .../useCases/TokenDetails/TokenDetailChart.js | 4 +- .../TokenDetails/TokenDetailOverview.js | 4 +- .../TokenDetails/TokenDetailPerformance.js | 4 +- .../useCases/TokenDetails/TokenDetails.js | 12 +-- .../useCases/TokenDetails/TransactionTable.js | 4 +- .../useCases/Wallet/PortfolioWallet.js | 62 ++++++------- .../portfolio/useCases/Wallet/StatsTable.js | 80 +++++------------ .../app/UI/layout/PortfolioPageLayout.js | 28 +++--- 19 files changed, 201 insertions(+), 307 deletions(-) diff --git a/packages/yoroi-extension/app/Routes.js b/packages/yoroi-extension/app/Routes.js index d56833158d..0db33e7f64 100644 --- a/packages/yoroi-extension/app/Routes.js +++ b/packages/yoroi-extension/app/Routes.js @@ -28,17 +28,16 @@ import LoadingSpinner from './components/widgets/LoadingSpinner'; import FullscreenLayout from './components/layout/FullscreenLayout'; // New UI pages -import GouvernanceStatusPage from './UI/pages/Gouvernance/GouvernanceStatusPage'; -import GouvernanceDelegationFormPage from './UI/pages/Gouvernance/GouvernanceDelegationFormPage'; -import PortfolioPage from './UI/pages/portfolio/PortfolioPage'; -import PortfolioDappsPage from './UI/pages/portfolio/PortfolioDappsPage'; -import PortfolioDetailPage from './UI/pages/portfolio/PortfolioDetailPage'; import { GovernanceContextProvider } from './UI/features/governace/module/GovernanceContextProvider'; import { createCurrrentWalletInfo } from './UI/features/governace/common/helpers'; import GovernanceStatusPage from './UI/pages/Governance/GovernanceStatusPage'; import GovernanceDelegationFormPage from './UI/pages/Governance/GovernanceDelegationFormPage'; import GovernanceTransactionSubmittedPage from './UI/pages/Governance/GovernanceTransactionSubmittedPage'; import GovernanceTransactionFailedPage from './UI/pages/Governance/GovernanceTransactionFailedPage'; +import { PortfolioContextProvider } from './UI/features/portfolio/module/PortfolioContextProvider'; +import PortfolioPage from './UI/pages/portfolio/PortfolioPage'; +import PortfolioDappsPage from './UI/pages/portfolio/PortfolioDappsPage'; +import PortfolioDetailPage from './UI/pages/portfolio/PortfolioDetailPage'; // PAGES const LanguageSelectionPagePromise = () => import('./containers/profile/LanguageSelectionPage'); @@ -306,9 +305,7 @@ export const Routes = (stores: StoresMap, actions: ActionsMap): Node => { /> - wrapPortfolio({ ...props, stores, actions }, PortfolioSubpages(stores, actions)) - } + component={props => wrapPortfolio({ ...props, stores, actions }, PortfolioSubpages(stores, actions))} /> @@ -530,5 +527,9 @@ export function wrapGovernance(governanceProps: StoresAndActionsProps, children: ); } export function wrapPortfolio(portfolioProps: StoresAndActionsProps, children: Node): Node { - return {children}; + return ( + + {children} + + ); } diff --git a/packages/yoroi-extension/app/UI/components/buttons/CopyButton.js b/packages/yoroi-extension/app/UI/components/buttons/CopyButton.js index 6da45648ae..b5a0def363 100644 --- a/packages/yoroi-extension/app/UI/components/buttons/CopyButton.js +++ b/packages/yoroi-extension/app/UI/components/buttons/CopyButton.js @@ -4,7 +4,7 @@ import { CopyToClipboard } from 'react-copy-to-clipboard'; import CopyIcon from '../icons/Copy'; import CopiedIcon from '../icons/Copied'; import { Tooltip } from '../Tooltip'; -import { usePortfolio } from '../../features/portfolio/module/PortfolioContextProvider'; +import { useStrings } from '../../features/portfolio/common/hooks/useStrings'; interface Props { textToCopy: string; @@ -13,7 +13,7 @@ interface Props { export const CopyButton = ({ textToCopy, disabled, ...props }: Props) => { const [copied, setCopied] = useState(false); - const { strings } = usePortfolio(); + const strings = useStrings(); const handleCopy = () => { setCopied(true); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useNavigateTo.js b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useNavigateTo.js index 5d91e9c15b..840dc4dd4e 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useNavigateTo.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useNavigateTo.js @@ -9,5 +9,8 @@ export const useNavigateTo = () => { portfolio: () => history.push(ROUTES.PORTFOLIO.ROOT), portfolioDapps: () => history.push(ROUTES.PORTFOLIO.DAPPS), portfolioDetail: tokenId => history.push(`${ROUTES.PORTFOLIO.ROOT}/details/${tokenId}`), + swapPage: () => history.push(ROUTES.SWAP.ROOT), + sendPage: () => history.push(ROUTES.WALLETS.SEND), + receivePage: () => history.push(ROUTES.WALLETS.RECEIVE.ROOT), }).current; }; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js index 28f75461ed..e67e4ce578 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js @@ -1,5 +1,6 @@ import React from 'react'; import { defineMessages } from 'react-intl'; +import { useIntl } from '../../../../context/IntlProvider'; export const messages = Object.freeze( defineMessages({ @@ -287,7 +288,8 @@ export const messages = Object.freeze( }) ); -export const getStrings = intl => { +export const useStrings = () => { + const { intl } = useIntl(); return React.useRef({ dapps: intl.formatMessage(messages.dapps), copyToClipboard: intl.formatMessage(messages.copyToClipboard), diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js b/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js index 984d80ac4e..ed2ebc419a 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js @@ -17,7 +17,13 @@ const start1MonthAgo = new Date(now.getFullYear(), now.getMonth() - 1, now.getDa // ALL THE MOCK DATA FOR RENDERING UI NEW const mockData = { common: { - balance: { + walletBalance: { + ada: (100000 * Math.random()).toFixed(2), + usd: (1000 * Math.random()).toFixed(2), + percents: Math.random().toFixed(2), + amount: Math.random().toFixed(2), + }, + dappsBalance: { ada: (100000 * Math.random()).toFixed(2), usd: (1000 * Math.random()).toFixed(2), percents: Math.random().toFixed(2), @@ -349,7 +355,7 @@ const mockData = { }, { name: 'ADA', - id: 'Ada', + id: 'Cardano', price: (10 * Math.random()).toFixed(2), portfolioPercents: Math.round(100 * Math.random()), '24h': (10 * Math.random()).toFixed(2), diff --git a/packages/yoroi-extension/app/UI/features/portfolio/module/PortfolioContextProvider.js b/packages/yoroi-extension/app/UI/features/portfolio/module/PortfolioContextProvider.js index 85ecb7e364..b3e1ecc5ed 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/module/PortfolioContextProvider.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/module/PortfolioContextProvider.js @@ -11,8 +11,6 @@ import { PortfolioActions, } from './state'; -import { getStrings } from '../common/hooks/useStrings'; - const initialPortfolioProvider = { ...defaultPortfolioState, ...defaultPortfolioActions, @@ -24,9 +22,8 @@ type PortfolioProviderProps = any; export const PortfolioContextProvider = ({ children, initialState = { - portfolioStatus: 'none', + unitOfAccount: 'USD', }, - intl, }: PortfolioProviderProps) => { const [state, dispatch] = React.useReducer(PortfolioReducer, { ...defaultPortfolioState, @@ -34,10 +31,10 @@ export const PortfolioContextProvider = ({ }); const actions = React.useRef({ - portfolioStatusChanged: (status: any) => { + changeUnitOfAccount: (currency: string) => { dispatch({ - type: PortfolioActionType.PortfolioStatusChanged, - portfolioStatus: status, + type: PortfolioActionType.UnitOfAccountChanged, + unitOfAccount: currency.toLowerCase() === 'ada' ? 'ADA' : 'USD', }); }, }).current; @@ -46,7 +43,6 @@ export const PortfolioContextProvider = ({ () => ({ ...state, ...actions, - strings: getStrings(intl), }), [state, actions] ); @@ -55,5 +51,4 @@ export const PortfolioContextProvider = ({ }; export const usePortfolio = () => - React.useContext(PortfolioContext) ?? - invalid('usePortfolio: needs to be wrapped in a PortfolioManagerProvider'); + React.useContext(PortfolioContext) ?? invalid('usePortfolio: needs to be wrapped in a PortfolioManagerProvider'); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/module/state.js b/packages/yoroi-extension/app/UI/features/portfolio/module/state.js index 331ec65c14..f13e50b1d0 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/module/state.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/module/state.js @@ -2,46 +2,43 @@ import { invalid } from '@yoroi/common'; import { produce } from 'immer'; -type status = 'drep' | 'confidence'; +type currency = 'USD' | 'ADA'; // Define types export type PortfolioActions = {| - +portfolioStatusChanged: (status: status) => void, + +unitOfAccountChanged: (currency: currency) => void, |}; export const PortfolioActionType = Object.freeze({ - PortfolioStatusChanged: 'portfolioStatusChanged', + UnitOfAccountChanged: 'unitOfAccountChanged', }); export type PortfolioAction = {| - type: typeof PortfolioActionType.PortfolioStatusChanged, - portfolioStatus: status, + type: typeof GouvernanceActionType.UnitOfAccountChanged, + unitOfAccount: currency, |}; // Define state type export type PortfolioState = {| - portfolioStatus: status, + unitOfAccount: currency, |}; // Define default state export const defaultPortfolioState: PortfolioState = { - portfolioStatus: 'drep', + unitOfAccount: 'USD', }; // Define action handlers export const defaultPortfolioActions: PortfolioActions = { - portfolioStatusChanged: () => invalid('missing init portfolioStatusChanged'), + unitOfAccountChanged: () => invalid('missing init unitOfAccountChanged'), }; // Reducer function -export const PortfolioReducer = ( - state: PortfolioState, - action: PortfolioAction -): PortfolioState => { +export const PortfolioReducer = (state: PortfolioState, action: PortfolioAction): PortfolioState => { return produce(state, draft => { switch (action.type) { - case PortfolioActionType.PortfolioStatusChanged: - draft.portfolioStatus = action.portfolioStatus; + case PortfolioActionType.UnitOfAccountChanged: + draft.unitOfAccount = action.unitOfAccount; break; default: return; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.js index 7e90205ab7..00bdf302ba 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.js @@ -1,12 +1,12 @@ import React from 'react'; import { Box, Stack, Typography } from '@mui/material'; import { useTheme } from '@mui/material'; +import { useStrings } from '../../common/hooks/useStrings'; import illustrationPng from '../../common/assets/images/illustration.png'; -import { usePortfolio } from '../../module/PortfolioContextProvider'; const LendAndBorrow = () => { const theme = useTheme(); - const { strings } = usePortfolio(); + const strings = useStrings(); return ( diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js index 47797bc51f..7584d71e02 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js @@ -1,15 +1,5 @@ import React, { useCallback, useMemo, useState } from 'react'; -import { - Table, - TableBody, - TableCell, - TableHead, - TableRow, - TableSortLabel, - Typography, - Stack, - Box, -} from '@mui/material'; +import { Table, TableBody, TableCell, TableHead, TableRow, TableSortLabel, Typography, Stack, Box } from '@mui/material'; import { useTheme } from '@mui/material/styles'; import { SortIcon } from '../../common/assets/icons/'; import { useNavigateTo } from '../../common/hooks/useNavigateTo'; @@ -19,6 +9,7 @@ import hoskyPng from '../../common/assets/images/hosky-token.png'; import minswapPng from '../../common/assets/images/minswap-dex.png'; import { Chip } from '../../common/components/Chip'; import { Skeleton } from '../../../../components/Skeleton'; +import { useStrings } from '../../common/hooks/useStrings'; const TableRowSkeleton = ({ id, theme }) => ( ( - + @@ -85,7 +72,8 @@ const TableRowSkeleton = ({ id, theme }) => ( const LiquidityTable = ({ data, isLoading }) => { const theme = useTheme(); const navigateTo = useNavigateTo(); - const { strings } = usePortfolio(); + const strings = useStrings(); + const { unitOfAccount } = usePortfolio(); const [{ order, orderBy }, setSortState] = useState({ order: null, orderBy: null, @@ -154,9 +142,7 @@ const LiquidityTable = ({ data, isLoading }) => { const sortColumn = headCells.find(cell => cell.id === orderBy); const sortType = sortColumn?.sortType ?? 'character'; return arr.sort((a, b) => { - return order === 'desc' - ? descendingComparator(a, b, sortType) - : -descendingComparator(a, b, sortType); + return order === 'desc' ? descendingComparator(a, b, sortType) : -descendingComparator(a, b, sortType); }); }, [order, orderBy, headCells] @@ -172,21 +158,15 @@ const LiquidityTable = ({ data, isLoading }) => { direction="row" alignItems="center" spacing={theme.spacing(1)} - onClick={() => - index === 0 || index === headCells.length - 1 ? handleRequestSort(id) : null - } + onClick={() => (index === 0 || index === headCells.length - 1 ? handleRequestSort(id) : null)} sx={{ float: align, cursor: index === 0 || index === headCells.length - 1 ? 'pointer' : 'normal', - justifyContent: - index === 0 || index === headCells.length - 1 ? 'flex-start' : 'space-between', + justifyContent: index === 0 || index === headCells.length - 1 ? 'flex-start' : 'space-between', width: index === 0 || index === headCells.length - 1 ? 'fit-content' : '100%', }} > - + {label} { order={order} orderBy={orderBy} style={{ cursor: 'pointer ' }} - onClick={() => - index === 0 || index === headCells.length - 1 ? null : handleRequestSort(id) - } + onClick={() => (index === 0 || index === headCells.length - 1 ? null : handleRequestSort(id))} /> @@ -205,9 +183,7 @@ const LiquidityTable = ({ data, isLoading }) => { {isLoading - ? Array.from([1, 2, 3]).map((item, index) => ( - - )) + ? Array.from({ length: 6 }).map((item, index) => ) : getSortedData(list).map(row => ( { > - + { component="img" src={minswapPng} > - + {row.DEX} @@ -276,9 +245,11 @@ const LiquidityTable = ({ data, isLoading }) => { {row.firstTokenValue} {row.firstToken.name} - - {row.firstTokenValueUsd} USD - + {row.firstToken.name === 'ADA' && unitOfAccount === 'ADA' ? null : ( + + {row.firstTokenValueUsd} {unitOfAccount} + + )} @@ -287,9 +258,11 @@ const LiquidityTable = ({ data, isLoading }) => { {row.secondTokenValue} {row.secondToken.name} - - {row.secondTokenValueUsd} USD - + {row.secondToken.name === 'ADA' && unitOfAccount === 'ADA' ? null : ( + + {row.secondTokenValueUsd} {unitOfAccount} + + )} @@ -303,7 +276,7 @@ const LiquidityTable = ({ data, isLoading }) => { label={ {row.PNLValueUsd > 0 && '+'} - {row.PNLValueUsd} USD + {row.PNLValueUsd} {unitOfAccount} } /> @@ -311,23 +284,16 @@ const LiquidityTable = ({ data, isLoading }) => { - - {row.lpTokens} - + {row.lpTokens} - + {row.totalValue} {row.firstToken.name} - - {row.totalValueUsd} USD + + {row.totalValueUsd} {unitOfAccount} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js index b139bdcfc7..4890eb97fa 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js @@ -1,25 +1,16 @@ import React, { useCallback, useMemo, useState } from 'react'; -import { - Table, - TableBody, - TableCell, - TableHead, - TableRow, - TableSortLabel, - Typography, - Stack, - Box, -} from '@mui/material'; +import { Table, TableBody, TableCell, TableHead, TableRow, TableSortLabel, Typography, Stack, Box } from '@mui/material'; import { useTheme } from '@mui/material/styles'; import { SortIcon } from '../../common/assets/icons/'; import { useNavigateTo } from '../../common/hooks/useNavigateTo'; -import { usePortfolio } from '../../module/PortfolioContextProvider'; +import { useStrings } from '../../common/hooks/useStrings'; import adaPng from '../../../../../assets/images/ada.png'; import hoskyPng from '../../common/assets/images/hosky-token.png'; import minswapPng from '../../common/assets/images/minswap-dex.png'; import { Chip } from '../../common/components/Chip'; import { Skeleton } from '../../../../components/Skeleton'; import { truncateAddressShort } from '../../../../../utils/formatters'; +import { usePortfolio } from '../../module/PortfolioContextProvider'; const TableRowSkeleton = ({ id, theme }) => ( ( const OrderTable = ({ data, isLoading }) => { const theme = useTheme(); const navigateTo = useNavigateTo(); - const { strings } = usePortfolio(); + const strings = useStrings(); + const { unitOfAccount } = usePortfolio(); const [{ order, orderBy }, setSortState] = useState({ order: null, orderBy: null, @@ -135,9 +127,7 @@ const OrderTable = ({ data, isLoading }) => { const sortColumn = headCells.find(cell => cell.id === orderBy); const sortType = sortColumn?.sortType ?? 'character'; return arr.sort((a, b) => { - return order === 'desc' - ? descendingComparator(a, b, sortType) - : -descendingComparator(a, b, sortType); + return order === 'desc' ? descendingComparator(a, b, sortType) : -descendingComparator(a, b, sortType); }); }, [order, orderBy, headCells] @@ -156,10 +146,7 @@ const OrderTable = ({ data, isLoading }) => { onClick={() => !disabledSort && handleRequestSort(id)} sx={{ float: align, cursor: disabledSort ? 'normal' : 'pointer' }} > - + {label} {disabledSort ? null : } @@ -170,9 +157,7 @@ const OrderTable = ({ data, isLoading }) => { {isLoading - ? Array.from([1, 2, 3]).map((item, index) => ( - - )) + ? Array.from({ length: 6 }).map((item, index) => ) : getSortedData(list).map(row => ( { component="img" src={minswapPng} > - + {row.DEX} - - {row.assetPrice} - + {row.assetPrice} - - {row.assetAmount} - + {row.assetAmount} @@ -260,17 +238,14 @@ const OrderTable = ({ data, isLoading }) => { - + {row.totalValue} {row.firstToken.name} - - {row.totalValueUsd} USD - + {row.firstToken.name === 'ADA' && unitOfAccount === 'ADA' ? null : ( + + {row.totalValueUsd} {unitOfAccount} + + )} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js index 77b7bf6d4b..7b630acfe0 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js @@ -13,6 +13,7 @@ import { Chip } from '../../common/components/Chip'; import { Skeleton } from '../../../../components/Skeleton'; import OrderTable from './OrderTable'; import LendAndBorrow from './LendAndBorrow'; +import { useStrings } from '../../common/hooks/useStrings'; const StyledButton = styled(Button)(({ theme }) => ({ height: '40px', @@ -29,7 +30,8 @@ const TableTabs = { const PortfolioDapps = ({ data }) => { const theme = useTheme(); - const { strings } = usePortfolio(); + const strings = useStrings(); + const { unitOfAccount, changeUnitOfAccount } = usePortfolio(); const [keyword, setKeyword] = useState(''); const [isLoading, setIsLoading] = useState(); const [liquidityList, setLiquidlityList] = useState([]); @@ -43,6 +45,17 @@ const PortfolioDapps = ({ data }) => { { id: TableTabs.ORDER, label: `${strings.openOrders}`, active: false }, { id: TableTabs.LENDBORROW, label: `${strings.lendAndBorrow}`, active: false }, ]); + const [isUsdMainUnit, setIsUsdMainUnit] = useState(unitOfAccount === 'USD'); + + const handleCurrencyChange = () => { + if (isUsdMainUnit) { + changeUnitOfAccount('ADA'); + setIsUsdMainUnit(false); + } else { + changeUnitOfAccount('USD'); + setIsUsdMainUnit(true); + } + }; useEffect(() => { // FAKE FETCHING DATA TO SEE SKELETON @@ -99,11 +112,7 @@ const PortfolioDapps = ({ data }) => { return ( - + @@ -111,21 +120,23 @@ const PortfolioDapps = ({ data }) => { ) : ( - {mockData.common.balance.ada} + {isUsdMainUnit ? mockData.common.dappsBalance.ada : mockData.common.dappsBalance.usd} )} - ADA + {isUsdMainUnit ? 'ADA' : 'USD'} - /USD + {isUsdMainUnit ? '/USD' : '/ADA'} @@ -135,16 +146,12 @@ const PortfolioDapps = ({ data }) => { ) : ( - {mockData.common.balance.usd} USD + {isUsdMainUnit ? mockData.common.dappsBalance.usd : mockData.common.dappsBalance.ada}{' '} + {isUsdMainUnit ? 'USD' : 'ADA'} )} {isLoading ? ( - + @@ -161,43 +168,37 @@ const PortfolioDapps = ({ data }) => { } placement="right" > - + 0} + active={mockData.common.dappsBalance.percents > 0} label={ 0 + mockData.common.dappsBalance.percents > 0 ? theme.palette.ds.secondary_c800 : theme.palette.ds.sys_magenta_c700 } style={{ marginRight: theme.spacing(0.5), - transform: - mockData.common.balance.percents > 0 ? '' : 'rotate(180deg)', + transform: mockData.common.dappsBalance.percents > 0 ? '' : 'rotate(180deg)', }} /> - {mockData.common.balance.percents > 0 - ? mockData.common.balance.percents - : -1 * mockData.common.balance.percents} + {mockData.common.dappsBalance.percents > 0 + ? mockData.common.dappsBalance.percents + : -1 * mockData.common.dappsBalance.percents} % } /> 0} + active={mockData.common.dappsBalance.amount > 0} label={ - {mockData.common.balance.amount > 0 && '+'} - {mockData.common.balance.amount} USD + {mockData.common.dappsBalance.amount > 0 && '+'} + {mockData.common.dappsBalance.amount} USD } /> @@ -239,11 +240,7 @@ const PortfolioDapps = ({ data }) => { - + {strings.noResultsForThisSearch} @@ -257,11 +254,7 @@ const PortfolioDapps = ({ data }) => { - + {strings.noResultsForThisSearch} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js index 7e44074934..83329886d7 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js @@ -11,12 +11,12 @@ import { Tooltip as RechartTooltip, } from 'recharts'; import { useTheme } from '@mui/material/styles'; -import { usePortfolio } from '../../module/PortfolioContextProvider'; import { ArrowIcon } from '../../common/assets/icons'; import { Skeleton, Tooltip } from '../../../../components'; import chartSkeletonPng from '../../common/assets/images/token-detail-chart-skeleton.png'; import { Chip } from '../../common/components/Chip'; import moment from 'moment'; +import { useStrings } from '../../common/hooks/useStrings'; const StyledButton = styled(Button)(({ theme }) => ({ fontWeight: 500, @@ -30,7 +30,7 @@ const TokenDetailChart = ({ isLoading, tokenInfo }) => { const isAda = tokenInfo.id.toLowerCase() === 'ada'; const chartHeight = isAda ? 156 : 241; const theme = useTheme(); - const { strings } = usePortfolio(); + const strings = useStrings(); const [buttonPeriodProps, setButtonPeriodProps] = useState([ { label: '24H', active: true }, { label: '1W', active: false }, diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js index 3b8c264d8b..fc96037f04 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js @@ -3,13 +3,13 @@ import { Stack, Box, Typography, Link, Button } from '@mui/material'; import { Skeleton } from '../../../../components/Skeleton'; import { CopyButton } from '../../../../components/buttons/CopyButton'; import { useTheme } from '@mui/material/styles'; -import { usePortfolio } from '../../module/PortfolioContextProvider'; import adaPng from '../../../../../assets/images/ada.png'; +import { useStrings } from '../../common/hooks/useStrings'; const TokenDetailOverview = ({ tokenInfo, isLoading }) => { const isAda = tokenInfo.id.toLowerCase() === 'ada'; const theme = useTheme(); - const { strings } = usePortfolio(); + const strings = useStrings(); return ( diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js index 9c527df7ea..43cc55285c 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js @@ -1,7 +1,7 @@ import React from 'react'; import { Box, Stack, Typography, Link } from '@mui/material'; import { useTheme } from '@mui/material/styles'; -import { usePortfolio } from '../../module/PortfolioContextProvider'; +import { useStrings } from '../../common/hooks/useStrings'; const PerformanceItemType = { USD: 'usd', @@ -11,7 +11,7 @@ const PerformanceItemType = { const TokenDetailPerformance = ({ tokenInfo }) => { const theme = useTheme(); - const { strings } = usePortfolio(); + const strings = useStrings(); const performanceItemList = [ { id: 'tokenPriceChange', type: PerformanceItemType.USD, label: strings.tokenPriceChange }, diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js index 633ab1a417..c1e39bf36d 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js @@ -18,9 +18,9 @@ import TransactionTable from './TransactionTable'; import TokenDetailChart from './TokenDetailChart'; import SubMenu from '../../../../../components/topbar/SubMenu'; import { useTheme } from '@mui/material/styles'; -import mockData from '../../common/mockData'; import { useNavigateTo } from '../../common/hooks/useNavigateTo'; -import { usePortfolio } from '../../module/PortfolioContextProvider'; +import { useStrings } from '../../common/hooks/useStrings'; +import mockData from '../../common/mockData'; import TokenDetailPerformance from './TokenDetailPerformance'; import TokenDetailOverview from './TokenDetailOverview'; @@ -47,7 +47,7 @@ const TabContent = styled(Box)({ const TokenDetails = ({ tokenInfo, transactionHistory }) => { const theme = useTheme(); const navigateTo = useNavigateTo(); - const { strings } = usePortfolio(); + const strings = useStrings(); const [isLoading, setIsLoading] = useState(false); const subMenuOptions = [ @@ -97,13 +97,13 @@ const TokenDetails = ({ tokenInfo, transactionHistory }) => { - + navigateTo.swapPage()}> {strings.swap} - + navigateTo.sendPage()}> {strings.send} - + navigateTo.receivePage()}> {strings.receive} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js index 61d372cf36..af7139e83d 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js @@ -19,8 +19,8 @@ import { ErrorIcon, WithdrawIcon, } from '../../common/assets/icons/transaction-history'; -import { usePortfolio } from '../../module/PortfolioContextProvider'; import moment from 'moment'; +import { useStrings } from '../../common/hooks/useStrings'; export const HistoryItemType = Object.freeze({ SENT: 1, @@ -43,7 +43,7 @@ const Container = styled(Box)(({ theme }) => ({ const TransactionTable = ({ history }) => { const theme = useTheme(); - const { strings } = usePortfolio(); + const strings = useStrings(); const mapStrings = arr => arr.map(item => { diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js index aa5f155760..12866b5a85 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js @@ -10,13 +10,26 @@ import { ArrowIcon } from '../../common/assets/icons'; import illustrationPng from '../../common/assets/images/illustration.png'; import { Chip } from '../../common/components/Chip'; import { Skeleton } from '../../../../components/Skeleton'; +import { useStrings } from '../../common/hooks/useStrings'; const PortfolioWallet = ({ data }) => { const theme = useTheme(); - const { strings } = usePortfolio(); + const strings = useStrings(); + const { unitOfAccount, changeUnitOfAccount } = usePortfolio(); const [keyword, setKeyword] = useState(''); const [isLoading, setIsLoading] = useState(); const [tokenList, setTokenList] = useState([]); + const [isUsdMainUnit, setIsUsdMainUnit] = useState(unitOfAccount === 'USD'); + + const handleCurrencyChange = () => { + if (isUsdMainUnit) { + changeUnitOfAccount('ADA'); + setIsUsdMainUnit(false); + } else { + changeUnitOfAccount('USD'); + setIsUsdMainUnit(true); + } + }; useEffect(() => { // FAKE FETCHING DATA TO SEE SKELETON @@ -38,10 +51,7 @@ const PortfolioWallet = ({ data }) => { const lowercaseKeyword = keyword.toLowerCase(); const temp = data.filter(item => { - return ( - item.name.toLowerCase().includes(lowercaseKeyword) || - item.id.toLowerCase().includes(lowercaseKeyword) - ); + return item.name.toLowerCase().includes(lowercaseKeyword) || item.id.toLowerCase().includes(lowercaseKeyword); }); if (temp && temp.length > 0) { setTokenList(temp); @@ -59,21 +69,23 @@ const PortfolioWallet = ({ data }) => { ) : ( - {mockData.common.balance.ada} + {isUsdMainUnit ? mockData.common.walletBalance.ada : mockData.common.walletBalance.usd} )} - ADA + {isUsdMainUnit ? 'ADA' : 'USD'} - /USD + {isUsdMainUnit ? '/USD' : '/ADA'} @@ -83,16 +95,11 @@ const PortfolioWallet = ({ data }) => { ) : ( - {mockData.common.balance.usd} USD + {isUsdMainUnit ? mockData.common.walletBalance.usd : mockData.common.walletBalance.ada} {isUsdMainUnit ? 'USD' : 'ADA'} )} {isLoading ? ( - + @@ -107,42 +114,37 @@ const PortfolioWallet = ({ data }) => { } placement="right" > - + 0} + active={mockData.common.walletBalance.percents > 0} label={ 0 + mockData.common.walletBalance.percents > 0 ? theme.palette.ds.secondary_c800 : theme.palette.ds.sys_magenta_c700 } style={{ marginRight: theme.spacing(0.5), - transform: mockData.common.balance.percents > 0 ? '' : 'rotate(180deg)', + transform: mockData.common.walletBalance.percents > 0 ? '' : 'rotate(180deg)', }} /> - {mockData.common.balance.percents > 0 - ? mockData.common.balance.percents - : -1 * mockData.common.balance.percents} + {mockData.common.walletBalance.percents > 0 + ? mockData.common.walletBalance.percents + : -1 * mockData.common.walletBalance.percents} % } /> 0} + active={mockData.common.walletBalance.amount > 0} label={ - {mockData.common.balance.amount > 0 && '+'} - {mockData.common.balance.amount} USD + {mockData.common.walletBalance.amount > 0 && '+'} + {mockData.common.walletBalance.amount} USD } /> diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js index 3c787532c4..8aa7c791be 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js @@ -1,15 +1,5 @@ import React, { useCallback, useMemo, useState } from 'react'; -import { - Table, - TableBody, - TableCell, - TableHead, - TableRow, - TableSortLabel, - Typography, - Stack, - Box, -} from '@mui/material'; +import { Table, TableBody, TableCell, TableHead, TableRow, TableSortLabel, Typography, Stack, Box } from '@mui/material'; import { useTheme } from '@mui/material/styles'; import { ArrowIcon, SortIcon } from '../../common/assets/icons/'; import adaPng from '../../../../../assets/images/ada.png'; @@ -17,6 +7,7 @@ import { useNavigateTo } from '../../common/hooks/useNavigateTo'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import { Chip } from '../../common/components/Chip'; import { Skeleton } from '../../../../components/Skeleton'; +import { useStrings } from '../../common/hooks/useStrings'; const TableRowSkeleton = ({ id, theme }) => ( ( const StatsTable = ({ data, isLoading }) => { const theme = useTheme(); const navigateTo = useNavigateTo(); - const { strings } = usePortfolio(); + const strings = useStrings(); + const { unitOfAccount } = usePortfolio(); const [{ order, orderBy }, setSortState] = useState({ order: null, orderBy: null, @@ -138,9 +130,7 @@ const StatsTable = ({ data, isLoading }) => { const sortColumn = headCells.find(cell => cell.id === orderBy); const sortType = sortColumn?.sortType ?? 'character'; return arr.sort((a, b) => { - return order === 'desc' - ? descendingComparator(a, b, sortType) - : -descendingComparator(a, b, sortType); + return order === 'desc' ? descendingComparator(a, b, sortType) : -descendingComparator(a, b, sortType); }); }, [order, orderBy, headCells] @@ -159,10 +149,7 @@ const StatsTable = ({ data, isLoading }) => { onClick={() => handleRequestSort(id)} sx={{ float: align, cursor: 'pointer' }} > - + {label} @@ -173,9 +160,7 @@ const StatsTable = ({ data, isLoading }) => { {isLoading - ? Array.from([1, 2, 3]).map((item, index) => ( - - )) + ? Array.from({ length: 6 }).map((item, index) => ) : getSortedData(list).map(row => ( { src={adaPng} > - + {row.name} @@ -227,19 +209,13 @@ const StatsTable = ({ data, isLoading }) => { label={ 0 - ? theme.palette.ds.secondary_c800 - : theme.palette.ds.sys_magenta_c700 - } + fill={row['24h'] > 0 ? theme.palette.ds.secondary_c800 : theme.palette.ds.sys_magenta_c700} style={{ marginRight: '5px', transform: row['24h'] > 0 ? '' : 'rotate(180deg)', }} /> - - {row['24h'] > 0 ? row['24h'] : -1 * row['24h']}% - + {row['24h'] > 0 ? row['24h'] : -1 * row['24h']}% } sx={{ cursor: 'pointer' }} @@ -252,19 +228,13 @@ const StatsTable = ({ data, isLoading }) => { label={ 0 - ? theme.palette.ds.secondary_c800 - : theme.palette.ds.sys_magenta_c700 - } + fill={row['1W'] > 0 ? theme.palette.ds.secondary_c800 : theme.palette.ds.sys_magenta_c700} style={{ marginRight: '5px', transform: row['1W'] > 0 ? '' : 'rotate(180deg)', }} /> - - {row['1W'] > 0 ? row['1W'] : -1 * row['1W']}% - + {row['1W'] > 0 ? row['1W'] : -1 * row['1W']}% } sx={{ cursor: 'pointer' }} @@ -277,19 +247,13 @@ const StatsTable = ({ data, isLoading }) => { label={ 0 - ? theme.palette.ds.secondary_c800 - : theme.palette.ds.sys_magenta_c700 - } + fill={row['1M'] > 0 ? theme.palette.ds.secondary_c800 : theme.palette.ds.sys_magenta_c700} style={{ marginRight: '5px', transform: row['1M'] > 0 ? '' : 'rotate(180deg)', }} /> - - {row['1M'] > 0 ? row['1M'] : -1 * row['1M']}% - + {row['1M'] > 0 ? row['1M'] : -1 * row['1M']}% } sx={{ cursor: 'pointer' }} @@ -305,18 +269,14 @@ const StatsTable = ({ data, isLoading }) => { - + {row.totalAmount} {row.name} - - {row.totalAmountUsd} USD - + {row.name === 'ADA' && unitOfAccount === 'ADA' ? null : ( + + {row.totalAmountUsd} {unitOfAccount} + + )} diff --git a/packages/yoroi-extension/app/UI/layout/PortfolioPageLayout.js b/packages/yoroi-extension/app/UI/layout/PortfolioPageLayout.js index 41fd075208..4c66ec05ce 100644 --- a/packages/yoroi-extension/app/UI/layout/PortfolioPageLayout.js +++ b/packages/yoroi-extension/app/UI/layout/PortfolioPageLayout.js @@ -18,7 +18,7 @@ import BannerContainer from '../../containers/banners/BannerContainer'; import SidebarContainer from '../../containers/SidebarContainer'; import NavBarContainerRevamp from '../../containers/NavBarContainerRevamp'; import { ROUTES } from '../../routes-config'; -import { PortfolioContextProvider } from '../features/portfolio/module/PortfolioContextProvider'; +import { IntlProvider } from '../context/IntlProvider'; type Props = {| ...StoresAndActionsProps, @@ -52,17 +52,15 @@ class PortfolioPageLayout extends Component { const isDetailPage = location.pathname.startsWith(`${ROUTES.PORTFOLIO.ROOT}/details`); const { actions, stores } = this.props; const { children } = this.props; + const { intl } = this.context; const sidebarContainer = ; const menu = isDetailPage ? null : ( - actions.router.goToRoute.trigger({ route })} - isActiveItem={this.isActivePage} - /> + actions.router.goToRoute.trigger({ route })} isActiveItem={this.isActivePage} /> ); const PortfolioLayoutClassic = ( - + } sidebar={sidebarContainer} @@ -72,10 +70,8 @@ class PortfolioPageLayout extends Component { stores={stores} title={ } @@ -86,10 +82,10 @@ class PortfolioPageLayout extends Component { > {children} - + ); const PortfolioLayoutRevamp = ( - + } sidebar={sidebarContainer} @@ -99,10 +95,8 @@ class PortfolioPageLayout extends Component { stores={stores} title={ } @@ -114,7 +108,7 @@ class PortfolioPageLayout extends Component { > {children} - + ); return this.props.renderLayoutComponent({ CLASSIC: PortfolioLayoutClassic, From 8b195033f94cbffdb485b591718ec39ff2113f71 Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Fri, 31 May 2024 11:26:34 +0700 Subject: [PATCH 057/464] update typography --- .../useCases/TokenDetails/TokenDetailChart.js | 63 ++++--------------- .../TokenDetails/TokenDetailOverview.js | 3 +- .../TokenDetails/TokenDetailPerformance.js | 2 +- .../useCases/TokenDetails/TokenDetails.js | 35 +++-------- packages/yoroi-extension/package.json | 1 + 5 files changed, 22 insertions(+), 82 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js index 83329886d7..b26bf72efa 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js @@ -1,15 +1,6 @@ import { Box, Button, Stack, styled, Typography, Divider, SvgIcon } from '@mui/material'; import React, { useEffect, useMemo, useState } from 'react'; -import { - LineChart, - Line, - CartesianGrid, - XAxis, - YAxis, - ResponsiveContainer, - Label, - Tooltip as RechartTooltip, -} from 'recharts'; +import { LineChart, Line, CartesianGrid, XAxis, YAxis, ResponsiveContainer, Label, Tooltip as RechartTooltip } from 'recharts'; import { useTheme } from '@mui/material/styles'; import { ArrowIcon } from '../../common/assets/icons'; import { Skeleton, Tooltip } from '../../../../components'; @@ -26,8 +17,7 @@ const StyledButton = styled(Button)(({ theme }) => ({ height: '30px', })); -const TokenDetailChart = ({ isLoading, tokenInfo }) => { - const isAda = tokenInfo.id.toLowerCase() === 'ada'; +const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { const chartHeight = isAda ? 156 : 241; const theme = useTheme(); const strings = useStrings(); @@ -135,14 +125,7 @@ const TokenDetailChart = ({ isLoading, tokenInfo }) => { - + { }; const handleMouseMove = e => { - const value = - e.activePayload && e.activePayload.length > 0 ? e.activePayload[0].payload.value : null; - const usd = - e.activePayload && e.activePayload.length > 0 ? e.activePayload[0].payload.usd : null; + const value = e.activePayload && e.activePayload.length > 0 ? e.activePayload[0].payload.value : null; + const usd = e.activePayload && e.activePayload.length > 0 ? e.activePayload[0].payload.usd : null; if (!value || !usd) return; setDetailInfo({ @@ -200,12 +181,7 @@ const TokenDetailChart = ({ isLoading, tokenInfo }) => { return ( - + {isLoading ? ( ) : ( @@ -242,11 +218,7 @@ const TokenDetailChart = ({ isLoading, tokenInfo }) => { label={ 0 - ? theme.palette.ds.secondary_c800 - : theme.palette.ds.sys_magenta_c700 - } + fill={detailInfo.value > 0 ? theme.palette.ds.secondary_c800 : theme.palette.ds.sys_magenta_c700} style={{ marginRight: theme.spacing(0.5), transform: detailInfo.value > 0 ? '' : 'rotate(180deg)', @@ -284,18 +256,9 @@ const TokenDetailChart = ({ isLoading, tokenInfo }) => { > {isLoading ? null : ( - item.active).label]} - onMouseMove={handleMouseMove} - > + item.active).label]} onMouseMove={handleMouseMove}> - + } /> ( @@ -303,9 +266,7 @@ const TokenDetailChart = ({ isLoading, tokenInfo }) => { chartBottom={chartHeight} rectWidth={93} rectHeight={34} - dataLength={ - filteredData[buttonPeriodProps.find(item => item.active).label].length - } + dataLength={filteredData[buttonPeriodProps.find(item => item.active).label].length} {...props} /> )} @@ -313,9 +274,7 @@ const TokenDetailChart = ({ isLoading, tokenInfo }) => { type="monotone" dataKey="value" strokeWidth={2} - stroke={ - isLoading ? theme.palette.ds.gray_c50 : theme.palette.ds.text_primary_medium - } + stroke={isLoading ? theme.palette.ds.gray_c50 : theme.palette.ds.text_primary_medium} /> diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js index fc96037f04..46598e0ce1 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js @@ -6,8 +6,7 @@ import { useTheme } from '@mui/material/styles'; import adaPng from '../../../../../assets/images/ada.png'; import { useStrings } from '../../common/hooks/useStrings'; -const TokenDetailOverview = ({ tokenInfo, isLoading }) => { - const isAda = tokenInfo.id.toLowerCase() === 'ada'; +const TokenDetailOverview = ({ tokenInfo, isLoading, isAda }) => { const theme = useTheme(); const strings = useStrings(); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js index 43cc55285c..a707d09624 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js @@ -44,7 +44,7 @@ const TokenDetailPerformance = ({ tokenInfo }) => { {item.type === PerformanceItemType.RANK && '#'} {tokenInfo.performance[index].value} {item.type === PerformanceItemType.USD && 'USD'} - {item.type === PerformanceItemType.TOKEN && tokenInfo.overview.tokenName} + {item.type === PerformanceItemType.TOKEN && tokenInfo.name} ))} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js index c1e39bf36d..1006c6c1dd 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js @@ -1,15 +1,5 @@ import React, { useEffect, useState } from 'react'; -import { - Badge, - Box, - Button, - Chip, - Divider, - IconButton, - Link, - Stack, - Typography, -} from '@mui/material'; +import { Badge, Box, Button, Chip, Divider, IconButton, Link, Stack, Typography } from '@mui/material'; import { ReactComponent as BackIcon } from '../../../../../assets/images/assets-page/back-arrow.inline.svg'; import { styled } from '@mui/material/styles'; import { Skeleton, CopyButton, Card } from '../../../../components'; @@ -36,8 +26,7 @@ const TokenInfo = styled(Stack)({ const StyledButton = styled(Button)(({ theme }) => ({ maxHeight: '40px', - width: '100%', - maxWidth: '140,25px', + minWidth: '140.25px', })); const TabContent = styled(Box)({ @@ -49,6 +38,7 @@ const TokenDetails = ({ tokenInfo, transactionHistory }) => { const navigateTo = useNavigateTo(); const strings = useStrings(); const [isLoading, setIsLoading] = useState(false); + const isAda = tokenInfo.name.toLowerCase() === 'ada'; const subMenuOptions = [ { @@ -112,15 +102,8 @@ const TokenDetails = ({ tokenInfo, transactionHistory }) => { - - {isLoading ? ( - - ) : ( - `${tokenInfo.name} ${strings.balance}` - )} + + {isLoading ? : `${tokenInfo.name} ${strings.balance}`} @@ -146,16 +129,14 @@ const TokenDetails = ({ tokenInfo, transactionHistory }) => { {isLoading ? ( ) : ( - - {tokenInfo.totalAmountUsd} USD - + {tokenInfo.totalAmountUsd} USD )} - + @@ -177,7 +158,7 @@ const TokenDetails = ({ tokenInfo, transactionHistory }) => { {selectedTab === subMenuOptions[1].route ? ( - + ) : null} diff --git a/packages/yoroi-extension/package.json b/packages/yoroi-extension/package.json index 58bccd2bfd..daef5eca86 100644 --- a/packages/yoroi-extension/package.json +++ b/packages/yoroi-extension/package.json @@ -160,6 +160,7 @@ "@vespaiach/axios-fetch-adapter": "^0.3.0", "@yoroi/exchange": "2.0.1", "@yoroi/resolver": "2.0.2", + "@yoroi/staking": "^1.5.1", "@yoroi/swap": "1.5.2", "@yoroi/types": "1.5.4", "assert": "2.1.0", From a6643c01a4e117040f7b0076532511f8b365ba8c Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Fri, 31 May 2024 14:31:50 +0700 Subject: [PATCH 058/464] applied fiat pair unit from setting to change currency in all portfolio pages --- packages/yoroi-extension/app/Routes.js | 10 +- .../module/PortfolioContextProvider.js | 6 +- .../app/UI/features/portfolio/module/state.js | 6 +- .../useCases/Dapps/LiquidityTable.js | 8 +- .../useCases/Dapps/PortfolioDapps.js | 24 ++-- .../useCases/TokenDetails/TokenDetailChart.js | 6 +- .../TokenDetails/TokenDetailPerformance.js | 18 +-- .../useCases/TokenDetails/TokenDetails.js | 6 +- .../useCases/TokenDetails/TransactionTable.js | 103 ++++++++---------- .../useCases/Wallet/PortfolioWallet.js | 23 ++-- .../app/UI/pages/portfolio/PortfolioPage.js | 2 +- 11 files changed, 106 insertions(+), 106 deletions(-) diff --git a/packages/yoroi-extension/app/Routes.js b/packages/yoroi-extension/app/Routes.js index ddfafc5fb4..f717170a83 100644 --- a/packages/yoroi-extension/app/Routes.js +++ b/packages/yoroi-extension/app/Routes.js @@ -28,11 +28,6 @@ import LoadingSpinner from './components/widgets/LoadingSpinner'; import FullscreenLayout from './components/layout/FullscreenLayout'; // New UI pages -import GouvernanceStatusPage from './UI/pages/Gouvernance/GouvernanceStatusPage'; -import GouvernanceDelegationFormPage from './UI/pages/Gouvernance/GouvernanceDelegationFormPage'; -import PortfolioPage from './UI/pages/portfolio/PortfolioPage'; -import PortfolioDappsPage from './UI/pages/portfolio/PortfolioDappsPage'; -import PortfolioDetailPage from './UI/pages/portfolio/PortfolioDetailPage'; import { GovernanceContextProvider } from './UI/features/governace/module/GovernanceContextProvider'; import { createCurrrentWalletInfo } from './UI/features/governace/common/helpers'; import GovernanceStatusPage from './UI/pages/Governance/GovernanceStatusPage'; @@ -532,8 +527,9 @@ export function wrapGovernance(governanceProps: StoresAndActionsProps, children: ); } export function wrapPortfolio(portfolioProps: StoresAndActionsProps, children: Node): Node { -return ( - + return ( + {children} ); +} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/module/PortfolioContextProvider.js b/packages/yoroi-extension/app/UI/features/portfolio/module/PortfolioContextProvider.js index b3e1ecc5ed..f313116c78 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/module/PortfolioContextProvider.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/module/PortfolioContextProvider.js @@ -21,8 +21,9 @@ type PortfolioProviderProps = any; export const PortfolioContextProvider = ({ children, + settingFiatPairUnit, initialState = { - unitOfAccount: 'USD', + unitOfAccount: settingFiatPairUnit.enabled ? settingFiatPairUnit.currency : 'USD', }, }: PortfolioProviderProps) => { const [state, dispatch] = React.useReducer(PortfolioReducer, { @@ -34,7 +35,7 @@ export const PortfolioContextProvider = ({ changeUnitOfAccount: (currency: string) => { dispatch({ type: PortfolioActionType.UnitOfAccountChanged, - unitOfAccount: currency.toLowerCase() === 'ada' ? 'ADA' : 'USD', + unitOfAccount: currency, }); }, }).current; @@ -43,6 +44,7 @@ export const PortfolioContextProvider = ({ () => ({ ...state, ...actions, + settingFiatPairUnit, }), [state, actions] ); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/module/state.js b/packages/yoroi-extension/app/UI/features/portfolio/module/state.js index f13e50b1d0..abf4daa608 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/module/state.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/module/state.js @@ -2,7 +2,7 @@ import { invalid } from '@yoroi/common'; import { produce } from 'immer'; -type currency = 'USD' | 'ADA'; +type currency = 'ADA' | 'USD' | 'BRL' | 'ETH' | 'BTC' | 'KRW' | 'CNY' | 'EUR' | 'JPY'; // Define types export type PortfolioActions = {| @@ -24,9 +24,7 @@ export type PortfolioState = {| |}; // Define default state -export const defaultPortfolioState: PortfolioState = { - unitOfAccount: 'USD', -}; +export const defaultPortfolioState: PortfolioState = {}; // Define action handlers export const defaultPortfolioActions: PortfolioActions = { diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js index 7584d71e02..b27884b68f 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js @@ -292,9 +292,11 @@ const LiquidityTable = ({ data, isLoading }) => { {row.totalValue} {row.firstToken.name} - - {row.totalValueUsd} {unitOfAccount} - + {unitOfAccount === 'ADA' && row.firstToken.name === 'ADA' ? null : ( + + {row.totalValueUsd} {unitOfAccount} + + )} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js index 7b630acfe0..cdbb3e0238 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js @@ -31,7 +31,7 @@ const TableTabs = { const PortfolioDapps = ({ data }) => { const theme = useTheme(); const strings = useStrings(); - const { unitOfAccount, changeUnitOfAccount } = usePortfolio(); + const { unitOfAccount, changeUnitOfAccount, settingFiatPairUnit } = usePortfolio(); const [keyword, setKeyword] = useState(''); const [isLoading, setIsLoading] = useState(); const [liquidityList, setLiquidlityList] = useState([]); @@ -45,15 +45,15 @@ const PortfolioDapps = ({ data }) => { { id: TableTabs.ORDER, label: `${strings.openOrders}`, active: false }, { id: TableTabs.LENDBORROW, label: `${strings.lendAndBorrow}`, active: false }, ]); - const [isUsdMainUnit, setIsUsdMainUnit] = useState(unitOfAccount === 'USD'); + const [isAdaMainUnit, setIsAdaMainUnit] = useState(unitOfAccount === 'ADA'); const handleCurrencyChange = () => { - if (isUsdMainUnit) { - changeUnitOfAccount('ADA'); - setIsUsdMainUnit(false); + if (isAdaMainUnit) { + changeUnitOfAccount(settingFiatPairUnit.currency || 'USD'); + setIsAdaMainUnit(false); } else { - changeUnitOfAccount('USD'); - setIsUsdMainUnit(true); + changeUnitOfAccount('ADA'); + setIsAdaMainUnit(true); } }; @@ -120,11 +120,11 @@ const PortfolioDapps = ({ data }) => { ) : ( - {isUsdMainUnit ? mockData.common.dappsBalance.ada : mockData.common.dappsBalance.usd} + {isAdaMainUnit ? mockData.common.dappsBalance.ada : mockData.common.dappsBalance.usd} )} - {isUsdMainUnit ? 'ADA' : 'USD'} + {isAdaMainUnit ? settingFiatPairUnit.currency || 'USD' : 'ADA'} { color: theme.palette.ds.text_gray_low, }} > - {isUsdMainUnit ? '/USD' : '/ADA'} + {isAdaMainUnit ? '/ADA' : `/${unitOfAccount}`} @@ -146,8 +146,8 @@ const PortfolioDapps = ({ data }) => { ) : ( - {isUsdMainUnit ? mockData.common.dappsBalance.usd : mockData.common.dappsBalance.ada}{' '} - {isUsdMainUnit ? 'USD' : 'ADA'} + {isAdaMainUnit ? mockData.common.dappsBalance.usd : mockData.common.dappsBalance.ada}{' '} + {isAdaMainUnit ? 'USD' : unitOfAccount} )} {isLoading ? ( diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js index b26bf72efa..0914feb1de 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js @@ -8,6 +8,7 @@ import chartSkeletonPng from '../../common/assets/images/token-detail-chart-skel import { Chip } from '../../common/components/Chip'; import moment from 'moment'; import { useStrings } from '../../common/hooks/useStrings'; +import { usePortfolio } from '../../module/PortfolioContextProvider'; const StyledButton = styled(Button)(({ theme }) => ({ fontWeight: 500, @@ -21,6 +22,7 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { const chartHeight = isAda ? 156 : 241; const theme = useTheme(); const strings = useStrings(); + const { unitOfAccount } = usePortfolio(); const [buttonPeriodProps, setButtonPeriodProps] = useState([ { label: '24H', active: true }, { label: '1W', active: false }, @@ -197,7 +199,7 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { {detailInfo.value} -  USD +  {unitOfAccount} )} { label={ {detailInfo.usd > 0 ? '+' : '-'} - {detailInfo.usd} USD + {detailInfo.usd} {unitOfAccount} } /> diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js index a707d09624..2403b97f61 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js @@ -2,9 +2,10 @@ import React from 'react'; import { Box, Stack, Typography, Link } from '@mui/material'; import { useTheme } from '@mui/material/styles'; import { useStrings } from '../../common/hooks/useStrings'; +import { usePortfolio } from '../../module/PortfolioContextProvider'; const PerformanceItemType = { - USD: 'usd', + FIAT: 'fiat', TOKEN: 'token', RANK: 'rank', }; @@ -12,18 +13,19 @@ const PerformanceItemType = { const TokenDetailPerformance = ({ tokenInfo }) => { const theme = useTheme(); const strings = useStrings(); + const { unitOfAccount } = usePortfolio(); const performanceItemList = [ - { id: 'tokenPriceChange', type: PerformanceItemType.USD, label: strings.tokenPriceChange }, - { id: 'tokenPrice', type: PerformanceItemType.USD, label: strings.tokenPrice }, - { id: 'marketCap', type: PerformanceItemType.USD, label: strings.marketCap }, - { id: 'volumn', type: PerformanceItemType.USD, label: strings['24hVolumn'] }, + { id: 'tokenPriceChange', type: PerformanceItemType.FIAT, label: strings.tokenPriceChange }, + { id: 'tokenPrice', type: PerformanceItemType.FIAT, label: strings.tokenPrice }, + { id: 'marketCap', type: PerformanceItemType.FIAT, label: strings.marketCap }, + { id: 'volumn', type: PerformanceItemType.FIAT, label: strings['24hVolumn'] }, { id: 'rank', type: PerformanceItemType.RANK, label: strings.rank }, { id: 'circulating', type: PerformanceItemType.TOKEN, label: strings.circulating }, { id: 'totalSupply', type: PerformanceItemType.TOKEN, label: strings.totalSupply }, { id: 'maxSupply', type: PerformanceItemType.TOKEN, label: strings.maxSupply }, - { id: 'allTimeHigh', type: PerformanceItemType.USD, label: strings.allTimeHigh }, - { id: 'allTimeLow', type: PerformanceItemType.USD, label: strings.allTimeLow }, + { id: 'allTimeHigh', type: PerformanceItemType.FIAT, label: strings.allTimeHigh }, + { id: 'allTimeLow', type: PerformanceItemType.FIAT, label: strings.allTimeLow }, ]; return ( @@ -43,7 +45,7 @@ const TokenDetailPerformance = ({ tokenInfo }) => { {item.label} {item.type === PerformanceItemType.RANK && '#'} - {tokenInfo.performance[index].value} {item.type === PerformanceItemType.USD && 'USD'} + {tokenInfo.performance[index].value} {item.type === PerformanceItemType.FIAT && unitOfAccount} {item.type === PerformanceItemType.TOKEN && tokenInfo.name} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js index 1006c6c1dd..7bf57a60ed 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js @@ -13,6 +13,7 @@ import { useStrings } from '../../common/hooks/useStrings'; import mockData from '../../common/mockData'; import TokenDetailPerformance from './TokenDetailPerformance'; import TokenDetailOverview from './TokenDetailOverview'; +import { usePortfolio } from '../../module/PortfolioContextProvider'; const Header = styled(Box)({ display: 'flex', @@ -37,6 +38,7 @@ const TokenDetails = ({ tokenInfo, transactionHistory }) => { const theme = useTheme(); const navigateTo = useNavigateTo(); const strings = useStrings(); + const { unitOfAccount } = usePortfolio(); const [isLoading, setIsLoading] = useState(false); const isAda = tokenInfo.name.toLowerCase() === 'ada'; @@ -129,7 +131,9 @@ const TokenDetails = ({ tokenInfo, transactionHistory }) => { {isLoading ? ( ) : ( - {tokenInfo.totalAmountUsd} USD + + {tokenInfo.totalAmountUsd} {unitOfAccount} + )} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js index af7139e83d..caa142635e 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js @@ -1,26 +1,11 @@ import React, { useMemo, useState } from 'react'; -import { - Box, - Stack, - Typography, - IconButton, - Table, - TableCell, - TableHead, - TableBody, - TableRow, - styled, -} from '@mui/material'; +import { Box, Stack, Typography, IconButton, Table, TableCell, TableHead, TableBody, TableRow, styled } from '@mui/material'; import { useTheme } from '@mui/material/styles'; import { Card } from '../../../../components'; -import { - ArrowIcon, - ExpandIcon, - ErrorIcon, - WithdrawIcon, -} from '../../common/assets/icons/transaction-history'; +import { ArrowIcon, ExpandIcon, ErrorIcon, WithdrawIcon } from '../../common/assets/icons/transaction-history'; import moment from 'moment'; import { useStrings } from '../../common/hooks/useStrings'; +import { usePortfolio } from '../../module/PortfolioContextProvider'; export const HistoryItemType = Object.freeze({ SENT: 1, @@ -44,6 +29,7 @@ const Container = styled(Box)(({ theme }) => ({ const TransactionTable = ({ history }) => { const theme = useTheme(); const strings = useStrings(); + const { unitOfAccount } = usePortfolio(); const mapStrings = arr => arr.map(item => { @@ -171,6 +157,7 @@ const TransactionTable = ({ history }) => { row={row} theme={theme} strings={strings} + unitOfAccount={unitOfAccount} /> ))} @@ -183,7 +170,7 @@ const TransactionTable = ({ history }) => { ); }; -const TransactionHistoryItem = ({ index, row, theme, strings }) => { +const TransactionHistoryItem = ({ index, row, theme, strings, unitOfAccount }) => { const [isExpanded, setIsExpanded] = useState(false); return ( @@ -210,22 +197,13 @@ const TransactionHistoryItem = ({ index, row, theme, strings }) => { }, }} > - {row.type === HistoryItemType.SENT && ( - - )} + {row.type === HistoryItemType.SENT && } {row.type === HistoryItemType.RECEIVED && ( - + )} {row.type === HistoryItemType.ERROR && } - {row.type === HistoryItemType.WITHDRAW && ( - - )} - {row.type === HistoryItemType.DELEGATE && ( - - )} + {row.type === HistoryItemType.WITHDRAW && } + {row.type === HistoryItemType.DELEGATE && } {row.label} @@ -238,10 +216,7 @@ const TransactionHistoryItem = ({ index, row, theme, strings }) => { {row.status} @@ -252,18 +227,17 @@ const TransactionHistoryItem = ({ index, row, theme, strings }) => { {row.feeValue ? `${row.feeValue} ADA` : '-'} - - {row.feeValueUsd ? `${row.feeValueUsd} USD` : '-'} - + {unitOfAccount === 'ADA' ? null : ( + + {row.feeValueUsd ? `${row.feeValueUsd} ${unitOfAccount}` : '-'} + + )} - + {(row.type === HistoryItemType.RECEIVED || row.type === HistoryItemType.WITHDRAW || row.type === HistoryItemType.DELEGATE) && @@ -272,16 +246,15 @@ const TransactionHistoryItem = ({ index, row, theme, strings }) => { {isExpanded ? ( - - {(row.type === HistoryItemType.RECEIVED || - row.type === HistoryItemType.WITHDRAW || - row.type === HistoryItemType.DELEGATE) && - '+ '} - {row.amountTotalUsd} USD - + {unitOfAccount === 'ADA' ? null : ( + + {(row.type === HistoryItemType.RECEIVED || + row.type === HistoryItemType.WITHDRAW || + row.type === HistoryItemType.DELEGATE) && + '+ '} + {row.amountTotalUsd} {unitOfAccount} + + )} {row.type === HistoryItemType.RECEIVED && ( + {row.amountAsset} {strings.assets} @@ -297,11 +270,31 @@ const TransactionHistoryItem = ({ index, row, theme, strings }) => { setIsExpanded(!isExpanded)} + onClick={() => + unitOfAccount === 'ADA' && + (row.type === HistoryItemType.ERROR || + row.type === HistoryItemType.WITHDRAW || + row.type === HistoryItemType.DELEGATE) + ? null + : setIsExpanded(!isExpanded) + } /> diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js index 12866b5a85..6452693423 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js @@ -15,19 +15,19 @@ import { useStrings } from '../../common/hooks/useStrings'; const PortfolioWallet = ({ data }) => { const theme = useTheme(); const strings = useStrings(); - const { unitOfAccount, changeUnitOfAccount } = usePortfolio(); + const { unitOfAccount, changeUnitOfAccount, settingFiatPairUnit } = usePortfolio(); const [keyword, setKeyword] = useState(''); const [isLoading, setIsLoading] = useState(); const [tokenList, setTokenList] = useState([]); - const [isUsdMainUnit, setIsUsdMainUnit] = useState(unitOfAccount === 'USD'); + const [isAdaMainUnit, setIsAdaMainUnit] = useState(unitOfAccount === 'ADA'); const handleCurrencyChange = () => { - if (isUsdMainUnit) { - changeUnitOfAccount('ADA'); - setIsUsdMainUnit(false); + if (isAdaMainUnit) { + changeUnitOfAccount(settingFiatPairUnit.currency || 'USD'); + setIsAdaMainUnit(false); } else { - changeUnitOfAccount('USD'); - setIsUsdMainUnit(true); + changeUnitOfAccount('ADA'); + setIsAdaMainUnit(true); } }; @@ -69,11 +69,11 @@ const PortfolioWallet = ({ data }) => { ) : ( - {isUsdMainUnit ? mockData.common.walletBalance.ada : mockData.common.walletBalance.usd} + {isAdaMainUnit ? mockData.common.walletBalance.ada : mockData.common.walletBalance.usd} )} - {isUsdMainUnit ? 'ADA' : 'USD'} + {isAdaMainUnit ? settingFiatPairUnit.currency || 'USD' : 'ADA'} { color: theme.palette.ds.text_gray_low, }} > - {isUsdMainUnit ? '/USD' : '/ADA'} + {isAdaMainUnit ? '/ADA' : `/${unitOfAccount}`} @@ -95,7 +95,8 @@ const PortfolioWallet = ({ data }) => { ) : ( - {isUsdMainUnit ? mockData.common.walletBalance.usd : mockData.common.walletBalance.ada} {isUsdMainUnit ? 'USD' : 'ADA'} + {isAdaMainUnit ? mockData.common.walletBalance.usd : mockData.common.walletBalance.ada}{' '} + {isAdaMainUnit ? 'ADA' : unitOfAccount} )} {isLoading ? ( diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js index 8f0c744b11..d207808631 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js @@ -12,7 +12,7 @@ type Props = {| const PortfolioPage = ({ stores, actions }: Props) => { return ( - + ); }; From 6e803e93e5cb04b934c4a8f2b4a6971d557e3de9 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Fri, 31 May 2024 14:05:26 +0300 Subject: [PATCH 059/464] add strings --- .../TransactionFailed/TransactionFailed.js | 10 ++- .../TransactionSubmitted.js | 8 ++- .../common/useGovernanceManagerMaker.js | 1 + .../features/governace/common/useStrings.js | 69 +++++++++++++++++++ .../module/GovernanceContextProvider.js | 3 +- .../useCases/DelagationForm/DelagationForm.js | 24 ++++--- .../GovernanceStatusSelection.js | 25 +++---- .../app/i18n/global-messages.js | 20 ++++++ .../app/i18n/locales/en-US.json | 16 ++++- .../app/stores/stateless/sidebarCategories.js | 2 +- 10 files changed, 143 insertions(+), 35 deletions(-) diff --git a/packages/yoroi-extension/app/UI/components/TransactionFailed/TransactionFailed.js b/packages/yoroi-extension/app/UI/components/TransactionFailed/TransactionFailed.js index d42772f789..339bf042e1 100644 --- a/packages/yoroi-extension/app/UI/components/TransactionFailed/TransactionFailed.js +++ b/packages/yoroi-extension/app/UI/components/TransactionFailed/TransactionFailed.js @@ -1,18 +1,22 @@ import React from 'react'; import { Stack, Typography, Button } from '@mui/material'; import { FailedIlustration } from './FailedIlustration'; +import { FormattedMessage } from 'react-intl'; +import globalMessages from '../../../i18n/global-messages'; export const TransactionFailed = () => { return ( - Transaction failed + - Your transaction has not been processed properly due to technical issues + - + ); }; diff --git a/packages/yoroi-extension/app/UI/components/TransactionSubmitted/TransactionSubmitted.js b/packages/yoroi-extension/app/UI/components/TransactionSubmitted/TransactionSubmitted.js index c4518ba0fc..c1771156d4 100644 --- a/packages/yoroi-extension/app/UI/components/TransactionSubmitted/TransactionSubmitted.js +++ b/packages/yoroi-extension/app/UI/components/TransactionSubmitted/TransactionSubmitted.js @@ -3,6 +3,8 @@ import { Stack, Typography, Button } from '@mui/material'; import { SuccessIlustration } from './SuccessIlustration'; import { useHistory } from 'react-router-dom'; import { ROUTES } from '../../../routes-config'; +import { FormattedMessage } from 'react-intl'; +import globalMessages from '../../../i18n/global-messages'; export const TransactionSubmitted = () => { const history = useHistory(); @@ -10,10 +12,10 @@ export const TransactionSubmitted = () => { - Transaction submitted + - Check this transaction in the list of wallet transactions + ); diff --git a/packages/yoroi-extension/app/UI/features/governace/common/useGovernanceManagerMaker.js b/packages/yoroi-extension/app/UI/features/governace/common/useGovernanceManagerMaker.js index ade47d06cf..b40afa047b 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/useGovernanceManagerMaker.js +++ b/packages/yoroi-extension/app/UI/features/governace/common/useGovernanceManagerMaker.js @@ -4,6 +4,7 @@ import { governanceApiMaker, governanceManagerMaker, useStakingKeyState } from ' import { RustModule } from '../../../../api/ada/lib/cardanoCrypto/rustLoader'; export const useGovernanceManagerMaker = (walletId: string, networkId: string): any => { + console.log('networkId', networkId); // TODO - sancho testnet networkId id 450 - can't use it for now as the network is not working // TODO - add proper storage for manager return React.useMemo( diff --git a/packages/yoroi-extension/app/UI/features/governace/common/useStrings.js b/packages/yoroi-extension/app/UI/features/governace/common/useStrings.js index 3356797a4a..21a8a2efad 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/useStrings.js +++ b/packages/yoroi-extension/app/UI/features/governace/common/useStrings.js @@ -54,6 +54,64 @@ export const messages = Object.freeze( defaultMessage: '!!!You are designating someone else to cast your vote on your behalf for all proposals now and in the future.', }, + registerGovernance: { + id: 'gouvernace.registerGovernance', + defaultMessage: '!!!Register in Governance', + }, + chooseDrep: { + id: 'gouvernace.chooseDrep', + defaultMessage: '!!!Choose your Drep', + }, + reviewSelection: { + id: 'gouvernace.reviewSelection', + defaultMessage: '!!!Review the selections carefully to assign yourself a Governance Status', + }, + statusSelected: { + id: 'gouvernace.statusSelected', + defaultMessage: + '!!!You have selected ${status} as your governance status. You can change it at any time by clicking in the card bellow', + }, + designatedSomeone: { + id: 'gouvernace.designatedSomeone', + defaultMessage: + '!!! You are designating someone else to cast your vote on your behalf for all proposals now and in the future.', + }, + total: { + id: 'wallet.send.confirmationDialog.totalLabel', + defaultMessage: '!!!Total', + }, + transactionDetails: { + id: 'uri.verify.dialog.title', + defaultMessage: '!!!Transaction details', + }, + operations: { + id: 'gouvernace.operations', + defaultMessage: '!!!Operations', + }, + selectAbstein: { + id: 'gouvernace.selectAbstein', + defaultMessage: '!!!Select abstain', + }, + selectNoConfidenc: { + id: 'gouvernace.selectNoConfidenc', + defaultMessage: '!!!Select no confidenc', + }, + password: { + id: 'global.labels.password', + defaultMessage: '!!!Password', + }, + wrongPassword: { + id: 'global.labels.wrongPassword', + defaultMessage: '!!!Wrong Password', + }, + back: { + id: 'global.labels.back', + defaultMessage: '!!!back', + }, + confirm: { + id: 'global.labels.confirm', + defaultMessage: '!!!confirm', + }, }) ); @@ -72,5 +130,16 @@ export const useStrings = () => { learnMore: intl.formatMessage(messages.learnMore), becomeADrep: intl.formatMessage(messages.becomeADrep), drepId: intl.formatMessage(messages.drepId), + registerGovernance: intl.formatMessage(messages.registerGovernance), + reviewSelection: intl.formatMessage(messages.reviewSelection), + statusSelected: status => intl.formatMessage(messages.statusSelected, { status }), + chooseDrep: intl.formatMessage(messages.chooseDrep), + designatedSomeone: intl.formatMessage(messages.designatedSomeone), + transactionDetails: intl.formatMessage(messages.transactionDetails), + operations: intl.formatMessage(messages.operations), + selectAbstein: intl.formatMessage(messages.selectAbstein), + selectNoConfidenc: intl.formatMessage(messages.selectNoConfidenc), + back: intl.formatMessage(messages.back), + confirm: intl.formatMessage(messages.confirm), }).current; }; diff --git a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.js b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.js index 8aa671f3b4..ecd132bc7f 100644 --- a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.js +++ b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.js @@ -30,7 +30,6 @@ export const GovernanceContextProvider = ({ children, currentWallet }: Governanc const [state, dispatch] = React.useReducer(GovernanceReducer, { ...defaultGovernanceState, }); - console.log('[CONTEXT Current Wallet]', currentWallet); const { walletId, networkId, currentPool } = currentWallet; const governanceManager = useGovernanceManagerMaker(walletId, networkId); @@ -50,7 +49,7 @@ export const GovernanceContextProvider = ({ children, currentWallet }: Governanc ...state, ...actions, governanceManager: governanceManager, - stakePoolKeyHash: currentPool.hash ?? '', + stakePoolKeyHash: currentPool?.hash ?? '', walletId: currentWallet.walletId, }; diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.js b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.js index ef57a07311..28228890fa 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.js +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.js @@ -10,6 +10,7 @@ import { useNavigateTo } from '../../common/useNavigateTo'; import { PasswordInput } from '../../../../components'; import { useGovernance } from '../../module/GovernanceContextProvider'; import { useCreateAndSendDrepDelegationTransaction } from '../../api/useCreateAndSendDrepDelegationTransaction'; +import { useStrings } from '../../common/useStrings'; const Container = styled(Box)(({ theme }) => ({ paddingTop: '32px', @@ -47,6 +48,7 @@ export const DelagationForm = (): Node => { const [passwaord, setPassword] = React.useState(''); const navigateTo = useNavigateTo(); const { dRepId, governanceVote, walletId } = useGovernance(); + const strings = useStrings(); const confirmDelegation = () => { // TODO mock functionality @@ -63,14 +65,14 @@ export const DelagationForm = (): Node => { - Delegate to a DRep + {strings.delegateToDRep} - You are designating someone else to cast your vote on your behalf for all proposals now and in the future. + {strings.designatedSomeone} - Total + {strings.total} @@ -82,11 +84,11 @@ export const DelagationForm = (): Node => { - Transaction Details + {strings.transactionDetails} - Operations + {strings.operations} {governanceVote.kind === 'delegate' && ( <> @@ -98,30 +100,30 @@ export const DelagationForm = (): Node => { )} {governanceVote.kind === 'abstain' && ( <> - Select abstain + {strings.selectAbstein} )} {governanceVote.kind === 'no-confidence' && ( <> - Select no confidence + {strings.selectNoConfidenc} )} setPassword(event.target.value)} value={passwaord} error={!!idPasswordInvalid} - helperText={idPasswordInvalid ? 'Wrong password' : ' '} + helperText={idPasswordInvalid ? strings.wrongPassword : ' '} /> diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js index 478b9c7de1..ff868b9a40 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js @@ -58,16 +58,13 @@ export const GovernanceStatusSelection = (): Node => { useErrorBoundary: true, }); - const pageTitle = governanceVote === 'none' ? 'Register in Governance' : strings.governanceStatus; - const statusRawText = mapStatus[governanceVote]; - const pageSubtitle = - governanceVote === 'none' - ? 'Review the selections carefully to assign yourself a Governance Status' - : `You have selected ${statusRawText} as your governance status. You can change it at any time by clicking in the card bellow`; + const pageTitle = governanceVote === 'none' ? strings.registerGovernance : strings.governanceStatus; + const statusRawText = mapStatus[governanceVote?.kind]; + const pageSubtitle = governanceVote === 'none' ? strings.reviewSelection : strings.statusSelected(statusRawText); const openDRepIdModal = (onSubmit: (drepID: string) => void) => { openModal({ - title: 'Choose your Drep', + title: strings.chooseDrep, content: ( @@ -138,16 +135,16 @@ export const GovernanceStatusSelection = (): Node => { pending: pendingVote, }, { - title: 'Abstain', - description: 'You are choosing not to cast a vote on all proposals now and in the future.', + title: strings.abstain, + description: strings.abstainInfo, icon: , selected: governanceData?.kind === 'abstain', onClick: handleAbstain, pending: pendingVote, }, { - title: 'No Confidence', - description: 'You are expressing a lack of trust for all proposals now and in the future.', + title: strings.noConfidence, + description: strings.noConfidenceInfo, icon: , selected: governanceData?.kind === 'no-confidence', onClick: handleNoConfidence, @@ -186,16 +183,16 @@ export const GovernanceStatusSelection = (): Node => { {governanceData?.kind === 'delegate' && ( - `Drep ID: ${governanceData?.drepID}` + `${strings.drepId} ${governanceData?.drepID}` )} {governanceData?.kind === 'none' && ( - Want to became a Drep? + {strings.becomeADrep} )} - Learn more About Governance + {strings.learnMore} diff --git a/packages/yoroi-extension/app/i18n/global-messages.js b/packages/yoroi-extension/app/i18n/global-messages.js index f54520c7cf..f7a734c150 100644 --- a/packages/yoroi-extension/app/i18n/global-messages.js +++ b/packages/yoroi-extension/app/i18n/global-messages.js @@ -537,6 +537,26 @@ const globalMessages: * = defineMessages({ id: 'wallet.transaction.memo.invalid', defaultMessage: '!!!Memo must be at least 1 and at most {maxMemo} characters.', }, + transactionFailed: { + id: 'wallet.transaction.transactionFailed', + defaultMessage: '!!!Transaction failed', + }, + transactionFailedInfo: { + id: 'wallet.transaction.transactionFailedInfo', + defaultMessage: '!!!Your transaction has not been processed properly due to technical issues', + }, + tryAgain: { + id: 'wallet.transaction.tryAgain', + defaultMessage: '!!!Try Again', + }, + transactionSubmitted: { + id: 'wallet.transaction.transactionSubmitted', + defaultMessage: '!!!Transaction submitted', + }, + transactionSubmittedInfo: { + id: 'wallet.transaction.transactionSubmittedInfo', + defaultMessage: '!!!Check this transaction in the list of wallet transactions', + }, sendingIsDisabled: { id: 'wallet.send.form.sendingIsDisabled', defaultMessage: '!!!Unable to process. Please retry after the previous transaction has been completed.', diff --git a/packages/yoroi-extension/app/i18n/locales/en-US.json b/packages/yoroi-extension/app/i18n/locales/en-US.json index 6122db0529..579f97d241 100644 --- a/packages/yoroi-extension/app/i18n/locales/en-US.json +++ b/packages/yoroi-extension/app/i18n/locales/en-US.json @@ -165,6 +165,7 @@ "global.labels.stakepool": "Stakepool Name", "global.labels.stakingKeyHash": "Staking key hash", "global.labels.upgrade": "Upgrade", + "global.labels.wrongPassword": "Wrong password", "global.language.chinese.simplified": "简体中文", "global.language.chinese.traditional": "繁體中文", "global.language.czech": "Czech", @@ -932,6 +933,11 @@ "wallet.transaction.received": "{currency} received", "wallet.transaction.sent": "{currency} sent", "wallet.transaction.state.failed": "failed", + "wallet.transaction.transactionFailed": "Transaction failed", + "wallet.transaction.transactionFailedInfo": " Your transaction has not been processed properly due to technical issues", + "wallet.transaction.tryAgain": "Try again", + "wallet.transaction.transactionSubmitted": "Transaction submitted", + "wallet.transaction.transactionSubmittedInfo": "Check this transaction in the list of wallet transactions", "wallet.transaction.state.pending": "pending", "wallet.transaction.state.submitted": "submitted", "wallet.transaction.success.button.label": "Go To Transactions", @@ -1035,7 +1041,15 @@ "gouvernace.learnMore":"Learn more About Governance", "gouvernace.becomeADrep":"Want to became a Drep?", "gouvernace.drepId":"Drep ID:", + "gouvernace.statusSelected":"You have selected {status} as your governance status. You can change it at any time by clicking in the card bellow", + "gouvernace.registerGovernance":"Register in Governance", + "gouvernace.chooseDrep":"chooseDrep", + "gouvernace.reviewSelection":"Review the selections carefully to assign yourself a Governance Status", "gouvernace.participateDialog.title":"Withdraw warning", "gouvernace.participateDialog.contentInfo":"To withdraw your rewards, you need to participate in the Cardano Governance. Your rewards will continue to accumulate, but you are only able to withdraw it once you join the Governance process.", - "gouvernace.participateDialog.buttonText":"Participate on governance" + "gouvernace.participateDialog.buttonText":"Participate on governance", + "gouvernace.operations":"Operations", + "gouvernace.selectAbstein":"Select abstain", + "gouvernace.selectNoConfidenc":"Select no confidence", + "gouvernace.designatedSomeone":"You are designating someone else to cast your vote on your behalf for all proposals now and in the future." } diff --git a/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js b/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js index 9d9fb51255..1c8d6b7b40 100644 --- a/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js +++ b/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js @@ -173,7 +173,7 @@ export const allCategoriesRevamp: Array = [ route: '/governance', icon: governanceIcon, label: globalMessages.sidebarGovernance, - isVisible: _request => true, + isVisible: ({ selected }) => environment.isDev() && selected?.getParent().getNetworkInfo().NetworkId === 450, }, { className: 'settings', From 01bbc956c2c9ee851f0e30e69c7a6cb59b6b739c Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Fri, 31 May 2024 14:12:14 +0300 Subject: [PATCH 060/464] remobve unused code --- .../app/UI/components/modals/ModalContext.js | 9 +--- .../app/UI/layout/GeneralPageLayout.js | 53 ------------------- .../app/UI/pages/Governance/layout.js | 4 +- 3 files changed, 3 insertions(+), 63 deletions(-) diff --git a/packages/yoroi-extension/app/UI/components/modals/ModalContext.js b/packages/yoroi-extension/app/UI/components/modals/ModalContext.js index a2d1cb917e..3288beead6 100644 --- a/packages/yoroi-extension/app/UI/components/modals/ModalContext.js +++ b/packages/yoroi-extension/app/UI/components/modals/ModalContext.js @@ -33,20 +33,13 @@ export const useModal = (): any => { return value; }; -export const ModalProvider = ({ - children, - initialState, -}: {| - children: Node, - initialState?: ModalState, -|}): Node => { +export const ModalProvider = ({ children, initialState }: {| children: Node, initialState?: ModalState |}): Node => { const [state, dispatch] = React.useReducer(modalReducer, { ...defaultState, ...initialState }); const onCloseRef = React.useRef(); const actions = React.useRef({ closeModal: () => { dispatch({ type: 'close' }); }, - // openModal: (title: string, content: Node, height?: string, onClose?: () => void) => { openModal: payload => { dispatch({ type: 'open', diff --git a/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js b/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js index 12592d0ab8..eef30e05a6 100644 --- a/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js +++ b/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js @@ -7,13 +7,10 @@ import { intlShape, injectIntl } from 'react-intl'; import TopBarLayout from '../../components/layout/TopBarLayout'; import BannerContainer from '../../containers/banners/BannerContainer'; import SidebarContainer from '../../containers/SidebarContainer'; -import { Box, Typography } from '@mui/material'; import { withLayout } from '../../styles/context/layout'; import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; -import globalMessages from '../../i18n/global-messages'; import { ModalProvider } from '../components/modals/ModalContext'; import { ModalManager } from '../components/modals/ModalManager'; -import { PublicDeriver } from '../../api/ada/lib/storage/models/PublicDeriver/index'; import { IntlProvider } from '../context/IntlProvider'; type Props = {| @@ -46,61 +43,11 @@ class GeneralPageLayout extends Component { intl: intlShape.isRequired, }; - getStakePoolMeta: () => any = () => { - const publicDeriver = this.props.stores.wallets.selected; - const delegationStore = this.props.stores.delegation; - const currentPool = delegationStore.getDelegatedPoolId(publicDeriver); - if (currentPool == null) return null; - const networkInfo = publicDeriver.getParent().getNetworkInfo(); - const poolMeta = delegationStore.getLocalPoolInfo(networkInfo, currentPool); - const poolInfo = delegationStore.getLocalRemotePoolInfo(networkInfo, currentPool) ?? {}; - if (poolMeta == null) { - // server hasn't returned information about the stake pool yet - return null; - } - const { intl } = this.context; - const name = poolMeta.info?.name ?? intl.formatMessage(globalMessages.unknownPoolLabel); - const delegatedPool = { - id: String(currentPool), - name, - websiteUrl: poolMeta.info?.homepage, - ticker: poolMeta.info?.ticker, - ...poolInfo, - }; - - return { - ...delegatedPool, - ...poolMeta, - }; - }; - - createCurrrentWalletInfo: () => any = () => { - const { wallets, delegation, substores } = this.props.stores; - const walletCurrentPoolInfo = this.getStakePoolMeta(); - - const selectedWallet = wallets.selected; - if (selectedWallet == null) { - throw new Error(`no selected Wallet. Should never happen`); - } - - const currentWalletId = selectedWallet.getPublicDeriverId(); - const networkInfo = selectedWallet.getParent().getNetworkInfo(); - const networkId = networkInfo.NetworkId; - - return { - currentPool: walletCurrentPoolInfo, - networkId, - walletId: currentWalletId, - }; - }; - render() { const { children, actions, navbar, stores } = this.props; const sidebarContainer = ; const { intl } = this.context; - const currentWalletInfo = this.createCurrrentWalletInfo(); - return ( diff --git a/packages/yoroi-extension/app/UI/pages/Governance/layout.js b/packages/yoroi-extension/app/UI/pages/Governance/layout.js index 459400c1b1..0bf75e11da 100644 --- a/packages/yoroi-extension/app/UI/pages/Governance/layout.js +++ b/packages/yoroi-extension/app/UI/pages/Governance/layout.js @@ -5,7 +5,7 @@ import NavBarContainerRevamp from '../../../containers/NavBarContainerRevamp'; import NavBar from '../../../components/topbar/NavBar'; import NavBarTitle from '../../../components/topbar/NavBarTitle'; import { TransactionSubmitted } from '../../components/TransactionSubmitted/TransactionSubmitted'; -import { GovernanceProvider } from '@yoroi/staking'; +import { GovernanceProvider as GovernanceExternalPackageProvider } from '@yoroi/staking'; import { useGovernance } from '../../features/governace/module/GovernanceContextProvider'; type Props = {| @@ -23,7 +23,7 @@ const GovernanceLayout = ({ stores, actions, children }: Props): any => { actions={actions} navbar={} />} > - {children} + {children} ); }; From 92d91494343d031738d9ff5e09dfcf00863890ec Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Mon, 3 Jun 2024 10:00:58 +0700 Subject: [PATCH 061/464] fix sort tables and styles UI --- .../portfolio/common/PortfolioMenu.js | 64 --- .../portfolio/common/hooks/useStrings.js | 5 - .../UI/features/portfolio/common/mockData.js | 502 +++++++++--------- .../portfolio/common/useNavigateTo.js | 13 - .../features/portfolio/common/useStrings.js | 212 -------- .../useCases/Dapps/LiquidityTable.js | 51 +- .../portfolio/useCases/Dapps/OrderTable.js | 24 +- .../useCases/Dapps/PortfolioDapps.js | 35 +- .../useCases/TokenDetails/TokenDetailChart.js | 8 +- .../app/UI/pages/portfolio/mockData.js | 269 ---------- .../app/i18n/locales/en-US.json | 1 - 11 files changed, 299 insertions(+), 885 deletions(-) delete mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/PortfolioMenu.js delete mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/useNavigateTo.js delete mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/useStrings.js delete mode 100644 packages/yoroi-extension/app/UI/pages/portfolio/mockData.js diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/PortfolioMenu.js b/packages/yoroi-extension/app/UI/features/portfolio/common/PortfolioMenu.js deleted file mode 100644 index 1836498898..0000000000 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/PortfolioMenu.js +++ /dev/null @@ -1,64 +0,0 @@ -// @flow -import { Component } from 'react'; -import type { Node, ComponentType } from 'react'; -import { observer } from 'mobx-react'; -import { defineMessages, intlShape } from 'react-intl'; -import environmnent from '../../../../environment'; -import { ROUTES } from '../../../../routes-config'; -import globalMessages from '../../../../i18n/global-messages'; -import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; -import { withLayout } from '../../../../styles/context/layout'; -import type { InjectedLayoutProps } from '../../styles/context/layout'; -import type { SubMenuOption } from '../topbar/SubMenu'; -import SubMenu from '../../../../components/topbar/SubMenu'; - -export const portfolioMenuMessages: Object = defineMessages({ - wallet: { - id: 'portfolio.menu.wallet.link.label', - defaultMessage: '!!!Wallet', - }, - dapps: { - id: 'portfolio.menu.dapps.link.label', - defaultMessage: '!!!Dapps', - }, -}); - -type Props = {| - +isActiveItem: string => boolean, - +onItemClick: string => void, -|}; -@observer -class PortfolioMenu extends Component { - static contextTypes: {| intl: $npm$ReactIntl$IntlFormat |} = { - intl: intlShape.isRequired, - }; - - render(): Node { - const { intl } = this.context; - const { onItemClick, isActiveItem, isRevampLayout } = this.props; - const isProduction = environmnent.isProduction(); - const portfolioOptions: Array = [ - { - label: `${intl.formatMessage(portfolioMenuMessages.wallet)} (6)`, - route: ROUTES.PORTFOLIO.ROOT, - className: 'wallet', - }, - { - label: `${intl.formatMessage(portfolioMenuMessages.dapps)} (10)`, - route: ROUTES.PORTFOLIO.DAPPS, - className: 'dapps', - }, - ]; - - return ( - - ); - } -} - -export default (withLayout(PortfolioMenu): ComponentType); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js index e67e4ce578..e131470495 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js @@ -261,10 +261,6 @@ export const messages = Object.freeze( id: 'portfolio.liquidityTable.header.secondTokenValue', defaultMessage: '!!!Token value 2', }, - pnl: { - id: 'portfolio.liquidityTable.header.pnl', - defaultMessage: '!!!PNL', - }, lpTokens: { id: 'portfolio.liquidityTable.header.lpTokens', defaultMessage: '!!!LP tokens', @@ -354,7 +350,6 @@ export const useStrings = () => { dex: intl.formatMessage(messages.dex), firstTokenValue: intl.formatMessage(messages.firstTokenValue), secondTokenValue: intl.formatMessage(messages.secondTokenValue), - pnl: intl.formatMessage(messages.pnl), lpTokens: intl.formatMessage(messages.lpTokens), totalValue: intl.formatMessage(messages.totalValue), pair: intl.formatMessage(messages.pair), diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js b/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js index ed2ebc419a..2807ae4ca4 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js @@ -2,9 +2,7 @@ import { HistoryItemStatus, HistoryItemType } from '../useCases/TokenDetails/Tra // UTILS const getRandomTime = (startDate, endDate) => { - const date = new Date( - startDate.getTime() + Math.random() * (endDate.getTime() - startDate.getTime()) - ); + const date = new Date(startDate.getTime() + Math.random() * (endDate.getTime() - startDate.getTime())); return date.toISOString(); }; const startDate = new Date('01-01-2023 8:30'); @@ -48,8 +46,7 @@ const mockData = { "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", website: 'https://www.cardano.org', detailOn: 'https://www.yoroiwallet.com', - policyId: - 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + policyId: 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', fingerprint: 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', }, @@ -68,8 +65,8 @@ const mockData = { chartData: [ { time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start24HoursAgo, now), @@ -78,13 +75,13 @@ const mockData = { }, { time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1WeekAgo, now), @@ -98,13 +95,13 @@ const mockData = { }, { time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1WeekAgo, now), @@ -113,8 +110,8 @@ const mockData = { }, { time: getRandomTime(start1MonthAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1MonthAgo, now), @@ -123,8 +120,8 @@ const mockData = { }, { time: getRandomTime(start1MonthAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -143,8 +140,8 @@ const mockData = { }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -153,8 +150,8 @@ const mockData = { }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -163,18 +160,18 @@ const mockData = { }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -208,8 +205,7 @@ const mockData = { "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", website: 'https://www.cardano.org', detailOn: 'https://www.yoroiwallet.com', - policyId: - 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + policyId: 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', fingerprint: 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', }, @@ -228,8 +224,8 @@ const mockData = { chartData: [ { time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start24HoursAgo, now), @@ -238,13 +234,13 @@ const mockData = { }, { time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1WeekAgo, now), @@ -258,13 +254,13 @@ const mockData = { }, { time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1WeekAgo, now), @@ -273,8 +269,8 @@ const mockData = { }, { time: getRandomTime(start1MonthAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1MonthAgo, now), @@ -283,8 +279,8 @@ const mockData = { }, { time: getRandomTime(start1MonthAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -303,8 +299,8 @@ const mockData = { }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -313,8 +309,8 @@ const mockData = { }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -323,18 +319,18 @@ const mockData = { }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -368,8 +364,7 @@ const mockData = { "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", website: 'https://www.cardano.org', detailOn: 'https://www.yoroiwallet.com', - policyId: - 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + policyId: 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', fingerprint: 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', }, @@ -388,8 +383,8 @@ const mockData = { chartData: [ { time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start24HoursAgo, now), @@ -398,13 +393,13 @@ const mockData = { }, { time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1WeekAgo, now), @@ -418,13 +413,13 @@ const mockData = { }, { time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1WeekAgo, now), @@ -433,8 +428,8 @@ const mockData = { }, { time: getRandomTime(start1MonthAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1MonthAgo, now), @@ -443,8 +438,8 @@ const mockData = { }, { time: getRandomTime(start1MonthAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -463,8 +458,8 @@ const mockData = { }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -473,8 +468,8 @@ const mockData = { }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -483,18 +478,18 @@ const mockData = { }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -528,8 +523,7 @@ const mockData = { "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", website: 'https://www.cardano.org', detailOn: 'https://www.yoroiwallet.com', - policyId: - 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + policyId: 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', fingerprint: 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', }, @@ -548,8 +542,8 @@ const mockData = { chartData: [ { time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start24HoursAgo, now), @@ -558,13 +552,13 @@ const mockData = { }, { time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1WeekAgo, now), @@ -578,13 +572,13 @@ const mockData = { }, { time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1WeekAgo, now), @@ -593,8 +587,8 @@ const mockData = { }, { time: getRandomTime(start1MonthAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1MonthAgo, now), @@ -603,8 +597,8 @@ const mockData = { }, { time: getRandomTime(start1MonthAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -623,8 +617,8 @@ const mockData = { }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -633,8 +627,8 @@ const mockData = { }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -643,18 +637,18 @@ const mockData = { }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -688,8 +682,7 @@ const mockData = { "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", website: 'https://www.cardano.org', detailOn: 'https://www.yoroiwallet.com', - policyId: - 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + policyId: 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', fingerprint: 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', }, @@ -708,8 +701,8 @@ const mockData = { chartData: [ { time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start24HoursAgo, now), @@ -718,13 +711,13 @@ const mockData = { }, { time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1WeekAgo, now), @@ -738,13 +731,13 @@ const mockData = { }, { time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1WeekAgo, now), @@ -753,8 +746,8 @@ const mockData = { }, { time: getRandomTime(start1MonthAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1MonthAgo, now), @@ -763,8 +756,8 @@ const mockData = { }, { time: getRandomTime(start1MonthAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -783,8 +776,8 @@ const mockData = { }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -793,8 +786,8 @@ const mockData = { }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -803,18 +796,18 @@ const mockData = { }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -848,8 +841,7 @@ const mockData = { "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", website: 'https://www.cardano.org', detailOn: 'https://www.yoroiwallet.com', - policyId: - 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + policyId: 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', fingerprint: 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', }, @@ -868,8 +860,8 @@ const mockData = { chartData: [ { time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start24HoursAgo, now), @@ -878,13 +870,13 @@ const mockData = { }, { time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1WeekAgo, now), @@ -898,13 +890,13 @@ const mockData = { }, { time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1WeekAgo, now), @@ -913,8 +905,8 @@ const mockData = { }, { time: getRandomTime(start1MonthAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1MonthAgo, now), @@ -923,8 +915,8 @@ const mockData = { }, { time: getRandomTime(start1MonthAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -943,8 +935,8 @@ const mockData = { }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -953,8 +945,8 @@ const mockData = { }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -963,18 +955,18 @@ const mockData = { }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -1008,8 +1000,7 @@ const mockData = { "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", website: 'https://www.cardano.org', detailOn: 'https://www.yoroiwallet.com', - policyId: - 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + policyId: 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', fingerprint: 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', }, @@ -1028,8 +1019,8 @@ const mockData = { chartData: [ { time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start24HoursAgo, now), @@ -1038,13 +1029,13 @@ const mockData = { }, { time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1WeekAgo, now), @@ -1058,13 +1049,13 @@ const mockData = { }, { time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1WeekAgo, now), @@ -1073,8 +1064,8 @@ const mockData = { }, { time: getRandomTime(start1MonthAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1MonthAgo, now), @@ -1083,8 +1074,8 @@ const mockData = { }, { time: getRandomTime(start1MonthAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -1103,8 +1094,8 @@ const mockData = { }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -1113,8 +1104,8 @@ const mockData = { }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -1123,18 +1114,18 @@ const mockData = { }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -1168,8 +1159,7 @@ const mockData = { "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", website: 'https://www.cardano.org', detailOn: 'https://www.yoroiwallet.com', - policyId: - 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + policyId: 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', fingerprint: 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', }, @@ -1188,8 +1178,8 @@ const mockData = { chartData: [ { time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start24HoursAgo, now), @@ -1198,13 +1188,13 @@ const mockData = { }, { time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1WeekAgo, now), @@ -1218,13 +1208,13 @@ const mockData = { }, { time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1WeekAgo, now), @@ -1233,8 +1223,8 @@ const mockData = { }, { time: getRandomTime(start1MonthAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1MonthAgo, now), @@ -1243,8 +1233,8 @@ const mockData = { }, { time: getRandomTime(start1MonthAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -1263,8 +1253,8 @@ const mockData = { }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -1273,8 +1263,8 @@ const mockData = { }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -1283,18 +1273,18 @@ const mockData = { }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -1328,8 +1318,7 @@ const mockData = { "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", website: 'https://www.cardano.org', detailOn: 'https://www.yoroiwallet.com', - policyId: - 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + policyId: 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', fingerprint: 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', }, @@ -1348,8 +1337,8 @@ const mockData = { chartData: [ { time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start24HoursAgo, now), @@ -1358,13 +1347,13 @@ const mockData = { }, { time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1WeekAgo, now), @@ -1378,13 +1367,13 @@ const mockData = { }, { time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1WeekAgo, now), @@ -1393,8 +1382,8 @@ const mockData = { }, { time: getRandomTime(start1MonthAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(start1MonthAgo, now), @@ -1403,8 +1392,8 @@ const mockData = { }, { time: getRandomTime(start1MonthAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -1423,8 +1412,8 @@ const mockData = { }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -1433,8 +1422,8 @@ const mockData = { }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -1443,18 +1432,18 @@ const mockData = { }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, + value: -Math.random().toFixed(3), + usd: -Math.random().toFixed(3) * 1000, }, { time: getRandomTime(startDate, endDate), @@ -1488,8 +1477,7 @@ const mockData = { "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", website: 'https://www.cardano.org', detailOn: 'https://www.yoroiwallet.com', - policyId: - 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + policyId: 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', fingerprint: 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', }, @@ -1717,6 +1705,7 @@ const mockData = { id: Math.random(), tokenPair: 'ADA/LVLC', DEX: 'Minswap', + DEXLink: 'https://app.minswap.org/', firstToken: { name: 'ADA', id: 'ada', @@ -1725,8 +1714,6 @@ const mockData = { name: 'LVLC', id: 'lvlc', }, - PNLValue: (Math.random() * 10).toFixed(2), - PNLValueUsd: -(Math.random() * 10).toFixed(2), lpTokens: (Math.random() * 1000000).toFixed(2), totalValue: (Math.random() * 1000).toFixed(2), totalValueUsd: (Math.random() * 100).toFixed(2), @@ -1739,6 +1726,7 @@ const mockData = { id: Math.random(), tokenPair: 'DOGE/Shiba', DEX: 'Sundaeswap', + DEXLink: 'https://v2.sundaeswap.finance/', firstToken: { name: 'DOGE', id: 'doge', @@ -1747,8 +1735,6 @@ const mockData = { name: 'Shiba', id: 'shiba', }, - PNLValue: (Math.random() * 10).toFixed(2), - PNLValueUsd: (Math.random() * 10).toFixed(2), lpTokens: (Math.random() * 1000000).toFixed(2), totalValue: (Math.random() * 1000).toFixed(2), totalValueUsd: (Math.random() * 100).toFixed(2), @@ -1761,6 +1747,7 @@ const mockData = { id: Math.random(), tokenPair: 'DBZ/ADA', DEX: 'Sundaeswap', + DEXLink: 'https://v2.sundaeswap.finance/', firstToken: { name: 'DBZ', id: 'dbz', @@ -1769,8 +1756,6 @@ const mockData = { name: 'ADA', id: 'ada', }, - PNLValue: (Math.random() * 10).toFixed(2), - PNLValueUsd: (Math.random() * 10).toFixed(2), lpTokens: (Math.random() * 1000000).toFixed(2), totalValue: (Math.random() * 1000).toFixed(2), totalValueUsd: (Math.random() * 100).toFixed(2), @@ -1783,6 +1768,7 @@ const mockData = { id: Math.random(), tokenPair: 'ADA/BRICKS', DEX: 'Minswap', + DEXLink: 'https://app.minswap.org/', firstToken: { name: 'ADA', id: 'ada', @@ -1791,8 +1777,6 @@ const mockData = { name: 'BRICKS', id: 'bricks', }, - PNLValue: (Math.random() * 10).toFixed(2), - PNLValueUsd: -(Math.random() * 10).toFixed(2), lpTokens: (Math.random() * 1000000).toFixed(2), totalValue: (Math.random() * 1000).toFixed(2), totalValueUsd: (Math.random() * 100).toFixed(2), @@ -1805,6 +1789,7 @@ const mockData = { id: Math.random(), tokenPair: 'ADA/POPPA', DEX: 'Sundaeswap', + DEXLink: 'https://v2.sundaeswap.finance/', firstToken: { name: 'ADA', id: 'ada', @@ -1813,8 +1798,6 @@ const mockData = { name: 'POPPA', id: 'poppa', }, - PNLValue: (Math.random() * 10).toFixed(2), - PNLValueUsd: -(Math.random() * 10).toFixed(2), lpTokens: (Math.random() * 1000000).toFixed(2), totalValue: (Math.random() * 1000).toFixed(2), totalValueUsd: (Math.random() * 100).toFixed(2), @@ -1827,6 +1810,7 @@ const mockData = { id: Math.random(), tokenPair: 'CUBY/VALDO', DEX: 'Sundaeswap', + DEXLink: 'https://v2.sundaeswap.finance/', firstToken: { name: 'CUBY', id: 'cuby', @@ -1835,8 +1819,6 @@ const mockData = { name: 'VALDO', id: 'valdo', }, - PNLValue: (Math.random() * 10).toFixed(2), - PNLValueUsd: (Math.random() * 10).toFixed(2), lpTokens: (Math.random() * 1000000).toFixed(2), totalValue: (Math.random() * 1000).toFixed(2), totalValueUsd: (Math.random() * 100).toFixed(2), @@ -1849,6 +1831,7 @@ const mockData = { id: Math.random(), tokenPair: 'SNEK/USDTST', DEX: 'Minswap', + DEXLink: 'https://app.minswap.org/', firstToken: { name: 'SNEK', id: 'snek', @@ -1857,8 +1840,6 @@ const mockData = { name: 'USDTST', id: 'usdtst', }, - PNLValue: (Math.random() * 10).toFixed(2), - PNLValueUsd: (Math.random() * 10).toFixed(2), lpTokens: (Math.random() * 1000000).toFixed(2), totalValue: (Math.random() * 1000).toFixed(2), totalValueUsd: (Math.random() * 100).toFixed(2), @@ -1871,6 +1852,7 @@ const mockData = { id: Math.random(), tokenPair: 'GERO/NMKR', DEX: 'Minswap', + DEXLink: 'https://app.minswap.org/', firstToken: { name: 'GERO', id: 'gero', @@ -1879,8 +1861,6 @@ const mockData = { name: 'NMKR', id: 'nmkr', }, - PNLValue: (Math.random() * 10).toFixed(2), - PNLValueUsd: -(Math.random() * 10).toFixed(2), lpTokens: (Math.random() * 1000000).toFixed(2), totalValue: (Math.random() * 1000).toFixed(2), totalValueUsd: (Math.random() * 100).toFixed(2), @@ -1893,6 +1873,7 @@ const mockData = { id: Math.random(), tokenPair: 'SMOKES/CPASS', DEX: 'Minswap', + DEXLink: 'https://app.minswap.org/', firstToken: { name: 'SMOKES', id: 'smokes', @@ -1901,8 +1882,6 @@ const mockData = { name: 'CPASS', id: 'cpass', }, - PNLValue: (Math.random() * 10).toFixed(2), - PNLValueUsd: (Math.random() * 10).toFixed(2), lpTokens: (Math.random() * 1000000).toFixed(2), totalValue: (Math.random() * 1000).toFixed(2), totalValueUsd: (Math.random() * 100).toFixed(2), @@ -1925,6 +1904,7 @@ const mockData = { id: 'lvlc', }, DEX: 'Minswap', + DEXLink: 'https://app.minswap.org/', assetPrice: Math.round(Math.random() * 10), assetAmount: Math.round(Math.random() * 10), transactionId: '043a2bfbb1d66d9883a068059a4e35bb53b7bdc6f5637d7b934150c453ffb116', @@ -1943,6 +1923,7 @@ const mockData = { id: 'lvlc', }, DEX: 'Sundaeswap', + DEXLink: 'https://v2.sundaeswap.finance/', assetPrice: Math.round(Math.random() * 10), assetAmount: Math.round(Math.random() * 10), transactionId: 'a0a863e8eb398c04caebdbd3a3e50733bcb6c06e118c36eadb7f7b53424668a5', @@ -1961,6 +1942,7 @@ const mockData = { id: 'wtab', }, DEX: 'Minswap', + DEXLink: 'https://app.minswap.org/', assetPrice: Math.round(Math.random() * 10), assetAmount: Math.round(Math.random() * 10), transactionId: '043a2bfbb1d66d9883a068059a4e35bb53b7bdc6f5637d7b934150c453ffb116', @@ -1979,6 +1961,7 @@ const mockData = { id: 'smokes', }, DEX: 'Sundaeswap', + DEXLink: 'https://v2.sundaeswap.finance/', assetPrice: Math.round(Math.random() * 10), assetAmount: Math.round(Math.random() * 10), transactionId: 'a0a863e8eb398c04caebdbd3a3e50733bcb6c06e118c36eadb7f7b53424668a5', @@ -1997,6 +1980,7 @@ const mockData = { id: 'hosky', }, DEX: 'Minswap', + DEXLink: 'https://app.minswap.org/', assetPrice: Math.round(Math.random() * 10), assetAmount: Math.round(Math.random() * 10), transactionId: '043a2bfbb1d66d9883a068059a4e35bb53b7bdc6f5637d7b934150c453ffb116', @@ -2015,6 +1999,7 @@ const mockData = { id: 'drip', }, DEX: 'Sundaeswap', + DEXLink: 'https://v2.sundaeswap.finance/', assetPrice: Math.round(Math.random() * 10), assetAmount: Math.round(Math.random() * 10), transactionId: 'a0a863e8eb398c04caebdbd3a3e50733bcb6c06e118c36eadb7f7b53424668a5', @@ -2033,6 +2018,7 @@ const mockData = { id: 'catsky', }, DEX: 'Minswap', + DEXLink: 'https://app.minswap.org/', assetPrice: Math.round(Math.random() * 10), assetAmount: Math.round(Math.random() * 10), transactionId: '043a2bfbb1d66d9883a068059a4e35bb53b7bdc6f5637d7b934150c453ffb116', @@ -2051,6 +2037,7 @@ const mockData = { id: 'usdc', }, DEX: 'Minswap', + DEXLink: 'https://app.minswap.org/', assetPrice: Math.round(Math.random() * 10), assetAmount: Math.round(Math.random() * 10), transactionId: 'a0a863e8eb398c04caebdbd3a3e50733bcb6c06e118c36eadb7f7b53424668a5', @@ -2069,6 +2056,7 @@ const mockData = { id: 'copi', }, DEX: 'Sundaeswap', + DEXLink: 'https://v2.sundaeswap.finance/', assetPrice: Math.round(Math.random() * 10), assetAmount: Math.round(Math.random() * 10), transactionId: 'a0a863e8eb398c04caebdbd3a3e50733bcb6c06e118c36eadb7f7b53424668a5', diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/useNavigateTo.js b/packages/yoroi-extension/app/UI/features/portfolio/common/useNavigateTo.js deleted file mode 100644 index e364deab49..0000000000 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/useNavigateTo.js +++ /dev/null @@ -1,13 +0,0 @@ -import { useHistory } from 'react-router-dom'; -import React, { useRef } from 'react'; -import { ROUTES } from '../../../../routes-config'; - -export const useNavigateTo = () => { - const history = useHistory(); - - return React.useRef({ - portfolio: () => history.push(ROUTES.PORTFOLIO.ROOT), - portfolioDapps: () => history.push(ROUTES.PORTFOLIO.DAPPS), - portfolioDetail: tokenId => history.push(`${ROUTES.PORTFOLIO.ROOT}/details/${tokenId}`), - }).current; -}; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/useStrings.js b/packages/yoroi-extension/app/UI/features/portfolio/common/useStrings.js deleted file mode 100644 index 21994df250..0000000000 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/useStrings.js +++ /dev/null @@ -1,212 +0,0 @@ -import React from 'react'; -import { defineMessages } from 'react-intl'; - -export const messages = Object.freeze( - defineMessages({ - search: { - id: 'portfolio.main.search.text', - defaultMessage: '!!!Search by asset name or ID', - }, - balancePerformance: { - id: 'portfolio.tooltip.balancePerformance', - defaultMessage: '!!!Balance performance', - }, - balanceChange: { - id: 'portfolio.tooltip.balanceChange', - defaultMessage: '!!!Balance change', - }, - tokenPriceChange: { - id: 'portfolio.tooltip.tokenPriceChange', - defaultMessage: '!!!Token price change', - }, - in24hours: { - id: 'portfolio.tooltip.in24hours', - defaultMessage: '!!!in 24 hours', - }, - backToPortfolio: { - id: 'portfolio.button.backToPortfolio', - defaultMessage: '!!!Back to portfolio', - }, - swap: { - id: 'portfolio.button.swap', - defaultMessage: '!!!Swap', - }, - send: { - id: 'portfolio.button.send', - defaultMessage: '!!!Send', - }, - receive: { - id: 'portfolio.button.receive', - defaultMessage: '!!!Receive', - }, - balance: { - id: 'portfolio.tokenInfo.balance', - defaultMessage: '!!!balance', - }, - marketPrice: { - id: 'portfolio.tokenInfo.marketPrice', - defaultMessage: '!!!Market price', - }, - description: { - id: 'portfolio.tokenInfo.overview.description', - defaultMessage: '!!!Description', - }, - website: { - id: 'portfolio.tokenInfo.overview.website', - defaultMessage: '!!!Website', - }, - policyId: { - id: 'portfolio.tokenInfo.overview.policyId', - defaultMessage: '!!!Policy ID', - }, - fingerprint: { - id: 'portfolio.tokenInfo.overview.fingerprint', - defaultMessage: '!!!Fingerprint', - }, - detailsOn: { - id: 'portfolio.tokenInfo.overview.detailsOn', - defaultMessage: '!!!Details on', - }, - overview: { - id: 'portfolio.tokenInfo.menuLabel.overview', - defaultMessage: '!!!Overview', - }, - performance: { - id: 'portfolio.tokenInfo.menuLabel.performance', - defaultMessage: '!!!Performance', - }, - marketData: { - id: 'portfolio.tokenInfo.performance.marketData', - defaultMessage: '!!!Market data', - }, - tokenPrice: { - id: 'portfolio.tokenInfo.performance.tokenPrice', - defaultMessage: '!!!Token price', - }, - marketCap: { - id: 'portfolio.tokenInfo.performance.marketCap', - defaultMessage: '!!!Market cap', - }, - '24hVolumn': { - id: 'portfolio.tokenInfo.performance.24hVolumn', - defaultMessage: '!!!24h volumn', - }, - rank: { - id: 'portfolio.tokenInfo.performance.rank', - defaultMessage: '!!!Rank', - }, - circulating: { - id: 'portfolio.tokenInfo.performance.circulating', - defaultMessage: '!!!Circulating', - }, - totalSupply: { - id: 'portfolio.tokenInfo.performance.totalSupply', - defaultMessage: '!!!Total supply', - }, - maxSupply: { - id: 'portfolio.tokenInfo.performance.maxSupply', - defaultMessage: '!!!Max supply', - }, - allTimeHigh: { - id: 'portfolio.tokenInfo.performance.allTimeHigh', - defaultMessage: '!!!All time high', - }, - allTimeLow: { - id: 'portfolio.tokenInfo.performance.allTimeLow', - defaultMessage: '!!!All time low', - }, - name: { - id: 'portfolio.statsTable.headerText.name', - defaultMessage: '!!!Name', - }, - price: { - id: 'portfolio.statsTable.headerText.price', - defaultMessage: '!!!Price', - }, - portfolio: { - id: 'portfolio.statsTable.headerText.portfolio', - defaultMessage: '!!!Portfolio', - }, - totalAmount: { - id: 'portfolio.statsTable.headerText.totalAmount', - defaultMessage: '!!!Total amount', - }, - transactionHistory: { - id: 'portfolio.transactionTable.title', - defaultMessage: '!!!Transaction history', - }, - transactionType: { - id: 'portfolio.transactionTable.headerText.transactionType', - defaultMessage: '!!!Transaction type', - }, - status: { - id: 'portfolio.transactionTable.headerText.status', - defaultMessage: '!!!Status', - }, - fee: { - id: 'portfolio.transactionTable.headerText.fee', - defaultMessage: '!!!Fee', - }, - amount: { - id: 'portfolio.transactionTable.headerText.amount', - defaultMessage: '!!!Amount', - }, - today: { - id: 'portfolio.transactionTable.timestamp.today', - defaultMessage: '!!!Today', - }, - yesterday: { - id: 'portfolio.transactionTable.timestamp.yesterday', - defaultMessage: '!!!Amount', - }, - inthepast: { - id: 'portfolio.transactionTable.timestamp.inthepast', - defaultMessage: '!!!In the past', - }, - }) -); - -export const getStrings = intl => { - return React.useRef({ - search: intl.formatMessage(messages.search), - balancePerformance: intl.formatMessage(messages.balancePerformance), - balanceChange: intl.formatMessage(messages.balanceChange), - tokenPriceChange: intl.formatMessage(messages.tokenPriceChange), - in24hours: intl.formatMessage(messages.in24hours), - backToPortfolio: intl.formatMessage(messages.backToPortfolio), - swap: intl.formatMessage(messages.swap), - send: intl.formatMessage(messages.send), - receive: intl.formatMessage(messages.receive), - balance: intl.formatMessage(messages.balance), - marketPrice: intl.formatMessage(messages.marketPrice), - description: intl.formatMessage(messages.description), - website: intl.formatMessage(messages.website), - policyId: intl.formatMessage(messages.policyId), - fingerprint: intl.formatMessage(messages.fingerprint), - detailsOn: intl.formatMessage(messages.detailsOn), - overview: intl.formatMessage(messages.overview), - performance: intl.formatMessage(messages.performance), - marketData: intl.formatMessage(messages.marketData), - tokenPrice: intl.formatMessage(messages.tokenPrice), - marketCap: intl.formatMessage(messages.marketCap), - '24hVolumn': intl.formatMessage(messages['24hVolumn']), - rank: intl.formatMessage(messages.rank), - circulating: intl.formatMessage(messages.circulating), - totalSupply: intl.formatMessage(messages.totalSupply), - maxSupply: intl.formatMessage(messages.maxSupply), - allTimeHigh: intl.formatMessage(messages.allTimeHigh), - allTimeLow: intl.formatMessage(messages.allTimeLow), - name: intl.formatMessage(messages.name), - price: intl.formatMessage(messages.price), - portfolio: intl.formatMessage(messages.portfolio), - totalAmount: intl.formatMessage(messages.totalAmount), - transactionHistory: intl.formatMessage(messages.transactionHistory), - transactionType: intl.formatMessage(messages.transactionType), - status: intl.formatMessage(messages.status), - fee: intl.formatMessage(messages.fee), - amount: intl.formatMessage(messages.amount), - today: intl.formatMessage(messages.today), - yesterday: intl.formatMessage(messages.yesterday), - inthepast: intl.formatMessage(messages.inthepast), - }).current; -}; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js index b27884b68f..bfa6c88b90 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js @@ -10,6 +10,7 @@ import minswapPng from '../../common/assets/images/minswap-dex.png'; import { Chip } from '../../common/components/Chip'; import { Skeleton } from '../../../../components/Skeleton'; import { useStrings } from '../../common/hooks/useStrings'; +import illustrationPng from '../../common/assets/images/illustration.png'; const TableRowSkeleton = ({ id, theme }) => ( ( - - - - - - - @@ -85,7 +79,6 @@ const LiquidityTable = ({ data, isLoading }) => { { id: 'DEX', label: strings.dex, align: 'left', sortType: 'character' }, { id: 'firstTokenValue', label: strings.firstTokenValue, align: 'left', sortType: 'numeric' }, { id: 'secondTokenValue', label: strings.secondTokenValue, align: 'left', sortType: 'numeric' }, - { id: 'PNLValue', label: strings.pnl, align: 'left', sortType: 'numeric' }, { id: 'lpTokens', label: strings.lpTokens, @@ -148,7 +141,7 @@ const LiquidityTable = ({ data, isLoading }) => { [order, orderBy, headCells] ); - return ( + return getSortedData(list).length > 0 ? (
@@ -173,7 +166,7 @@ const LiquidityTable = ({ data, isLoading }) => { id={id} order={order} orderBy={orderBy} - style={{ cursor: 'pointer ' }} + style={{ cursor: 'pointer' }} onClick={() => (index === 0 || index === headCells.length - 1 ? null : handleRequestSort(id))} /> @@ -224,7 +217,17 @@ const LiquidityTable = ({ data, isLoading }) => { - + + chrome.tabs.create({ + url: row.DEXLink, + }) + } + sx={{ width: 'fit-content', cursor: 'pointer' }} + > { - - - - {row.PNLValue} {row.firstToken.name} - - 0} - label={ - - {row.PNLValueUsd > 0 && '+'} - {row.PNLValueUsd} {unitOfAccount} - - } - /> - - - {row.lpTokens} @@ -303,6 +289,15 @@ const LiquidityTable = ({ data, isLoading }) => { ))}
+ ) : ( + + + + + {strings.noResultsForThisSearch} + + + ); }; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js index 4890eb97fa..51676bebde 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js @@ -11,6 +11,7 @@ import { Chip } from '../../common/components/Chip'; import { Skeleton } from '../../../../components/Skeleton'; import { truncateAddressShort } from '../../../../../utils/formatters'; import { usePortfolio } from '../../module/PortfolioContextProvider'; +import illustrationPng from '../../common/assets/images/illustration.png'; const TableRowSkeleton = ({ id, theme }) => ( { [order, orderBy, headCells] ); - return ( + return getSortedData(list).length > 0 ? ( @@ -199,7 +200,17 @@ const OrderTable = ({ data, isLoading }) => { - + + chrome.tabs.create({ + url: row.DEXLink, + }) + } + sx={{ width: 'fit-content', cursor: 'pointer' }} + > { ))}
+ ) : ( + + + + + {strings.noResultsForThisSearch} + + + ); }; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js index cdbb3e0238..44596d7ddc 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js @@ -8,7 +8,6 @@ import { usePortfolio } from '../../module/PortfolioContextProvider'; import LiquidityTable from './LiquidityTable'; import mockData from '../../common/mockData'; import { ArrowIcon } from '../../common/assets/icons'; -import illustrationPng from '../../common/assets/images/illustration.png'; import { Chip } from '../../common/components/Chip'; import { Skeleton } from '../../../../components/Skeleton'; import OrderTable from './OrderTable'; @@ -147,7 +146,7 @@ const PortfolioDapps = ({ data }) => { ) : ( {isAdaMainUnit ? mockData.common.dappsBalance.usd : mockData.common.dappsBalance.ada}{' '} - {isAdaMainUnit ? 'USD' : unitOfAccount} + {isAdaMainUnit ? 'ADA' : unitOfAccount} )} {isLoading ? ( @@ -233,35 +232,9 @@ const PortfolioDapps = ({ data }) => { ))} - {buttonProps[0].active ? ( - liquidityList.length > 0 ? ( - - ) : ( - - - - - {strings.noResultsForThisSearch} - - - - ) - ) : null} - {buttonProps[1].active ? ( - orderList.length > 0 ? ( - - ) : ( - - - - - {strings.noResultsForThisSearch} - - - - ) - ) : null} - {buttonProps[2].active ? : null} + {buttonProps[0].active && } + {buttonProps[1].active && } + {buttonProps[2].active && }
); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js index 0914feb1de..5c5cb16058 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js @@ -197,7 +197,7 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { ) : ( - {detailInfo.value} + {detailInfo.usd}  {unitOfAccount} @@ -226,7 +226,9 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { transform: detailInfo.value > 0 ? '' : 'rotate(180deg)', }} /> - {detailInfo.value}% + + {detailInfo.value > 0 ? detailInfo.value : -1 * detailInfo.value}% + } /> @@ -239,7 +241,7 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { active={detailInfo.usd > 0} label={ - {detailInfo.usd > 0 ? '+' : '-'} + {detailInfo.usd > 0 && '+'} {detailInfo.usd} {unitOfAccount} } diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js b/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js deleted file mode 100644 index db58689044..0000000000 --- a/packages/yoroi-extension/app/UI/pages/portfolio/mockData.js +++ /dev/null @@ -1,269 +0,0 @@ -// ALL THE MOCK DATA FOR RENDERING UI - -const mockData = { - tokenList: [ - { - name: 'AGIX', - id: 'Agix', - price: 0.23, - portfolioPercents: 75, - '24h': -0.03, - '1W': 0.83, - '1M': 0.89, - totalAmount: 281023, - totalAmountUsd: 372561, - overview: { - description: - "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", - website: 'https://www.cardano.org', - detailOn: 'https://www.yoroiwallet.com', - policyId: - 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', - fingerprint: - 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', - }, - performance: [ - { value: '0,277' }, - { value: '0,48' }, - { value: '557M' }, - { value: '34M' }, - { value: '55' }, - { value: '67,00' }, - { value: '100,67' }, - { value: '400,60' }, - { value: '3,01' }, - { value: '0,00002' }, - ], - chartData: [ - { time: '05/26/2024 14:37', value: Math.random().toFixed(3) }, - { time: '05/26/2024 18:37', value: Math.random().toFixed(3) }, - { time: '05/26/2024 20:47', value: Math.random().toFixed(3) }, - { time: '05/27/2024 09:12', value: Math.random().toFixed(3) }, - { time: '05/01/2024 14:37', value: Math.random().toFixed(3) }, - { time: '05/02/2024 18:21', value: Math.random().toFixed(3) }, - { time: '05/03/2024 22:37', value: Math.random().toFixed(3) }, - { time: '05/24/2024 13:37', value: Math.random().toFixed(3) }, - { time: '05/24/2024 10:27', value: Math.random().toFixed(3) }, - { time: '05/24/2024 08:18', value: Math.random().toFixed(3) }, - { time: '08/17/2023 14:37', value: Math.random().toFixed(3) }, - { time: '09/24/2023 14:37', value: Math.random().toFixed(3) }, - { time: '08/17/2022 14:37', value: Math.random().toFixed(3) }, - { time: '09/24/2022 14:37', value: Math.random().toFixed(3) }, - { time: '08/17/2021 14:37', value: Math.random().toFixed(3) }, - { time: '09/24/2021 14:37', value: Math.random().toFixed(3) }, - { time: '05/23/2024 18:37', value: Math.random().toFixed(3) }, - { time: '05/23/2024 20:37', value: Math.random().toFixed(3) }, - { time: '05/20/2024 12:22', value: Math.random().toFixed(3) }, - { time: '04/24/2024 12:22', value: Math.random().toFixed(3) }, - { time: '04/24/2024 12:22', value: Math.random().toFixed(3) }, - { time: '03/24/2024 04:22', value: Math.random().toFixed(3) }, - { time: '03/24/2024 09:22', value: Math.random().toFixed(3) }, - { time: '02/24/2024 18:22', value: Math.random().toFixed(3) }, - { time: '01/24/2024 23:22', value: Math.random().toFixed(3) }, - ], - }, - { - name: 'DOGE', - id: 'Doge', - price: 0.23, - portfolioPercents: 68, - '24h': -0.59, - '1W': 0.24, - '1M': 0.17, - totalAmount: 321023, - totalAmountUsd: 2561, - overview: { - description: - "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", - website: 'https://www.cardano.org', - detailOn: 'https://www.yoroiwallet.com', - policyId: - 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', - fingerprint: - 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', - }, - performance: [ - { value: '0,277' }, - { value: '0,48' }, - { value: '557M' }, - { value: '34M' }, - { value: '1' }, - { value: '67,00' }, - { value: '100,67' }, - { value: '400,60' }, - { value: '3,01' }, - { value: '0,00002' }, - ], - chartData: [ - { time: '05/24/2024 14:37', value: Math.random().toFixed(3) }, - { time: '05/01/2024 14:37', value: Math.random().toFixed(3) }, - { time: '05/02/2024 18:21', value: Math.random().toFixed(3) }, - { time: '05/03/2024 22:37', value: Math.random().toFixed(3) }, - { time: '05/24/2024 13:37', value: Math.random().toFixed(3) }, - { time: '05/24/2024 10:27', value: Math.random().toFixed(3) }, - { time: '05/24/2024 08:18', value: Math.random().toFixed(3) }, - { time: '08/17/2023 14:37', value: Math.random().toFixed(3) }, - { time: '09/24/2023 14:37', value: Math.random().toFixed(3) }, - { time: '08/17/2022 14:37', value: Math.random().toFixed(3) }, - { time: '09/24/2022 14:37', value: Math.random().toFixed(3) }, - { time: '08/17/2021 14:37', value: Math.random().toFixed(3) }, - { time: '09/24/2021 14:37', value: Math.random().toFixed(3) }, - { time: '05/23/2024 18:37', value: Math.random().toFixed(3) }, - { time: '05/23/2024 20:37', value: Math.random().toFixed(3) }, - { time: '05/20/2024 12:22', value: Math.random().toFixed(3) }, - { time: '04/24/2024 12:22', value: Math.random().toFixed(3) }, - { time: '04/24/2024 12:22', value: Math.random().toFixed(3) }, - { time: '03/24/2024 04:22', value: Math.random().toFixed(3) }, - { time: '03/24/2024 09:22', value: Math.random().toFixed(3) }, - { time: '02/24/2024 18:22', value: Math.random().toFixed(3) }, - { time: '01/24/2024 23:22', value: Math.random().toFixed(3) }, - ], - }, - { - name: 'TKN', - id: 'Tkn', - price: 0.82, - portfolioPercents: 34, - '24h': -0.93, - '1W': 0.23, - '1M': 0.829, - totalAmount: 1281023, - totalAmountUsd: 372561, - overview: { - description: - "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", - website: 'https://www.cardano.org', - detailOn: 'https://www.yoroiwallet.com', - policyId: - 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', - fingerprint: - 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', - }, - performance: [ - { value: '0,277' }, - { value: '0,48' }, - { value: '557M' }, - { value: '34M' }, - { value: '55' }, - { value: '67,00' }, - { value: '100,67' }, - { value: '400,60' }, - { value: '3,01' }, - { value: '0,00002' }, - ], - chartData: [ - { time: '05/24/2024 14:37', value: Math.random().toFixed(3) }, - { time: '05/01/2024 14:37', value: Math.random().toFixed(3) }, - { time: '05/02/2024 18:21', value: Math.random().toFixed(3) }, - { time: '05/03/2024 22:37', value: Math.random().toFixed(3) }, - { time: '05/24/2024 13:37', value: Math.random().toFixed(3) }, - { time: '05/24/2024 10:27', value: Math.random().toFixed(3) }, - { time: '05/24/2024 08:18', value: Math.random().toFixed(3) }, - { time: '08/17/2023 14:37', value: Math.random().toFixed(3) }, - { time: '09/24/2023 14:37', value: Math.random().toFixed(3) }, - { time: '08/17/2022 14:37', value: Math.random().toFixed(3) }, - { time: '09/24/2022 14:37', value: Math.random().toFixed(3) }, - { time: '08/17/2021 14:37', value: Math.random().toFixed(3) }, - { time: '09/24/2021 14:37', value: Math.random().toFixed(3) }, - { time: '05/23/2024 18:37', value: Math.random().toFixed(3) }, - { time: '05/23/2024 20:37', value: Math.random().toFixed(3) }, - { time: '05/20/2024 12:22', value: Math.random().toFixed(3) }, - { time: '04/24/2024 12:22', value: Math.random().toFixed(3) }, - { time: '04/24/2024 12:22', value: Math.random().toFixed(3) }, - { time: '03/24/2024 04:22', value: Math.random().toFixed(3) }, - { time: '03/24/2024 09:22', value: Math.random().toFixed(3) }, - { time: '02/24/2024 18:22', value: Math.random().toFixed(3) }, - { time: '01/24/2024 23:22', value: Math.random().toFixed(3) }, - ], - }, - ], - - PortfolioPage: { - balance: { - ada: '289869,04', - usd: '940,64', - percents: { - active: true, - value: '0,03', - }, - amount: { - active: true, - value: '0,56', - }, - }, - }, - - PortfolioDetailPage: { - history: [ - { - type: 'Sent', - time: '11:30 PM', - time: '05/23/2024', - status: 'Low', - fee: { - amount: '0.17 ADA', - usd: '0.03 USD', - }, - amount: { - total: '1,169,789.34432 ADA', - usd: '0.03 USD', - asset: '200 MILK', - }, - }, - { - type: 'Received', - time: '9:12 PM', - time: '05/23/2024', - status: 'Low', - amount: { - total: '1,169,789.34432 ADA', - usd: '312,323.33 USD', - asset: 2, - }, - }, - { - type: 'Transaction error', - time: '9:12 PM', - time: '05/22/2024', - status: 'Failed', - amount: { - total: '1,169,789.34432 ADA', - usd: '312,323.33 USD', - asset: 2, - }, - }, - { - type: 'Sent', - time: '4:20 PM', - time: '05/20/2024', - status: 'Low', - fee: { - amount: '0.17 ADA', - usd: '0.03 USD', - }, - amount: { - total: '1,169,789.34432 ADA', - usd: '0.03 USD', - asset: '200 MILK', - }, - }, - ], - }, - - Chart: { - data: [ - { name: 'Page A', value: 0.1 }, - { name: 'Page B', value: 0.15 }, - { name: 'Page C', value: 0.05 }, - { name: 'Page D', value: 0.35 }, - { name: 'Page E', value: 0.6 }, - { name: 'Page F', value: 0.45 }, - { name: 'Page G', value: 0.3 }, - { name: 'Page H', value: 0.2 }, - { name: 'Page I', value: 0.35 }, - { name: 'Page J', value: 0.55 }, - ], - }, -}; - -export default mockData; diff --git a/packages/yoroi-extension/app/i18n/locales/en-US.json b/packages/yoroi-extension/app/i18n/locales/en-US.json index 767e91412b..56f4a793e3 100644 --- a/packages/yoroi-extension/app/i18n/locales/en-US.json +++ b/packages/yoroi-extension/app/i18n/locales/en-US.json @@ -1118,7 +1118,6 @@ "portfolio.liquidityTable.header.tokenPair": "Token pair", "portfolio.liquidityTable.header.firstTokenValue": "Token value 1", "portfolio.liquidityTable.header.secondTokenValue": "Token value 2", - "portfolio.liquidityTable.header.pnl": "PNL", "portfolio.liquidityTable.header.lpTokens": "LP tokens", "portfolio.orderTable.header.pair": "Pair (From / To)", "portfolio.orderTable.header.assetPrice": "Asset price", From ab1c13348373ba53aa1f76f93de08063ac70f5df Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Mon, 3 Jun 2024 14:40:03 +0700 Subject: [PATCH 062/464] updated with reviews --- .../app/UI/components/Input/SearchInput.js | 6 +- .../app/UI/components/buttons/CopyButton.js | 11 +- .../yoroi-extension/app/UI/components/chip.js | 23 - .../app/UI/components/copy-button.js | 26 - .../Error.js => Cancel.js} | 10 +- .../app/UI/components/icons/ChipArrowDown.js | 12 + .../icons/ChipArrowUp.js} | 2 +- .../app/UI/components/icons/Copied.js | 8 +- .../app/UI/components/icons/Copy.js | 8 +- .../icons}/Expand.js | 15 +- .../Arrow.js => components/icons/Send.js} | 6 +- .../assets => components}/icons/Sort.js | 11 +- .../icons/Staking.js} | 2 +- .../app/UI/components/icons/index.js | 18 + .../UI/components/icons/portfolio/Arrow.js | 17 - .../app/UI/components/icons/portfolio/Sort.js | 25 - .../portfolio/transaction-history/Arrow.js | 26 - .../portfolio/transaction-history/Expand.js | 22 - .../portfolio/transaction-history/Withdraw.js | 24 - .../app/UI/components/index.js | 6 +- .../app/UI/components/search-input.js | 14 - .../app/UI/components/tooltip.js | 5 +- .../portfolio/common/assets/icons/index.js | 2 - .../assets/icons/transaction-history/Error.js | 25 - .../assets/icons/transaction-history/index.js | 4 - .../portfolio/common/assets/images/token.png | Bin 0 -> 845 bytes .../portfolio/common/components/Chip.js | 10 +- .../UI/features/portfolio/common/mockData.js | 1396 +---------------- .../useCases/Dapps/LiquidityTable.js | 22 +- .../portfolio/useCases/Dapps/OrderTable.js | 24 +- .../useCases/Dapps/PortfolioDapps.js | 31 +- .../useCases/TokenDetails/TokenDetailChart.js | 36 +- .../TokenDetails/TokenDetailOverview.js | 245 ++- .../TokenDetails/TokenDetailPerformance.js | 21 +- .../useCases/TokenDetails/TokenDetails.js | 161 +- .../useCases/TokenDetails/TransactionTable.js | 78 +- .../useCases/Wallet/PortfolioWallet.js | 41 +- .../portfolio/useCases/Wallet/StatsTable.js | 59 +- 38 files changed, 505 insertions(+), 1947 deletions(-) delete mode 100644 packages/yoroi-extension/app/UI/components/chip.js delete mode 100644 packages/yoroi-extension/app/UI/components/copy-button.js rename packages/yoroi-extension/app/UI/components/icons/{portfolio/transaction-history/Error.js => Cancel.js} (80%) create mode 100644 packages/yoroi-extension/app/UI/components/icons/ChipArrowDown.js rename packages/yoroi-extension/app/UI/{features/portfolio/common/assets/icons/Arrow.js => components/icons/ChipArrowUp.js} (89%) rename packages/yoroi-extension/app/UI/{features/portfolio/common/assets/icons/transaction-history => components/icons}/Expand.js (61%) rename packages/yoroi-extension/app/UI/{features/portfolio/common/assets/icons/transaction-history/Arrow.js => components/icons/Send.js} (86%) rename packages/yoroi-extension/app/UI/{features/portfolio/common/assets => components}/icons/Sort.js (81%) rename packages/yoroi-extension/app/UI/{features/portfolio/common/assets/icons/transaction-history/Withdraw.js => components/icons/Staking.js} (97%) delete mode 100644 packages/yoroi-extension/app/UI/components/icons/portfolio/Arrow.js delete mode 100644 packages/yoroi-extension/app/UI/components/icons/portfolio/Sort.js delete mode 100644 packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Arrow.js delete mode 100644 packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Expand.js delete mode 100644 packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Withdraw.js delete mode 100644 packages/yoroi-extension/app/UI/components/search-input.js delete mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/index.js delete mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Error.js delete mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/index.js create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/assets/images/token.png diff --git a/packages/yoroi-extension/app/UI/components/Input/SearchInput.js b/packages/yoroi-extension/app/UI/components/Input/SearchInput.js index f8ffb329e6..ac1b7c3ec8 100644 --- a/packages/yoroi-extension/app/UI/components/Input/SearchInput.js +++ b/packages/yoroi-extension/app/UI/components/Input/SearchInput.js @@ -8,9 +8,9 @@ const StyledInput = styled(Input)(({ theme }) => ({ height: '40px', padding: `${theme.spacing(1)} ${theme.spacing(2)} ${theme.spacing(1)} ${theme.spacing(1)}`, border: '1px solid', - borderColor: theme.palette.ds.el_gray_low, + borderColor: theme.palette.ds.gray_c400, 'input::placeholder': { - color: theme.palette.el_gray_medium, + color: theme.palette.gray_c600, }, })); @@ -20,7 +20,7 @@ const StyledInputAdornment = styled(InputAdornment)(({ theme }) => ({ }, '> svg > use': { - fill: theme.palette.ds.text_gray_normal, + fill: theme.palette.ds.gray_c900, }, })); diff --git a/packages/yoroi-extension/app/UI/components/buttons/CopyButton.js b/packages/yoroi-extension/app/UI/components/buttons/CopyButton.js index b5a0def363..5e8ab570a5 100644 --- a/packages/yoroi-extension/app/UI/components/buttons/CopyButton.js +++ b/packages/yoroi-extension/app/UI/components/buttons/CopyButton.js @@ -1,10 +1,9 @@ import React, { useState } from 'react'; import { IconButton } from '@mui/material'; import { CopyToClipboard } from 'react-copy-to-clipboard'; -import CopyIcon from '../icons/Copy'; -import CopiedIcon from '../icons/Copied'; import { Tooltip } from '../Tooltip'; import { useStrings } from '../../features/portfolio/common/hooks/useStrings'; +import { Icon } from '../icons/index'; interface Props { textToCopy: string; @@ -24,13 +23,9 @@ export const CopyButton = ({ textToCopy, disabled, ...props }: Props) => { return ( - + - {copied ? : } + {copied ? : } diff --git a/packages/yoroi-extension/app/UI/components/chip.js b/packages/yoroi-extension/app/UI/components/chip.js deleted file mode 100644 index 7a41945078..0000000000 --- a/packages/yoroi-extension/app/UI/components/chip.js +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react'; -import { Chip, Stack, Typography } from '@mui/material'; -import { useTheme } from '@mui/material/styles'; - -const StyledChip = props => { - const theme = useTheme(); - - return ( - - ); -}; - -export default StyledChip; diff --git a/packages/yoroi-extension/app/UI/components/copy-button.js b/packages/yoroi-extension/app/UI/components/copy-button.js deleted file mode 100644 index 3f529208e3..0000000000 --- a/packages/yoroi-extension/app/UI/components/copy-button.js +++ /dev/null @@ -1,26 +0,0 @@ -import React, { useState } from 'react'; -import { IconButton } from '@mui/material'; -import { ReactComponent as CopyIcon } from '../../assets/images/copy.inline.svg'; -import { CopyToClipboard } from 'react-copy-to-clipboard'; -import { StyledTooltip } from './tooltip'; - -export const CopyButton = ({ textToCopy }) => { - const [copied, setCopied] = useState(false); - - const handleCopy = () => { - setCopied(true); - setTimeout(() => { - setCopied(false); - }, 2000); // Reset tooltip after 2 seconds - }; - - return ( - - - - - - - - ); -}; diff --git a/packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Error.js b/packages/yoroi-extension/app/UI/components/icons/Cancel.js similarity index 80% rename from packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Error.js rename to packages/yoroi-extension/app/UI/components/icons/Cancel.js index d9775e796b..5ecd7807a1 100644 --- a/packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Error.js +++ b/packages/yoroi-extension/app/UI/components/icons/Cancel.js @@ -1,20 +1,18 @@ import React from 'react'; -const Error = props => { +export const Cancel = props => { return ( - + ); }; - -export default Error; diff --git a/packages/yoroi-extension/app/UI/components/icons/ChipArrowDown.js b/packages/yoroi-extension/app/UI/components/icons/ChipArrowDown.js new file mode 100644 index 0000000000..cd7162e5bd --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/icons/ChipArrowDown.js @@ -0,0 +1,12 @@ +import React from 'react'; + +export const ChipArrowDown = props => { + return ( + + + + ); +}; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/Arrow.js b/packages/yoroi-extension/app/UI/components/icons/ChipArrowUp.js similarity index 89% rename from packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/Arrow.js rename to packages/yoroi-extension/app/UI/components/icons/ChipArrowUp.js index 3359eacfdf..aea83cb222 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/Arrow.js +++ b/packages/yoroi-extension/app/UI/components/icons/ChipArrowUp.js @@ -1,6 +1,6 @@ import React from 'react'; -export const ArrowIcon = props => { +export const ChipArrowUp = props => { return ( { +export const Copied = props => { return ( { fill="black" /> ); }; - -export default Copied; diff --git a/packages/yoroi-extension/app/UI/components/icons/Copy.js b/packages/yoroi-extension/app/UI/components/icons/Copy.js index ecfea230ad..08627f5919 100644 --- a/packages/yoroi-extension/app/UI/components/icons/Copy.js +++ b/packages/yoroi-extension/app/UI/components/icons/Copy.js @@ -1,6 +1,6 @@ import React from 'react'; -const Copy = props => { +export const Copy = props => { return ( { fill="#242838" /> ); }; - -export default Copy; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Expand.js b/packages/yoroi-extension/app/UI/components/icons/Expand.js similarity index 61% rename from packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Expand.js rename to packages/yoroi-extension/app/UI/components/icons/Expand.js index 80db7dc500..7f9b050c32 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Expand.js +++ b/packages/yoroi-extension/app/UI/components/icons/Expand.js @@ -1,18 +1,11 @@ import React from 'react'; -export const ExpandIcon = props => { +export const Expand = props => { return ( - + diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Arrow.js b/packages/yoroi-extension/app/UI/components/icons/Send.js similarity index 86% rename from packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Arrow.js rename to packages/yoroi-extension/app/UI/components/icons/Send.js index 2f990386c3..7e320b6b7c 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Arrow.js +++ b/packages/yoroi-extension/app/UI/components/icons/Send.js @@ -1,6 +1,6 @@ import React from 'react'; -export const ArrowIcon = props => { +export const Send = props => { return ( { > diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/Sort.js b/packages/yoroi-extension/app/UI/components/icons/Sort.js similarity index 81% rename from packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/Sort.js rename to packages/yoroi-extension/app/UI/components/icons/Sort.js index 00f72ea424..8e9a143ec9 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/Sort.js +++ b/packages/yoroi-extension/app/UI/components/icons/Sort.js @@ -1,15 +1,8 @@ import React from 'react'; -export const SortIcon = props => { +export const Sort = props => { return ( - + { +export const Staking = props => { return ( { - return ( - - - - ); -}; - -export default Arrow; diff --git a/packages/yoroi-extension/app/UI/components/icons/portfolio/Sort.js b/packages/yoroi-extension/app/UI/components/icons/portfolio/Sort.js deleted file mode 100644 index 48de86ca5a..0000000000 --- a/packages/yoroi-extension/app/UI/components/icons/portfolio/Sort.js +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; - -const Sort = props => { - return ( - - - - - ); -}; - -export default Sort; diff --git a/packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Arrow.js b/packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Arrow.js deleted file mode 100644 index d002455690..0000000000 --- a/packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Arrow.js +++ /dev/null @@ -1,26 +0,0 @@ -import React from 'react'; - -const Arrow = props => { - return ( - - - - - - ); -}; - -export default Arrow; diff --git a/packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Expand.js b/packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Expand.js deleted file mode 100644 index d02d82de75..0000000000 --- a/packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Expand.js +++ /dev/null @@ -1,22 +0,0 @@ -import React from 'react'; - -const Expand = props => { - return ( - - - - ); -}; - -export default Expand; diff --git a/packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Withdraw.js b/packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Withdraw.js deleted file mode 100644 index aeaf772ae9..0000000000 --- a/packages/yoroi-extension/app/UI/components/icons/portfolio/transaction-history/Withdraw.js +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; - -const Withdraw = (props) => { - return ( - - - - - - ); -}; - -export default Withdraw; diff --git a/packages/yoroi-extension/app/UI/components/index.js b/packages/yoroi-extension/app/UI/components/index.js index ef5f6f8fce..bd4cf5f3dc 100644 --- a/packages/yoroi-extension/app/UI/components/index.js +++ b/packages/yoroi-extension/app/UI/components/index.js @@ -1,8 +1,8 @@ -export * from './Card'; +export * from './card'; export * from './buttons/CopyButton'; export * from './Input/SearchInput'; -export * from './Tooltip'; -export * from './Skeleton'; +export * from './tooltip'; +export * from './skeleton'; export * from './Input/TextInput'; export * from './Input/PasswordInput'; export * from './TransactionFailed/TransactionFailed'; diff --git a/packages/yoroi-extension/app/UI/components/search-input.js b/packages/yoroi-extension/app/UI/components/search-input.js deleted file mode 100644 index 1da9caaf05..0000000000 --- a/packages/yoroi-extension/app/UI/components/search-input.js +++ /dev/null @@ -1,14 +0,0 @@ -import { Input, styled } from '@mui/material'; - -export const SearchInput = styled(Input)(({ theme }) => ({ - borderRadius: '8px', - width: '370px', - height: '40px', - padding: '10px 12px', - backgroundColor: theme.palette.ds.text_primary_on, - border: '1px solid', - borderColor: theme.palette.ds.gray_c300, - 'input::placeholder': { - color: theme.palette.ds.text_gray_medium, - }, -})); diff --git a/packages/yoroi-extension/app/UI/components/tooltip.js b/packages/yoroi-extension/app/UI/components/tooltip.js index aba904bd7c..701ed17f9f 100644 --- a/packages/yoroi-extension/app/UI/components/tooltip.js +++ b/packages/yoroi-extension/app/UI/components/tooltip.js @@ -4,11 +4,12 @@ import { default as MuiTooltip, TooltipProps, tooltipClasses } from '@mui/materi const StyledTooltip = styled(({ className, ...props }: TooltipProps) => ( ))(({ theme }) => ({ + color: theme.palette.ds.text_primary_on, [`& .${tooltipClasses.arrow}`]: { - color: theme.palette.ds.black_static, + color: theme.palette.ds.gray_c900, }, [`& .${tooltipClasses.tooltip}`]: { - backgroundColor: theme.palette.ds.black_static, + backgroundColor: theme.palette.ds.gray_c900, }, })); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/index.js b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/index.js deleted file mode 100644 index 8be7780042..0000000000 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export * from './Arrow'; -export * from './Sort'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Error.js b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Error.js deleted file mode 100644 index 8b76773bab..0000000000 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/Error.js +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; - -export const ErrorIcon = props => { - return ( - - - - - ); -}; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/index.js b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/index.js deleted file mode 100644 index 4389af7aac..0000000000 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/icons/transaction-history/index.js +++ /dev/null @@ -1,4 +0,0 @@ -export * from './Arrow'; -export * from './Error'; -export * from './Expand'; -export * from './Withdraw'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/assets/images/token.png b/packages/yoroi-extension/app/UI/features/portfolio/common/assets/images/token.png new file mode 100644 index 0000000000000000000000000000000000000000..642962d902a2549050c37addd11022eb1ff19625 GIT binary patch literal 845 zcmV-T1G4;yP)XV!&mI1hnpByEi6)wWZcJTBaYNe;m4zlQO5)ZBaN)u?u)cv!T=)Q8xG||FHg!RZ ziz+K%W8+54!dRk&I^K$g;{YUH1SXh`GEc-LWsw$!+i*C*yrSk6Org9NlK9( zROQjZ0z?`(gL4{*11TfIni#?EB}6#7LmDEfwO~*vvP8Pl5_yAH&o$B%5fY1{(flDv zV+_)qvA|&o(*W%4?bBANOy%k}H5%XT_s*X?YachVvt-6kQ&9L`BoOs#y=aTD*a$;1W9v0HI=t6Y6g8^u!B*mP<-5H~#wv^bPcp03!=<=7!i zJ_Dg-SjMQmnQ)b2sa@Zbh^3n>}5|kac%p<$AR4R zEijq5NY7Va_jMC18X?}PeYRbNNVqu}i`kzGT%ZEN`nlN&1miH{XQ;sAkh9ZQF5BY0 z;JHx8o&4FYf9-P9otu9H;e}9DL%rfzU^;cxel2vA6StfF$T>Gq;cy2oa6U70oKp(7 zoBcpu0?XNb0u=~xw{K;;-gCR@tO+5gh(}!+s%G_a>gqs0~ZM9IMny=-93?W z1=m*Biwc(;@J|H->n^{4|CTWN~GLnWlHC5z3+%jo~B)M#wleIrB;BXW! zYSaQg#VugbZULhgjGnL#PQp1Q4(Gx>z_NZODD-Qo-PjbPag-|w|GU78RjwlCIxqbO XCP|2>6xm0_00000NkvXXu0mjfW7T>7 literal 0 HcmV?d00001 diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/components/Chip.js b/packages/yoroi-extension/app/UI/features/portfolio/common/components/Chip.js index 43bf8b1c41..7187c77eb4 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/components/Chip.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/components/Chip.js @@ -11,11 +11,15 @@ export const Chip = props => { {...props} sx={{ maxWidth: 'fit-content', - backgroundColor: props.active - ? theme.palette.ds.secondary_c100 - : theme.palette.ds.sys_magenta_c100, + padding: '2px 6px !important', + borderRadius: '20px', + backgroundColor: props.active ? theme.palette.ds.secondary_c100 : theme.palette.ds.sys_magenta_c100, color: props.active ? theme.palette.ds.secondary_c800 : theme.palette.ds.sys_magenta_c700, ...props.sx, + + '& .MuiChip-label': { + padding: 0, + }, }} > ); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js b/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js index 2807ae4ca4..a2201d6d14 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js @@ -1,16 +1,29 @@ import { HistoryItemStatus, HistoryItemType } from '../useCases/TokenDetails/TransactionTable'; // UTILS -const getRandomTime = (startDate, endDate) => { - const date = new Date(startDate.getTime() + Math.random() * (endDate.getTime() - startDate.getTime())); - return date.toISOString(); -}; const startDate = new Date('01-01-2023 8:30'); const endDate = new Date('05-28-2024 11:40'); const now = new Date(); const start24HoursAgo = new Date(now.getTime() - 24 * 60 * 60 * 1000); const start1WeekAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000); const start1MonthAgo = new Date(now.getFullYear(), now.getMonth() - 1, now.getDate()); +const start6MonthAgo = new Date(now.getFullYear(), now.getMonth() - 6, now.getDate()); +const start1YearAgo = new Date(now.getFullYear() - 1, now.getMonth(), now.getDate()); +const getRandomTime = (startDate, endDate) => { + const date = new Date(startDate.getTime() + Math.random() * (endDate.getTime() - startDate.getTime())); + return date.toISOString(); +}; +const getRandomNumber = (min, max, toFixed) => { + return (Math.random() * (max - min) + min).toFixed(toFixed); +}; +const createChartData = (quantity: number, fromTime: number) => { + const tmp = Array.from({ length: quantity }).map(item => ({ + time: getRandomTime(fromTime, now), + value: getRandomNumber(-10, 10, 3), + usd: getRandomNumber(-1000, 1000, 3), + })); + return tmp; +}; // ALL THE MOCK DATA FOR RENDERING UI NEW const mockData = { @@ -63,131 +76,11 @@ const mockData = { { value: (10 * Math.random()).toFixed(5) }, ], chartData: [ - { - time: getRandomTime(start24HoursAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start24HoursAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start24HoursAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1MonthAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1MonthAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1MonthAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, + ...createChartData(96, start24HoursAgo), + ...createChartData(168, start1WeekAgo), + ...createChartData(120, start1MonthAgo), + ...createChartData(180, start6MonthAgo), + ...createChartData(90, start1YearAgo), ], }, { @@ -222,131 +115,11 @@ const mockData = { { value: (10 * Math.random()).toFixed(5) }, ], chartData: [ - { - time: getRandomTime(start24HoursAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start24HoursAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start24HoursAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1MonthAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1MonthAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1MonthAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, + ...createChartData(96, start24HoursAgo), + ...createChartData(168, start1WeekAgo), + ...createChartData(120, start1MonthAgo), + ...createChartData(180, start6MonthAgo), + ...createChartData(90, start1YearAgo), ], }, { @@ -381,131 +154,11 @@ const mockData = { { value: (10 * Math.random()).toFixed(5) }, ], chartData: [ - { - time: getRandomTime(start24HoursAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start24HoursAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start24HoursAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1MonthAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1MonthAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1MonthAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, + ...createChartData(96, start24HoursAgo), + ...createChartData(168, start1WeekAgo), + ...createChartData(120, start1MonthAgo), + ...createChartData(180, start6MonthAgo), + ...createChartData(90, start1YearAgo), ], }, { @@ -540,131 +193,11 @@ const mockData = { { value: (10 * Math.random()).toFixed(5) }, ], chartData: [ - { - time: getRandomTime(start24HoursAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start24HoursAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start24HoursAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1MonthAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1MonthAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1MonthAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, + ...createChartData(96, start24HoursAgo), + ...createChartData(168, start1WeekAgo), + ...createChartData(120, start1MonthAgo), + ...createChartData(180, start6MonthAgo), + ...createChartData(90, start1YearAgo), ], }, { @@ -699,131 +232,11 @@ const mockData = { { value: (10 * Math.random()).toFixed(5) }, ], chartData: [ - { - time: getRandomTime(start24HoursAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start24HoursAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start24HoursAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1MonthAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1MonthAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1MonthAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, + ...createChartData(96, start24HoursAgo), + ...createChartData(168, start1WeekAgo), + ...createChartData(120, start1MonthAgo), + ...createChartData(180, start6MonthAgo), + ...createChartData(90, start1YearAgo), ], }, { @@ -858,131 +271,11 @@ const mockData = { { value: (10 * Math.random()).toFixed(5) }, ], chartData: [ - { - time: getRandomTime(start24HoursAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start24HoursAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start24HoursAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1MonthAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1MonthAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1MonthAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, + ...createChartData(96, start24HoursAgo), + ...createChartData(168, start1WeekAgo), + ...createChartData(120, start1MonthAgo), + ...createChartData(180, start6MonthAgo), + ...createChartData(90, start1YearAgo), ], }, { @@ -1017,131 +310,11 @@ const mockData = { { value: (10 * Math.random()).toFixed(5) }, ], chartData: [ - { - time: getRandomTime(start24HoursAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start24HoursAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start24HoursAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1MonthAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1MonthAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1MonthAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, + ...createChartData(96, start24HoursAgo), + ...createChartData(168, start1WeekAgo), + ...createChartData(120, start1MonthAgo), + ...createChartData(180, start6MonthAgo), + ...createChartData(90, start1YearAgo), ], }, { @@ -1176,131 +349,11 @@ const mockData = { { value: (10 * Math.random()).toFixed(5) }, ], chartData: [ - { - time: getRandomTime(start24HoursAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start24HoursAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start24HoursAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1MonthAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1MonthAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1MonthAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, + ...createChartData(96, start24HoursAgo), + ...createChartData(168, start1WeekAgo), + ...createChartData(120, start1MonthAgo), + ...createChartData(180, start6MonthAgo), + ...createChartData(90, start1YearAgo), ], }, { @@ -1335,131 +388,11 @@ const mockData = { { value: (10 * Math.random()).toFixed(5) }, ], chartData: [ - { - time: getRandomTime(start24HoursAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start24HoursAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start24HoursAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1MonthAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1MonthAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1MonthAgo, now), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: -Math.random().toFixed(3), - usd: -Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, + ...createChartData(96, start24HoursAgo), + ...createChartData(168, start1WeekAgo), + ...createChartData(120, start1MonthAgo), + ...createChartData(180, start6MonthAgo), + ...createChartData(90, start1YearAgo), ], }, { @@ -1494,206 +427,11 @@ const mockData = { { value: (10 * Math.random()).toFixed(5) }, ], chartData: [ - { - time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start24HoursAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1WeekAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1MonthAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1MonthAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(start1MonthAgo, now), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(startDate, endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(new Date('03-03-2020 8:30'), endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(new Date('03-03-2020 8:30'), endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(new Date('03-03-2020 8:30'), endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(new Date('03-03-2020 8:30'), endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(new Date('03-03-2020 8:30'), endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(new Date('03-03-2020 8:30'), endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(new Date('03-03-2020 8:30'), endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(new Date('03-03-2020 8:30'), endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(new Date('03-03-2020 8:30'), endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(new Date('03-03-2020 8:30'), endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(new Date('03-03-2020 8:30'), endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(new Date('03-03-2020 8:30'), endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(new Date('03-03-2020 8:30'), endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(new Date('03-03-2020 8:30'), endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(new Date('03-03-2020 8:30'), endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, - { - time: getRandomTime(new Date('03-03-2020 8:30'), endDate), - value: Math.random().toFixed(3), - usd: Math.random().toFixed(3) * 1000, - }, + ...createChartData(96, start24HoursAgo), + ...createChartData(168, start1WeekAgo), + ...createChartData(120, start1MonthAgo), + ...createChartData(180, start6MonthAgo), + ...createChartData(90, start1YearAgo), ], }, ], diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js index bfa6c88b90..250a18c77b 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js @@ -1,7 +1,6 @@ import React, { useCallback, useMemo, useState } from 'react'; import { Table, TableBody, TableCell, TableHead, TableRow, TableSortLabel, Typography, Stack, Box } from '@mui/material'; import { useTheme } from '@mui/material/styles'; -import { SortIcon } from '../../common/assets/icons/'; import { useNavigateTo } from '../../common/hooks/useNavigateTo'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import adaPng from '../../../../../assets/images/ada.png'; @@ -11,6 +10,7 @@ import { Chip } from '../../common/components/Chip'; import { Skeleton } from '../../../../components/Skeleton'; import { useStrings } from '../../common/hooks/useStrings'; import illustrationPng from '../../common/assets/images/illustration.png'; +import { Icon } from '../../../../components/icons/'; const TableRowSkeleton = ({ id, theme }) => ( { {label} - { src={hoskyPng} > - + {row.firstToken.name} - {row.secondToken.name} @@ -237,7 +237,7 @@ const LiquidityTable = ({ data, isLoading }) => { component="img" src={minswapPng} > - + {row.DEX} @@ -245,11 +245,11 @@ const LiquidityTable = ({ data, isLoading }) => { - + {row.firstTokenValue} {row.firstToken.name} {row.firstToken.name === 'ADA' && unitOfAccount === 'ADA' ? null : ( - + {row.firstTokenValueUsd} {unitOfAccount} )} @@ -258,11 +258,11 @@ const LiquidityTable = ({ data, isLoading }) => { - + {row.secondTokenValue} {row.secondToken.name} {row.secondToken.name === 'ADA' && unitOfAccount === 'ADA' ? null : ( - + {row.secondTokenValueUsd} {unitOfAccount} )} @@ -270,16 +270,16 @@ const LiquidityTable = ({ data, isLoading }) => { - {row.lpTokens} + {row.lpTokens} - + {row.totalValue} {row.firstToken.name} {unitOfAccount === 'ADA' && row.firstToken.name === 'ADA' ? null : ( - + {row.totalValueUsd} {unitOfAccount} )} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js index 51676bebde..db910c7e25 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js @@ -1,7 +1,6 @@ import React, { useCallback, useMemo, useState } from 'react'; import { Table, TableBody, TableCell, TableHead, TableRow, TableSortLabel, Typography, Stack, Box } from '@mui/material'; import { useTheme } from '@mui/material/styles'; -import { SortIcon } from '../../common/assets/icons/'; import { useNavigateTo } from '../../common/hooks/useNavigateTo'; import { useStrings } from '../../common/hooks/useStrings'; import adaPng from '../../../../../assets/images/ada.png'; @@ -12,6 +11,7 @@ import { Skeleton } from '../../../../components/Skeleton'; import { truncateAddressShort } from '../../../../../utils/formatters'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import illustrationPng from '../../common/assets/images/illustration.png'; +import { Icon } from '../../../../components/icons'; const TableRowSkeleton = ({ id, theme }) => ( ( - + / @@ -150,7 +150,7 @@ const OrderTable = ({ data, isLoading }) => { {label} - {disabledSort ? null : } + {disabledSort ? null : } ))} @@ -178,10 +178,10 @@ const OrderTable = ({ data, isLoading }) => { component="img" src={adaPng} > - + {row.firstToken.name} - + / { component="img" src={hoskyPng} > - + {row.secondToken.name} @@ -220,18 +220,18 @@ const OrderTable = ({ data, isLoading }) => { component="img" src={minswapPng} > - + {row.DEX} - {row.assetPrice} + {row.assetPrice} - {row.assetAmount} + {row.assetAmount} @@ -241,7 +241,7 @@ const OrderTable = ({ data, isLoading }) => { url: `https://cardanoscan.io/transaction/${row.transactionId}`, }) } - sx={{ color: theme.palette.ds.text_primary_medium, cursor: 'pointer' }} + sx={{ color: theme.palette.ds.primary_c600, cursor: 'pointer' }} > {truncateAddressShort(row.transactionId, 10)} @@ -249,11 +249,11 @@ const OrderTable = ({ data, isLoading }) => { - + {row.totalValue} {row.firstToken.name} {row.firstToken.name === 'ADA' && unitOfAccount === 'ADA' ? null : ( - + {row.totalValueUsd} {unitOfAccount} )} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js index 44596d7ddc..0088c7df85 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js @@ -7,17 +7,17 @@ import { defineMessages } from 'react-intl'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import LiquidityTable from './LiquidityTable'; import mockData from '../../common/mockData'; -import { ArrowIcon } from '../../common/assets/icons'; import { Chip } from '../../common/components/Chip'; import { Skeleton } from '../../../../components/Skeleton'; import OrderTable from './OrderTable'; import LendAndBorrow from './LendAndBorrow'; import { useStrings } from '../../common/hooks/useStrings'; +import { Icon } from '../../../../components/icons/index'; const StyledButton = styled(Button)(({ theme }) => ({ height: '40px', textTransform: 'none', - color: theme.palette.ds.black_static, + color: theme.palette.ds.gray_cmax, padding: `${theme.spacing(1)} !important`, })); @@ -114,15 +114,15 @@ const PortfolioDapps = ({ data }) => { - + {isLoading ? ( ) : ( - + {isAdaMainUnit ? mockData.common.dappsBalance.ada : mockData.common.dappsBalance.usd} )} - + {isAdaMainUnit ? settingFiatPairUnit.currency || 'USD' : 'ADA'} { cursor: 'pointer', display: 'inline', marginTop: '5px', - color: theme.palette.ds.text_gray_low, + color: theme.palette.ds.gray_c400, }} > {isAdaMainUnit ? '/ADA' : `/${unitOfAccount}`} @@ -144,7 +144,7 @@ const PortfolioDapps = ({ data }) => { {isLoading ? ( ) : ( - + {isAdaMainUnit ? mockData.common.dappsBalance.usd : mockData.common.dappsBalance.ada}{' '} {isAdaMainUnit ? 'ADA' : unitOfAccount} @@ -172,17 +172,12 @@ const PortfolioDapps = ({ data }) => { active={mockData.common.dappsBalance.percents > 0} label={ - 0 - ? theme.palette.ds.secondary_c800 - : theme.palette.ds.sys_magenta_c700 - } - style={{ - marginRight: theme.spacing(0.5), - transform: mockData.common.dappsBalance.percents > 0 ? '' : 'rotate(180deg)', - }} - /> + {mockData.common.dappsBalance.percents > 0 ? ( + + ) : ( + + )} + {mockData.common.dappsBalance.percents > 0 ? mockData.common.dappsBalance.percents diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js index 5c5cb16058..8061cff4f7 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js @@ -2,20 +2,29 @@ import { Box, Button, Stack, styled, Typography, Divider, SvgIcon } from '@mui/m import React, { useEffect, useMemo, useState } from 'react'; import { LineChart, Line, CartesianGrid, XAxis, YAxis, ResponsiveContainer, Label, Tooltip as RechartTooltip } from 'recharts'; import { useTheme } from '@mui/material/styles'; -import { ArrowIcon } from '../../common/assets/icons'; import { Skeleton, Tooltip } from '../../../../components'; import chartSkeletonPng from '../../common/assets/images/token-detail-chart-skeleton.png'; import { Chip } from '../../common/components/Chip'; import moment from 'moment'; import { useStrings } from '../../common/hooks/useStrings'; import { usePortfolio } from '../../module/PortfolioContextProvider'; +import { Icon } from '../../../../components/icons'; const StyledButton = styled(Button)(({ theme }) => ({ fontWeight: 500, fontSize: '0.75rem', lineHeight: '1.125rem', - width: '36px', height: '30px', + padding: '6px !important', + minWidth: '36px', + + '& .MuiButton-contained': { + backgroundColor: theme.palette.ds.el_primary_medium, + color: theme.palette.ds.el_static_white, + }, + '& .MuiButton-secondary': { + color: theme.palette.ds.text_primary_medium, + }, })); const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { @@ -187,7 +196,7 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { {isLoading ? ( ) : ( - + {strings.marketPrice} )} @@ -195,10 +204,8 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { {isLoading ? ( ) : ( - - - {detailInfo.usd} - + + {detailInfo.usd}  {unitOfAccount} )} @@ -219,13 +226,12 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { active={detailInfo.value > 0} label={ - 0 ? theme.palette.ds.secondary_c800 : theme.palette.ds.sys_magenta_c700} - style={{ - marginRight: theme.spacing(0.5), - transform: detailInfo.value > 0 ? '' : 'rotate(180deg)', - }} - /> + {detailInfo.value > 0 ? ( + + ) : ( + + )} + {detailInfo.value > 0 ? detailInfo.value : -1 * detailInfo.value}% @@ -278,7 +284,7 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { type="monotone" dataKey="value" strokeWidth={2} - stroke={isLoading ? theme.palette.ds.gray_c50 : theme.palette.ds.text_primary_medium} + stroke={isLoading ? theme.palette.ds.gray_c50 : theme.palette.ds.primary_c600} /> diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js index 46598e0ce1..3ef4f6c110 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js @@ -11,148 +11,145 @@ const TokenDetailOverview = ({ tokenInfo, isLoading, isAda }) => { const strings = useStrings(); return ( - - - - {isLoading ? ( - - ) : ( - - )} - {isLoading ? ( - - ) : ( - - {tokenInfo.name} - - )} - + + + {isLoading ? ( + + ) : ( + + )} + {isLoading ? ( + + ) : ( + + {tokenInfo.name} + + )} + - - {isLoading ? ( - - ) : ( - {strings.description} - )} - {isLoading ? ( - <> - - - - - ) : ( - - {tokenInfo.overview.description} - - )} - + + {isLoading ? ( + + ) : ( + + {strings.description} + + )} + {isLoading ? ( + <> + + + + + ) : ( + {tokenInfo.overview.description} + )} + - - {isLoading ? ( - - ) : ( - {strings.website} - )} - {isLoading ? ( - - ) : ( - - cardano.org - - )} - + + {isLoading ? ( + + ) : ( + + {strings.website} + + )} + {isLoading ? ( + + ) : ( + + cardano.org + + )} + - {isAda ? null : ( - <> - + {isAda ? null : ( + <> + + {isLoading ? ( + + ) : ( + + {strings.policyId} + + )} + + {isLoading ? ( - + + + + ) : ( - {strings.policyId} + + {tokenInfo.overview.policyId} + )} - - - {isLoading ? ( - - - - - ) : ( - - {tokenInfo.overview.policyId} - - )} - - + + + + + {isLoading ? ( + + ) : ( + + {strings.fingerprint} + + )} - + {isLoading ? ( - + + + + ) : ( - {strings.fingerprint} + + {tokenInfo.overview.fingerprint} + )} - - - {isLoading ? ( - - - - - ) : ( - - {tokenInfo.overview.fingerprint} - - )} - - + - - )} + + + )} - + + {isLoading ? ( + + ) : ( + + {strings.detailsOn} + + )} + {isLoading ? ( - + ) : ( - {strings.detailsOn} + + Cardanoscan + + )} + {isLoading ? ( + + ) : ( + + Adaex + )} - - {isLoading ? ( - - ) : ( - - Cardanoscan - - )} - {isLoading ? ( - - ) : ( - - Adaex - - )} - - + ); }; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js index 2403b97f61..99928aef53 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js @@ -3,6 +3,7 @@ import { Box, Stack, Typography, Link } from '@mui/material'; import { useTheme } from '@mui/material/styles'; import { useStrings } from '../../common/hooks/useStrings'; import { usePortfolio } from '../../module/PortfolioContextProvider'; +import { Skeleton } from '../../../../components/Skeleton'; const PerformanceItemType = { FIAT: 'fiat', @@ -10,7 +11,7 @@ const PerformanceItemType = { RANK: 'rank', }; -const TokenDetailPerformance = ({ tokenInfo }) => { +const TokenDetailPerformance = ({ tokenInfo, isLoading }) => { const theme = useTheme(); const strings = useStrings(); const { unitOfAccount } = usePortfolio(); @@ -30,7 +31,7 @@ const TokenDetailPerformance = ({ tokenInfo }) => { return ( - + {strings.marketData} @@ -42,12 +43,16 @@ const TokenDetailPerformance = ({ tokenInfo }) => { alignItems="center" sx={{ paddingBottom: item.type === PerformanceItemType.RANK ? theme.spacing(1) : '' }} > - {item.label} - - {item.type === PerformanceItemType.RANK && '#'} - {tokenInfo.performance[index].value} {item.type === PerformanceItemType.FIAT && unitOfAccount} - {item.type === PerformanceItemType.TOKEN && tokenInfo.name} - + {item.label} + {isLoading ? ( + + ) : ( + + {item.type === PerformanceItemType.RANK && '#'} + {tokenInfo.performance[index].value} {item.type === PerformanceItemType.FIAT && unitOfAccount} + {item.type === PerformanceItemType.TOKEN && tokenInfo.name} + + )} ))} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js index 7bf57a60ed..1b21a69ee2 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js @@ -22,18 +22,38 @@ const Header = styled(Box)({ const TokenInfo = styled(Stack)({ width: '100%', - marginTop: '25px', }); const StyledButton = styled(Button)(({ theme }) => ({ maxHeight: '40px', minWidth: '140.25px', + + '&.MuiButton-contained': { + backgroundColor: theme.palette.ds.el_primary_medium, + color: theme.palette.ds.el_static_white, + + '&:hover': { + backgroundColor: theme.palette.ds.el_primary_high, + }, + }, + + '&.MuiButton-secondary': { + color: theme.palette.ds.text_primary_medium, + }, })); const TabContent = styled(Box)({ flex: 1, }); +const StyledSubMenu = styled(SubMenu)(({ theme }) => ({ + '& > .SubMenuItem_enabled > button': { + padding: '11px 0 !important', + color: theme.palette.ds.el_primary_medium, + borderColor: theme.palette.ds.el_primary_medium, + }, +})); + const TokenDetails = ({ tokenInfo, transactionHistory }) => { const theme = useTheme(); const navigateTo = useNavigateTo(); @@ -84,7 +104,7 @@ const TokenDetails = ({ tokenInfo, transactionHistory }) => { sx={{ color: theme.palette.ds.black_static, display: 'flex', gap: theme.spacing(2) }} > - + {strings.backToPortfolio} @@ -101,75 +121,78 @@ const TokenDetails = ({ tokenInfo, transactionHistory }) => { - - - - - {isLoading ? : `${tokenInfo.name} ${strings.balance}`} - - - - {isLoading ? ( - - ) : ( - - - {tokenInfo.totalAmount} + + + + + + {isLoading ? : `${tokenInfo.name} ${strings.balance}`} + + + + {isLoading ? ( + + ) : ( + + + {tokenInfo.totalAmount} + + + {tokenInfo.name} + + + )} + + {isLoading ? ( + + ) : ( + + {tokenInfo.totalAmountUsd} {unitOfAccount} - - {tokenInfo.name} - - - )} - - {isLoading ? ( - - ) : ( - - {tokenInfo.totalAmountUsd} {unitOfAccount} - - )} + )} + - - - - - - - - - - setSelectedTab(route)} - isActiveItem={isActiveItem} - locationId="token-details" - /> - - - - {selectedTab === subMenuOptions[0].route ? ( - - - - ) : null} - - {selectedTab === subMenuOptions[1].route ? ( - - - - ) : null} - - - - - + + + + +
+ + + + setSelectedTab(route)} + isActiveItem={isActiveItem} + locationId="token-details" + /> + + + + {selectedTab === subMenuOptions[0].route ? ( + + + + ) : null} + + {selectedTab === subMenuOptions[1].route ? ( + + + + ) : null} + + + + + + ); }; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js index caa142635e..0951f8bac1 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js @@ -2,10 +2,10 @@ import React, { useMemo, useState } from 'react'; import { Box, Stack, Typography, IconButton, Table, TableCell, TableHead, TableBody, TableRow, styled } from '@mui/material'; import { useTheme } from '@mui/material/styles'; import { Card } from '../../../../components'; -import { ArrowIcon, ExpandIcon, ErrorIcon, WithdrawIcon } from '../../common/assets/icons/transaction-history'; import moment from 'moment'; import { useStrings } from '../../common/hooks/useStrings'; import { usePortfolio } from '../../module/PortfolioContextProvider'; +import { Icon } from '../../../../components/icons'; export const HistoryItemType = Object.freeze({ SENT: 1, @@ -106,7 +106,7 @@ const TransactionTable = ({ history }) => { - + {strings.transactionHistory} { - + {strings.transactionType} - + {strings.status} - + {strings.fee} - + {strings.amount} @@ -145,7 +145,7 @@ const TransactionTable = ({ history }) => { @@ -197,17 +197,17 @@ const TransactionHistoryItem = ({ index, row, theme, strings, unitOfAccount }) = }, }} > - {row.type === HistoryItemType.SENT && } + {row.type === HistoryItemType.SENT && } {row.type === HistoryItemType.RECEIVED && ( - + )} - {row.type === HistoryItemType.ERROR && } - {row.type === HistoryItemType.WITHDRAW && } - {row.type === HistoryItemType.DELEGATE && } + {row.type === HistoryItemType.ERROR && } + {row.type === HistoryItemType.WITHDRAW && } + {row.type === HistoryItemType.DELEGATE && } - {row.label} - + {row.label} + {moment.utc(row.time).local().format('h:mm A')} @@ -216,7 +216,7 @@ const TransactionHistoryItem = ({ index, row, theme, strings, unitOfAccount }) = {row.status} @@ -235,9 +235,28 @@ const TransactionHistoryItem = ({ index, row, theme, strings, unitOfAccount }) = - + + unitOfAccount === 'ADA' && + (row.type === HistoryItemType.ERROR || row.type === HistoryItemType.WITHDRAW || row.type === HistoryItemType.DELEGATE) + ? null + : setIsExpanded(!isExpanded) + } + > - + {(row.type === HistoryItemType.RECEIVED || row.type === HistoryItemType.WITHDRAW || row.type === HistoryItemType.DELEGATE) && @@ -247,7 +266,7 @@ const TransactionHistoryItem = ({ index, row, theme, strings, unitOfAccount }) = {isExpanded ? ( {unitOfAccount === 'ADA' ? null : ( - + {(row.type === HistoryItemType.RECEIVED || row.type === HistoryItemType.WITHDRAW || row.type === HistoryItemType.DELEGATE) && @@ -256,29 +275,22 @@ const TransactionHistoryItem = ({ index, row, theme, strings, unitOfAccount }) = )} {row.type === HistoryItemType.RECEIVED && ( - + + {row.amountAsset} {strings.assets} )} {row.type === HistoryItemType.SENT && ( - + {row.amountAsset} )} ) : null} - - unitOfAccount === 'ADA' && - (row.type === HistoryItemType.ERROR || - row.type === HistoryItemType.WITHDRAW || - row.type === HistoryItemType.DELEGATE) - ? null - : setIsExpanded(!isExpanded) - } /> diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js index 6452693423..d3fb7ba8de 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js @@ -6,11 +6,10 @@ import { defineMessages } from 'react-intl'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import StatsTable from './StatsTable'; import mockData from '../../common/mockData'; -import { ArrowIcon } from '../../common/assets/icons'; -import illustrationPng from '../../common/assets/images/illustration.png'; import { Chip } from '../../common/components/Chip'; import { Skeleton } from '../../../../components/Skeleton'; import { useStrings } from '../../common/hooks/useStrings'; +import { Icon } from '../../../../components/icons/index'; const PortfolioWallet = ({ data }) => { const theme = useTheme(); @@ -64,15 +63,15 @@ const PortfolioWallet = ({ data }) => { - + {isLoading ? ( ) : ( - + {isAdaMainUnit ? mockData.common.walletBalance.ada : mockData.common.walletBalance.usd} )} - + {isAdaMainUnit ? settingFiatPairUnit.currency || 'USD' : 'ADA'} { {isLoading ? ( ) : ( - + {isAdaMainUnit ? mockData.common.walletBalance.usd : mockData.common.walletBalance.ada}{' '} {isAdaMainUnit ? 'ADA' : unitOfAccount} @@ -120,17 +119,12 @@ const PortfolioWallet = ({ data }) => { active={mockData.common.walletBalance.percents > 0} label={ - 0 - ? theme.palette.ds.secondary_c800 - : theme.palette.ds.sys_magenta_c700 - } - style={{ - marginRight: theme.spacing(0.5), - transform: mockData.common.walletBalance.percents > 0 ? '' : 'rotate(180deg)', - }} - /> + {mockData.common.walletBalance.percents > 0 ? ( + + ) : ( + + )} + {mockData.common.walletBalance.percents > 0 ? mockData.common.walletBalance.percents @@ -157,18 +151,7 @@ const PortfolioWallet = ({ data }) => { setKeyword(e.target.value)} placeholder={strings.search} /> - {tokenList.length > 0 ? ( - - ) : ( - - - - - {strings.noResultsForThisSearch} - - - - )} + ); }; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js index 8aa7c791be..e8f812ee26 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js @@ -1,13 +1,14 @@ import React, { useCallback, useMemo, useState } from 'react'; import { Table, TableBody, TableCell, TableHead, TableRow, TableSortLabel, Typography, Stack, Box } from '@mui/material'; import { useTheme } from '@mui/material/styles'; -import { ArrowIcon, SortIcon } from '../../common/assets/icons/'; -import adaPng from '../../../../../assets/images/ada.png'; +import tokenPng from '../../common/assets/images/token.png'; import { useNavigateTo } from '../../common/hooks/useNavigateTo'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import { Chip } from '../../common/components/Chip'; import { Skeleton } from '../../../../components/Skeleton'; import { useStrings } from '../../common/hooks/useStrings'; +import { Icon } from '../../../../components/icons/index'; +import illustrationPng from '../../common/assets/images/illustration.png'; const TableRowSkeleton = ({ id, theme }) => ( { [order, orderBy, headCells] ); - return ( + return getSortedData(list).length > 0 ? (
@@ -149,10 +150,10 @@ const StatsTable = ({ data, isLoading }) => { onClick={() => handleRequestSort(id)} sx={{ float: align, cursor: 'pointer' }} > - + {label} - + ))} @@ -184,7 +185,7 @@ const StatsTable = ({ data, isLoading }) => { borderRadius: `${theme.shape.borderRadius}px`, }} component="img" - src={adaPng} + src={tokenPng} > @@ -208,13 +209,12 @@ const StatsTable = ({ data, isLoading }) => { active={row['24h'] > 0} label={ - 0 ? theme.palette.ds.secondary_c800 : theme.palette.ds.sys_magenta_c700} - style={{ - marginRight: '5px', - transform: row['24h'] > 0 ? '' : 'rotate(180deg)', - }} - /> + {row['24h'] > 0 ? ( + + ) : ( + + )} + {row['24h'] > 0 ? row['24h'] : -1 * row['24h']}% } @@ -227,13 +227,11 @@ const StatsTable = ({ data, isLoading }) => { active={row['1W'] > 0} label={ - 0 ? theme.palette.ds.secondary_c800 : theme.palette.ds.sys_magenta_c700} - style={{ - marginRight: '5px', - transform: row['1W'] > 0 ? '' : 'rotate(180deg)', - }} - /> + {row['1W'] > 0 ? ( + + ) : ( + + )} {row['1W'] > 0 ? row['1W'] : -1 * row['1W']}% } @@ -246,13 +244,11 @@ const StatsTable = ({ data, isLoading }) => { active={row['1M'] > 0} label={ - 0 ? theme.palette.ds.secondary_c800 : theme.palette.ds.sys_magenta_c700} - style={{ - marginRight: '5px', - transform: row['1M'] > 0 ? '' : 'rotate(180deg)', - }} - /> + {row['1M'] > 0 ? ( + + ) : ( + + )} {row['1M'] > 0 ? row['1M'] : -1 * row['1M']}% } @@ -284,6 +280,15 @@ const StatsTable = ({ data, isLoading }) => { ))}
+ ) : ( + + + + + {strings.noResultsForThisSearch} + + + ); }; From b3764254c294c3aba44472eca0f19e5ab00c93bc Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Mon, 3 Jun 2024 17:39:45 +0700 Subject: [PATCH 063/464] update detail chart --- .../portfolio/common/hooks/useStrings.js | 28 ++- .../UI/features/portfolio/common/mockData.js | 232 +++++++++++------- .../useCases/TokenDetails/TokenDetailChart.js | 120 +++------ .../useCases/Wallet/PortfolioWallet.js | 2 + .../portfolio/useCases/Wallet/StatsTable.js | 2 +- .../app/i18n/locales/en-US.json | 25 +- 6 files changed, 227 insertions(+), 182 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js index e131470495..f21b317e15 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js @@ -164,18 +164,30 @@ export const messages = Object.freeze( id: 'portfolio.statsTable.header.price', defaultMessage: '!!!Price', }, - '24h': { - id: 'portfolio.statsTable.header.24h', - defaultMessage: '!!!24h', + '24H': { + id: 'portfolio.chart.button.24H', + defaultMessage: '!!!24H', }, '1W': { - id: 'portfolio.statsTable.header.1w', + id: 'portfolio.chart.button.1W', defaultMessage: '!!!1W', }, '1M': { - id: 'portfolio.statsTable.header.1m', + id: 'portfolio.chart.button.1M', defaultMessage: '!!!1M', }, + '6M': { + id: 'portfolio.chart.button.6M', + defaultMessage: '!!!6M', + }, + '1Y': { + id: 'portfolio.chart.button.1Y', + defaultMessage: '!!!1W', + }, + ALL: { + id: 'portfolio.chart.button.ALL', + defaultMessage: '!!!ALL', + }, portfolio: { id: 'portfolio.statsTable.header.portfolio', defaultMessage: '!!!Portfolio', @@ -252,7 +264,6 @@ export const messages = Object.freeze( id: 'portfolio.liquidityTable.header.tokenPair', defaultMessage: '!!!Token pair', }, - firstTokenValue: { id: 'portfolio.liquidityTable.header.firstTokenValue', defaultMessage: '!!!Token value 1', @@ -325,9 +336,12 @@ export const useStrings = () => { allTimeLow: intl.formatMessage(messages.allTimeLow), name: intl.formatMessage(messages.name), price: intl.formatMessage(messages.price), - '24h': intl.formatMessage(messages['24h']), + '24H': intl.formatMessage(messages['24H']), '1W': intl.formatMessage(messages['1W']), '1M': intl.formatMessage(messages['1M']), + '6M': intl.formatMessage(messages['6M']), + '1Y': intl.formatMessage(messages['1Y']), + ALL: intl.formatMessage(messages['ALL']), portfolio: intl.formatMessage(messages.portfolio), totalAmount: intl.formatMessage(messages.totalAmount), transactionHistory: intl.formatMessage(messages.transactionHistory), diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js b/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js index a2201d6d14..68c428cede 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js @@ -4,27 +4,95 @@ import { HistoryItemStatus, HistoryItemType } from '../useCases/TokenDetails/Tra const startDate = new Date('01-01-2023 8:30'); const endDate = new Date('05-28-2024 11:40'); const now = new Date(); -const start24HoursAgo = new Date(now.getTime() - 24 * 60 * 60 * 1000); -const start1WeekAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000); -const start1MonthAgo = new Date(now.getFullYear(), now.getMonth() - 1, now.getDate()); -const start6MonthAgo = new Date(now.getFullYear(), now.getMonth() - 6, now.getDate()); -const start1YearAgo = new Date(now.getFullYear() - 1, now.getMonth(), now.getDate()); +const start24HoursAgo = new Date(now.getTime() - 24 * 60 * 60 * 1000).getTime(); +const start1WeekAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000).getTime(); +const start1MonthAgo = new Date(now.getFullYear(), now.getMonth() - 1, now.getDate()).getTime(); +const start6MonthAgo = new Date(now.getFullYear(), now.getMonth() - 6, now.getDate()).getTime(); +const start1YearAgo = new Date(now.getFullYear() - 1, now.getMonth(), now.getDate()).getTime(); const getRandomTime = (startDate, endDate) => { - const date = new Date(startDate.getTime() + Math.random() * (endDate.getTime() - startDate.getTime())); + const date = new Date(startDate + Math.random() * (endDate - startDate)); return date.toISOString(); }; const getRandomNumber = (min, max, toFixed) => { return (Math.random() * (max - min) + min).toFixed(toFixed); }; -const createChartData = (quantity: number, fromTime: number) => { - const tmp = Array.from({ length: quantity }).map(item => ({ - time: getRandomTime(fromTime, now), - value: getRandomNumber(-10, 10, 3), - usd: getRandomNumber(-1000, 1000, 3), - })); +const createChartData = (timePeriod: '24H' | '1W' | '1M' | '6M' | '1Y') => { + const quantity = getQuantityBasedOnTimePeriod(timePeriod); + const fromTime = getFromTime(timePeriod, now); + const interval = getInterval(timePeriod); + + const tmp = Array.from({ length: quantity }).map((_, index) => { + const randomNumber = getRandomNumber(-20, 20, 2); + const time = new Date(fromTime + index * interval); + const utcString = `${time.getUTCFullYear()}-${pad(time.getUTCMonth() + 1, 2)}-${pad(time.getUTCDate(), 2)}T${pad( + time.getUTCHours(), + 2 + )}:${pad(time.getUTCMinutes(), 2)}:${pad(time.getUTCSeconds(), 2)}Z`; + + const frequency = 5; + const value = Math.sin((index * Math.PI * 2 * frequency) / quantity); + + return { + time: utcString, + value: value.toFixed(2), + usd: (value * 100).toFixed(3), + }; + }); return tmp; }; +// HELPERS +function pad(number: number, length: number) { + return String(number).padStart(length, '0'); +} +const getQuantityBasedOnTimePeriod = (timePeriod: '24H' | '1W' | '1M' | '6M' | '1Y') => { + switch (timePeriod) { + case '24H': + return 96; // 4 data points per hour (every 15 minutes) + case '1W': + return 168; // Hourly data for a week + case '1M': + const daysInMonth = new Date(now).getDate(); // Get number of days in current month + return Math.floor((daysInMonth * 24) / 4); // Approximately 4 values per day + case '6M': + return 180; // Approximately 1 data point per day + case '1Y': + return 90; // Approximately 1 data point every 4 days + default: + throw new Error('Invalid time period'); + } +}; +const getFromTime = (timePeriod: '24H' | '1W' | '1M' | '6M' | '1Y', now: number) => { + switch (timePeriod) { + case '24H': + return start24HoursAgo; + case '1W': + return start1WeekAgo; + case '1M': + return start1MonthAgo; + case '6M': + return start6MonthAgo; + case '1Y': + return start1YearAgo; + default: + throw new Error('Invalid time period'); + } +}; +const getInterval = (timePeriod: '24H' | '1W' | '1M' | '6M' | '1Y') => { + switch (timePeriod) { + case '24H': + return 15 * 60 * 1000; // 15 minutes in milliseconds + case '1W': + return 60 * 60 * 1000; // 1 hour in milliseconds + case '1M': + case '6M': + case '1Y': + return (24 * 60 * 60 * 1000) / getQuantityBasedOnTimePeriod(timePeriod); // Interval based on quantity + default: + throw new Error('Invalid time period'); + } +}; + // ALL THE MOCK DATA FOR RENDERING UI NEW const mockData = { common: { @@ -75,13 +143,13 @@ const mockData = { { value: (10 * Math.random()).toFixed(2) }, { value: (10 * Math.random()).toFixed(5) }, ], - chartData: [ - ...createChartData(96, start24HoursAgo), - ...createChartData(168, start1WeekAgo), - ...createChartData(120, start1MonthAgo), - ...createChartData(180, start6MonthAgo), - ...createChartData(90, start1YearAgo), - ], + chartData: { + start24HoursAgo: createChartData('24H'), + start1WeekAgo: createChartData('1W'), + start1MonthAgo: createChartData('1M'), + start6MonthAgo: createChartData('6M'), + start1YearAgo: createChartData('1Y'), + }, }, { name: 'DOGE', @@ -114,13 +182,13 @@ const mockData = { { value: (10 * Math.random()).toFixed(2) }, { value: (10 * Math.random()).toFixed(5) }, ], - chartData: [ - ...createChartData(96, start24HoursAgo), - ...createChartData(168, start1WeekAgo), - ...createChartData(120, start1MonthAgo), - ...createChartData(180, start6MonthAgo), - ...createChartData(90, start1YearAgo), - ], + chartData: { + start24HoursAgo: createChartData('24H'), + start1WeekAgo: createChartData('1W'), + start1MonthAgo: createChartData('1M'), + start6MonthAgo: createChartData('6M'), + start1YearAgo: createChartData('1Y'), + }, }, { name: 'ADA', @@ -153,13 +221,13 @@ const mockData = { { value: (10 * Math.random()).toFixed(2) }, { value: (10 * Math.random()).toFixed(5) }, ], - chartData: [ - ...createChartData(96, start24HoursAgo), - ...createChartData(168, start1WeekAgo), - ...createChartData(120, start1MonthAgo), - ...createChartData(180, start6MonthAgo), - ...createChartData(90, start1YearAgo), - ], + chartData: { + start24HoursAgo: createChartData('24H'), + start1WeekAgo: createChartData('1W'), + start1MonthAgo: createChartData('1M'), + start6MonthAgo: createChartData('6M'), + start1YearAgo: createChartData('1Y'), + }, }, { name: 'Shiba', @@ -192,13 +260,13 @@ const mockData = { { value: (10 * Math.random()).toFixed(2) }, { value: (10 * Math.random()).toFixed(5) }, ], - chartData: [ - ...createChartData(96, start24HoursAgo), - ...createChartData(168, start1WeekAgo), - ...createChartData(120, start1MonthAgo), - ...createChartData(180, start6MonthAgo), - ...createChartData(90, start1YearAgo), - ], + chartData: { + start24HoursAgo: createChartData('24H'), + start1WeekAgo: createChartData('1W'), + start1MonthAgo: createChartData('1M'), + start6MonthAgo: createChartData('6M'), + start1YearAgo: createChartData('1Y'), + }, }, { name: 'ALT', @@ -231,13 +299,13 @@ const mockData = { { value: (10 * Math.random()).toFixed(2) }, { value: (10 * Math.random()).toFixed(5) }, ], - chartData: [ - ...createChartData(96, start24HoursAgo), - ...createChartData(168, start1WeekAgo), - ...createChartData(120, start1MonthAgo), - ...createChartData(180, start6MonthAgo), - ...createChartData(90, start1YearAgo), - ], + chartData: { + start24HoursAgo: createChartData('24H'), + start1WeekAgo: createChartData('1W'), + start1MonthAgo: createChartData('1M'), + start6MonthAgo: createChartData('6M'), + start1YearAgo: createChartData('1Y'), + }, }, { name: 'TKN1', @@ -270,13 +338,13 @@ const mockData = { { value: (10 * Math.random()).toFixed(2) }, { value: (10 * Math.random()).toFixed(5) }, ], - chartData: [ - ...createChartData(96, start24HoursAgo), - ...createChartData(168, start1WeekAgo), - ...createChartData(120, start1MonthAgo), - ...createChartData(180, start6MonthAgo), - ...createChartData(90, start1YearAgo), - ], + chartData: { + start24HoursAgo: createChartData('24H'), + start1WeekAgo: createChartData('1W'), + start1MonthAgo: createChartData('1M'), + start6MonthAgo: createChartData('6M'), + start1YearAgo: createChartData('1Y'), + }, }, { name: 'TKN2', @@ -309,13 +377,13 @@ const mockData = { { value: (10 * Math.random()).toFixed(2) }, { value: (10 * Math.random()).toFixed(5) }, ], - chartData: [ - ...createChartData(96, start24HoursAgo), - ...createChartData(168, start1WeekAgo), - ...createChartData(120, start1MonthAgo), - ...createChartData(180, start6MonthAgo), - ...createChartData(90, start1YearAgo), - ], + chartData: { + start24HoursAgo: createChartData('24H'), + start1WeekAgo: createChartData('1W'), + start1MonthAgo: createChartData('1M'), + start6MonthAgo: createChartData('6M'), + start1YearAgo: createChartData('1Y'), + }, }, { name: 'TKN3', @@ -348,13 +416,13 @@ const mockData = { { value: (10 * Math.random()).toFixed(2) }, { value: (10 * Math.random()).toFixed(5) }, ], - chartData: [ - ...createChartData(96, start24HoursAgo), - ...createChartData(168, start1WeekAgo), - ...createChartData(120, start1MonthAgo), - ...createChartData(180, start6MonthAgo), - ...createChartData(90, start1YearAgo), - ], + chartData: { + start24HoursAgo: createChartData('24H'), + start1WeekAgo: createChartData('1W'), + start1MonthAgo: createChartData('1M'), + start6MonthAgo: createChartData('6M'), + start1YearAgo: createChartData('1Y'), + }, }, { name: 'TKN6', @@ -387,13 +455,13 @@ const mockData = { { value: (10 * Math.random()).toFixed(2) }, { value: (10 * Math.random()).toFixed(5) }, ], - chartData: [ - ...createChartData(96, start24HoursAgo), - ...createChartData(168, start1WeekAgo), - ...createChartData(120, start1MonthAgo), - ...createChartData(180, start6MonthAgo), - ...createChartData(90, start1YearAgo), - ], + chartData: { + start24HoursAgo: createChartData('24H'), + start1WeekAgo: createChartData('1W'), + start1MonthAgo: createChartData('1M'), + start6MonthAgo: createChartData('6M'), + start1YearAgo: createChartData('1Y'), + }, }, { name: 'TKN8', @@ -426,13 +494,13 @@ const mockData = { { value: (10 * Math.random()).toFixed(2) }, { value: (10 * Math.random()).toFixed(5) }, ], - chartData: [ - ...createChartData(96, start24HoursAgo), - ...createChartData(168, start1WeekAgo), - ...createChartData(120, start1MonthAgo), - ...createChartData(180, start6MonthAgo), - ...createChartData(90, start1YearAgo), - ], + chartData: { + start24HoursAgo: createChartData('24H'), + start1WeekAgo: createChartData('1W'), + start1MonthAgo: createChartData('1M'), + start6MonthAgo: createChartData('6M'), + start1YearAgo: createChartData('1Y'), + }, }, ], }, diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js index 8061cff4f7..c51a2938d2 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js @@ -10,20 +10,21 @@ import { useStrings } from '../../common/hooks/useStrings'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import { Icon } from '../../../../components/icons'; -const StyledButton = styled(Button)(({ theme }) => ({ +const StyledButton = styled(Button)(({ theme, disabled, variant }) => ({ fontWeight: 500, fontSize: '0.75rem', lineHeight: '1.125rem', height: '30px', padding: '6px !important', minWidth: '36px', + backgroundColor: + variant === 'contained' ? (disabled ? theme.palette.ds.gray_c100 : theme.palette.ds.el_primary_medium) : `transparent`, - '& .MuiButton-contained': { - backgroundColor: theme.palette.ds.el_primary_medium, + '&.MuiButton-contained': { color: theme.palette.ds.el_static_white, }, - '& .MuiButton-secondary': { - color: theme.palette.ds.text_primary_medium, + '&.MuiButton-secondary': { + color: disabled ? theme.palette.ds.gray_c100 : theme.palette.ds.text_primary_medium, }, })); @@ -33,85 +34,23 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { const strings = useStrings(); const { unitOfAccount } = usePortfolio(); const [buttonPeriodProps, setButtonPeriodProps] = useState([ - { label: '24H', active: true }, - { label: '1W', active: false }, - { label: '1M', active: false }, - { label: '6M', active: false }, - { label: '1Y', active: false }, - { label: 'ALL', active: false }, + { id: 'start24HoursAgo', label: strings['24H'], active: true }, + { id: 'start1WeekAgo', label: strings['1W'], active: false }, + { id: 'start1MonthAgo', label: strings['1M'], active: false }, + { id: 'start6MonthAgo', label: strings['6M'], active: false }, + { id: 'start1YearAgo', label: strings['1Y'], active: false }, + { id: 'ALL', label: strings['ALL'], active: false }, ]); const [detailInfo, setDetailInfo] = useState({ - value: tokenInfo.chartData[0].value, - usd: tokenInfo.chartData[0].usd, + value: tokenInfo.chartData[buttonPeriodProps[0].id][0].value, + usd: tokenInfo.chartData[buttonPeriodProps[0].id][0].usd, }); - const categorizeByTime = data => { - const now = new Date(); - - const yesterday = new Date(now); - yesterday.setDate(now.getDate() - 1); - - const oneWeekAgo = new Date(now); - oneWeekAgo.setDate(now.getDate() - 7); - - const oneMonthAgo = new Date(now); - oneMonthAgo.setMonth(now.getMonth() - 1); - - const sixMonthsAgo = new Date(now); - sixMonthsAgo.setMonth(now.getMonth() - 6); - - const oneYearAgo = new Date(now); - oneYearAgo.setFullYear(now.getFullYear() - 1); - - const categorizedData = _.reduce( - data, - (acc, item) => { - const itemTime = new Date(item.time); - - if (itemTime >= yesterday) { - acc['24H'].push(item); - } - if (itemTime >= oneWeekAgo) { - acc['1W'].push(item); - } - if (itemTime >= oneMonthAgo) { - acc['1M'].push(item); - } - if (itemTime >= sixMonthsAgo) { - acc['6M'].push(item); - } - if (itemTime >= oneYearAgo) { - acc['1Y'].push(item); - } - - acc['ALL'].push(item); - - return acc; - }, - { - '24H': [], - '1W': [], - '1M': [], - '6M': [], - '1Y': [], - ALL: [], - } - ); - - _.forEach(categorizedData, (value, key) => { - categorizedData[key] = _.sortBy(value, ['time']); - }); - - return categorizedData; - }; - - const filteredData = useMemo(() => categorizeByTime(tokenInfo.chartData), [tokenInfo.chartData]); - const CustomYAxisTick = props => { const { x, y, payload } = props; return ( - + {payload.value} ); @@ -190,6 +129,14 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { }); }; + const minValue = tokenInfo.chartData[buttonPeriodProps.find(item => item.active).id].reduce( + (min, item) => Math.min(min, item.value), + Infinity + ); + const maxValue = tokenInfo.chartData[buttonPeriodProps.find(item => item.active).id].reduce( + (max, item) => Math.max(max, item.value), + -Infinity + ); return ( @@ -262,13 +209,24 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { {isLoading ? null : ( - - item.active).label]} onMouseMove={handleMouseMove}> + + item.active).id]} onMouseMove={handleMouseMove}> - + } /> ( @@ -276,7 +234,7 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { chartBottom={chartHeight} rectWidth={93} rectHeight={34} - dataLength={filteredData[buttonPeriodProps.find(item => item.active).label].length} + dataLength={tokenInfo.chartData[buttonPeriodProps.find(item => item.active).id].length} {...props} /> )} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js index d3fb7ba8de..529833737e 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js @@ -20,6 +20,8 @@ const PortfolioWallet = ({ data }) => { const [tokenList, setTokenList] = useState([]); const [isAdaMainUnit, setIsAdaMainUnit] = useState(unitOfAccount === 'ADA'); + console.log('token list ne', data); + const handleCurrencyChange = () => { if (isAdaMainUnit) { changeUnitOfAccount(settingFiatPairUnit.currency || 'USD'); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js index e8f812ee26..f81781e67c 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js @@ -72,7 +72,7 @@ const StatsTable = ({ data, isLoading }) => { const headCells = [ { id: 'name', label: strings.name, align: 'left', sortType: 'character' }, { id: 'price', label: strings.price, align: 'left', sortType: 'numeric' }, - { id: '24h', label: strings['24h'], align: 'left', sortType: 'numeric' }, + { id: '24h', label: strings['24H'], align: 'left', sortType: 'numeric' }, { id: '1W', label: strings['1W'], align: 'left', sortType: 'numeric' }, { id: '1M', label: strings['1M'], align: 'left', sortType: 'numeric' }, { diff --git a/packages/yoroi-extension/app/i18n/locales/en-US.json b/packages/yoroi-extension/app/i18n/locales/en-US.json index 56f4a793e3..03c33e7449 100644 --- a/packages/yoroi-extension/app/i18n/locales/en-US.json +++ b/packages/yoroi-extension/app/i18n/locales/en-US.json @@ -1044,14 +1044,14 @@ "gouvernace.participateDialog.title": "Withdraw warning", "gouvernace.participateDialog.contentInfo": "To withdraw your rewards, you need to participate in the Cardano Governance. Your rewards will continue to accumulate, but you are only able to withdraw it once you join the Governance process.", "gouvernace.participateDialog.buttonText": "Participate on governance", - "gouvernace.statusSelected":"You have selected {status} as your governance status. You can change it at any time by clicking in the card bellow", - "gouvernace.registerGovernance":"Register in Governance", - "gouvernace.chooseDrep":"chooseDrep", - "gouvernace.reviewSelection":"Review the selections carefully to assign yourself a Governance Status", - "gouvernace.operations":"Operations", - "gouvernace.selectAbstein":"Select abstain", - "gouvernace.selectNoConfidenc":"Select no confidence", - "gouvernace.designatedSomeone":"You are designating someone else to cast your vote on your behalf for all proposals now and in the future.", + "gouvernace.statusSelected": "You have selected {status} as your governance status. You can change it at any time by clicking in the card bellow", + "gouvernace.registerGovernance": "Register in Governance", + "gouvernace.chooseDrep": "chooseDrep", + "gouvernace.reviewSelection": "Review the selections carefully to assign yourself a Governance Status", + "gouvernace.operations": "Operations", + "gouvernace.selectAbstein": "Select abstain", + "gouvernace.selectNoConfidenc": "Select no confidence", + "gouvernace.designatedSomeone": "You are designating someone else to cast your vote on your behalf for all proposals now and in the future.", "portfolio.main.header.text": "Tokens", "portfolio.main.search.text": "Search by asset name or ID", "portfolio.common.soonAvailable": "Soon available", @@ -1094,9 +1094,12 @@ "portfolio.tokenInfo.performance.allTimeLow": "All time low", "portfolio.statsTable.header.name": "Name", "portfolio.statsTable.header.price": "Price", - "portfolio.statsTable.header.24h": "24H", - "portfolio.statsTable.header.1w": "1W", - "portfolio.statsTable.header.1m": "1M", + "portfolio.chart.button.24H": "24H", + "portfolio.chart.button.1W": "1W", + "portfolio.chart.button.1M": "1M", + "portfolio.chart.button.6M": "6M", + "portfolio.chart.button.1Y": "1Y", + "portfolio.chart.button.ALL": "ALL", "portfolio.statsTable.header.portfolio": "Portfolio", "portfolio.statsTable.header.totalAmount": "Total amount", "portfolio.transactionTable.title": "Transaction history", From 18d6bd3625729e10aea2803bf2fd5d8911216659 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Mon, 3 Jun 2024 14:16:27 +0300 Subject: [PATCH 064/464] fix typo --- .../features/governace/common/useStrings.js | 40 ++++++++-------- .../dialogs/GovernanceParticipateDialog.js | 6 +-- .../wallet/staking/StakingPageContent.js | 8 ++-- .../app/i18n/locales/en-US.json | 46 +++++++++---------- .../app/stores/toplevel/DelegationStore.js | 10 ++-- 5 files changed, 55 insertions(+), 55 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/governace/common/useStrings.js b/packages/yoroi-extension/app/UI/features/governace/common/useStrings.js index 21a8a2efad..6e28a57920 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/useStrings.js +++ b/packages/yoroi-extension/app/UI/features/governace/common/useStrings.js @@ -5,74 +5,74 @@ import { useIntl } from '../../../context/IntlProvider'; export const messages = Object.freeze( defineMessages({ governanceStatus: { - id: 'gouvernace.governanceStatus', + id: 'governance.governanceStatus', defaultMessage: '!!!Governance status', }, governanceStatusInfo: { - id: 'gouvernace.governanceStatusInfo', + id: 'governance.governanceStatusInfo', defaultMessage: '!!!You have selected undefined as your governance status. You can change it at any time by clicking in the card bellow', }, abstain: { - id: 'gouvernace.abstain', + id: 'governance.abstain', defaultMessage: '!!!Abstain', }, abstainInfo: { - id: 'gouvernace.abstainInfo', + id: 'governance.abstainInfo', defaultMessage: '!!!You are choosing not to cast a vote on all proposals now and in the future.', }, noConfidence: { - id: 'gouvernace.noConfidence', + id: 'governance.noConfidence', defaultMessage: '!!!No Confidence', }, noConfidenceInfo: { - id: 'gouvernace.noConfidenceInfo', + id: 'governance.noConfidenceInfo', defaultMessage: '!!!You are expressing a lack of trust for all proposals now and in the future.', }, learnMore: { - id: 'gouvernace.learnMore', + id: 'governance.learnMore', defaultMessage: '!!!Learn more About Governance', }, becomeADrep: { - id: 'gouvernace.becomeADrep', + id: 'governance.becomeADrep', defaultMessage: '!!!Want to became a Drep?', }, drepId: { - id: 'gouvernace.drepId', + id: 'governance.drepId', defaultMessage: '!!!Drep ID:', }, delegateToDRep: { - id: 'gouvernace.delegateToDRep', + id: 'governance.delegateToDRep', defaultMessage: '!!!Delegate to a DRep', }, delegateingToDRep: { - id: 'gouvernace.delegateingToDRep', + id: 'governance.delegateingToDRep', defaultMessage: '!!!Delegating to a DRep', }, designatingSomeoneElse: { - id: 'gouvernace.designatingSomeoneElse', + id: 'governance.designatingSomeoneElse', defaultMessage: '!!!You are designating someone else to cast your vote on your behalf for all proposals now and in the future.', }, registerGovernance: { - id: 'gouvernace.registerGovernance', + id: 'governance.registerGovernance', defaultMessage: '!!!Register in Governance', }, chooseDrep: { - id: 'gouvernace.chooseDrep', + id: 'governance.chooseDrep', defaultMessage: '!!!Choose your Drep', }, reviewSelection: { - id: 'gouvernace.reviewSelection', + id: 'governance.reviewSelection', defaultMessage: '!!!Review the selections carefully to assign yourself a Governance Status', }, statusSelected: { - id: 'gouvernace.statusSelected', + id: 'governance.statusSelected', defaultMessage: '!!!You have selected ${status} as your governance status. You can change it at any time by clicking in the card bellow', }, designatedSomeone: { - id: 'gouvernace.designatedSomeone', + id: 'governance.designatedSomeone', defaultMessage: '!!! You are designating someone else to cast your vote on your behalf for all proposals now and in the future.', }, @@ -85,15 +85,15 @@ export const messages = Object.freeze( defaultMessage: '!!!Transaction details', }, operations: { - id: 'gouvernace.operations', + id: 'governance.operations', defaultMessage: '!!!Operations', }, selectAbstein: { - id: 'gouvernace.selectAbstein', + id: 'governance.selectAbstein', defaultMessage: '!!!Select abstain', }, selectNoConfidenc: { - id: 'gouvernace.selectNoConfidenc', + id: 'governance.selectNoConfidenc', defaultMessage: '!!!Select no confidenc', }, password: { diff --git a/packages/yoroi-extension/app/containers/wallet/dialogs/GovernanceParticipateDialog.js b/packages/yoroi-extension/app/containers/wallet/dialogs/GovernanceParticipateDialog.js index 0def25209e..ecab259b87 100644 --- a/packages/yoroi-extension/app/containers/wallet/dialogs/GovernanceParticipateDialog.js +++ b/packages/yoroi-extension/app/containers/wallet/dialogs/GovernanceParticipateDialog.js @@ -17,16 +17,16 @@ type Props = {| const messages = defineMessages({ title: { - id: 'gouvernace.participateDialog.title', + id: 'governance.participateDialog.title', defaultMessage: '!!!Withdraw warning', }, contentInfo: { - id: 'gouvernace.participateDialog.contentInfo', + id: 'governance.participateDialog.contentInfo', defaultMessage: '!!!To withdraw your rewards, you need to participate in the Cardano Governance. Your rewards will continue to accumulate, but you are only able to withdraw it once you join the Governance process.', }, buttonText: { - id: 'gouvernace.participateDialog.buttonText', + id: 'governance.participateDialog.buttonText', defaultMessage: '!!!Participate on governance', }, }); diff --git a/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js b/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js index 8abeaab4fb..8246fdffa3 100644 --- a/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js +++ b/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js @@ -226,7 +226,7 @@ class StakingPageContent extends Component { if (delegationRequests == null) { throw new Error(`${nameof(StakingPageContent)} opened for non-reward wallet`); } - stores.delegation.checkGouvernanceStatus(); + stores.delegation.checkGovernanceStatus(); const balance = stores.transactions.getBalance(publicDeriver); const isWalletWithNoFunds = balance != null && balance.getDefaultEntry().amount.isZero(); @@ -238,7 +238,7 @@ class StakingPageContent extends Component { const currentlyDelegating = stores.delegation.isCurrentlyDelegating(publicDeriver); const delegatedUtxo = stores.delegation.getDelegatedUtxoBalance(publicDeriver); const delegatedRewards = stores.delegation.getRewardBalanceOrZero(publicDeriver); - const isParticipatingToGouvernance = stores.delegation.isParticipatingToGouvernance; + const isParticipatingToGovernance = stores.delegation.isParticipatingToGovernance; return ( @@ -255,7 +255,7 @@ class StakingPageContent extends Component { }) } withdrawRewards={ - isParticipatingToGouvernance === false + isParticipatingToGovernance === false ? async () => { this.props.actions.dialogs.open.trigger({ dialog: GovernanceParticipateDialog, @@ -311,7 +311,7 @@ class StakingPageContent extends Component { shouldHideBalance={this.props.stores.profile.shouldHideBalance} unitOfAccount={this.toUnitOfAccount} withdrawRewards={ - isParticipatingToGouvernance === false + isParticipatingToGovernance === false ? () => { this.props.actions.dialogs.open.trigger({ dialog: GovernanceParticipateDialog, diff --git a/packages/yoroi-extension/app/i18n/locales/en-US.json b/packages/yoroi-extension/app/i18n/locales/en-US.json index 579f97d241..5e9b924556 100644 --- a/packages/yoroi-extension/app/i18n/locales/en-US.json +++ b/packages/yoroi-extension/app/i18n/locales/en-US.json @@ -1029,27 +1029,27 @@ "yoroiTransfer.waiting.progressInfo.checkingAddresses": "Checking addresses funds", "yoroiTransfer.waiting.progressInfo.restoringAddresses": "Fetching addresses", "yoroiTransfer.waiting.title.label": "Wallet is being restored", - "gouvernace.delegateToDRep":"Delegate to a DRep", - "gouvernace.delegateingToDRep":"Delegateing to a DRep", - "gouvernace.designatingSomeoneElse":"You are designating someone else to cast your vote on your behalf for all proposals now and in the future.", - "gouvernace.governanceStatus":"Governance status", - "gouvernace.governanceStatusInfo":"Governance status", - "gouvernace.abstain":"Abstain", - "gouvernace.abstainInfo":"You are choosing not to cast a vote on all proposals now and in the future.", - "gouvernace.noConfidence":"No Confidence", - "gouvernace.noConfidenceInfo":"You are expressing a lack of trust for all proposals now and in the future.", - "gouvernace.learnMore":"Learn more About Governance", - "gouvernace.becomeADrep":"Want to became a Drep?", - "gouvernace.drepId":"Drep ID:", - "gouvernace.statusSelected":"You have selected {status} as your governance status. You can change it at any time by clicking in the card bellow", - "gouvernace.registerGovernance":"Register in Governance", - "gouvernace.chooseDrep":"chooseDrep", - "gouvernace.reviewSelection":"Review the selections carefully to assign yourself a Governance Status", - "gouvernace.participateDialog.title":"Withdraw warning", - "gouvernace.participateDialog.contentInfo":"To withdraw your rewards, you need to participate in the Cardano Governance. Your rewards will continue to accumulate, but you are only able to withdraw it once you join the Governance process.", - "gouvernace.participateDialog.buttonText":"Participate on governance", - "gouvernace.operations":"Operations", - "gouvernace.selectAbstein":"Select abstain", - "gouvernace.selectNoConfidenc":"Select no confidence", - "gouvernace.designatedSomeone":"You are designating someone else to cast your vote on your behalf for all proposals now and in the future." + "governance.delegateToDRep":"Delegate to a DRep", + "governance.delegateingToDRep":"Delegateing to a DRep", + "governance.designatingSomeoneElse":"You are designating someone else to cast your vote on your behalf for all proposals now and in the future.", + "governance.governanceStatus":"Governance status", + "governance.governanceStatusInfo":"Governance status", + "governance.abstain":"Abstain", + "governance.abstainInfo":"You are choosing not to cast a vote on all proposals now and in the future.", + "governance.noConfidence":"No Confidence", + "governance.noConfidenceInfo":"You are expressing a lack of trust for all proposals now and in the future.", + "governance.learnMore":"Learn more About Governance", + "governance.becomeADrep":"Want to became a Drep?", + "governance.drepId":"Drep ID:", + "governance.statusSelected":"You have selected {status} as your governance status. You can change it at any time by clicking in the card bellow", + "governance.registerGovernance":"Register in Governance", + "governance.chooseDrep":"chooseDrep", + "governance.reviewSelection":"Review the selections carefully to assign yourself a Governance Status", + "governance.participateDialog.title":"Withdraw warning", + "governance.participateDialog.contentInfo":"To withdraw your rewards, you need to participate in the Cardano Governance. Your rewards will continue to accumulate, but you are only able to withdraw it once you join the Governance process.", + "governance.participateDialog.buttonText":"Participate on governance", + "governance.operations":"Operations", + "governance.selectAbstein":"Select abstain", + "governance.selectNoConfidenc":"Select no confidence", + "governance.designatedSomeone":"You are designating someone else to cast your vote on your behalf for all proposals now and in the future." } diff --git a/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js b/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js index 0106190db1..e2e22d9902 100644 --- a/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js +++ b/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js @@ -62,7 +62,7 @@ type PoolTransitionModal = {| show: 'open' | 'closed' | 'idle', shouldUpdatePool export default class DelegationStore extends Store { @observable delegationRequests: Array = []; - @observable isParticipatingToGouvernance: boolean = false; + @observable isParticipatingToGovernance: boolean = false; @observable poolTransitionRequestInfo: ?PoolTransition = null; @observable poolTransitionConfig: PoolTransitionModal = { show: 'closed', @@ -112,7 +112,7 @@ export default class DelegationStore extends Store { this.registerReactions([this._changeWallets]); delegation.setSelectedPage.listen(this._setSelectedPage); this.checkPoolTransition(); - this.checkGouvernanceStatus(); + this.checkGovernanceStatus(); } @action @@ -253,17 +253,17 @@ export default class DelegationStore extends Store { console.warn(error); } }; - checkGouvernanceStatus: () => Promise = async () => { + checkGovernanceStatus: () => Promise = async () => { const publicDeriver = this.stores.wallets.selected; if (publicDeriver == null) { return; } const walletId = publicDeriver?.getPublicDeriverId(); - const gouvernanceResult = await getDrepDelegationState(String(walletId)); + const governanceResult = await getDrepDelegationState(String(walletId)); try { runInAction(() => { - this.isParticipatingToGouvernance = gouvernanceResult.kind !== 'none' && gouvernanceResult.drepID !== null; + this.isParticipatingToGovernance = governanceResult.kind !== 'none' && governanceResult.drepID !== null; }); } catch (error) { console.warn(error); From b26548eb396c576a3c2d19a05376b1175e8f21d4 Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Tue, 4 Jun 2024 14:41:00 +0700 Subject: [PATCH 065/464] feat: refactor --- .../app/UI/components/Input/SearchInput.js | 4 +- .../app/UI/components/buttons/CopyButton.js | 2 +- .../components/Chip.js => components/chip.js} | 0 .../app/UI/components/icons/ChipArrowDown.js | 2 +- .../app/UI/components/icons/Sort.js | 2 +- .../common/{components => }/PortfolioMenu.js | 25 +-- .../UI/features/portfolio/common/mockData.js | 204 ++++++++++-------- .../common/{hooks => }/useNavigateTo.js | 2 +- .../common/{hooks => }/useStrings.js | 2 +- .../portfolio/useCases/Dapps/LendAndBorrow.js | 4 +- .../useCases/Dapps/LiquidityTable.js | 64 +++--- .../portfolio/useCases/Dapps/OrderTable.js | 6 +- .../useCases/Dapps/PortfolioDapps.js | 14 +- .../useCases/TokenDetails/TokenDetailChart.js | 36 ++-- .../TokenDetails/TokenDetailOverview.js | 6 +- .../TokenDetails/TokenDetailPerformance.js | 14 +- .../useCases/TokenDetails/TokenDetails.js | 4 +- .../useCases/TokenDetails/TransactionTable.js | 9 +- .../useCases/Wallet/PortfolioWallet.js | 22 +- .../portfolio/useCases/Wallet/StatsTable.js | 24 +-- .../app/UI/layout/PortfolioPageLayout.js | 2 +- .../app/i18n/locales/en-US.json | 48 ++--- 22 files changed, 260 insertions(+), 236 deletions(-) rename packages/yoroi-extension/app/UI/{features/portfolio/common/components/Chip.js => components/chip.js} (100%) rename packages/yoroi-extension/app/UI/features/portfolio/common/{components => }/PortfolioMenu.js (71%) rename packages/yoroi-extension/app/UI/features/portfolio/common/{hooks => }/useNavigateTo.js (89%) rename packages/yoroi-extension/app/UI/features/portfolio/common/{hooks => }/useStrings.js (96%) diff --git a/packages/yoroi-extension/app/UI/components/Input/SearchInput.js b/packages/yoroi-extension/app/UI/components/Input/SearchInput.js index ac1b7c3ec8..dedbc16f80 100644 --- a/packages/yoroi-extension/app/UI/components/Input/SearchInput.js +++ b/packages/yoroi-extension/app/UI/components/Input/SearchInput.js @@ -10,7 +10,7 @@ const StyledInput = styled(Input)(({ theme }) => ({ border: '1px solid', borderColor: theme.palette.ds.gray_c400, 'input::placeholder': { - color: theme.palette.gray_c600, + color: theme.palette.ds.gray_c600, }, })); @@ -19,7 +19,7 @@ const StyledInputAdornment = styled(InputAdornment)(({ theme }) => ({ cursor: 'pointer', }, - '> svg > use': { + '& > svg > use': { fill: theme.palette.ds.gray_c900, }, })); diff --git a/packages/yoroi-extension/app/UI/components/buttons/CopyButton.js b/packages/yoroi-extension/app/UI/components/buttons/CopyButton.js index 5e8ab570a5..8a1a150d9f 100644 --- a/packages/yoroi-extension/app/UI/components/buttons/CopyButton.js +++ b/packages/yoroi-extension/app/UI/components/buttons/CopyButton.js @@ -2,7 +2,7 @@ import React, { useState } from 'react'; import { IconButton } from '@mui/material'; import { CopyToClipboard } from 'react-copy-to-clipboard'; import { Tooltip } from '../Tooltip'; -import { useStrings } from '../../features/portfolio/common/hooks/useStrings'; +import { useStrings } from '../../features/portfolio/common/useStrings'; import { Icon } from '../icons/index'; interface Props { diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/components/Chip.js b/packages/yoroi-extension/app/UI/components/chip.js similarity index 100% rename from packages/yoroi-extension/app/UI/features/portfolio/common/components/Chip.js rename to packages/yoroi-extension/app/UI/components/chip.js diff --git a/packages/yoroi-extension/app/UI/components/icons/ChipArrowDown.js b/packages/yoroi-extension/app/UI/components/icons/ChipArrowDown.js index cd7162e5bd..385366aaed 100644 --- a/packages/yoroi-extension/app/UI/components/icons/ChipArrowDown.js +++ b/packages/yoroi-extension/app/UI/components/icons/ChipArrowDown.js @@ -2,7 +2,7 @@ import React from 'react'; export const ChipArrowDown = props => { return ( - + { return ( - + { const isProduction = environmnent.isProduction(); const portfolioOptions: Array = [ { - label: `${intl.formatMessage(portfolioMenuMessages.wallet)} (${ - mockData.wallet.tokenList.length - })`, + label: `${intl.formatMessage(portfolioMenuMessages.wallet)} (${mockData.wallet.tokenList.length})`, route: ROUTES.PORTFOLIO.ROOT, className: 'wallet', }, @@ -55,14 +53,7 @@ class PortfolioMenu extends Component { }, ]; - return ( - - ); + return ; } } diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js b/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js index 68c428cede..66c2778c13 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js @@ -1,6 +1,5 @@ import { HistoryItemStatus, HistoryItemType } from '../useCases/TokenDetails/TransactionTable'; -// UTILS const startDate = new Date('01-01-2023 8:30'); const endDate = new Date('05-28-2024 11:40'); const now = new Date(); @@ -9,42 +8,11 @@ const start1WeekAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000).getTime( const start1MonthAgo = new Date(now.getFullYear(), now.getMonth() - 1, now.getDate()).getTime(); const start6MonthAgo = new Date(now.getFullYear(), now.getMonth() - 6, now.getDate()).getTime(); const start1YearAgo = new Date(now.getFullYear() - 1, now.getMonth(), now.getDate()).getTime(); -const getRandomTime = (startDate, endDate) => { - const date = new Date(startDate + Math.random() * (endDate - startDate)); - return date.toISOString(); -}; -const getRandomNumber = (min, max, toFixed) => { - return (Math.random() * (max - min) + min).toFixed(toFixed); -}; -const createChartData = (timePeriod: '24H' | '1W' | '1M' | '6M' | '1Y') => { - const quantity = getQuantityBasedOnTimePeriod(timePeriod); - const fromTime = getFromTime(timePeriod, now); - const interval = getInterval(timePeriod); - - const tmp = Array.from({ length: quantity }).map((_, index) => { - const randomNumber = getRandomNumber(-20, 20, 2); - const time = new Date(fromTime + index * interval); - const utcString = `${time.getUTCFullYear()}-${pad(time.getUTCMonth() + 1, 2)}-${pad(time.getUTCDate(), 2)}T${pad( - time.getUTCHours(), - 2 - )}:${pad(time.getUTCMinutes(), 2)}:${pad(time.getUTCSeconds(), 2)}Z`; - - const frequency = 5; - const value = Math.sin((index * Math.PI * 2 * frequency) / quantity); - - return { - time: utcString, - value: value.toFixed(2), - usd: (value * 100).toFixed(3), - }; - }); - return tmp; -}; -// HELPERS -function pad(number: number, length: number) { +// UTILS +const pad = (number: number, length: number) => { return String(number).padStart(length, '0'); -} +}; const getQuantityBasedOnTimePeriod = (timePeriod: '24H' | '1W' | '1M' | '6M' | '1Y') => { switch (timePeriod) { case '24H': @@ -52,8 +20,7 @@ const getQuantityBasedOnTimePeriod = (timePeriod: '24H' | '1W' | '1M' | '6M' | ' case '1W': return 168; // Hourly data for a week case '1M': - const daysInMonth = new Date(now).getDate(); // Get number of days in current month - return Math.floor((daysInMonth * 24) / 4); // Approximately 4 values per day + return 120; // Approximately 4 data point per day case '6M': return 180; // Approximately 1 data point per day case '1Y': @@ -85,13 +52,50 @@ const getInterval = (timePeriod: '24H' | '1W' | '1M' | '6M' | '1Y') => { case '1W': return 60 * 60 * 1000; // 1 hour in milliseconds case '1M': + return 6 * 60 * 60 * 1000; // 6 hours in milliseconds case '6M': + return 24 * 60 * 60 * 1000; // 24 hours in milliseconds case '1Y': - return (24 * 60 * 60 * 1000) / getQuantityBasedOnTimePeriod(timePeriod); // Interval based on quantity + return 4 * 24 * 60 * 60 * 1000; // 4 days in milliseconds default: throw new Error('Invalid time period'); } }; +const getRandomTime = (startDate, endDate) => { + const date = new Date(startDate + Math.random() * (endDate - startDate)); + return date.toISOString(); +}; +const getRandomNumber = (min, max, toFixed) => { + return (Math.random() * (max - min) + min).toFixed(toFixed); +}; +const createChartData = (timePeriod: '24H' | '1W' | '1M' | '6M' | '1Y') => { + const quantity = getQuantityBasedOnTimePeriod(timePeriod); + const fromTime = getFromTime(timePeriod, now); + const interval = getInterval(timePeriod); + + const tmp = Array.from({ length: quantity }).map((_, index) => { + const time = new Date(fromTime + index * interval); + const utcString = `${time.getUTCFullYear()}-${pad(time.getUTCMonth() + 1, 2)}-${pad(time.getUTCDate(), 2)}T${pad( + time.getUTCHours(), + 2 + )}:${pad(time.getUTCMinutes(), 2)}:${pad(time.getUTCSeconds(), 2)}Z`; + + const volatility = 0.005; + const baseValue = + index >= quantity / 5 + ? 2 * Math.exp(volatility * Math.abs(getRandomNumber(1, 80, 2))) * index + : -20 * Math.exp(volatility * Math.abs(getRandomNumber(1, 100, 2))) * index; + const randomChange = getRandomNumber(-5, 5, 2); + let value = baseValue * Math.exp(volatility * Math.abs(randomChange)) * index; + + return { + time: utcString, + value: (value / 110).toFixed(2), + usd: (value / 100).toFixed(2), + }; + }); + return tmp; +}; // ALL THE MOCK DATA FOR RENDERING UI NEW const mockData = { @@ -120,16 +124,16 @@ const mockData = { '24h': -(10 * Math.random()).toFixed(2), '1W': (10 * Math.random()).toFixed(2), '1M': (10 * Math.random()).toFixed(2), - totalAmount: Math.round(100000 * Math.random()), - totalAmountUsd: Math.round(100000 * Math.random()), + totalAmount: (100000 * Math.random()).toFixed(3), + totalAmountUsd: (100000 * Math.random()).toFixed(3), overview: { description: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", website: 'https://www.cardano.org', detailOn: 'https://www.yoroiwallet.com', - policyId: 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + policyId: '2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664', fingerprint: - 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', + 'asset311q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj6789', }, performance: [ { value: Math.random().toFixed(3) }, @@ -137,11 +141,11 @@ const mockData = { { value: `${Math.round(1000 * Math.random())}M` }, { value: `${Math.round(100 * Math.random())}M` }, { value: `${Math.round(100 * Math.random())}` }, - { value: (100 * Math.random()).toFixed(2) }, { value: (1000 * Math.random()).toFixed(2) }, { value: (1000 * Math.random()).toFixed(2) }, + { value: null }, { value: (10 * Math.random()).toFixed(2) }, - { value: (10 * Math.random()).toFixed(5) }, + { value: (Math.random() / 100).toFixed(5) }, ], chartData: { start24HoursAgo: createChartData('24H'), @@ -149,6 +153,7 @@ const mockData = { start1MonthAgo: createChartData('1M'), start6MonthAgo: createChartData('6M'), start1YearAgo: createChartData('1Y'), + ALL: createChartData('1Y'), }, }, { @@ -159,28 +164,28 @@ const mockData = { '24h': -(10 * Math.random()).toFixed(2), '1W': (10 * Math.random()).toFixed(2), '1M': -(10 * Math.random()).toFixed(2), - totalAmount: Math.round(100000 * Math.random()), - totalAmountUsd: Math.round(100000 * Math.random()), + totalAmount: Math.round(100000 * Math.random()).toFixed(2), + totalAmountUsd: Math.round(100000 * Math.random()).toFixed(2), overview: { description: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", website: 'https://www.cardano.org', detailOn: 'https://www.yoroiwallet.com', - policyId: 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + policyId: '2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664', fingerprint: - 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', + 'asset322q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', }, performance: [ { value: Math.random().toFixed(3) }, { value: Math.random().toFixed(2) }, { value: `${Math.round(1000 * Math.random())}M` }, - { value: `${Math.round(100 * Math.random())}M` }, + { value: null }, { value: `${Math.round(100 * Math.random())}` }, { value: (100 * Math.random()).toFixed(2) }, { value: (1000 * Math.random()).toFixed(2) }, - { value: (1000 * Math.random()).toFixed(2) }, + { value: null }, { value: (10 * Math.random()).toFixed(2) }, - { value: (10 * Math.random()).toFixed(5) }, + { value: (Math.random() / 100).toFixed(5) }, ], chartData: { start24HoursAgo: createChartData('24H'), @@ -188,6 +193,7 @@ const mockData = { start1MonthAgo: createChartData('1M'), start6MonthAgo: createChartData('6M'), start1YearAgo: createChartData('1Y'), + ALL: createChartData('1Y'), }, }, { @@ -198,16 +204,16 @@ const mockData = { '24h': (10 * Math.random()).toFixed(2), '1W': -(10 * Math.random()).toFixed(2), '1M': (10 * Math.random()).toFixed(2), - totalAmount: Math.round(100000 * Math.random()), - totalAmountUsd: Math.round(100000 * Math.random()), + totalAmount: Math.round(100000 * Math.random()).toFixed(2), + totalAmountUsd: Math.round(100000 * Math.random()).toFixed(2), overview: { description: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", website: 'https://www.cardano.org', detailOn: 'https://www.yoroiwallet.com', - policyId: 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + policyId: '2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664', fingerprint: - 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', + 'asset333q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', }, performance: [ { value: Math.random().toFixed(3) }, @@ -217,9 +223,9 @@ const mockData = { { value: `${Math.round(100 * Math.random())}` }, { value: (100 * Math.random()).toFixed(2) }, { value: (1000 * Math.random()).toFixed(2) }, - { value: (1000 * Math.random()).toFixed(2) }, + { value: '45B' }, { value: (10 * Math.random()).toFixed(2) }, - { value: (10 * Math.random()).toFixed(5) }, + { value: (Math.random() / 100).toFixed(5) }, ], chartData: { start24HoursAgo: createChartData('24H'), @@ -227,6 +233,7 @@ const mockData = { start1MonthAgo: createChartData('1M'), start6MonthAgo: createChartData('6M'), start1YearAgo: createChartData('1Y'), + ALL: createChartData('1Y'), }, }, { @@ -237,16 +244,16 @@ const mockData = { '24h': -(10 * Math.random()).toFixed(2), '1W': -(10 * Math.random()).toFixed(2), '1M': (10 * Math.random()).toFixed(2), - totalAmount: Math.round(100000 * Math.random()), - totalAmountUsd: Math.round(100000 * Math.random()), + totalAmount: Math.round(100000 * Math.random()).toFixed(2), + totalAmountUsd: Math.round(100000 * Math.random()).toFixed(2), overview: { description: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", website: 'https://www.cardano.org', detailOn: 'https://www.yoroiwallet.com', - policyId: 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + policyId: '2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664', fingerprint: - 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', + 'asset344q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', }, performance: [ { value: Math.random().toFixed(3) }, @@ -258,7 +265,7 @@ const mockData = { { value: (1000 * Math.random()).toFixed(2) }, { value: (1000 * Math.random()).toFixed(2) }, { value: (10 * Math.random()).toFixed(2) }, - { value: (10 * Math.random()).toFixed(5) }, + { value: (Math.random() / 100).toFixed(5) }, ], chartData: { start24HoursAgo: createChartData('24H'), @@ -266,6 +273,7 @@ const mockData = { start1MonthAgo: createChartData('1M'), start6MonthAgo: createChartData('6M'), start1YearAgo: createChartData('1Y'), + ALL: createChartData('1Y'), }, }, { @@ -276,16 +284,16 @@ const mockData = { '24h': -(10 * Math.random()).toFixed(2), '1W': (10 * Math.random()).toFixed(2), '1M': -(10 * Math.random()).toFixed(2), - totalAmount: Math.round(100000 * Math.random()), - totalAmountUsd: Math.round(100000 * Math.random()), + totalAmount: Math.round(100000 * Math.random()).toFixed(2), + totalAmountUsd: Math.round(100000 * Math.random()).toFixed(2), overview: { description: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", website: 'https://www.cardano.org', detailOn: 'https://www.yoroiwallet.com', - policyId: 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + policyId: '2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664', fingerprint: - 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', + 'asset355q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', }, performance: [ { value: Math.random().toFixed(3) }, @@ -297,7 +305,7 @@ const mockData = { { value: (1000 * Math.random()).toFixed(2) }, { value: (1000 * Math.random()).toFixed(2) }, { value: (10 * Math.random()).toFixed(2) }, - { value: (10 * Math.random()).toFixed(5) }, + { value: (Math.random() / 100).toFixed(5) }, ], chartData: { start24HoursAgo: createChartData('24H'), @@ -305,6 +313,7 @@ const mockData = { start1MonthAgo: createChartData('1M'), start6MonthAgo: createChartData('6M'), start1YearAgo: createChartData('1Y'), + ALL: createChartData('1Y'), }, }, { @@ -315,16 +324,16 @@ const mockData = { '24h': (10 * Math.random()).toFixed(2), '1W': (10 * Math.random()).toFixed(2), '1M': (10 * Math.random()).toFixed(2), - totalAmount: Math.round(100000 * Math.random()), - totalAmountUsd: Math.round(100000 * Math.random()), + totalAmount: Math.round(100000 * Math.random()).toFixed(2), + totalAmountUsd: Math.round(100000 * Math.random()).toFixed(2), overview: { description: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", website: 'https://www.cardano.org', detailOn: 'https://www.yoroiwallet.com', - policyId: 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + policyId: '2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664', fingerprint: - 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', + 'asset366q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', }, performance: [ { value: Math.random().toFixed(3) }, @@ -336,7 +345,7 @@ const mockData = { { value: (1000 * Math.random()).toFixed(2) }, { value: (1000 * Math.random()).toFixed(2) }, { value: (10 * Math.random()).toFixed(2) }, - { value: (10 * Math.random()).toFixed(5) }, + { value: (Math.random() / 100).toFixed(5) }, ], chartData: { start24HoursAgo: createChartData('24H'), @@ -344,6 +353,7 @@ const mockData = { start1MonthAgo: createChartData('1M'), start6MonthAgo: createChartData('6M'), start1YearAgo: createChartData('1Y'), + ALL: createChartData('1Y'), }, }, { @@ -354,16 +364,16 @@ const mockData = { '24h': -(10 * Math.random()).toFixed(2), '1W': -(10 * Math.random()).toFixed(2), '1M': -(10 * Math.random()).toFixed(2), - totalAmount: Math.round(100000 * Math.random()), - totalAmountUsd: Math.round(100000 * Math.random()), + totalAmount: Math.round(100000 * Math.random()).toFixed(2), + totalAmountUsd: Math.round(100000 * Math.random()).toFixed(2), overview: { description: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", website: 'https://www.cardano.org', detailOn: 'https://www.yoroiwallet.com', - policyId: 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + policyId: '2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664', fingerprint: - 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', + 'asset377q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', }, performance: [ { value: Math.random().toFixed(3) }, @@ -375,7 +385,7 @@ const mockData = { { value: (1000 * Math.random()).toFixed(2) }, { value: (1000 * Math.random()).toFixed(2) }, { value: (10 * Math.random()).toFixed(2) }, - { value: (10 * Math.random()).toFixed(5) }, + { value: (Math.random() / 100).toFixed(5) }, ], chartData: { start24HoursAgo: createChartData('24H'), @@ -383,6 +393,7 @@ const mockData = { start1MonthAgo: createChartData('1M'), start6MonthAgo: createChartData('6M'), start1YearAgo: createChartData('1Y'), + ALL: createChartData('1Y'), }, }, { @@ -393,16 +404,16 @@ const mockData = { '24h': -(10 * Math.random()).toFixed(2), '1W': (10 * Math.random()).toFixed(2), '1M': -(10 * Math.random()).toFixed(2), - totalAmount: Math.round(100000 * Math.random()), - totalAmountUsd: Math.round(100000 * Math.random()), + totalAmount: Math.round(100000 * Math.random()).toFixed(2), + totalAmountUsd: Math.round(100000 * Math.random()).toFixed(2), overview: { description: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", website: 'https://www.cardano.org', detailOn: 'https://www.yoroiwallet.com', - policyId: 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + policyId: '2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664', fingerprint: - 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', + 'asset388q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', }, performance: [ { value: Math.random().toFixed(3) }, @@ -414,7 +425,7 @@ const mockData = { { value: (1000 * Math.random()).toFixed(2) }, { value: (1000 * Math.random()).toFixed(2) }, { value: (10 * Math.random()).toFixed(2) }, - { value: (10 * Math.random()).toFixed(5) }, + { value: (Math.random() / 100).toFixed(5) }, ], chartData: { start24HoursAgo: createChartData('24H'), @@ -422,6 +433,7 @@ const mockData = { start1MonthAgo: createChartData('1M'), start6MonthAgo: createChartData('6M'), start1YearAgo: createChartData('1Y'), + ALL: createChartData('1Y'), }, }, { @@ -432,16 +444,16 @@ const mockData = { '24h': (10 * Math.random()).toFixed(2), '1W': (10 * Math.random()).toFixed(2), '1M': (10 * Math.random()).toFixed(2), - totalAmount: Math.round(100000 * Math.random()), - totalAmountUsd: Math.round(100000 * Math.random()), + totalAmount: Math.round(100000 * Math.random()).toFixed(2), + totalAmountUsd: Math.round(100000 * Math.random()).toFixed(2), overview: { description: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", website: 'https://www.cardano.org', detailOn: 'https://www.yoroiwallet.com', - policyId: 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + policyId: '2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664', fingerprint: - 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', + 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', }, performance: [ { value: Math.random().toFixed(3) }, @@ -453,7 +465,7 @@ const mockData = { { value: (1000 * Math.random()).toFixed(2) }, { value: (1000 * Math.random()).toFixed(2) }, { value: (10 * Math.random()).toFixed(2) }, - { value: (10 * Math.random()).toFixed(5) }, + { value: (Math.random() / 100).toFixed(5) }, ], chartData: { start24HoursAgo: createChartData('24H'), @@ -461,6 +473,7 @@ const mockData = { start1MonthAgo: createChartData('1M'), start6MonthAgo: createChartData('6M'), start1YearAgo: createChartData('1Y'), + ALL: createChartData('1Y'), }, }, { @@ -471,16 +484,16 @@ const mockData = { '24h': (10 * Math.random()).toFixed(2), '1W': (10 * Math.random()).toFixed(2), '1M': -(10 * Math.random()).toFixed(2), - totalAmount: Math.round(100000 * Math.random()), - totalAmountUsd: Math.round(100000 * Math.random()), + totalAmount: Math.round(100000 * Math.random()).toFixed(2), + totalAmountUsd: Math.round(100000 * Math.random()).toFixed(2), overview: { description: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", website: 'https://www.cardano.org', detailOn: 'https://www.yoroiwallet.com', - policyId: 'asset155qynmnez65dr3tz5699wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzdv20el66l8j025e4g6k0kafjfv4ukawsly9ats', + policyId: '2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664', fingerprint: - 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', + 'asset400q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', }, performance: [ { value: Math.random().toFixed(3) }, @@ -492,7 +505,7 @@ const mockData = { { value: (1000 * Math.random()).toFixed(2) }, { value: (1000 * Math.random()).toFixed(2) }, { value: (10 * Math.random()).toFixed(2) }, - { value: (10 * Math.random()).toFixed(5) }, + { value: (Math.random() / 100).toFixed(5) }, ], chartData: { start24HoursAgo: createChartData('24H'), @@ -500,6 +513,7 @@ const mockData = { start1MonthAgo: createChartData('1M'), start6MonthAgo: createChartData('6M'), start1YearAgo: createChartData('1Y'), + ALL: createChartData('1Y'), }, }, ], @@ -509,7 +523,7 @@ const mockData = { liquidityList: [ { id: Math.random(), - tokenPair: 'ADA/LVLC', + tokenPair: 'ADA/HOSKY', DEX: 'Minswap', DEXLink: 'https://app.minswap.org/', firstToken: { @@ -517,8 +531,8 @@ const mockData = { id: 'ada', }, secondToken: { - name: 'LVLC', - id: 'lvlc', + name: 'HOSKY', + id: 'hosky', }, lpTokens: (Math.random() * 1000000).toFixed(2), totalValue: (Math.random() * 1000).toFixed(2), diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useNavigateTo.js b/packages/yoroi-extension/app/UI/features/portfolio/common/useNavigateTo.js similarity index 89% rename from packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useNavigateTo.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/useNavigateTo.js index 840dc4dd4e..a0c80800cb 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useNavigateTo.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/useNavigateTo.js @@ -1,6 +1,6 @@ import { useHistory } from 'react-router-dom'; import React, { useRef } from 'react'; -import { ROUTES } from '../../../../../routes-config'; +import { ROUTES } from '../../../../routes-config'; export const useNavigateTo = () => { const history = useHistory(); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js b/packages/yoroi-extension/app/UI/features/portfolio/common/useStrings.js similarity index 96% rename from packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/useStrings.js index f21b317e15..14678173a4 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/useStrings.js @@ -1,6 +1,6 @@ import React from 'react'; import { defineMessages } from 'react-intl'; -import { useIntl } from '../../../../context/IntlProvider'; +import { useIntl } from '../../../context/IntlProvider'; export const messages = Object.freeze( defineMessages({ diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.js index 00bdf302ba..3ed6733e3e 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.js @@ -1,12 +1,12 @@ import React from 'react'; import { Box, Stack, Typography } from '@mui/material'; import { useTheme } from '@mui/material'; -import { useStrings } from '../../common/hooks/useStrings'; +import { useStrings } from '../../common/useStrings'; import illustrationPng from '../../common/assets/images/illustration.png'; const LendAndBorrow = () => { const theme = useTheme(); - const strings = useStrings(); + const strings = useStrings(); return ( diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js index 250a18c77b..7197b62ee5 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js @@ -1,14 +1,14 @@ import React, { useCallback, useMemo, useState } from 'react'; import { Table, TableBody, TableCell, TableHead, TableRow, TableSortLabel, Typography, Stack, Box } from '@mui/material'; import { useTheme } from '@mui/material/styles'; -import { useNavigateTo } from '../../common/hooks/useNavigateTo'; +import { useNavigateTo } from '../../common/useNavigateTo'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import adaPng from '../../../../../assets/images/ada.png'; import hoskyPng from '../../common/assets/images/hosky-token.png'; import minswapPng from '../../common/assets/images/minswap-dex.png'; -import { Chip } from '../../common/components/Chip'; +import { Chip } from '../../../../components/chip'; import { Skeleton } from '../../../../components/Skeleton'; -import { useStrings } from '../../common/hooks/useStrings'; +import { useStrings } from '../../common/useStrings'; import illustrationPng from '../../common/assets/images/illustration.png'; import { Icon } from '../../../../components/icons/'; @@ -145,33 +145,37 @@ const LiquidityTable = ({ data, isLoading }) => { - {headCells.map(({ label, align, id }, index) => ( - - (index === 0 || index === headCells.length - 1 ? handleRequestSort(id) : null)} - sx={{ - float: align, - cursor: index === 0 || index === headCells.length - 1 ? 'pointer' : 'normal', - justifyContent: index === 0 || index === headCells.length - 1 ? 'flex-start' : 'space-between', - width: index === 0 || index === headCells.length - 1 ? 'fit-content' : '100%', - }} - > - - {label} - - (index === 0 || index === headCells.length - 1 ? null : handleRequestSort(id))} - /> - - - ))} + {headCells.map(({ label, align, id }, index) => { + const isFirstOrLastElement = index === 0 || index === headCells.length - 1; + + return ( + + (isFirstOrLastElement ? handleRequestSort(id) : null)} + sx={{ + float: align, + cursor: isFirstOrLastElement ? 'pointer' : 'normal', + justifyContent: isFirstOrLastElement ? 'flex-start' : 'space-between', + width: isFirstOrLastElement ? 'fit-content' : '100%', + }} + > + + {label} + + (isFirstOrLastElement ? null : handleRequestSort(id))} + /> + + + ); + })} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js index db910c7e25..4546430310 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js @@ -1,12 +1,12 @@ import React, { useCallback, useMemo, useState } from 'react'; import { Table, TableBody, TableCell, TableHead, TableRow, TableSortLabel, Typography, Stack, Box } from '@mui/material'; import { useTheme } from '@mui/material/styles'; -import { useNavigateTo } from '../../common/hooks/useNavigateTo'; -import { useStrings } from '../../common/hooks/useStrings'; +import { useNavigateTo } from '../../common/useNavigateTo'; +import { useStrings } from '../../common/useStrings'; import adaPng from '../../../../../assets/images/ada.png'; import hoskyPng from '../../common/assets/images/hosky-token.png'; import minswapPng from '../../common/assets/images/minswap-dex.png'; -import { Chip } from '../../common/components/Chip'; +import { Chip } from '../../../../components/chip'; import { Skeleton } from '../../../../components/Skeleton'; import { truncateAddressShort } from '../../../../../utils/formatters'; import { usePortfolio } from '../../module/PortfolioContextProvider'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js index 0088c7df85..6d2a3639de 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js @@ -7,11 +7,11 @@ import { defineMessages } from 'react-intl'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import LiquidityTable from './LiquidityTable'; import mockData from '../../common/mockData'; -import { Chip } from '../../common/components/Chip'; +import { Chip } from '../../../../components/chip'; import { Skeleton } from '../../../../components/Skeleton'; import OrderTable from './OrderTable'; import LendAndBorrow from './LendAndBorrow'; -import { useStrings } from '../../common/hooks/useStrings'; +import { useStrings } from '../../common/useStrings'; import { Icon } from '../../../../components/icons/index'; const StyledButton = styled(Button)(({ theme }) => ({ @@ -169,17 +169,17 @@ const PortfolioDapps = ({ data }) => { > 0} + active={mockData.common.dappsBalance.percents >= 0} label={ - {mockData.common.dappsBalance.percents > 0 ? ( + {mockData.common.dappsBalance.percents >= 0 ? ( ) : ( )} - {mockData.common.dappsBalance.percents > 0 + {mockData.common.dappsBalance.percents >= 0 ? mockData.common.dappsBalance.percents : -1 * mockData.common.dappsBalance.percents} % @@ -188,10 +188,10 @@ const PortfolioDapps = ({ data }) => { } /> 0} + active={mockData.common.dappsBalance.amount >= 0} label={ - {mockData.common.dappsBalance.amount > 0 && '+'} + {mockData.common.dappsBalance.amount >= 0 && '+'} {mockData.common.dappsBalance.amount} USD } diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js index c51a2938d2..03cc2a5462 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js @@ -1,12 +1,12 @@ -import { Box, Button, Stack, styled, Typography, Divider, SvgIcon } from '@mui/material'; +import { Box, Button, Stack, styled, Typography } from '@mui/material'; import React, { useEffect, useMemo, useState } from 'react'; import { LineChart, Line, CartesianGrid, XAxis, YAxis, ResponsiveContainer, Label, Tooltip as RechartTooltip } from 'recharts'; import { useTheme } from '@mui/material/styles'; import { Skeleton, Tooltip } from '../../../../components'; import chartSkeletonPng from '../../common/assets/images/token-detail-chart-skeleton.png'; -import { Chip } from '../../common/components/Chip'; +import { Chip } from '../../../../components/chip'; import moment from 'moment'; -import { useStrings } from '../../common/hooks/useStrings'; +import { useStrings } from '../../common/useStrings'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import { Icon } from '../../../../components/icons'; @@ -42,15 +42,15 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { { id: 'ALL', label: strings['ALL'], active: false }, ]); const [detailInfo, setDetailInfo] = useState({ - value: tokenInfo.chartData[buttonPeriodProps[0].id][0].value, - usd: tokenInfo.chartData[buttonPeriodProps[0].id][0].usd, + value: tokenInfo.chartData[buttonPeriodProps[0].id][tokenInfo.chartData[buttonPeriodProps[0].id].length - 1].value, + usd: tokenInfo.chartData[buttonPeriodProps[0].id][tokenInfo.chartData[buttonPeriodProps[0].id].length - 1].usd, }); const CustomYAxisTick = props => { const { x, y, payload } = props; return ( - + {payload.value} ); @@ -138,8 +138,8 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { -Infinity ); return ( - - + + {isLoading ? ( ) : ( @@ -151,9 +151,11 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { {isLoading ? ( ) : ( - + {detailInfo.usd} -  {unitOfAccount} + +  {unitOfAccount} + )} { ) : ( 0} + active={detailInfo.value >= 0} label={ - {detailInfo.value > 0 ? ( + {detailInfo.value >= 0 ? ( ) : ( )} - {detailInfo.value > 0 ? detailInfo.value : -1 * detailInfo.value}% + {detailInfo.value >= 0 ? detailInfo.value : -1 * detailInfo.value}% } @@ -191,10 +193,10 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { ) : ( 0} + active={detailInfo.usd >= 0} label={ - {detailInfo.usd > 0 && '+'} + {detailInfo.usd >= 0 && '+'} {detailInfo.usd} {unitOfAccount} } @@ -210,7 +212,7 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { component={isLoading ? 'img' : 'div'} src={chartSkeletonPng} sx={{ - margin: `${theme.spacing(3)} 0 ${theme.spacing(3)} -${theme.spacing(1)}`, + marginLeft: `-${theme.spacing(1)}`, width: '100%', height: `${chartHeight}px`, }} @@ -262,7 +264,7 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { ))} - + ); }; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js index 3ef4f6c110..32165ae486 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js @@ -3,8 +3,8 @@ import { Stack, Box, Typography, Link, Button } from '@mui/material'; import { Skeleton } from '../../../../components/Skeleton'; import { CopyButton } from '../../../../components/buttons/CopyButton'; import { useTheme } from '@mui/material/styles'; -import adaPng from '../../../../../assets/images/ada.png'; -import { useStrings } from '../../common/hooks/useStrings'; +import tokenPng from '../../common/assets/images/token.png'; +import { useStrings } from '../../common/useStrings'; const TokenDetailOverview = ({ tokenInfo, isLoading, isAda }) => { const theme = useTheme(); @@ -24,7 +24,7 @@ const TokenDetailOverview = ({ tokenInfo, isLoading, isAda }) => { borderRadius: `${theme.shape.borderRadius}px`, }} component="img" - src={adaPng} + src={tokenPng} > )} {isLoading ? ( diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js index 99928aef53..940412a7fb 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js @@ -1,7 +1,7 @@ import React from 'react'; import { Box, Stack, Typography, Link } from '@mui/material'; import { useTheme } from '@mui/material/styles'; -import { useStrings } from '../../common/hooks/useStrings'; +import { useStrings } from '../../common/useStrings'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import { Skeleton } from '../../../../components/Skeleton'; @@ -48,9 +48,15 @@ const TokenDetailPerformance = ({ tokenInfo, isLoading }) => { ) : ( - {item.type === PerformanceItemType.RANK && '#'} - {tokenInfo.performance[index].value} {item.type === PerformanceItemType.FIAT && unitOfAccount} - {item.type === PerformanceItemType.TOKEN && tokenInfo.name} + {tokenInfo.performance[index].value ? ( + <> + {item.type === PerformanceItemType.RANK && '#'} + {tokenInfo.performance[index].value} {item.type === PerformanceItemType.FIAT && unitOfAccount} + {item.type === PerformanceItemType.TOKEN && tokenInfo.name} + + ) : ( + '--' + )} )} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js index 1b21a69ee2..7beffe6018 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js @@ -8,8 +8,8 @@ import TransactionTable from './TransactionTable'; import TokenDetailChart from './TokenDetailChart'; import SubMenu from '../../../../../components/topbar/SubMenu'; import { useTheme } from '@mui/material/styles'; -import { useNavigateTo } from '../../common/hooks/useNavigateTo'; -import { useStrings } from '../../common/hooks/useStrings'; +import { useNavigateTo } from '../../common/useNavigateTo'; +import { useStrings } from '../../common/useStrings'; import mockData from '../../common/mockData'; import TokenDetailPerformance from './TokenDetailPerformance'; import TokenDetailOverview from './TokenDetailOverview'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js index 0951f8bac1..11a9d940b2 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js @@ -3,7 +3,7 @@ import { Box, Stack, Typography, IconButton, Table, TableCell, TableHead, TableB import { useTheme } from '@mui/material/styles'; import { Card } from '../../../../components'; import moment from 'moment'; -import { useStrings } from '../../common/hooks/useStrings'; +import { useStrings } from '../../common/useStrings'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import { Icon } from '../../../../components/icons'; @@ -97,8 +97,13 @@ const TransactionTable = ({ history }) => { : new Date(title).getDate() === yesterday.getDate() ? strings.yesterday : moment(title).format('MMMM DD, YYYY'), - data, + data: _.chain(data) + .sortBy(item => new Date(item.time).getTime()) + .reverse() + .value(), })) + .sortBy(group => new Date(group.data[0].time).getTime()) + .reverse() .value(); }, [history]); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js index 529833737e..1226f2a1bd 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js @@ -6,9 +6,9 @@ import { defineMessages } from 'react-intl'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import StatsTable from './StatsTable'; import mockData from '../../common/mockData'; -import { Chip } from '../../common/components/Chip'; +import { Chip } from '../../../../components/chip'; import { Skeleton } from '../../../../components/Skeleton'; -import { useStrings } from '../../common/hooks/useStrings'; +import { useStrings } from '../../common/useStrings'; import { Icon } from '../../../../components/icons/index'; const PortfolioWallet = ({ data }) => { @@ -20,8 +20,6 @@ const PortfolioWallet = ({ data }) => { const [tokenList, setTokenList] = useState([]); const [isAdaMainUnit, setIsAdaMainUnit] = useState(unitOfAccount === 'ADA'); - console.log('token list ne', data); - const handleCurrencyChange = () => { if (isAdaMainUnit) { changeUnitOfAccount(settingFiatPairUnit.currency || 'USD'); @@ -52,7 +50,11 @@ const PortfolioWallet = ({ data }) => { const lowercaseKeyword = keyword.toLowerCase(); const temp = data.filter(item => { - return item.name.toLowerCase().includes(lowercaseKeyword) || item.id.toLowerCase().includes(lowercaseKeyword); + return ( + item.name.toLowerCase().includes(lowercaseKeyword) || + item.id.toLowerCase().includes(lowercaseKeyword) || + item.overview.fingerprint.toLowerCase().includes(lowercaseKeyword) + ); }); if (temp && temp.length > 0) { setTokenList(temp); @@ -118,17 +120,17 @@ const PortfolioWallet = ({ data }) => { > 0} + active={mockData.common.walletBalance.percents >= 0} label={ - {mockData.common.walletBalance.percents > 0 ? ( + {mockData.common.walletBalance.percents >= 0 ? ( ) : ( )} - {mockData.common.walletBalance.percents > 0 + {mockData.common.walletBalance.percents >= 0 ? mockData.common.walletBalance.percents : -1 * mockData.common.walletBalance.percents} % @@ -137,10 +139,10 @@ const PortfolioWallet = ({ data }) => { } /> 0} + active={mockData.common.walletBalance.amount >= 0} label={ - {mockData.common.walletBalance.amount > 0 && '+'} + {mockData.common.walletBalance.amount >= 0 && '+'} {mockData.common.walletBalance.amount} USD } diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js index f81781e67c..cbcd27de81 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js @@ -2,11 +2,11 @@ import React, { useCallback, useMemo, useState } from 'react'; import { Table, TableBody, TableCell, TableHead, TableRow, TableSortLabel, Typography, Stack, Box } from '@mui/material'; import { useTheme } from '@mui/material/styles'; import tokenPng from '../../common/assets/images/token.png'; -import { useNavigateTo } from '../../common/hooks/useNavigateTo'; +import { useNavigateTo } from '../../common/useNavigateTo'; import { usePortfolio } from '../../module/PortfolioContextProvider'; -import { Chip } from '../../common/components/Chip'; +import { Chip } from '../../../../components/chip'; import { Skeleton } from '../../../../components/Skeleton'; -import { useStrings } from '../../common/hooks/useStrings'; +import { useStrings } from '../../common/useStrings'; import { Icon } from '../../../../components/icons/index'; import illustrationPng from '../../common/assets/images/illustration.png'; @@ -206,16 +206,16 @@ const StatsTable = ({ data, isLoading }) => { 0} + active={row['24h'] >= 0} label={ - {row['24h'] > 0 ? ( + {row['24h'] >= 0 ? ( ) : ( )} - {row['24h'] > 0 ? row['24h'] : -1 * row['24h']}% + {row['24h'] >= 0 ? row['24h'] : -1 * row['24h']}% } sx={{ cursor: 'pointer' }} @@ -224,15 +224,15 @@ const StatsTable = ({ data, isLoading }) => { 0} + active={row['1W'] >= 0} label={ - {row['1W'] > 0 ? ( + {row['1W'] >= 0 ? ( ) : ( )} - {row['1W'] > 0 ? row['1W'] : -1 * row['1W']}% + {row['1W'] >= 0 ? row['1W'] : -1 * row['1W']}% } sx={{ cursor: 'pointer' }} @@ -241,15 +241,15 @@ const StatsTable = ({ data, isLoading }) => { 0} + active={row['1M'] >= 0} label={ - {row['1M'] > 0 ? ( + {row['1M'] >= 0 ? ( ) : ( )} - {row['1M'] > 0 ? row['1M'] : -1 * row['1M']}% + {row['1M'] >= 0 ? row['1M'] : -1 * row['1M']}% } sx={{ cursor: 'pointer' }} diff --git a/packages/yoroi-extension/app/UI/layout/PortfolioPageLayout.js b/packages/yoroi-extension/app/UI/layout/PortfolioPageLayout.js index 4c66ec05ce..471a3183f6 100644 --- a/packages/yoroi-extension/app/UI/layout/PortfolioPageLayout.js +++ b/packages/yoroi-extension/app/UI/layout/PortfolioPageLayout.js @@ -12,7 +12,7 @@ import TopBarLayout from '../../components/layout/TopBarLayout'; import NavBarTitle from '../../components/topbar/NavBarTitle'; import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; import { withLayout, type LayoutComponentMap } from '../../styles/context/layout'; -import PortfolioMenu from '../features/portfolio/common/components/PortfolioMenu'; +import PortfolioMenu from '../features/portfolio/common/PortfolioMenu'; import NavBarContainer from '../../containers/NavBarContainer'; import BannerContainer from '../../containers/banners/BannerContainer'; import SidebarContainer from '../../containers/SidebarContainer'; diff --git a/packages/yoroi-extension/app/i18n/locales/en-US.json b/packages/yoroi-extension/app/i18n/locales/en-US.json index 754fc5af24..4f482c1f22 100644 --- a/packages/yoroi-extension/app/i18n/locales/en-US.json +++ b/packages/yoroi-extension/app/i18n/locales/en-US.json @@ -1052,6 +1052,29 @@ "gouvernace.selectAbstein": "Select abstain", "gouvernace.selectNoConfidenc": "Select no confidence", "gouvernace.designatedSomeone": "You are designating someone else to cast your vote on your behalf for all proposals now and in the future.", + "governance.delegateToDRep":"Delegate to a DRep", + "governance.delegateingToDRep":"Delegateing to a DRep", + "governance.designatingSomeoneElse":"You are designating someone else to cast your vote on your behalf for all proposals now and in the future.", + "governance.governanceStatus":"Governance status", + "governance.governanceStatusInfo":"Governance status", + "governance.abstain":"Abstain", + "governance.abstainInfo":"You are choosing not to cast a vote on all proposals now and in the future.", + "governance.noConfidence":"No Confidence", + "governance.noConfidenceInfo":"You are expressing a lack of trust for all proposals now and in the future.", + "governance.learnMore":"Learn more About Governance", + "governance.becomeADrep":"Want to became a Drep?", + "governance.drepId":"Drep ID:", + "governance.statusSelected":"You have selected {status} as your governance status. You can change it at any time by clicking in the card bellow", + "governance.registerGovernance":"Register in Governance", + "governance.chooseDrep":"chooseDrep", + "governance.reviewSelection":"Review the selections carefully to assign yourself a Governance Status", + "governance.participateDialog.title":"Withdraw warning", + "governance.participateDialog.contentInfo":"To withdraw your rewards, you need to participate in the Cardano Governance. Your rewards will continue to accumulate, but you are only able to withdraw it once you join the Governance process.", + "governance.participateDialog.buttonText":"Participate on governance", + "governance.operations":"Operations", + "governance.selectAbstein":"Select abstain", + "governance.selectNoConfidenc":"Select no confidence", + "governance.designatedSomeone":"You are designating someone else to cast your vote on your behalf for all proposals now and in the future.", "portfolio.main.header.text": "Tokens", "portfolio.main.search.text": "Search by asset name or ID", "portfolio.common.soonAvailable": "Soon available", @@ -1125,28 +1148,5 @@ "portfolio.orderTable.header.pair": "Pair (From / To)", "portfolio.orderTable.header.assetPrice": "Asset price", "portfolio.orderTable.header.assetAmount": "Asset amount", - "portfolio.orderTable.header.transactionId": "Transaction ID", - "governance.delegateToDRep":"Delegate to a DRep", - "governance.delegateingToDRep":"Delegateing to a DRep", - "governance.designatingSomeoneElse":"You are designating someone else to cast your vote on your behalf for all proposals now and in the future.", - "governance.governanceStatus":"Governance status", - "governance.governanceStatusInfo":"Governance status", - "governance.abstain":"Abstain", - "governance.abstainInfo":"You are choosing not to cast a vote on all proposals now and in the future.", - "governance.noConfidence":"No Confidence", - "governance.noConfidenceInfo":"You are expressing a lack of trust for all proposals now and in the future.", - "governance.learnMore":"Learn more About Governance", - "governance.becomeADrep":"Want to became a Drep?", - "governance.drepId":"Drep ID:", - "governance.statusSelected":"You have selected {status} as your governance status. You can change it at any time by clicking in the card bellow", - "governance.registerGovernance":"Register in Governance", - "governance.chooseDrep":"chooseDrep", - "governance.reviewSelection":"Review the selections carefully to assign yourself a Governance Status", - "governance.participateDialog.title":"Withdraw warning", - "governance.participateDialog.contentInfo":"To withdraw your rewards, you need to participate in the Cardano Governance. Your rewards will continue to accumulate, but you are only able to withdraw it once you join the Governance process.", - "governance.participateDialog.buttonText":"Participate on governance", - "governance.operations":"Operations", - "governance.selectAbstein":"Select abstain", - "governance.selectNoConfidenc":"Select no confidence", - "governance.designatedSomeone":"You are designating someone else to cast your vote on your behalf for all proposals now and in the future." + "portfolio.orderTable.header.transactionId": "Transaction ID" } From 9b92a87e98c3bf0d0d8d7d2dc831a6f5bfe574fa Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Tue, 4 Jun 2024 14:44:22 +0700 Subject: [PATCH 066/464] removed unused code --- packages/yoroi-extension/package-lock.json | 60 +++++++++++++++++++--- packages/yoroi-extension/package.json | 2 +- 2 files changed, 55 insertions(+), 7 deletions(-) diff --git a/packages/yoroi-extension/package-lock.json b/packages/yoroi-extension/package-lock.json index 81ccebcf6b..edcf8f9a24 100644 --- a/packages/yoroi-extension/package-lock.json +++ b/packages/yoroi-extension/package-lock.json @@ -31,6 +31,7 @@ "@vespaiach/axios-fetch-adapter": "^0.3.0", "@yoroi/exchange": "2.0.1", "@yoroi/resolver": "2.0.2", + "@yoroi/staking": "^1.5.1", "@yoroi/swap": "1.5.2", "@yoroi/types": "1.5.4", "assert": "2.1.0", @@ -530,7 +531,6 @@ "version": "7.12.17", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.17.tgz", "integrity": "sha512-V3CuX1aBywbJvV2yzJScRxeiiw0v2KZZYYE3giywxzFJL13RiyPjaaDwhDnxmgFTTS7FgvM2ijr4QmKNIu0AtQ==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", "@babel/generator": "^7.12.17", @@ -560,7 +560,6 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, "bin": { "semver": "bin/semver" } @@ -5989,7 +5988,6 @@ "version": "1.21.0", "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.21.0.tgz", "integrity": "sha512-JL0w36KuFHFCvnbOXRekqVAUplmOyT/OuCQkogo6X98MtpSaJOKEAeZnYO8JB0U/RIEixZaGI5px73YbRm/oag==", - "optional": true, "dependencies": { "merge-options": "^3.0.4" }, @@ -7758,6 +7756,59 @@ "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-1.1.0.tgz", "integrity": "sha512-C40jQ3NzfkP53NsO8kEOFd79p4b9kDXQMwgiY1z8ZwrDZgUyom0AHwGegF4Dm99L+YoYhuaB0ceerUcXmqr1rQ==" }, + "node_modules/@yoroi/staking": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@yoroi/staking/-/staking-1.5.1.tgz", + "integrity": "sha512-CgJhPR7rf07QSstwdhPt5C+P8jNuZiqv3s4+ODlj8x60johIl6/5sz2vt+zGcx4R8pzFw1D/pDyFmdw0BDvzlg==", + "dependencies": { + "@emurgo/cip14-js": "^3.0.1", + "bech32": "^2.0.0", + "bip39": "^3.1.0", + "immer": "^10.0.2" + }, + "engines": { + "node": ">= 16.19.0" + }, + "optionalDependencies": { + "@react-native-async-storage/async-storage": "^1.19.3" + }, + "peerDependencies": { + "@react-native-async-storage/async-storage": ">= 1.19.3 <= 1.20.0", + "react": ">= 16.8.0 <= 19.0.0", + "react-query": "^3.39.3" + } + }, + "node_modules/@yoroi/staking/node_modules/@emurgo/cip14-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@emurgo/cip14-js/-/cip14-js-3.0.1.tgz", + "integrity": "sha512-u0XobeajNSlmeGBmY3ntA+NE/Vns7hKP0xrFzWyAO7YubETOifTjUddJN4gpvXE4S08DPUcNBVe3sx1m5GPIOg==", + "dependencies": { + "bech32": "2.0.0", + "blake2b": "2.1.3" + } + }, + "node_modules/@yoroi/staking/node_modules/blake2b": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/blake2b/-/blake2b-2.1.3.tgz", + "integrity": "sha512-pkDss4xFVbMb4270aCyGD3qLv92314Et+FsKzilCLxDz5DuZ2/1g3w4nmBbu6nKApPspnjG7JcwTjGZnduB1yg==", + "dependencies": { + "blake2b-wasm": "^1.1.0", + "nanoassert": "^1.0.0" + } + }, + "node_modules/@yoroi/staking/node_modules/blake2b-wasm": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/blake2b-wasm/-/blake2b-wasm-1.1.7.tgz", + "integrity": "sha512-oFIHvXhlz/DUgF0kq5B1CqxIDjIJwh9iDeUUGQUcvgiGz7Wdw03McEO7CfLBy7QKGdsydcMCgO9jFNBAFCtFcA==", + "dependencies": { + "nanoassert": "^1.0.0" + } + }, + "node_modules/@yoroi/staking/node_modules/nanoassert": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-1.1.0.tgz", + "integrity": "sha512-C40jQ3NzfkP53NsO8kEOFd79p4b9kDXQMwgiY1z8ZwrDZgUyom0AHwGegF4Dm99L+YoYhuaB0ceerUcXmqr1rQ==" + }, "node_modules/@yoroi/swap": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/@yoroi/swap/-/swap-1.5.2.tgz", @@ -12851,7 +12902,6 @@ "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, "optional": true, "dependencies": { "iconv-lite": "^0.6.2" @@ -12861,7 +12911,6 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -21037,7 +21086,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", - "optional": true, "dependencies": { "is-plain-obj": "^2.1.0" }, diff --git a/packages/yoroi-extension/package.json b/packages/yoroi-extension/package.json index daef5eca86..5137e5e4bf 100644 --- a/packages/yoroi-extension/package.json +++ b/packages/yoroi-extension/package.json @@ -3,7 +3,7 @@ "version": "5.1.422", "description": "Cardano ADA wallet", "scripts": { - "dev-mv2": "rimraf dev/ && cross-env NODE_OPTIONS=--openssl-legacy-provider babel-node scripts-mv2/build --type=debug --env 'mainnet'", + "dev-mv2": "rimraf dev/ && NODE_OPTIONS=--openssl-legacy-provider babel-node scripts-mv2/build --type=debug --env 'mainnet'", "dev:main": "NODE_OPTIONS=--openssl-legacy-provider babel-node scripts/dev main --env mainnet", "dev:background": "NODE_OPTIONS=--openssl-legacy-provider babel-node scripts/dev background --env mainnet", "dev:stable": "rimraf dev/ && concurrently -n extension,background \"npm run dev:main\" \"npm run dev:background\"", From 0e45d483c421b943c048e6170ee0182e567983bc Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Tue, 4 Jun 2024 16:32:47 +0700 Subject: [PATCH 067/464] refactor typo color --- .../yoroi-extension/app/UI/components/card.js | 1 - .../portfolio/useCases/Dapps/LendAndBorrow.js | 2 +- .../useCases/Dapps/LiquidityTable.js | 18 +++++----- .../portfolio/useCases/Dapps/OrderTable.js | 27 ++++++++------- .../useCases/Dapps/PortfolioDapps.js | 8 ++--- .../useCases/TokenDetails/TokenDetailChart.js | 4 +-- .../TokenDetails/TokenDetailOverview.js | 18 +++++----- .../TokenDetails/TokenDetailPerformance.js | 6 ++-- .../useCases/TokenDetails/TokenDetails.js | 10 +++--- .../useCases/TokenDetails/TransactionTable.js | 34 ++++++++----------- .../useCases/Wallet/PortfolioWallet.js | 8 ++--- .../portfolio/useCases/Wallet/StatsTable.js | 16 ++++----- 12 files changed, 74 insertions(+), 78 deletions(-) diff --git a/packages/yoroi-extension/app/UI/components/card.js b/packages/yoroi-extension/app/UI/components/card.js index 193b093549..5a120bfa7c 100644 --- a/packages/yoroi-extension/app/UI/components/card.js +++ b/packages/yoroi-extension/app/UI/components/card.js @@ -7,7 +7,6 @@ const StyledCard = styled(Box)(({ theme }) => ({ flexDirection: 'column', border: '1px solid', borderColor: theme.palette.ds.gray_c200, - bgcolor: 'background.card', })); export const Card = props => { diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.js index 3ed6733e3e..a51b206490 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.js @@ -12,7 +12,7 @@ const LendAndBorrow = () => { - + {strings.soonAvailable} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js index 7197b62ee5..b41ce876e2 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js @@ -162,7 +162,7 @@ const LiquidityTable = ({ data, isLoading }) => { width: isFirstOrLastElement ? 'fit-content' : '100%', }} > - + {label} { src={hoskyPng} > - + {row.firstToken.name} - {row.secondToken.name} @@ -241,7 +241,7 @@ const LiquidityTable = ({ data, isLoading }) => { component="img" src={minswapPng} > - + {row.DEX} @@ -249,7 +249,7 @@ const LiquidityTable = ({ data, isLoading }) => { - + {row.firstTokenValue} {row.firstToken.name} {row.firstToken.name === 'ADA' && unitOfAccount === 'ADA' ? null : ( @@ -262,7 +262,7 @@ const LiquidityTable = ({ data, isLoading }) => { - + {row.secondTokenValue} {row.secondToken.name} {row.secondToken.name === 'ADA' && unitOfAccount === 'ADA' ? null : ( @@ -274,16 +274,16 @@ const LiquidityTable = ({ data, isLoading }) => { - {row.lpTokens} + {row.lpTokens} - + {row.totalValue} {row.firstToken.name} {unitOfAccount === 'ADA' && row.firstToken.name === 'ADA' ? null : ( - + {row.totalValueUsd} {unitOfAccount} )} @@ -297,7 +297,7 @@ const LiquidityTable = ({ data, isLoading }) => { - + {strings.noResultsForThisSearch} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js index 4546430310..f750c371de 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js @@ -147,7 +147,7 @@ const OrderTable = ({ data, isLoading }) => { onClick={() => !disabledSort && handleRequestSort(id)} sx={{ float: align, cursor: disabledSort ? 'normal' : 'pointer' }} > - + {label} {disabledSort ? null : } @@ -178,22 +178,22 @@ const OrderTable = ({ data, isLoading }) => { component="img" src={adaPng} > - + {row.firstToken.name} - + / - + {row.secondToken.name} @@ -220,18 +220,18 @@ const OrderTable = ({ data, isLoading }) => { component="img" src={minswapPng} > - + {row.DEX} - {row.assetPrice} + {row.assetPrice} - {row.assetAmount} + {row.assetAmount} @@ -241,7 +241,8 @@ const OrderTable = ({ data, isLoading }) => { url: `https://cardanoscan.io/transaction/${row.transactionId}`, }) } - sx={{ color: theme.palette.ds.primary_c600, cursor: 'pointer' }} + color="ds.primary_c600" + sx={{ cursor: 'pointer' }} > {truncateAddressShort(row.transactionId, 10)} @@ -249,11 +250,11 @@ const OrderTable = ({ data, isLoading }) => { - + {row.totalValue} {row.firstToken.name} {row.firstToken.name === 'ADA' && unitOfAccount === 'ADA' ? null : ( - + {row.totalValueUsd} {unitOfAccount} )} @@ -267,7 +268,7 @@ const OrderTable = ({ data, isLoading }) => { - + {strings.noResultsForThisSearch} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js index 6d2a3639de..b351d0f494 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js @@ -118,21 +118,21 @@ const PortfolioDapps = ({ data }) => { {isLoading ? ( ) : ( - + {isAdaMainUnit ? mockData.common.dappsBalance.ada : mockData.common.dappsBalance.usd} )} - + {isAdaMainUnit ? settingFiatPairUnit.currency || 'USD' : 'ADA'} {isAdaMainUnit ? '/ADA' : `/${unitOfAccount}`} @@ -144,7 +144,7 @@ const PortfolioDapps = ({ data }) => { {isLoading ? ( ) : ( - + {isAdaMainUnit ? mockData.common.dappsBalance.usd : mockData.common.dappsBalance.ada}{' '} {isAdaMainUnit ? 'ADA' : unitOfAccount} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js index 03cc2a5462..102c14135f 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js @@ -143,7 +143,7 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { {isLoading ? ( ) : ( - + {strings.marketPrice} )} @@ -151,7 +151,7 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { {isLoading ? ( ) : ( - + {detailInfo.usd}  {unitOfAccount} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js index 32165ae486..0f00e0187b 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js @@ -30,7 +30,7 @@ const TokenDetailOverview = ({ tokenInfo, isLoading, isAda }) => { {isLoading ? ( ) : ( - + {tokenInfo.name} )} @@ -40,7 +40,7 @@ const TokenDetailOverview = ({ tokenInfo, isLoading, isAda }) => { {isLoading ? ( ) : ( - + {strings.description} )} @@ -51,7 +51,7 @@ const TokenDetailOverview = ({ tokenInfo, isLoading, isAda }) => { ) : ( - {tokenInfo.overview.description} + {tokenInfo.overview.description} )} @@ -59,7 +59,7 @@ const TokenDetailOverview = ({ tokenInfo, isLoading, isAda }) => { {isLoading ? ( ) : ( - + {strings.website} )} @@ -78,7 +78,7 @@ const TokenDetailOverview = ({ tokenInfo, isLoading, isAda }) => { {isLoading ? ( ) : ( - + {strings.policyId} )} @@ -90,7 +90,7 @@ const TokenDetailOverview = ({ tokenInfo, isLoading, isAda }) => { ) : ( - + {tokenInfo.overview.policyId} )} @@ -102,7 +102,7 @@ const TokenDetailOverview = ({ tokenInfo, isLoading, isAda }) => { {isLoading ? ( ) : ( - + {strings.fingerprint} )} @@ -114,7 +114,7 @@ const TokenDetailOverview = ({ tokenInfo, isLoading, isAda }) => { ) : ( - + {tokenInfo.overview.fingerprint} )} @@ -128,7 +128,7 @@ const TokenDetailOverview = ({ tokenInfo, isLoading, isAda }) => { {isLoading ? ( ) : ( - + {strings.detailsOn} )} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js index 940412a7fb..fe0389c2e8 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js @@ -31,7 +31,7 @@ const TokenDetailPerformance = ({ tokenInfo, isLoading }) => { return ( - + {strings.marketData} @@ -43,11 +43,11 @@ const TokenDetailPerformance = ({ tokenInfo, isLoading }) => { alignItems="center" sx={{ paddingBottom: item.type === PerformanceItemType.RANK ? theme.spacing(1) : '' }} > - {item.label} + {item.label} {isLoading ? ( ) : ( - + {tokenInfo.performance[index].value ? ( <> {item.type === PerformanceItemType.RANK && '#'} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js index 7beffe6018..5a921399d6 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js @@ -104,7 +104,7 @@ const TokenDetails = ({ tokenInfo, transactionHistory }) => { sx={{ color: theme.palette.ds.black_static, display: 'flex', gap: theme.spacing(2) }} > - + {strings.backToPortfolio} @@ -125,7 +125,7 @@ const TokenDetails = ({ tokenInfo, transactionHistory }) => { - + {isLoading ? : `${tokenInfo.name} ${strings.balance}`} @@ -134,14 +134,14 @@ const TokenDetails = ({ tokenInfo, transactionHistory }) => { ) : ( - + {tokenInfo.totalAmount} @@ -153,7 +153,7 @@ const TokenDetails = ({ tokenInfo, transactionHistory }) => { {isLoading ? ( ) : ( - + {tokenInfo.totalAmountUsd} {unitOfAccount} )} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js index 11a9d940b2..a75f1e05dc 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js @@ -111,7 +111,7 @@ const TransactionTable = ({ history }) => { - + {strings.transactionHistory}
{ - + {strings.transactionType} - + {strings.status} - + {strings.fee} - + {strings.amount} @@ -149,8 +149,8 @@ const TransactionTable = ({ history }) => { <> @@ -211,29 +211,25 @@ const TransactionHistoryItem = ({ index, row, theme, strings, unitOfAccount }) = {row.type === HistoryItemType.DELEGATE && } - {row.label} - + {row.label} + {moment.utc(row.time).local().format('h:mm A')} - + {row.status} - + {row.feeValue ? `${row.feeValue} ADA` : '-'} {unitOfAccount === 'ADA' ? null : ( - + {row.feeValueUsd ? `${row.feeValueUsd} ${unitOfAccount}` : '-'} )} @@ -261,7 +257,7 @@ const TransactionHistoryItem = ({ index, row, theme, strings, unitOfAccount }) = } > - + {(row.type === HistoryItemType.RECEIVED || row.type === HistoryItemType.WITHDRAW || row.type === HistoryItemType.DELEGATE) && @@ -271,7 +267,7 @@ const TransactionHistoryItem = ({ index, row, theme, strings, unitOfAccount }) = {isExpanded ? ( {unitOfAccount === 'ADA' ? null : ( - + {(row.type === HistoryItemType.RECEIVED || row.type === HistoryItemType.WITHDRAW || row.type === HistoryItemType.DELEGATE) && @@ -280,12 +276,12 @@ const TransactionHistoryItem = ({ index, row, theme, strings, unitOfAccount }) = )} {row.type === HistoryItemType.RECEIVED && ( - + + {row.amountAsset} {strings.assets} )} {row.type === HistoryItemType.SENT && ( - + {row.amountAsset} )} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js index 1226f2a1bd..0953fe41ae 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js @@ -71,21 +71,21 @@ const PortfolioWallet = ({ data }) => { {isLoading ? ( ) : ( - + {isAdaMainUnit ? mockData.common.walletBalance.ada : mockData.common.walletBalance.usd} )} - + {isAdaMainUnit ? settingFiatPairUnit.currency || 'USD' : 'ADA'} {isAdaMainUnit ? '/ADA' : `/${unitOfAccount}`} @@ -97,7 +97,7 @@ const PortfolioWallet = ({ data }) => { {isLoading ? ( ) : ( - + {isAdaMainUnit ? mockData.common.walletBalance.usd : mockData.common.walletBalance.ada}{' '} {isAdaMainUnit ? 'ADA' : unitOfAccount} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js index cbcd27de81..769bb9aadd 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js @@ -150,7 +150,7 @@ const StatsTable = ({ data, isLoading }) => { onClick={() => handleRequestSort(id)} sx={{ float: align, cursor: 'pointer' }} > - + {label} @@ -188,10 +188,10 @@ const StatsTable = ({ data, isLoading }) => { src={tokenPng} > - + {row.name} - + {row.id} @@ -199,7 +199,7 @@ const StatsTable = ({ data, isLoading }) => { - + {row.price} USD @@ -257,7 +257,7 @@ const StatsTable = ({ data, isLoading }) => { - + {row.portfolioPercents.toFixed(2)} % @@ -265,11 +265,11 @@ const StatsTable = ({ data, isLoading }) => { - + {row.totalAmount} {row.name} {row.name === 'ADA' && unitOfAccount === 'ADA' ? null : ( - + {row.totalAmountUsd} {unitOfAccount} )} @@ -284,7 +284,7 @@ const StatsTable = ({ data, isLoading }) => { - + {strings.noResultsForThisSearch} From 0b4592fcc4dfe827156517e86739e7ae2247f52e Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Wed, 5 Jun 2024 10:55:53 +0700 Subject: [PATCH 068/464] fix console warnings from browser --- .../yoroi-extension/app/UI/components/chip.js | 10 +-- .../app/UI/components/icons/Sort.js | 6 +- .../app/UI/components/icons/Staking.js | 4 +- .../app/UI/components/index.js | 2 +- .../useCases/Dapps/LiquidityTable.js | 5 +- .../portfolio/useCases/Dapps/OrderTable.js | 5 +- .../useCases/Dapps/PortfolioDapps.js | 1 + .../useCases/TokenDetails/TokenDetailChart.js | 26 +++++++- .../useCases/TokenDetails/TransactionTable.js | 62 +++++++++---------- .../useCases/Wallet/PortfolioWallet.js | 1 + .../portfolio/useCases/Wallet/StatsTable.js | 5 +- 11 files changed, 76 insertions(+), 51 deletions(-) diff --git a/packages/yoroi-extension/app/UI/components/chip.js b/packages/yoroi-extension/app/UI/components/chip.js index 7187c77eb4..1ab36f0a60 100644 --- a/packages/yoroi-extension/app/UI/components/chip.js +++ b/packages/yoroi-extension/app/UI/components/chip.js @@ -2,20 +2,20 @@ import React from 'react'; import { Chip as MuiChip, Stack, Typography } from '@mui/material'; import { useTheme } from '@mui/material/styles'; -export const Chip = props => { +export const Chip = ({ label, active, sx, ...props }) => { const theme = useTheme(); return ( { +export const Sort = ({ id, order, orderBy, ...props }) => { return ( ); diff --git a/packages/yoroi-extension/app/UI/components/icons/Staking.js b/packages/yoroi-extension/app/UI/components/icons/Staking.js index d91ab6897c..f3e7629f14 100644 --- a/packages/yoroi-extension/app/UI/components/icons/Staking.js +++ b/packages/yoroi-extension/app/UI/components/icons/Staking.js @@ -4,8 +4,8 @@ export const Staking = props => { return ( diff --git a/packages/yoroi-extension/app/UI/components/index.js b/packages/yoroi-extension/app/UI/components/index.js index bd4cf5f3dc..d10cc56b6e 100644 --- a/packages/yoroi-extension/app/UI/components/index.js +++ b/packages/yoroi-extension/app/UI/components/index.js @@ -1,8 +1,8 @@ export * from './card'; export * from './buttons/CopyButton'; -export * from './Input/SearchInput'; export * from './tooltip'; export * from './skeleton'; +export * from './Input/SearchInput'; export * from './Input/TextInput'; export * from './Input/PasswordInput'; export * from './TransactionFailed/TransactionFailed'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js index b41ce876e2..f32b1cbb62 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js @@ -12,9 +12,10 @@ import { useStrings } from '../../common/useStrings'; import illustrationPng from '../../common/assets/images/illustration.png'; import { Icon } from '../../../../components/icons/'; -const TableRowSkeleton = ({ id, theme }) => ( +const TableRowSkeleton = ({ id, theme, ...props }) => ( { {isLoading - ? Array.from({ length: 6 }).map((item, index) => ) + ? Array.from({ length: 6 }).map((item, index) => ) : getSortedData(list).map(row => ( ( +const TableRowSkeleton = ({ id, theme, ...props }) => ( { {isLoading - ? Array.from({ length: 6 }).map((item, index) => ) + ? Array.from({ length: 6 }).map((item, index) => ) : getSortedData(list).map(row => ( { {isAdaMainUnit ? settingFiatPairUnit.currency || 'USD' : 'ADA'} { value: tokenInfo.chartData[buttonPeriodProps[0].id][tokenInfo.chartData[buttonPeriodProps[0].id].length - 1].value, usd: tokenInfo.chartData[buttonPeriodProps[0].id][tokenInfo.chartData[buttonPeriodProps[0].id].length - 1].usd, }); + const [isHolding, setIsHolding] = useState(false); + const [holdCoords, setHoldCoords] = useState(null); + + const handleMouseDown = (event) => { + setHoldCoords({ x: event.clientX, y: event.clientY }); + setIsHolding(true); + + // Start the hold timer (replace 500 with your desired hold duration) + const holdTimer = setTimeout(() => { + if (isHolding && holdCoords) { + // Execute hold interaction logic here (e.g., display tooltip, highlight data point) + console.log('Hold detected!'); + } + }, 500); + + return () => clearTimeout(holdTimer); // Cleanup function for the timer + }; + + const handleMouseUp = () => { + setIsHolding(false); + setHoldCoords(null); + }; const CustomYAxisTick = props => { const { x, y, payload } = props; @@ -118,7 +140,7 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { setButtonPeriodProps(tmp); }; - const handleMouseMove = e => { + const handleChangePrice = e => { const value = e.activePayload && e.activePayload.length > 0 ? e.activePayload[0].payload.value : null; const usd = e.activePayload && e.activePayload.length > 0 ? e.activePayload[0].payload.usd : null; @@ -219,7 +241,7 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { > {isLoading ? null : ( - item.active).id]} onMouseMove={handleMouseMove}> + item.active).id]} onMouseDown={handleMouseDown}> ({ width: '100%', - margin: '30px 0 100px', + margin: '30px 0', })); const TransactionTable = ({ history }) => { @@ -31,6 +31,13 @@ const TransactionTable = ({ history }) => { const strings = useStrings(); const { unitOfAccount } = usePortfolio(); + const headCells = [ + { id: 'transactionType', label: strings.transactionType, align: 'left' }, + { id: 'status', label: strings.status, align: 'left' }, + { id: 'fee', label: strings.fee, align: 'center' }, + { id: 'amount', label: strings.amount, align: 'right' }, + ]; + const mapStrings = arr => arr.map(item => { let labelTemp = ''; @@ -122,40 +129,30 @@ const TransactionTable = ({ history }) => { > - - - {strings.transactionType} - - - - - {strings.status} - - - - - {strings.fee} - - - - - {strings.amount} - - + {headCells.map(({ id, align, label }) => ( + + + {label} + + + ))} {groupedData.map((item, index) => ( <> - - {item.title} - + + {item.title} + + {item.data.map((row, index) => ( { theme={theme} strings={strings} unitOfAccount={unitOfAccount} + headCells={headCells} /> ))} @@ -175,12 +173,12 @@ const TransactionTable = ({ history }) => { ); }; -const TransactionHistoryItem = ({ index, row, theme, strings, unitOfAccount }) => { +const TransactionHistoryItem = ({ index, row, theme, strings, unitOfAccount, headCells }) => { const [isExpanded, setIsExpanded] = useState(false); return ( - - + + - + {row.status} - + {row.feeValue ? `${row.feeValue} ADA` : '-'} @@ -235,7 +233,7 @@ const TransactionHistoryItem = ({ index, row, theme, strings, unitOfAccount }) = )} - + { {isAdaMainUnit ? settingFiatPairUnit.currency || 'USD' : 'ADA'} ( +const TableRowSkeleton = ({ id, theme, ...props }) => ( { {isLoading - ? Array.from({ length: 6 }).map((item, index) => ) + ? Array.from({ length: 6 }).map((item, index) => ) : getSortedData(list).map(row => ( Date: Wed, 5 Jun 2024 11:14:30 +0700 Subject: [PATCH 069/464] update expanding transaction history item show all details --- .../useCases/TokenDetails/TransactionTable.js | 42 +++++++------------ 1 file changed, 14 insertions(+), 28 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js index 38a010ed70..d62a67d812 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js @@ -181,6 +181,7 @@ const TransactionHistoryItem = ({ index, row, theme, strings, unitOfAccount, hea {row.label} - - {moment.utc(row.time).local().format('h:mm A')} - + {isExpanded && ( + + {moment.utc(row.time).local().format('h:mm A')} + + )} @@ -226,11 +229,12 @@ const TransactionHistoryItem = ({ index, row, theme, strings, unitOfAccount, hea {row.feeValue ? `${row.feeValue} ADA` : '-'} - {unitOfAccount === 'ADA' ? null : ( - - {row.feeValueUsd ? `${row.feeValueUsd} ${unitOfAccount}` : '-'} - - )} + {isExpanded && + (unitOfAccount === 'ADA' ? null : ( + + {row.feeValueUsd ? `${row.feeValueUsd} ${unitOfAccount}` : '-'} + + ))} @@ -239,20 +243,9 @@ const TransactionHistoryItem = ({ index, row, theme, strings, unitOfAccount, hea spacing={theme.spacing(2)} sx={{ float: 'right', - cursor: - unitOfAccount === 'ADA' && - (row.type === HistoryItemType.ERROR || - row.type === HistoryItemType.WITHDRAW || - row.type === HistoryItemType.DELEGATE) - ? 'normal' - : 'pointer', + cursor: 'pointer', }} - onClick={() => - unitOfAccount === 'ADA' && - (row.type === HistoryItemType.ERROR || row.type === HistoryItemType.WITHDRAW || row.type === HistoryItemType.DELEGATE) - ? null - : setIsExpanded(!isExpanded) - } + onClick={() => setIsExpanded(!isExpanded)} > @@ -290,13 +283,6 @@ const TransactionHistoryItem = ({ index, row, theme, strings, unitOfAccount, hea style={{ transition: 'all ease 0.3s', transform: isExpanded ? 'rotate(0deg)' : 'rotate(180deg)', - opacity: - unitOfAccount === 'ADA' && - (row.type === HistoryItemType.ERROR || - row.type === HistoryItemType.WITHDRAW || - row.type === HistoryItemType.DELEGATE) - ? 0 - : 1, }} /> From b132ea460d99c6fd617b6e542e2b1e21c0d1e1ab Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Wed, 5 Jun 2024 14:33:41 +0700 Subject: [PATCH 070/464] update chart behaviors --- .../useCases/TokenDetails/TokenDetailChart.js | 145 ++++++++++-------- .../useCases/TokenDetails/TransactionTable.js | 2 +- 2 files changed, 80 insertions(+), 67 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js index e2f422851f..97a9e76b1c 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js @@ -45,35 +45,14 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { value: tokenInfo.chartData[buttonPeriodProps[0].id][tokenInfo.chartData[buttonPeriodProps[0].id].length - 1].value, usd: tokenInfo.chartData[buttonPeriodProps[0].id][tokenInfo.chartData[buttonPeriodProps[0].id].length - 1].usd, }); - const [isHolding, setIsHolding] = useState(false); - const [holdCoords, setHoldCoords] = useState(null); - - const handleMouseDown = (event) => { - setHoldCoords({ x: event.clientX, y: event.clientY }); - setIsHolding(true); - - // Start the hold timer (replace 500 with your desired hold duration) - const holdTimer = setTimeout(() => { - if (isHolding && holdCoords) { - // Execute hold interaction logic here (e.g., display tooltip, highlight data point) - console.log('Hold detected!'); - } - }, 500); - - return () => clearTimeout(holdTimer); // Cleanup function for the timer - }; - - const handleMouseUp = () => { - setIsHolding(false); - setHoldCoords(null); - }; + const [isDragging, setIsDragging] = useState(false); const CustomYAxisTick = props => { const { x, y, payload } = props; return ( - {payload.value} + {payload.value.toFixed(1)} ); }; @@ -93,39 +72,41 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { const rectY = chartBottom - rectHeight; return ( - - - + isDragging && ( + + + - + - - - {moment(payload.time).format('MM/DD/YY H:mm')} - - - + + + {moment(payload.time).format('MM/DD/YY H:mm')} + + + + ) ); }; @@ -140,7 +121,14 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { setButtonPeriodProps(tmp); }; - const handleChangePrice = e => { + const handleMouseMove = e => { + if (!isDragging) return; + + if (!e.isTooltipActive) { + handleMouseUp(); + return; + } + const value = e.activePayload && e.activePayload.length > 0 ? e.activePayload[0].payload.value : null; const usd = e.activePayload && e.activePayload.length > 0 ? e.activePayload[0].payload.usd : null; @@ -151,14 +139,33 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { }); }; - const minValue = tokenInfo.chartData[buttonPeriodProps.find(item => item.active).id].reduce( - (min, item) => Math.min(min, item.value), - Infinity - ); - const maxValue = tokenInfo.chartData[buttonPeriodProps.find(item => item.active).id].reduce( - (max, item) => Math.max(max, item.value), - -Infinity - ); + const handleMouseDown = event => { + if (!event || !event.activePayload || event.activePayload.length <= 0) return; + + const value = event.activePayload[0].payload.value; + const usd = event.activePayload[0].payload.usd; + + if (!value || !usd) return; + setDetailInfo({ + value, + usd, + }); + setIsDragging(true); + }; + + const handleMouseUp = () => { + const currentPeriod = buttonPeriodProps.find(item => item.active).id; + setDetailInfo({ + value: tokenInfo.chartData[currentPeriod][tokenInfo.chartData[currentPeriod].length - 1].value, + usd: tokenInfo.chartData[currentPeriod][tokenInfo.chartData[currentPeriod].length - 1].usd, + }); + setIsDragging(false); + }; + + const minValue = Math.min(...tokenInfo.chartData[buttonPeriodProps.find(item => item.active).id].map(item => item.value)); + + const maxValue = Math.max(...tokenInfo.chartData[buttonPeriodProps.find(item => item.active).id].map(item => item.value)); + return ( @@ -234,22 +241,28 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { component={isLoading ? 'img' : 'div'} src={chartSkeletonPng} sx={{ - marginLeft: `-${theme.spacing(1)}`, + marginLeft: `${-theme.spacing(1)}`, width: '100%', height: `${chartHeight}px`, }} > {isLoading ? null : ( - item.active).id]} onMouseDown={handleMouseDown}> + item.active).id]} + onMouseDown={handleMouseDown} + onMouseUp={handleMouseUp} + onMouseMove={handleMouseMove} + onMouseLeave={handleMouseUp} + > } /> From 87fd13ec239640df31b4ce1d8a8277c923f6063e Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Wed, 5 Jun 2024 15:06:42 +0700 Subject: [PATCH 071/464] refactor table sort --- .../features/portfolio/common/useTableSort.js | 55 +++++++++++++++++++ .../app/UI/features/portfolio/module/state.js | 2 +- .../useCases/Dapps/LiquidityTable.js | 50 +---------------- .../portfolio/useCases/Dapps/OrderTable.js | 50 +---------------- .../portfolio/useCases/Wallet/StatsTable.js | 50 +---------------- 5 files changed, 62 insertions(+), 145 deletions(-) create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/useTableSort.js diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/useTableSort.js b/packages/yoroi-extension/app/UI/features/portfolio/common/useTableSort.js new file mode 100644 index 0000000000..edf8f2555c --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/useTableSort.js @@ -0,0 +1,55 @@ +import { useCallback } from 'react'; + +const useTableSort = ({ order, orderBy, setSortState, headCells, data }) => { + const handleRequestSort = property => { + let direction = 'asc'; + if (order === 'asc') { + if (property === orderBy) { + direction = 'desc'; + } + } else if (order === 'desc') { + if (property === orderBy) { + direction = null; + } + } + setSortState({ + order: direction, + orderBy: property, + }); + }; + + const descendingComparator = (a, b, sortType) => { + switch (sortType) { + case 'numeric': + if (parseFloat(b[orderBy]) < parseFloat(a[orderBy])) { + return -1; + } else { + return 1; + } + case 'character': + return String(a[orderBy]).localeCompare(b[orderBy]); + default: + if (b[orderBy] < a[orderBy]) { + return -1; + } else { + return 1; + } + } + }; + + const getSortedData = useCallback( + arr => { + if (!orderBy || !order) return data; + const sortColumn = headCells.find(cell => cell.id === orderBy); + const sortType = sortColumn?.sortType ?? 'character'; + return arr.sort((a, b) => { + return order === 'desc' ? descendingComparator(a, b, sortType) : -descendingComparator(a, b, sortType); + }); + }, + [order, orderBy, headCells] + ); + + return { getSortedData, handleRequestSort }; +}; + +export default useTableSort; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/module/state.js b/packages/yoroi-extension/app/UI/features/portfolio/module/state.js index abf4daa608..6eacb8da38 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/module/state.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/module/state.js @@ -14,7 +14,7 @@ export const PortfolioActionType = Object.freeze({ }); export type PortfolioAction = {| - type: typeof GouvernanceActionType.UnitOfAccountChanged, + type: typeof PortfolioActionType.UnitOfAccountChanged, unitOfAccount: currency, |}; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js index f32b1cbb62..0e7a276ae1 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js @@ -11,6 +11,7 @@ import { Skeleton } from '../../../../components/Skeleton'; import { useStrings } from '../../common/useStrings'; import illustrationPng from '../../common/assets/images/illustration.png'; import { Icon } from '../../../../components/icons/'; +import useTableSort from '../../common/useTableSort'; const TableRowSkeleton = ({ id, theme, ...props }) => ( { sortType: 'numeric', }, ]; - - const handleRequestSort = property => { - let direction = 'asc'; - if (order === 'asc') { - if (property === orderBy) { - direction = 'desc'; - } - } else if (order === 'desc') { - if (property === orderBy) { - direction = null; - } - } - setSortState({ - order: direction, - orderBy: property, - }); - }; - - const descendingComparator = (a, b, sortType) => { - switch (sortType) { - case 'numeric': - if (parseFloat(b[orderBy]) < parseFloat(a[orderBy])) { - return -1; - } else { - return 1; - } - case 'character': - return String(a[orderBy]).localeCompare(b[orderBy]); - default: - if (b[orderBy] < a[orderBy]) { - return -1; - } else { - return 1; - } - } - }; - - const getSortedData = useCallback( - arr => { - if (!orderBy || !order) return data; - const sortColumn = headCells.find(cell => cell.id === orderBy); - const sortType = sortColumn?.sortType ?? 'character'; - return arr.sort((a, b) => { - return order === 'desc' ? descendingComparator(a, b, sortType) : -descendingComparator(a, b, sortType); - }); - }, - [order, orderBy, headCells] - ); + const { getSortedData, handleRequestSort } = useTableSort({ order, orderBy, setSortState, headCells, data }); return getSortedData(list).length > 0 ? (
diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js index b6f2e45f84..c8b71027f7 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js @@ -12,6 +12,7 @@ import { truncateAddressShort } from '../../../../../utils/formatters'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import illustrationPng from '../../common/assets/images/illustration.png'; import { Icon } from '../../../../components/icons'; +import useTableSort from '../../common/useTableSort'; const TableRowSkeleton = ({ id, theme, ...props }) => ( { sortType: 'numeric', }, ]; - - const handleRequestSort = property => { - let direction = 'asc'; - if (order === 'asc') { - if (property === orderBy) { - direction = 'desc'; - } - } else if (order === 'desc') { - if (property === orderBy) { - direction = null; - } - } - setSortState({ - order: direction, - orderBy: property, - }); - }; - - const descendingComparator = (a, b, sortType) => { - switch (sortType) { - case 'numeric': - if (parseFloat(b[orderBy]) < parseFloat(a[orderBy])) { - return -1; - } else { - return 1; - } - case 'character': - return String(a[orderBy]).localeCompare(b[orderBy]); - default: - if (b[orderBy] < a[orderBy]) { - return -1; - } else { - return 1; - } - } - }; - - const getSortedData = useCallback( - arr => { - if (!orderBy || !order) return data; - const sortColumn = headCells.find(cell => cell.id === orderBy); - const sortType = sortColumn?.sortType ?? 'character'; - return arr.sort((a, b) => { - return order === 'desc' ? descendingComparator(a, b, sortType) : -descendingComparator(a, b, sortType); - }); - }, - [order, orderBy, headCells] - ); + const { getSortedData, handleRequestSort } = useTableSort({ order, orderBy, setSortState, headCells, data }); return getSortedData(list).length > 0 ? (
diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js index 9e8e8617f3..488b36c22f 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js @@ -9,6 +9,7 @@ import { Skeleton } from '../../../../components/Skeleton'; import { useStrings } from '../../common/useStrings'; import { Icon } from '../../../../components/icons/index'; import illustrationPng from '../../common/assets/images/illustration.png'; +import useTableSort from '../../common/useTableSort'; const TableRowSkeleton = ({ id, theme, ...props }) => ( { sortType: 'numeric', }, ]; - - const handleRequestSort = property => { - let direction = 'asc'; - if (order === 'asc') { - if (property === orderBy) { - direction = 'desc'; - } - } else if (order === 'desc') { - if (property === orderBy) { - direction = null; - } - } - setSortState({ - order: direction, - orderBy: property, - }); - }; - - const descendingComparator = (a, b, sortType) => { - switch (sortType) { - case 'numeric': - if (parseFloat(b[orderBy]) < parseFloat(a[orderBy])) { - return -1; - } else { - return 1; - } - case 'character': - return String(a[orderBy]).localeCompare(b[orderBy]); - default: - if (b[orderBy] < a[orderBy]) { - return -1; - } else { - return 1; - } - } - }; - - const getSortedData = useCallback( - arr => { - if (!orderBy || !order) return data; - const sortColumn = headCells.find(cell => cell.id === orderBy); - const sortType = sortColumn?.sortType ?? 'character'; - return arr.sort((a, b) => { - return order === 'desc' ? descendingComparator(a, b, sortType) : -descendingComparator(a, b, sortType); - }); - }, - [order, orderBy, headCells] - ); + const { getSortedData, handleRequestSort } = useTableSort({ order, orderBy, setSortState, headCells, data }); return getSortedData(list).length > 0 ? (
From 39dd99f1291382018388024a75e1a3a0fdf0aa42 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 5 Jun 2024 17:18:02 +0300 Subject: [PATCH 072/464] fix condition --- .../SelectGovernanceStatus/GovernanceStatusSelection.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js index ff868b9a40..e1a1d4381f 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js @@ -57,10 +57,11 @@ export const GovernanceStatusSelection = (): Node => { const { createCertificate: createVotingCertificate, isLoading: isCreatingVotingCertificate } = useVotingCertificate({ useErrorBoundary: true, }); + console.log('governanceData', governanceData); - const pageTitle = governanceVote === 'none' ? strings.registerGovernance : strings.governanceStatus; + const pageTitle = governanceData?.kind === 'none' ? strings.registerGovernance : strings.governanceStatus; const statusRawText = mapStatus[governanceVote?.kind]; - const pageSubtitle = governanceVote === 'none' ? strings.reviewSelection : strings.statusSelected(statusRawText); + const pageSubtitle = governanceData?.kind === 'none' ? strings.reviewSelection : strings.statusSelected(statusRawText); const openDRepIdModal = (onSubmit: (drepID: string) => void) => { openModal({ From 0a9398f9fa420bee1cb73b02d1a325e9471e6c2f Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Thu, 6 Jun 2024 10:33:17 +0700 Subject: [PATCH 073/464] added check flow and types, created general table component --- .../app/UI/components/Input/SearchInput.js | 1 + .../app/UI/components/buttons/CopyButton.js | 1 + .../yoroi-extension/app/UI/components/card.js | 1 + .../yoroi-extension/app/UI/components/chip.js | 10 +- .../app/UI/components/index.js | 3 +- .../app/UI/components/skeleton.js | 10 +- .../app/UI/components/tooltip.js | 7 +- .../portfolio/common/SortableTableHead.js | 64 ++++ .../app/UI/features/portfolio/common/Table.js | 57 ++++ .../UI/features/portfolio/common/mockData.js | 1 + .../portfolio/common/useNavigateTo.js | 1 + .../features/portfolio/common/useStrings.js | 1 + .../features/portfolio/common/useTableSort.js | 11 +- .../portfolio/useCases/Dapps/LendAndBorrow.js | 1 + .../useCases/Dapps/LiquidityTable.js | 290 ++++++++---------- .../portfolio/useCases/Dapps/OrderTable.js | 248 +++++++-------- .../useCases/Dapps/PortfolioDapps.js | 1 + .../useCases/TokenDetails/TokenDetailChart.js | 1 + .../TokenDetails/TokenDetailOverview.js | 1 + .../TokenDetails/TokenDetailPerformance.js | 1 + .../useCases/TokenDetails/TokenDetails.js | 1 + .../useCases/TokenDetails/TransactionTable.js | 1 + .../useCases/Wallet/PortfolioWallet.js | 1 + .../portfolio/useCases/Wallet/StatsTable.js | 284 ++++++++--------- 24 files changed, 538 insertions(+), 460 deletions(-) create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/SortableTableHead.js create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/Table.js diff --git a/packages/yoroi-extension/app/UI/components/Input/SearchInput.js b/packages/yoroi-extension/app/UI/components/Input/SearchInput.js index dedbc16f80..59a20d2baf 100644 --- a/packages/yoroi-extension/app/UI/components/Input/SearchInput.js +++ b/packages/yoroi-extension/app/UI/components/Input/SearchInput.js @@ -1,3 +1,4 @@ +// @flow import { Input, InputAdornment, styled } from '@mui/material'; import { ReactComponent as SearchIcon } from '../../../assets/images/assets-page/search.inline.svg'; import { useRef } from 'react'; diff --git a/packages/yoroi-extension/app/UI/components/buttons/CopyButton.js b/packages/yoroi-extension/app/UI/components/buttons/CopyButton.js index 8a1a150d9f..5fd628f8b5 100644 --- a/packages/yoroi-extension/app/UI/components/buttons/CopyButton.js +++ b/packages/yoroi-extension/app/UI/components/buttons/CopyButton.js @@ -1,3 +1,4 @@ +// @flow import React, { useState } from 'react'; import { IconButton } from '@mui/material'; import { CopyToClipboard } from 'react-copy-to-clipboard'; diff --git a/packages/yoroi-extension/app/UI/components/card.js b/packages/yoroi-extension/app/UI/components/card.js index 5a120bfa7c..b416e5b8ec 100644 --- a/packages/yoroi-extension/app/UI/components/card.js +++ b/packages/yoroi-extension/app/UI/components/card.js @@ -1,3 +1,4 @@ +// @flow import { Box, styled } from '@mui/material'; const StyledCard = styled(Box)(({ theme }) => ({ diff --git a/packages/yoroi-extension/app/UI/components/chip.js b/packages/yoroi-extension/app/UI/components/chip.js index 1ab36f0a60..fb4018e211 100644 --- a/packages/yoroi-extension/app/UI/components/chip.js +++ b/packages/yoroi-extension/app/UI/components/chip.js @@ -1,8 +1,16 @@ +// @flow import React from 'react'; import { Chip as MuiChip, Stack, Typography } from '@mui/material'; import { useTheme } from '@mui/material/styles'; +import type { SxProps } from '@mui/material'; -export const Chip = ({ label, active, sx, ...props }) => { +interface Props { + label: string; + active: boolean; + sx: SxProps; +} + +export const Chip = ({ label, active, sx, ...props }: Props): Node => { const theme = useTheme(); return ( diff --git a/packages/yoroi-extension/app/UI/components/index.js b/packages/yoroi-extension/app/UI/components/index.js index d10cc56b6e..0fade84eee 100644 --- a/packages/yoroi-extension/app/UI/components/index.js +++ b/packages/yoroi-extension/app/UI/components/index.js @@ -1,7 +1,8 @@ export * from './card'; -export * from './buttons/CopyButton'; export * from './tooltip'; export * from './skeleton'; +export * from './chip'; +export * from './buttons/CopyButton'; export * from './Input/SearchInput'; export * from './Input/TextInput'; export * from './Input/PasswordInput'; diff --git a/packages/yoroi-extension/app/UI/components/skeleton.js b/packages/yoroi-extension/app/UI/components/skeleton.js index 452a9681a1..33247be2fc 100644 --- a/packages/yoroi-extension/app/UI/components/skeleton.js +++ b/packages/yoroi-extension/app/UI/components/skeleton.js @@ -1,7 +1,13 @@ +// @flow import { Skeleton as MuiSkeleton } from '@mui/material'; +import type { SxProps } from '@mui/material'; import { useTheme } from '@mui/material/styles'; -export const Skeleton = props => { +interface Props { + sx: SxProps; +} + +export const Skeleton = ({ sx, ...props }: Props): Node => { const theme = useTheme(); return ( @@ -13,7 +19,7 @@ export const Skeleton = props => { borderRadius: `${theme.shape.borderRadius}px`, backgroundColor: theme.palette.ds.gray_c100, opacity: 0.8, - ...props.sx, + ...sx, }} /> ); diff --git a/packages/yoroi-extension/app/UI/components/tooltip.js b/packages/yoroi-extension/app/UI/components/tooltip.js index 701ed17f9f..91811b6066 100644 --- a/packages/yoroi-extension/app/UI/components/tooltip.js +++ b/packages/yoroi-extension/app/UI/components/tooltip.js @@ -1,3 +1,4 @@ +// @flow import { styled } from '@mui/material'; import { default as MuiTooltip, TooltipProps, tooltipClasses } from '@mui/material/Tooltip'; @@ -13,6 +14,10 @@ const StyledTooltip = styled(({ className, ...props }: TooltipProps) => ( }, })); -export const Tooltip = ({ children, ...props }) => { +interface Props { + children: Node; +} + +export const Tooltip = ({ children, ...props }: Props): Node => { return {children}; }; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/SortableTableHead.js b/packages/yoroi-extension/app/UI/features/portfolio/common/SortableTableHead.js new file mode 100644 index 0000000000..f0b975062d --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/SortableTableHead.js @@ -0,0 +1,64 @@ +// @flow +import { TableHead, TableRow, TableCell, Stack, Typography } from '@mui/material'; +import { Icon } from '../../../components/icons'; +import { useTheme } from '@mui/material/styles'; + +export interface IHeadCells { + id: string; + label: string; + align: string; + sortType?: string; + disabledSort?: boolean; + isPadding?: boolean; +} + +interface Props { + headCells: IHeadCells[]; + order: string; + orderBy: string; + onRequestSort: (id: string) => void; +} + +const SortableTableHead = ({ headCells, order, orderBy, onRequestSort }: Props) => { + const theme = useTheme(); + + return ( + + + {headCells.map(({ label, align, id, isPadding, disabledSort }) => { + return ( + + (isPadding ? null : disabledSort ? null : onRequestSort(id))} + sx={{ + float: align, + cursor: isPadding || disabledSort ? 'normal' : 'pointer', + justifyContent: isPadding ? 'space-between' : 'flex-start', + width: isPadding ? '100%' : 'fit-content', + }} + > + + {label} + + {disabledSort ? null : ( + (isPadding ? onRequestSort(id) : null)} + /> + )} + + + ); + })} + + + ); +}; + +export default SortableTableHead; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/Table.js b/packages/yoroi-extension/app/UI/features/portfolio/common/Table.js new file mode 100644 index 0000000000..22f6087c65 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/Table.js @@ -0,0 +1,57 @@ +// @flow +import { cloneElement } from 'react'; +import { Table as MuiTable, TableBody, Stack, Box, Typography } from '@mui/material'; +import { useTheme } from '@mui/material/styles'; +import { useStrings } from './useStrings'; +import illustrationPng from './assets/images/illustration.png'; +import SortableTableHead from './SortableTableHead'; +import type { IHeadCells } from './SortableTableHead'; + +interface Props { + name: string; + headCells: IHeadCells[]; + data: any[]; + order: string; + orderBy: string; + handleRequestSort: (id: string) => void; + isLoading: Boolean; + TableRowSkeleton: Node; + children: Node; +} + +const Table = ({ + name, + children, + TableRowSkeleton, + data, + isLoading, + headCells, + order, + orderBy, + handleRequestSort, +}: Props): Node => { + const theme = useTheme(); + const strings = useStrings(); + + return data.length > 0 ? ( + + + + {isLoading + ? Array.from({ length: 6 }).map((item, index) => cloneElement(TableRowSkeleton, { id: index, key: index, theme })) + : children} + + + ) : ( + + + + + {strings.noResultsForThisSearch} + + + + ); +}; + +export default Table; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js b/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js index 66c2778c13..0d1159c887 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js @@ -1,3 +1,4 @@ +// @flow import { HistoryItemStatus, HistoryItemType } from '../useCases/TokenDetails/TransactionTable'; const startDate = new Date('01-01-2023 8:30'); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/useNavigateTo.js b/packages/yoroi-extension/app/UI/features/portfolio/common/useNavigateTo.js index a0c80800cb..5dcba5f7f5 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/useNavigateTo.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/useNavigateTo.js @@ -1,3 +1,4 @@ +// @flow import { useHistory } from 'react-router-dom'; import React, { useRef } from 'react'; import { ROUTES } from '../../../../routes-config'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/useStrings.js b/packages/yoroi-extension/app/UI/features/portfolio/common/useStrings.js index 14678173a4..a820f5a9fa 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/useStrings.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/useStrings.js @@ -1,3 +1,4 @@ +// @flow import React from 'react'; import { defineMessages } from 'react-intl'; import { useIntl } from '../../../context/IntlProvider'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/useTableSort.js b/packages/yoroi-extension/app/UI/features/portfolio/common/useTableSort.js index edf8f2555c..7607309ba2 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/useTableSort.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/useTableSort.js @@ -1,6 +1,15 @@ +// @flow import { useCallback } from 'react'; +import type { IHeadCells } from './SortableTableHead'; +interface Props { + order: string; + orderBy: string; + setSortState: () => void; + headCells: IHeadCells[]; + data: any[]; +} -const useTableSort = ({ order, orderBy, setSortState, headCells, data }) => { +const useTableSort = ({ order, orderBy, setSortState, headCells, data }: Props) => { const handleRequestSort = property => { let direction = 'asc'; if (order === 'asc') { diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.js index a51b206490..3bc6c33aa2 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.js @@ -1,3 +1,4 @@ +// @flow import React from 'react'; import { Box, Stack, Typography } from '@mui/material'; import { useTheme } from '@mui/material'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js index 0e7a276ae1..237f580cc1 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js @@ -1,17 +1,17 @@ -import React, { useCallback, useMemo, useState } from 'react'; -import { Table, TableBody, TableCell, TableHead, TableRow, TableSortLabel, Typography, Stack, Box } from '@mui/material'; +// @flow +import { useMemo, useState } from 'react'; +import { TableCell, TableRow, Typography, Stack, Box } from '@mui/material'; import { useTheme } from '@mui/material/styles'; import { useNavigateTo } from '../../common/useNavigateTo'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import adaPng from '../../../../../assets/images/ada.png'; import hoskyPng from '../../common/assets/images/hosky-token.png'; import minswapPng from '../../common/assets/images/minswap-dex.png'; -import { Chip } from '../../../../components/chip'; -import { Skeleton } from '../../../../components/Skeleton'; +import { Chip, Skeleton } from '../../../../components'; import { useStrings } from '../../common/useStrings'; -import illustrationPng from '../../common/assets/images/illustration.png'; import { Icon } from '../../../../components/icons/'; import useTableSort from '../../common/useTableSort'; +import Table from '../../common/Table'; const TableRowSkeleton = ({ id, theme, ...props }) => ( { const headCells = [ { id: 'tokenPair', label: strings.tokenPair, align: 'left', sortType: 'character' }, - { id: 'DEX', label: strings.dex, align: 'left', sortType: 'character' }, - { id: 'firstTokenValue', label: strings.firstTokenValue, align: 'left', sortType: 'numeric' }, - { id: 'secondTokenValue', label: strings.secondTokenValue, align: 'left', sortType: 'numeric' }, + { id: 'DEX', label: strings.dex, align: 'left', sortType: 'character', isPadding: true }, + { id: 'firstTokenValue', label: strings.firstTokenValue, align: 'left', sortType: 'numeric', isPadding: true }, + { id: 'secondTokenValue', label: strings.secondTokenValue, align: 'left', sortType: 'numeric', isPadding: true }, { id: 'lpTokens', label: strings.lpTokens, align: 'left', sortType: 'numeric', + isPadding: true, }, { id: 'totalValue', @@ -96,167 +97,128 @@ const LiquidityTable = ({ data, isLoading }) => { ]; const { getSortedData, handleRequestSort } = useTableSort({ order, orderBy, setSortState, headCells, data }); - return getSortedData(list).length > 0 ? ( -
- - - {headCells.map(({ label, align, id }, index) => { - const isFirstOrLastElement = index === 0 || index === headCells.length - 1; - - return ( - - (isFirstOrLastElement ? handleRequestSort(id) : null)} + return ( +
} + > + {getSortedData(list).map(row => ( + + + + + - - {label} - - (isFirstOrLastElement ? null : handleRequestSort(id))} - /> - - - ); - })} - - - - {isLoading - ? Array.from({ length: 6 }).map((item, index) => ) - : getSortedData(list).map(row => ( - + + + + {row.firstToken.name} - {row.secondToken.name} + + + + + + + chrome.tabs.create({ + url: row.DEXLink, + }) + } + sx={{ width: 'fit-content', cursor: 'pointer' }} + > + - - - - - - - - {row.firstToken.name} - {row.secondToken.name} - - - - - - - chrome.tabs.create({ - url: row.DEXLink, - }) - } - sx={{ width: 'fit-content', cursor: 'pointer' }} - > - - - {row.DEX} - - - - - - - - {row.firstTokenValue} {row.firstToken.name} - - {row.firstToken.name === 'ADA' && unitOfAccount === 'ADA' ? null : ( - - {row.firstTokenValueUsd} {unitOfAccount} - - )} - - - - - - - {row.secondTokenValue} {row.secondToken.name} - - {row.secondToken.name === 'ADA' && unitOfAccount === 'ADA' ? null : ( - - {row.secondTokenValueUsd} {unitOfAccount} - - )} - - - - - {row.lpTokens} - - - - - - {row.totalValue} {row.firstToken.name} - - {unitOfAccount === 'ADA' && row.firstToken.name === 'ADA' ? null : ( - - {row.totalValueUsd} {unitOfAccount} - - )} - - - - ))} - + component="img" + src={minswapPng} + > + + {row.DEX} + + + + + + + + {row.firstTokenValue} {row.firstToken.name} + + {row.firstToken.name === 'ADA' && unitOfAccount === 'ADA' ? null : ( + + {row.firstTokenValueUsd} {unitOfAccount} + + )} + + + + + + + {row.secondTokenValue} {row.secondToken.name} + + {row.secondToken.name === 'ADA' && unitOfAccount === 'ADA' ? null : ( + + {row.secondTokenValueUsd} {unitOfAccount} + + )} + + + + + {row.lpTokens} + + + + + + {row.totalValue} {row.firstToken.name} + + {unitOfAccount === 'ADA' && row.firstToken.name === 'ADA' ? null : ( + + {row.totalValueUsd} {unitOfAccount} + + )} + + + + ))}
- ) : ( - - - - - {strings.noResultsForThisSearch} - - - ); }; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js index c8b71027f7..f3946285e0 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js @@ -1,18 +1,18 @@ -import React, { useCallback, useMemo, useState } from 'react'; -import { Table, TableBody, TableCell, TableHead, TableRow, TableSortLabel, Typography, Stack, Box } from '@mui/material'; +// @flow +import { useMemo, useState } from 'react'; +import { TableCell, TableRow, Typography, Stack, Box } from '@mui/material'; import { useTheme } from '@mui/material/styles'; import { useNavigateTo } from '../../common/useNavigateTo'; import { useStrings } from '../../common/useStrings'; import adaPng from '../../../../../assets/images/ada.png'; import hoskyPng from '../../common/assets/images/hosky-token.png'; import minswapPng from '../../common/assets/images/minswap-dex.png'; -import { Chip } from '../../../../components/chip'; -import { Skeleton } from '../../../../components/Skeleton'; +import { Chip, Skeleton } from '../../../../components'; import { truncateAddressShort } from '../../../../../utils/formatters'; import { usePortfolio } from '../../module/PortfolioContextProvider'; -import illustrationPng from '../../common/assets/images/illustration.png'; import { Icon } from '../../../../components/icons'; import useTableSort from '../../common/useTableSort'; +import Table from '../../common/Table'; const TableRowSkeleton = ({ id, theme, ...props }) => ( { ]; const { getSortedData, handleRequestSort } = useTableSort({ order, orderBy, setSortState, headCells, data }); - return getSortedData(list).length > 0 ? ( - - - - {headCells.map(({ label, align, id, disabledSort }) => ( - - !disabledSort && handleRequestSort(id)} - sx={{ float: align, cursor: disabledSort ? 'normal' : 'pointer' }} - > - - {label} - - {disabledSort ? null : } - - - ))} - - - - {isLoading - ? Array.from({ length: 6 }).map((item, index) => ) - : getSortedData(list).map(row => ( - } + > + {getSortedData(list).map(row => ( + + + + - - - - - {row.firstToken.name} - - - / - - - - {row.secondToken.name} - - - + component="img" + src={adaPng} + > + + {row.firstToken.name} + + + / + + + + {row.secondToken.name} + + + - - - chrome.tabs.create({ - url: row.DEXLink, - }) - } - sx={{ width: 'fit-content', cursor: 'pointer' }} - > - - - {row.DEX} - - - + + + chrome.tabs.create({ + url: row.DEXLink, + }) + } + sx={{ width: 'fit-content', cursor: 'pointer' }} + > + + + {row.DEX} + + + - - {row.assetPrice} - + + {row.assetPrice} + - - {row.assetAmount} - + + {row.assetAmount} + - - - chrome.tabs.create({ - url: `https://cardanoscan.io/transaction/${row.transactionId}`, - }) - } - color="ds.primary_c600" - sx={{ cursor: 'pointer' }} - > - {truncateAddressShort(row.transactionId, 10)} - - + + + chrome.tabs.create({ + url: `https://cardanoscan.io/transaction/${row.transactionId}`, + }) + } + color="ds.primary_c600" + sx={{ cursor: 'pointer' }} + > + {truncateAddressShort(row.transactionId, 10)} + + - - - - {row.totalValue} {row.firstToken.name} - - {row.firstToken.name === 'ADA' && unitOfAccount === 'ADA' ? null : ( - - {row.totalValueUsd} {unitOfAccount} - - )} - - - - ))} - + + + + {row.totalValue} {row.firstToken.name} + + {row.firstToken.name === 'ADA' && unitOfAccount === 'ADA' ? null : ( + + {row.totalValueUsd} {unitOfAccount} + + )} + + + + ))}
- ) : ( - - - - - {strings.noResultsForThisSearch} - - - ); }; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js index d4c5fcda5b..5440245e77 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js @@ -1,3 +1,4 @@ +// @flow import { Typography, Stack, Box, Input, InputAdornment, Button, styled } from '@mui/material'; import { ReactComponent as Search } from '../../../../../assets/images/assets-page/search.inline.svg'; import React, { useEffect, useState } from 'react'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js index 97a9e76b1c..4fe9eafb76 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js @@ -1,3 +1,4 @@ +// @flow import { Box, Button, Stack, styled, Typography } from '@mui/material'; import React, { useEffect, useMemo, useState } from 'react'; import { LineChart, Line, CartesianGrid, XAxis, YAxis, ResponsiveContainer, Label, Tooltip as RechartTooltip } from 'recharts'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js index 0f00e0187b..7688851c7e 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js @@ -1,3 +1,4 @@ +// @flow import React from 'react'; import { Stack, Box, Typography, Link, Button } from '@mui/material'; import { Skeleton } from '../../../../components/Skeleton'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js index fe0389c2e8..5b66dd3cff 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js @@ -1,3 +1,4 @@ +// @flow import React from 'react'; import { Box, Stack, Typography, Link } from '@mui/material'; import { useTheme } from '@mui/material/styles'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js index 5a921399d6..a0fb7e0317 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js @@ -1,3 +1,4 @@ +// @flow import React, { useEffect, useState } from 'react'; import { Badge, Box, Button, Chip, Divider, IconButton, Link, Stack, Typography } from '@mui/material'; import { ReactComponent as BackIcon } from '../../../../../assets/images/assets-page/back-arrow.inline.svg'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js index 85de627853..9d871c1143 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js @@ -1,3 +1,4 @@ +// @flow import React, { useMemo, useState } from 'react'; import { Box, Stack, Typography, IconButton, Table, TableCell, TableHead, TableBody, TableRow, styled } from '@mui/material'; import { useTheme } from '@mui/material/styles'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js index 1b1adff0f7..479e5ab16b 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js @@ -1,3 +1,4 @@ +// @flow import { Typography, Stack, Box, Input, styled } from '@mui/material'; import React, { useEffect, useState } from 'react'; import { Tooltip, SearchInput } from '../../../../components'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js index 488b36c22f..31a9c39953 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js @@ -1,15 +1,15 @@ -import React, { useCallback, useMemo, useState } from 'react'; -import { Table, TableBody, TableCell, TableHead, TableRow, TableSortLabel, Typography, Stack, Box } from '@mui/material'; +// @flow +import { useMemo, useState } from 'react'; +import { TableCell, TableRow, Typography, Stack, Box } from '@mui/material'; import { useTheme } from '@mui/material/styles'; import tokenPng from '../../common/assets/images/token.png'; -import { useNavigateTo } from '../../common/useNavigateTo'; import { usePortfolio } from '../../module/PortfolioContextProvider'; -import { Chip } from '../../../../components/chip'; -import { Skeleton } from '../../../../components/Skeleton'; +import { Chip, Skeleton } from '../../../../components'; +import { Icon } from '../../../../components/icons'; +import { useNavigateTo } from '../../common/useNavigateTo'; import { useStrings } from '../../common/useStrings'; -import { Icon } from '../../../../components/icons/index'; -import illustrationPng from '../../common/assets/images/illustration.png'; import useTableSort from '../../common/useTableSort'; +import Table from '../../common/Table'; const TableRowSkeleton = ({ id, theme, ...props }) => ( { ]; const { getSortedData, handleRequestSort } = useTableSort({ order, orderBy, setSortState, headCells, data }); - return getSortedData(list).length > 0 ? ( - - - - {headCells.map(({ label, align, id }) => ( - - handleRequestSort(id)} - sx={{ float: align, cursor: 'pointer' }} - > - - {label} - - - - - ))} - - - - {isLoading - ? Array.from({ length: 6 }).map((item, index) => ) - : getSortedData(list).map(row => ( - navigateTo.portfolioDetail(row.id)} + return ( +
} + > + {getSortedData(list).map(row => ( + navigateTo.portfolioDetail(row.id)} + sx={{ + cursor: 'pointer', + transition: 'all 0.3s ease-in-out', + borderRadius: `${theme.shape.borderRadius}px`, + '& td': { border: 0 }, + '&:hover': { + backgroundColor: theme.palette.ds.gray_c50, + }, + }} + > + + + - - - - - - {row.name} - - - {row.id} - - - - - - - - {row.price} USD - - - - - = 0} - label={ - - {row['24h'] >= 0 ? ( - - ) : ( - - )} - - {row['24h'] >= 0 ? row['24h'] : -1 * row['24h']}% - - } - sx={{ cursor: 'pointer' }} - /> - - - - = 0} - label={ - - {row['1W'] >= 0 ? ( - - ) : ( - - )} - {row['1W'] >= 0 ? row['1W'] : -1 * row['1W']}% - - } - sx={{ cursor: 'pointer' }} - /> - - - - = 0} - label={ - - {row['1M'] >= 0 ? ( - - ) : ( - - )} - {row['1M'] >= 0 ? row['1M'] : -1 * row['1M']}% - - } - sx={{ cursor: 'pointer' }} - /> - - - - - {row.portfolioPercents.toFixed(2)} % + component="img" + src={tokenPng} + > + + + {row.name} + + + {row.id} + + + + + + + + {row.price} USD + + + + + = 0} + label={ + + {row['24h'] >= 0 ? ( + + ) : ( + + )} + + {row['24h'] >= 0 ? row['24h'] : -1 * row['24h']}% + + } + sx={{ cursor: 'pointer' }} + /> + + + + = 0} + label={ + + {row['1W'] >= 0 ? ( + + ) : ( + + )} + {row['1W'] >= 0 ? row['1W'] : -1 * row['1W']}% + + } + sx={{ cursor: 'pointer' }} + /> + + + + = 0} + label={ + + {row['1M'] >= 0 ? ( + + ) : ( + + )} + {row['1M'] >= 0 ? row['1M'] : -1 * row['1M']}% + + } + sx={{ cursor: 'pointer' }} + /> + + + + + {row.portfolioPercents.toFixed(2)} % + + + + + + + + {row.totalAmount} {row.name} + + {row.name === 'ADA' && unitOfAccount === 'ADA' ? null : ( + + {row.totalAmountUsd} {unitOfAccount} - - - - - - - {row.totalAmount} {row.name} - - {row.name === 'ADA' && unitOfAccount === 'ADA' ? null : ( - - {row.totalAmountUsd} {unitOfAccount} - - )} - - - - - ))} - + )} + + + + + ))}
- ) : ( - - - - - {strings.noResultsForThisSearch} - - - ); }; From bf0989118a600de63291289b83ae97a08588829e Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Thu, 6 Jun 2024 13:08:47 +0700 Subject: [PATCH 074/464] refactor portfolio header and menu, added mock helper --- .../app/UI/components/buttons/CopyButton.js | 2 +- .../portfolio/common/PortfolioMenu.js | 60 ------ .../common/components/PortfolioHeader.js | 123 ++++++++++++ .../common/components/PortfolioMenu.js | 32 +++ .../{ => components}/SortableTableHead.js | 2 +- .../common/{ => components}/Table.js | 18 +- .../portfolio/common/helpers/mockHelper.js | 94 +++++++++ .../common/{ => hooks}/useNavigateTo.js | 2 +- .../common/{ => hooks}/useStrings.js | 12 +- .../common/{ => hooks}/useTableSort.js | 3 +- .../UI/features/portfolio/common/mockData.js | 98 +--------- .../portfolio/useCases/Dapps/LendAndBorrow.js | 2 +- .../useCases/Dapps/LiquidityTable.js | 8 +- .../portfolio/useCases/Dapps/OrderTable.js | 8 +- .../useCases/Dapps/PortfolioDapps.js | 185 +++++------------- .../useCases/TokenDetails/TokenDetailChart.js | 2 +- .../TokenDetails/TokenDetailOverview.js | 2 +- .../TokenDetails/TokenDetailPerformance.js | 2 +- .../useCases/TokenDetails/TokenDetails.js | 4 +- .../useCases/TokenDetails/TransactionTable.js | 2 +- .../useCases/Wallet/PortfolioWallet.js | 123 ++---------- .../portfolio/useCases/Wallet/StatsTable.js | 8 +- .../app/UI/layout/PortfolioPageLayout.js | 2 +- 23 files changed, 353 insertions(+), 441 deletions(-) delete mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/PortfolioMenu.js create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioHeader.js create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.js rename packages/yoroi-extension/app/UI/features/portfolio/common/{ => components}/SortableTableHead.js (94%) rename packages/yoroi-extension/app/UI/features/portfolio/common/{ => components}/Table.js (85%) create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/helpers/mockHelper.js rename packages/yoroi-extension/app/UI/features/portfolio/common/{ => hooks}/useNavigateTo.js (89%) rename packages/yoroi-extension/app/UI/features/portfolio/common/{ => hooks}/useStrings.js (94%) rename packages/yoroi-extension/app/UI/features/portfolio/common/{ => hooks}/useTableSort.js (92%) diff --git a/packages/yoroi-extension/app/UI/components/buttons/CopyButton.js b/packages/yoroi-extension/app/UI/components/buttons/CopyButton.js index 5fd628f8b5..e933640764 100644 --- a/packages/yoroi-extension/app/UI/components/buttons/CopyButton.js +++ b/packages/yoroi-extension/app/UI/components/buttons/CopyButton.js @@ -3,7 +3,7 @@ import React, { useState } from 'react'; import { IconButton } from '@mui/material'; import { CopyToClipboard } from 'react-copy-to-clipboard'; import { Tooltip } from '../Tooltip'; -import { useStrings } from '../../features/portfolio/common/useStrings'; +import { useStrings } from '../../features/portfolio/common/hooks/useStrings'; import { Icon } from '../icons/index'; interface Props { diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/PortfolioMenu.js b/packages/yoroi-extension/app/UI/features/portfolio/common/PortfolioMenu.js deleted file mode 100644 index ad0a9e9d0c..0000000000 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/PortfolioMenu.js +++ /dev/null @@ -1,60 +0,0 @@ -// @flow -import { Component } from 'react'; -import type { Node, ComponentType } from 'react'; -import { observer } from 'mobx-react'; -import { defineMessages, intlShape } from 'react-intl'; -import environmnent from '../../../../environment'; -import { ROUTES } from '../../../../routes-config'; -import globalMessages from '../../../../i18n/global-messages'; -import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; -import { withLayout } from '../../../../styles/context/layout'; -import type { InjectedLayoutProps } from '../../styles/context/layout'; -import type { SubMenuOption } from '../topbar/SubMenu'; -import SubMenu from '../../../../components/topbar/SubMenu'; -import mockData from './mockData'; - -export const portfolioMenuMessages: Object = defineMessages({ - wallet: { - id: 'portfolio.menu.wallet.link.label', - defaultMessage: '!!!Wallet', - }, - dapps: { - id: 'portfolio.menu.dapps.link.label', - defaultMessage: '!!!Dapps', - }, -}); - -type Props = {| - +isActiveItem: string => boolean, - +onItemClick: string => void, -|}; -@observer -class PortfolioMenu extends Component { - static contextTypes: {| intl: $npm$ReactIntl$IntlFormat |} = { - intl: intlShape.isRequired, - }; - - render(): Node { - const { intl } = this.context; - const { onItemClick, isActiveItem, isRevampLayout } = this.props; - const isProduction = environmnent.isProduction(); - const portfolioOptions: Array = [ - { - label: `${intl.formatMessage(portfolioMenuMessages.wallet)} (${mockData.wallet.tokenList.length})`, - route: ROUTES.PORTFOLIO.ROOT, - className: 'wallet', - }, - { - label: `${intl.formatMessage(portfolioMenuMessages.dapps)} (${ - mockData.dapps.liquidityList.length + mockData.dapps.orderList.length - })`, - route: ROUTES.PORTFOLIO.DAPPS, - className: 'dapps', - }, - ]; - - return ; - } -} - -export default (withLayout(PortfolioMenu): ComponentType); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioHeader.js b/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioHeader.js new file mode 100644 index 0000000000..4f8bcc8cb7 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioHeader.js @@ -0,0 +1,123 @@ +// @flow +import { useState } from 'react'; +import { Stack, Typography } from '@mui/material'; +import { useTheme } from '@mui/material/styles'; +import { useStrings } from '../hooks/useStrings'; +import { Skeleton } from '../../../../components/Skeleton'; +import { usePortfolio } from '../../module/PortfolioContextProvider'; +import { Icon } from '../../../../components/icons'; +import { SearchInput, Tooltip, Chip } from '../../../../components'; + +type Balance = { + ada: number, + usd: number, + percents: number, + amount: number, +}; + +interface Props { + balance: Balance; + setKeyword: (keyword: string) => void; + isLoading: boolean; + tooltipTitle: React$Node; +} + +const PortfolioHeader = ({ balance, setKeyword, isLoading, tooltipTitle }: Props): Node => { + const strings = useStrings(); + const theme = useTheme(); + const { unitOfAccount, settingFiatPairUnit, changeUnitOfAccount } = usePortfolio(); + const [isAdaMainUnit, setIsAdaMainUnit] = useState(unitOfAccount === 'ADA'); + + const handleCurrencyChange = () => { + if (isAdaMainUnit) { + changeUnitOfAccount(settingFiatPairUnit.currency || 'USD'); + setIsAdaMainUnit(false); + } else { + changeUnitOfAccount('ADA'); + setIsAdaMainUnit(true); + } + }; + + return ( + + + + {isLoading ? ( + + ) : ( + + {isAdaMainUnit ? balance.ada : balance.usd} + + )} + + {isAdaMainUnit ? settingFiatPairUnit.currency || 'USD' : 'ADA'} + + {isAdaMainUnit ? '/ADA' : `/${unitOfAccount}`} + + + + + + {isLoading ? ( + + ) : ( + + {isAdaMainUnit ? balance.usd : balance.ada} {isAdaMainUnit ? 'ADA' : unitOfAccount} + + )} + {isLoading ? ( + + + + + ) : ( + + + = 0} + label={ + + {balance.percents >= 0 ? ( + + ) : ( + + )} + + + {balance.percents >= 0 ? balance.percents : -1 * balance.percents}% + + + } + /> + = 0} + label={ + + {balance.amount >= 0 && '+'} + {balance.amount} USD + + } + /> + + + )} + + + + setKeyword(e.target.value)} placeholder={strings.search} /> + + ); +}; + +export default PortfolioHeader; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.js b/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.js new file mode 100644 index 0000000000..94ede1afaf --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.js @@ -0,0 +1,32 @@ +// @flow +import SubMenu from '../../../../../components/topbar/SubMenu'; +import type { SubMenuOption } from '../topbar/SubMenu'; +import { ROUTES } from '../../../../../routes-config'; +import { useStrings } from '../hooks/useStrings'; +import mockData from '../mockData'; + +interface Props { + onItemClick: string => void; + isActiveItem: string => boolean; +} + +const PortfolioMenu = ({ onItemClick, isActiveItem }: Props): Node => { + const strings = useStrings(); + + const portfolioOptions: SubMenuOption[] = [ + { + label: `${strings.headerWallet} (${mockData.wallet.tokenList.length})`, + route: ROUTES.PORTFOLIO.ROOT, + className: 'wallet', + }, + { + label: `${strings.headerDapps} (${mockData.dapps.liquidityList.length + mockData.dapps.orderList.length})`, + route: ROUTES.PORTFOLIO.DAPPS, + className: 'dapps', + }, + ]; + + return ; +}; + +export default PortfolioMenu; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/SortableTableHead.js b/packages/yoroi-extension/app/UI/features/portfolio/common/components/SortableTableHead.js similarity index 94% rename from packages/yoroi-extension/app/UI/features/portfolio/common/SortableTableHead.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/components/SortableTableHead.js index f0b975062d..d19eb33945 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/SortableTableHead.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/components/SortableTableHead.js @@ -1,6 +1,6 @@ // @flow import { TableHead, TableRow, TableCell, Stack, Typography } from '@mui/material'; -import { Icon } from '../../../components/icons'; +import { Icon } from '../../../../components/icons'; import { useTheme } from '@mui/material/styles'; export interface IHeadCells { diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/Table.js b/packages/yoroi-extension/app/UI/features/portfolio/common/components/Table.js similarity index 85% rename from packages/yoroi-extension/app/UI/features/portfolio/common/Table.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/components/Table.js index 22f6087c65..b36e29168a 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/Table.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/components/Table.js @@ -2,8 +2,8 @@ import { cloneElement } from 'react'; import { Table as MuiTable, TableBody, Stack, Box, Typography } from '@mui/material'; import { useTheme } from '@mui/material/styles'; -import { useStrings } from './useStrings'; -import illustrationPng from './assets/images/illustration.png'; +import { useStrings } from '../hooks/useStrings'; +import illustrationPng from '../assets/images/illustration.png'; import SortableTableHead from './SortableTableHead'; import type { IHeadCells } from './SortableTableHead'; @@ -14,21 +14,21 @@ interface Props { order: string; orderBy: string; handleRequestSort: (id: string) => void; - isLoading: Boolean; - TableRowSkeleton: Node; - children: Node; + isLoading: boolean; + TableRowSkeleton: React$Node; + children: React$Node; } const Table = ({ name, - children, - TableRowSkeleton, - data, - isLoading, headCells, + data, order, orderBy, handleRequestSort, + isLoading, + TableRowSkeleton, + children, }: Props): Node => { const theme = useTheme(); const strings = useStrings(); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/helpers/mockHelper.js b/packages/yoroi-extension/app/UI/features/portfolio/common/helpers/mockHelper.js new file mode 100644 index 0000000000..29cd7b7e41 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/helpers/mockHelper.js @@ -0,0 +1,94 @@ +export const now = new Date(); +export const start24HoursAgo = new Date(now.getTime() - 24 * 60 * 60 * 1000).getTime(); +export const start1WeekAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000).getTime(); +export const start1MonthAgo = new Date(now.getFullYear(), now.getMonth() - 1, now.getDate()).getTime(); +export const start6MonthAgo = new Date(now.getFullYear(), now.getMonth() - 6, now.getDate()).getTime(); +export const start1YearAgo = new Date(now.getFullYear() - 1, now.getMonth(), now.getDate()).getTime(); + +// UTILS +const pad = (number: number, length: number) => { + return String(number).padStart(length, '0'); +}; +const getQuantityBasedOnTimePeriod = (timePeriod: '24H' | '1W' | '1M' | '6M' | '1Y') => { + switch (timePeriod) { + case '24H': + return 96; // 4 data points per hour (every 15 minutes) + case '1W': + return 168; // Hourly data for a week + case '1M': + return 120; // Approximately 4 data point per day + case '6M': + return 180; // Approximately 1 data point per day + case '1Y': + return 90; // Approximately 1 data point every 4 days + default: + throw new Error('Invalid time period'); + } +}; +const getFromTime = (timePeriod: '24H' | '1W' | '1M' | '6M' | '1Y', now: number) => { + switch (timePeriod) { + case '24H': + return start24HoursAgo; + case '1W': + return start1WeekAgo; + case '1M': + return start1MonthAgo; + case '6M': + return start6MonthAgo; + case '1Y': + return start1YearAgo; + default: + throw new Error('Invalid time period'); + } +}; +const getInterval = (timePeriod: '24H' | '1W' | '1M' | '6M' | '1Y') => { + switch (timePeriod) { + case '24H': + return 15 * 60 * 1000; // 15 minutes in milliseconds + case '1W': + return 60 * 60 * 1000; // 1 hour in milliseconds + case '1M': + return 6 * 60 * 60 * 1000; // 6 hours in milliseconds + case '6M': + return 24 * 60 * 60 * 1000; // 24 hours in milliseconds + case '1Y': + return 4 * 24 * 60 * 60 * 1000; // 4 days in milliseconds + default: + throw new Error('Invalid time period'); + } +}; +export const getRandomTime = (startDate, endDate) => { + const date = new Date(startDate + Math.random() * (endDate - startDate)); + return date.toISOString(); +}; +const getRandomNumber = (min, max, toFixed) => { + return (Math.random() * (max - min) + min).toFixed(toFixed); +}; +export const createChartData = (timePeriod: '24H' | '1W' | '1M' | '6M' | '1Y') => { + const quantity = getQuantityBasedOnTimePeriod(timePeriod); + const fromTime = getFromTime(timePeriod, now); + const interval = getInterval(timePeriod); + + const tmp = Array.from({ length: quantity }).map((_, index) => { + const time = new Date(fromTime + index * interval); + const utcString = `${time.getUTCFullYear()}-${pad(time.getUTCMonth() + 1, 2)}-${pad(time.getUTCDate(), 2)}T${pad( + time.getUTCHours(), + 2 + )}:${pad(time.getUTCMinutes(), 2)}:${pad(time.getUTCSeconds(), 2)}Z`; + + const volatility = 0.005; + const baseValue = + index >= quantity / 5 + ? 2 * Math.exp(volatility * Math.abs(getRandomNumber(1, 80, 2))) * index + : -20 * Math.exp(volatility * Math.abs(getRandomNumber(1, 100, 2))) * index; + const randomChange = getRandomNumber(-5, 5, 2); + let value = baseValue * Math.exp(volatility * Math.abs(randomChange)) * index; + + return { + time: utcString, + value: (value / 110).toFixed(2), + usd: (value / 100).toFixed(2), + }; + }); + return tmp; +}; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/useNavigateTo.js b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useNavigateTo.js similarity index 89% rename from packages/yoroi-extension/app/UI/features/portfolio/common/useNavigateTo.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useNavigateTo.js index 5dcba5f7f5..6627ad6fe8 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/useNavigateTo.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useNavigateTo.js @@ -1,7 +1,7 @@ // @flow import { useHistory } from 'react-router-dom'; import React, { useRef } from 'react'; -import { ROUTES } from '../../../../routes-config'; +import { ROUTES } from '../../../../../routes-config'; export const useNavigateTo = () => { const history = useHistory(); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/useStrings.js b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js similarity index 94% rename from packages/yoroi-extension/app/UI/features/portfolio/common/useStrings.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js index a820f5a9fa..323f23d450 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/useStrings.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js @@ -1,10 +1,18 @@ // @flow import React from 'react'; import { defineMessages } from 'react-intl'; -import { useIntl } from '../../../context/IntlProvider'; +import { useIntl } from '../../../../context/IntlProvider'; export const messages = Object.freeze( defineMessages({ + headerWallet: { + id: 'portfolio.menu.wallet.link.label', + defaultMessage: '!!!Wallet', + }, + headerDapps: { + id: 'portfolio.menu.dapps.link.label', + defaultMessage: '!!!Dapps', + }, dapps: { id: 'portfolio.tooltip.dapps', defaultMessage: '!!!DApps', @@ -299,6 +307,8 @@ export const messages = Object.freeze( export const useStrings = () => { const { intl } = useIntl(); return React.useRef({ + headerWallet: intl.formatMessage(messages.headerWallet), + headerDapps: intl.formatMessage(messages.headerDapps), dapps: intl.formatMessage(messages.dapps), copyToClipboard: intl.formatMessage(messages.copyToClipboard), copied: intl.formatMessage(messages.copied), diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/useTableSort.js b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useTableSort.js similarity index 92% rename from packages/yoroi-extension/app/UI/features/portfolio/common/useTableSort.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useTableSort.js index 7607309ba2..a5245bcc7f 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/useTableSort.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useTableSort.js @@ -1,6 +1,7 @@ // @flow import { useCallback } from 'react'; -import type { IHeadCells } from './SortableTableHead'; +import type { IHeadCells } from '../components/SortableTableHead'; + interface Props { order: string; orderBy: string; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js b/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js index 0d1159c887..04d408b0e9 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js @@ -1,102 +1,6 @@ // @flow import { HistoryItemStatus, HistoryItemType } from '../useCases/TokenDetails/TransactionTable'; - -const startDate = new Date('01-01-2023 8:30'); -const endDate = new Date('05-28-2024 11:40'); -const now = new Date(); -const start24HoursAgo = new Date(now.getTime() - 24 * 60 * 60 * 1000).getTime(); -const start1WeekAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000).getTime(); -const start1MonthAgo = new Date(now.getFullYear(), now.getMonth() - 1, now.getDate()).getTime(); -const start6MonthAgo = new Date(now.getFullYear(), now.getMonth() - 6, now.getDate()).getTime(); -const start1YearAgo = new Date(now.getFullYear() - 1, now.getMonth(), now.getDate()).getTime(); - -// UTILS -const pad = (number: number, length: number) => { - return String(number).padStart(length, '0'); -}; -const getQuantityBasedOnTimePeriod = (timePeriod: '24H' | '1W' | '1M' | '6M' | '1Y') => { - switch (timePeriod) { - case '24H': - return 96; // 4 data points per hour (every 15 minutes) - case '1W': - return 168; // Hourly data for a week - case '1M': - return 120; // Approximately 4 data point per day - case '6M': - return 180; // Approximately 1 data point per day - case '1Y': - return 90; // Approximately 1 data point every 4 days - default: - throw new Error('Invalid time period'); - } -}; -const getFromTime = (timePeriod: '24H' | '1W' | '1M' | '6M' | '1Y', now: number) => { - switch (timePeriod) { - case '24H': - return start24HoursAgo; - case '1W': - return start1WeekAgo; - case '1M': - return start1MonthAgo; - case '6M': - return start6MonthAgo; - case '1Y': - return start1YearAgo; - default: - throw new Error('Invalid time period'); - } -}; -const getInterval = (timePeriod: '24H' | '1W' | '1M' | '6M' | '1Y') => { - switch (timePeriod) { - case '24H': - return 15 * 60 * 1000; // 15 minutes in milliseconds - case '1W': - return 60 * 60 * 1000; // 1 hour in milliseconds - case '1M': - return 6 * 60 * 60 * 1000; // 6 hours in milliseconds - case '6M': - return 24 * 60 * 60 * 1000; // 24 hours in milliseconds - case '1Y': - return 4 * 24 * 60 * 60 * 1000; // 4 days in milliseconds - default: - throw new Error('Invalid time period'); - } -}; -const getRandomTime = (startDate, endDate) => { - const date = new Date(startDate + Math.random() * (endDate - startDate)); - return date.toISOString(); -}; -const getRandomNumber = (min, max, toFixed) => { - return (Math.random() * (max - min) + min).toFixed(toFixed); -}; -const createChartData = (timePeriod: '24H' | '1W' | '1M' | '6M' | '1Y') => { - const quantity = getQuantityBasedOnTimePeriod(timePeriod); - const fromTime = getFromTime(timePeriod, now); - const interval = getInterval(timePeriod); - - const tmp = Array.from({ length: quantity }).map((_, index) => { - const time = new Date(fromTime + index * interval); - const utcString = `${time.getUTCFullYear()}-${pad(time.getUTCMonth() + 1, 2)}-${pad(time.getUTCDate(), 2)}T${pad( - time.getUTCHours(), - 2 - )}:${pad(time.getUTCMinutes(), 2)}:${pad(time.getUTCSeconds(), 2)}Z`; - - const volatility = 0.005; - const baseValue = - index >= quantity / 5 - ? 2 * Math.exp(volatility * Math.abs(getRandomNumber(1, 80, 2))) * index - : -20 * Math.exp(volatility * Math.abs(getRandomNumber(1, 100, 2))) * index; - const randomChange = getRandomNumber(-5, 5, 2); - let value = baseValue * Math.exp(volatility * Math.abs(randomChange)) * index; - - return { - time: utcString, - value: (value / 110).toFixed(2), - usd: (value / 100).toFixed(2), - }; - }); - return tmp; -}; +import { createChartData, getRandomTime, now, start1WeekAgo, start24HoursAgo } from './helpers/mockHelper'; // ALL THE MOCK DATA FOR RENDERING UI NEW const mockData = { diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.js index 3bc6c33aa2..62e4e70c5e 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.js @@ -2,7 +2,7 @@ import React from 'react'; import { Box, Stack, Typography } from '@mui/material'; import { useTheme } from '@mui/material'; -import { useStrings } from '../../common/useStrings'; +import { useStrings } from '../../common/hooks/useStrings'; import illustrationPng from '../../common/assets/images/illustration.png'; const LendAndBorrow = () => { diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js index 237f580cc1..040b64f95d 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js @@ -2,16 +2,16 @@ import { useMemo, useState } from 'react'; import { TableCell, TableRow, Typography, Stack, Box } from '@mui/material'; import { useTheme } from '@mui/material/styles'; -import { useNavigateTo } from '../../common/useNavigateTo'; +import { useNavigateTo } from '../../common/hooks/useNavigateTo'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import adaPng from '../../../../../assets/images/ada.png'; import hoskyPng from '../../common/assets/images/hosky-token.png'; import minswapPng from '../../common/assets/images/minswap-dex.png'; import { Chip, Skeleton } from '../../../../components'; -import { useStrings } from '../../common/useStrings'; +import { useStrings } from '../../common/hooks/useStrings'; import { Icon } from '../../../../components/icons/'; -import useTableSort from '../../common/useTableSort'; -import Table from '../../common/Table'; +import useTableSort from '../../common/hooks/useTableSort'; +import Table from '../../common/components/Table'; const TableRowSkeleton = ({ id, theme, ...props }) => ( ( ({ height: '40px', @@ -31,7 +27,6 @@ const TableTabs = { const PortfolioDapps = ({ data }) => { const theme = useTheme(); const strings = useStrings(); - const { unitOfAccount, changeUnitOfAccount, settingFiatPairUnit } = usePortfolio(); const [keyword, setKeyword] = useState(''); const [isLoading, setIsLoading] = useState(); const [liquidityList, setLiquidlityList] = useState([]); @@ -45,17 +40,6 @@ const PortfolioDapps = ({ data }) => { { id: TableTabs.ORDER, label: `${strings.openOrders}`, active: false }, { id: TableTabs.LENDBORROW, label: `${strings.lendAndBorrow}`, active: false }, ]); - const [isAdaMainUnit, setIsAdaMainUnit] = useState(unitOfAccount === 'ADA'); - - const handleCurrencyChange = () => { - if (isAdaMainUnit) { - changeUnitOfAccount(settingFiatPairUnit.currency || 'USD'); - setIsAdaMainUnit(false); - } else { - changeUnitOfAccount('ADA'); - setIsAdaMainUnit(true); - } - }; useEffect(() => { // FAKE FETCHING DATA TO SEE SKELETON @@ -111,129 +95,48 @@ const PortfolioDapps = ({ data }) => { }; return ( - - - - - - {isLoading ? ( - - ) : ( - - {isAdaMainUnit ? mockData.common.dappsBalance.ada : mockData.common.dappsBalance.usd} - - )} - - {isAdaMainUnit ? settingFiatPairUnit.currency || 'USD' : 'ADA'} - - {isAdaMainUnit ? '/ADA' : `/${unitOfAccount}`} - - - - - - {isLoading ? ( - - ) : ( - - {isAdaMainUnit ? mockData.common.dappsBalance.usd : mockData.common.dappsBalance.ada}{' '} - {isAdaMainUnit ? 'ADA' : unitOfAccount} - - )} - {isLoading ? ( - - - - - ) : ( - - % {strings.balancePerformance} - +/- {strings.balanceChange} - - {strings.in24hours} ({strings.dapps}) - - - } - placement="right" - > - - = 0} - label={ - - {mockData.common.dappsBalance.percents >= 0 ? ( - - ) : ( - - )} - - - {mockData.common.dappsBalance.percents >= 0 - ? mockData.common.dappsBalance.percents - : -1 * mockData.common.dappsBalance.percents} - % - - - } - /> - = 0} - label={ - - {mockData.common.dappsBalance.amount >= 0 && '+'} - {mockData.common.dappsBalance.amount} USD - - } - /> - - - )} - - - - setKeyword(e.target.value)} placeholder={strings.search} /> - - - - {buttonProps.map(button => ( - handleChangeTab(button.id)} - sx={{ backgroundColor: button.active ? theme.palette.ds.gray_c200 : 'transparent' }} - > - - {button.label} ( - {button.id === TableTabs.LIQUIDITY - ? liquidityList.length - : button.id === TableTabs.ORDER - ? orderList.length - : button.id === TableTabs.LENDBORROW - ? 0 - : null} - ) - - - ))} - - - {buttonProps[0].active && } - {buttonProps[1].active && } - {buttonProps[2].active && } + + + % {strings.balancePerformance} + +/- {strings.balanceChange} + + {strings.in24hours} ({strings.dapps}) + + + } + /> + + + {buttonProps.map(button => ( + handleChangeTab(button.id)} + sx={{ backgroundColor: button.active ? theme.palette.ds.gray_c200 : 'transparent' }} + > + + {button.label} ( + {button.id === TableTabs.LIQUIDITY + ? liquidityList.length + : button.id === TableTabs.ORDER + ? orderList.length + : button.id === TableTabs.LENDBORROW + ? 0 + : null} + ) + + + ))} - + + {buttonProps[0].active && } + {buttonProps[1].active && } + {buttonProps[2].active && } +
); }; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js index 4fe9eafb76..7304e33dfc 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js @@ -7,7 +7,7 @@ import { Skeleton, Tooltip } from '../../../../components'; import chartSkeletonPng from '../../common/assets/images/token-detail-chart-skeleton.png'; import { Chip } from '../../../../components/chip'; import moment from 'moment'; -import { useStrings } from '../../common/useStrings'; +import { useStrings } from '../../common/hooks/useStrings'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import { Icon } from '../../../../components/icons'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js index 7688851c7e..d996046dfb 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js @@ -5,7 +5,7 @@ import { Skeleton } from '../../../../components/Skeleton'; import { CopyButton } from '../../../../components/buttons/CopyButton'; import { useTheme } from '@mui/material/styles'; import tokenPng from '../../common/assets/images/token.png'; -import { useStrings } from '../../common/useStrings'; +import { useStrings } from '../../common/hooks/useStrings'; const TokenDetailOverview = ({ tokenInfo, isLoading, isAda }) => { const theme = useTheme(); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js index 5b66dd3cff..dd40e75ce6 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js @@ -2,7 +2,7 @@ import React from 'react'; import { Box, Stack, Typography, Link } from '@mui/material'; import { useTheme } from '@mui/material/styles'; -import { useStrings } from '../../common/useStrings'; +import { useStrings } from '../../common/hooks/useStrings'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import { Skeleton } from '../../../../components/Skeleton'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js index a0fb7e0317..c8c6dc20d9 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js @@ -9,8 +9,8 @@ import TransactionTable from './TransactionTable'; import TokenDetailChart from './TokenDetailChart'; import SubMenu from '../../../../../components/topbar/SubMenu'; import { useTheme } from '@mui/material/styles'; -import { useNavigateTo } from '../../common/useNavigateTo'; -import { useStrings } from '../../common/useStrings'; +import { useNavigateTo } from '../../common/hooks/useNavigateTo'; +import { useStrings } from '../../common/hooks/useStrings'; import mockData from '../../common/mockData'; import TokenDetailPerformance from './TokenDetailPerformance'; import TokenDetailOverview from './TokenDetailOverview'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js index 9d871c1143..cb54edc020 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js @@ -4,7 +4,7 @@ import { Box, Stack, Typography, IconButton, Table, TableCell, TableHead, TableB import { useTheme } from '@mui/material/styles'; import { Card } from '../../../../components'; import moment from 'moment'; -import { useStrings } from '../../common/useStrings'; +import { useStrings } from '../../common/hooks/useStrings'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import { Icon } from '../../../../components/icons'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js index 479e5ab16b..6f4fe13ba5 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js @@ -3,33 +3,17 @@ import { Typography, Stack, Box, Input, styled } from '@mui/material'; import React, { useEffect, useState } from 'react'; import { Tooltip, SearchInput } from '../../../../components'; import { useTheme } from '@mui/material/styles'; -import { defineMessages } from 'react-intl'; -import { usePortfolio } from '../../module/PortfolioContextProvider'; import StatsTable from './StatsTable'; import mockData from '../../common/mockData'; -import { Chip } from '../../../../components/chip'; -import { Skeleton } from '../../../../components/Skeleton'; -import { useStrings } from '../../common/useStrings'; -import { Icon } from '../../../../components/icons/index'; +import PortfolioHeader from '../../common/components/PortfolioHeader'; +import { useStrings } from '../../common/hooks/useStrings'; const PortfolioWallet = ({ data }) => { const theme = useTheme(); const strings = useStrings(); - const { unitOfAccount, changeUnitOfAccount, settingFiatPairUnit } = usePortfolio(); const [keyword, setKeyword] = useState(''); const [isLoading, setIsLoading] = useState(); const [tokenList, setTokenList] = useState([]); - const [isAdaMainUnit, setIsAdaMainUnit] = useState(unitOfAccount === 'ADA'); - - const handleCurrencyChange = () => { - if (isAdaMainUnit) { - changeUnitOfAccount(settingFiatPairUnit.currency || 'USD'); - setIsAdaMainUnit(false); - } else { - changeUnitOfAccount('ADA'); - setIsAdaMainUnit(true); - } - }; useEffect(() => { // FAKE FETCHING DATA TO SEE SKELETON @@ -66,97 +50,18 @@ const PortfolioWallet = ({ data }) => { return ( - - - - {isLoading ? ( - - ) : ( - - {isAdaMainUnit ? mockData.common.walletBalance.ada : mockData.common.walletBalance.usd} - - )} - - {isAdaMainUnit ? settingFiatPairUnit.currency || 'USD' : 'ADA'} - - {isAdaMainUnit ? '/ADA' : `/${unitOfAccount}`} - - - - - - {isLoading ? ( - - ) : ( - - {isAdaMainUnit ? mockData.common.walletBalance.usd : mockData.common.walletBalance.ada}{' '} - {isAdaMainUnit ? 'ADA' : unitOfAccount} - - )} - {isLoading ? ( - - - - - ) : ( - - % {strings.balancePerformance} - +/- {strings.balanceChange} - {strings.in24hours} - - } - placement="right" - > - - = 0} - label={ - - {mockData.common.walletBalance.percents >= 0 ? ( - - ) : ( - - )} - - - {mockData.common.walletBalance.percents >= 0 - ? mockData.common.walletBalance.percents - : -1 * mockData.common.walletBalance.percents} - % - - - } - /> - = 0} - label={ - - {mockData.common.walletBalance.amount >= 0 && '+'} - {mockData.common.walletBalance.amount} USD - - } - /> - - - )} - - - - setKeyword(e.target.value)} placeholder={strings.search} /> - + + % {strings.balancePerformance} + +/- {strings.balanceChange} + {strings.in24hours} + + } + /> ); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js index 31a9c39953..167153967a 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js @@ -6,10 +6,10 @@ import tokenPng from '../../common/assets/images/token.png'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import { Chip, Skeleton } from '../../../../components'; import { Icon } from '../../../../components/icons'; -import { useNavigateTo } from '../../common/useNavigateTo'; -import { useStrings } from '../../common/useStrings'; -import useTableSort from '../../common/useTableSort'; -import Table from '../../common/Table'; +import { useNavigateTo } from '../../common/hooks/useNavigateTo'; +import { useStrings } from '../../common/hooks/useStrings'; +import useTableSort from '../../common/hooks/useTableSort'; +import Table from '../../common/components/Table'; const TableRowSkeleton = ({ id, theme, ...props }) => ( Date: Thu, 6 Jun 2024 13:28:24 +0700 Subject: [PATCH 075/464] refactor portfolio layout --- .../app/UI/layout/PortfolioPageLayout.js | 31 +------------------ .../UI/pages/portfolio/PortfolioDappsPage.js | 8 ++--- .../UI/pages/portfolio/PortfolioDetailPage.js | 8 ++--- .../app/UI/pages/portfolio/PortfolioPage.js | 10 +++--- .../app/UI/pages/portfolio/layout.js | 18 +++++++++++ 5 files changed, 32 insertions(+), 43 deletions(-) create mode 100644 packages/yoroi-extension/app/UI/pages/portfolio/layout.js diff --git a/packages/yoroi-extension/app/UI/layout/PortfolioPageLayout.js b/packages/yoroi-extension/app/UI/layout/PortfolioPageLayout.js index 4c66ec05ce..2b5a1bb1a8 100644 --- a/packages/yoroi-extension/app/UI/layout/PortfolioPageLayout.js +++ b/packages/yoroi-extension/app/UI/layout/PortfolioPageLayout.js @@ -59,32 +59,7 @@ class PortfolioPageLayout extends Component { actions.router.goToRoute.trigger({ route })} isActiveItem={this.isActivePage} /> ); - const PortfolioLayoutClassic = ( - - } - sidebar={sidebarContainer} - navbar={ - - } - /> - } - showInContainer - showAsCard - > - {children} - - - ); - const PortfolioLayoutRevamp = ( + return ( } @@ -110,10 +85,6 @@ class PortfolioPageLayout extends Component { ); - return this.props.renderLayoutComponent({ - CLASSIC: PortfolioLayoutClassic, - REVAMP: PortfolioLayoutRevamp, - }); } } export default (withLayout(PortfolioPageLayout): ComponentType); diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDappsPage.js b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDappsPage.js index 901b87fcb4..b79627b312 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDappsPage.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDappsPage.js @@ -1,19 +1,19 @@ // @flow import React from 'react'; -import PortfolioPageLayout from '../../layout/PortfolioPageLayout'; import PortfolioDapps from '../../features/portfolio/useCases/Dapps/PortfolioDapps'; import mockData from '../../features/portfolio/common/mockData'; +import PortfolioLayout from './layout'; type Props = {| stores: any, actions: any, |}; -const PortfolioDappsPage = ({ stores, actions }: Props) => { +const PortfolioDappsPage = (props: Props) => { return ( - + - + ); }; diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js index a0b9a4ce2e..e51127f230 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js @@ -1,8 +1,8 @@ // @flow import React from 'react'; import TokenDetails from '../../features/portfolio/useCases/TokenDetails/TokenDetails'; -import PortfolioPageLayout from '../../layout/PortfolioPageLayout'; import mockData from '../../features/portfolio/common/mockData'; +import PortfolioLayout from './layout'; type Props = {| stores: any, @@ -10,7 +10,7 @@ type Props = {| match: any, |}; -const PortfolioDetailPage = ({ stores, actions, match }: Props) => { +const PortfolioDetailPage = ({ match, ...props }: Props) => { const tokenId = match.params.tokenId; const tokenInfo = React.useMemo(() => { @@ -20,9 +20,9 @@ const PortfolioDetailPage = ({ stores, actions, match }: Props) => { }, [tokenId]); return ( - + - + ); }; diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js index d207808631..a55ea30c6f 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js @@ -1,19 +1,19 @@ // @flow import React from 'react'; import PortfolioWallet from '../../features/portfolio/useCases/Wallet/PortfolioWallet'; -import PortfolioPageLayout from '../../layout/PortfolioPageLayout'; import mockData from '../../features/portfolio/common/mockData'; +import PortfolioLayout from './layout'; type Props = {| stores: any, actions: any, |}; -const PortfolioPage = ({ stores, actions }: Props) => { +const PortfolioPage = (props: Props) => { return ( - - - + + + ); }; diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/layout.js b/packages/yoroi-extension/app/UI/pages/portfolio/layout.js new file mode 100644 index 0000000000..cd938453e8 --- /dev/null +++ b/packages/yoroi-extension/app/UI/pages/portfolio/layout.js @@ -0,0 +1,18 @@ +// @flow +import PortfolioPageLayout from '../../layout/PortfolioPageLayout'; + +type Props = {| + stores: any, + actions: any, + children?: React$Node, +|}; + +const PortfolioLayout = ({ stores, actions, children }: Props) => { + return ( + + {children} + + ); +}; + +export default PortfolioLayout; From 3a4212aa176c148cc0bdf92f019f6f48a76b4a5b Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Thu, 6 Jun 2024 14:25:44 +0700 Subject: [PATCH 076/464] refactor token detail chart --- .../portfolio/common/hooks/useChart.js | 159 ++++++++++++++++++ .../useCases/TokenDetails/TokenDetailChart.js | 149 ++-------------- 2 files changed, 173 insertions(+), 135 deletions(-) create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useChart.js diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useChart.js b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useChart.js new file mode 100644 index 0000000000..4e1b3c6975 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useChart.js @@ -0,0 +1,159 @@ +// @flow +import { useState } from 'react'; +import { useStrings } from './useStrings'; +import { useTheme } from '@mui/material/styles'; +import { Box } from '@mui/material'; +import moment from 'moment'; + +const useChart = (data) => { + const strings = useStrings(); + const theme = useTheme(); + + const [buttonPeriodProps, setButtonPeriodProps] = useState([ + { id: 'start24HoursAgo', label: strings['24H'], active: true }, + { id: 'start1WeekAgo', label: strings['1W'], active: false }, + { id: 'start1MonthAgo', label: strings['1M'], active: false }, + { id: 'start6MonthAgo', label: strings['6M'], active: false }, + { id: 'start1YearAgo', label: strings['1Y'], active: false }, + { id: 'ALL', label: strings['ALL'], active: false }, + ]); + const [detailInfo, setDetailInfo] = useState({ + value: data[buttonPeriodProps[0].id][data[buttonPeriodProps[0].id].length - 1].value, + usd: data[buttonPeriodProps[0].id][data[buttonPeriodProps[0].id].length - 1].usd, + }); + const [isDragging, setIsDragging] = useState(false); + + const CustomYAxisTick = props => { + const { x, y, payload } = props; + + return ( + + {payload.value.toFixed(1)} + + ); + }; + + const CustomActiveDot = props => { + const { cx, cy, payload, value, index, dataLength, chartBottom, rectWidth, rectHeight } = props; + + let rectX = cx - rectWidth / 2; + if (index === 0) { + rectX = cx; + } else if (index === dataLength - 1) { + rectX = cx - rectWidth; + } else { + rectX = cx - (index * rectWidth) / dataLength; + } + + const rectY = chartBottom - rectHeight; + + return ( + isDragging && ( + + + + + + + + + {moment(payload.time).format('MM/DD/YY H:mm')} + + + + ) + ); + }; + + const handleChoosePeriod = label => { + const tmp = buttonPeriodProps.map(item => { + if (item.label === label) return { ...item, active: true }; + return { + ...item, + active: false, + }; + }); + setButtonPeriodProps(tmp); + }; + + const handleMouseMove = e => { + if (!isDragging) return; + + if (!e.isTooltipActive) { + handleMouseUp(); + return; + } + + const value = e.activePayload && e.activePayload.length > 0 ? e.activePayload[0].payload.value : null; + const usd = e.activePayload && e.activePayload.length > 0 ? e.activePayload[0].payload.usd : null; + + if (!value || !usd) return; + setDetailInfo({ + value, + usd, + }); + }; + + const handleMouseDown = event => { + if (!event || !event.activePayload || event.activePayload.length <= 0) return; + + const value = event.activePayload[0].payload.value; + const usd = event.activePayload[0].payload.usd; + + if (!value || !usd) return; + setDetailInfo({ + value, + usd, + }); + setIsDragging(true); + }; + + const handleMouseUp = () => { + const currentPeriod = buttonPeriodProps.find(item => item.active).id; + setDetailInfo({ + value: data[currentPeriod][data[currentPeriod].length - 1].value, + usd: data[currentPeriod][data[currentPeriod].length - 1].usd, + }); + setIsDragging(false); + }; + + const minValue = Math.min(...data[buttonPeriodProps.find(item => item.active).id].map(item => item.value)); + + const maxValue = Math.max(...data[buttonPeriodProps.find(item => item.active).id].map(item => item.value)); + + return { + CustomYAxisTick, + CustomActiveDot, + handleChoosePeriod, + handleMouseMove, + handleMouseDown, + handleMouseUp, + buttonPeriodProps, + detailInfo, + minValue, + maxValue, + }; +}; + +export default useChart; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js index 7304e33dfc..f9c9b5e484 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js @@ -3,13 +3,12 @@ import { Box, Button, Stack, styled, Typography } from '@mui/material'; import React, { useEffect, useMemo, useState } from 'react'; import { LineChart, Line, CartesianGrid, XAxis, YAxis, ResponsiveContainer, Label, Tooltip as RechartTooltip } from 'recharts'; import { useTheme } from '@mui/material/styles'; -import { Skeleton, Tooltip } from '../../../../components'; +import { Skeleton, Tooltip, Chip } from '../../../../components'; import chartSkeletonPng from '../../common/assets/images/token-detail-chart-skeleton.png'; -import { Chip } from '../../../../components/chip'; -import moment from 'moment'; import { useStrings } from '../../common/hooks/useStrings'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import { Icon } from '../../../../components/icons'; +import useChart from '../../common/hooks/useChart'; const StyledButton = styled(Button)(({ theme, disabled, variant }) => ({ fontWeight: 500, @@ -34,138 +33,18 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { const theme = useTheme(); const strings = useStrings(); const { unitOfAccount } = usePortfolio(); - const [buttonPeriodProps, setButtonPeriodProps] = useState([ - { id: 'start24HoursAgo', label: strings['24H'], active: true }, - { id: 'start1WeekAgo', label: strings['1W'], active: false }, - { id: 'start1MonthAgo', label: strings['1M'], active: false }, - { id: 'start6MonthAgo', label: strings['6M'], active: false }, - { id: 'start1YearAgo', label: strings['1Y'], active: false }, - { id: 'ALL', label: strings['ALL'], active: false }, - ]); - const [detailInfo, setDetailInfo] = useState({ - value: tokenInfo.chartData[buttonPeriodProps[0].id][tokenInfo.chartData[buttonPeriodProps[0].id].length - 1].value, - usd: tokenInfo.chartData[buttonPeriodProps[0].id][tokenInfo.chartData[buttonPeriodProps[0].id].length - 1].usd, - }); - const [isDragging, setIsDragging] = useState(false); - - const CustomYAxisTick = props => { - const { x, y, payload } = props; - - return ( - - {payload.value.toFixed(1)} - - ); - }; - - const CustomActiveDot = props => { - const { cx, cy, payload, value, index, dataLength, chartBottom, rectWidth, rectHeight } = props; - - let rectX = cx - rectWidth / 2; - if (index === 0) { - rectX = cx; - } else if (index === dataLength - 1) { - rectX = cx - rectWidth; - } else { - rectX = cx - (index * rectWidth) / dataLength; - } - - const rectY = chartBottom - rectHeight; - - return ( - isDragging && ( - - - - - - - - - {moment(payload.time).format('MM/DD/YY H:mm')} - - - - ) - ); - }; - - const handleChoosePeriod = label => { - const tmp = buttonPeriodProps.map(item => { - if (item.label === label) return { ...item, active: true }; - return { - ...item, - active: false, - }; - }); - setButtonPeriodProps(tmp); - }; - - const handleMouseMove = e => { - if (!isDragging) return; - - if (!e.isTooltipActive) { - handleMouseUp(); - return; - } - - const value = e.activePayload && e.activePayload.length > 0 ? e.activePayload[0].payload.value : null; - const usd = e.activePayload && e.activePayload.length > 0 ? e.activePayload[0].payload.usd : null; - - if (!value || !usd) return; - setDetailInfo({ - value, - usd, - }); - }; - - const handleMouseDown = event => { - if (!event || !event.activePayload || event.activePayload.length <= 0) return; - - const value = event.activePayload[0].payload.value; - const usd = event.activePayload[0].payload.usd; - - if (!value || !usd) return; - setDetailInfo({ - value, - usd, - }); - setIsDragging(true); - }; - - const handleMouseUp = () => { - const currentPeriod = buttonPeriodProps.find(item => item.active).id; - setDetailInfo({ - value: tokenInfo.chartData[currentPeriod][tokenInfo.chartData[currentPeriod].length - 1].value, - usd: tokenInfo.chartData[currentPeriod][tokenInfo.chartData[currentPeriod].length - 1].usd, - }); - setIsDragging(false); - }; - - const minValue = Math.min(...tokenInfo.chartData[buttonPeriodProps.find(item => item.active).id].map(item => item.value)); - - const maxValue = Math.max(...tokenInfo.chartData[buttonPeriodProps.find(item => item.active).id].map(item => item.value)); + const { + CustomYAxisTick, + CustomActiveDot, + handleChoosePeriod, + handleMouseMove, + handleMouseDown, + handleMouseUp, + buttonPeriodProps, + detailInfo, + minValue, + maxValue, + } = useChart(tokenInfo.chartData); return ( From f6d451b31861ee76c40bd181ca778fe118ca2d0e Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 6 Jun 2024 10:42:37 +0300 Subject: [PATCH 077/464] fix: height,padding and strings --- .../UI/features/governace/common/GovernanceVoteingCard.js | 3 ++- .../app/UI/features/governace/common/useStrings.js | 2 ++ .../governace/useCases/DelagationForm/DelagationForm.js | 6 +++--- .../SelectGovernanceStatus/GovernanceStatusSelection.js | 1 - packages/yoroi-extension/app/i18n/locales/en-US.json | 2 +- 5 files changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.js b/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.js index 326edf773f..4bf6b0d273 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.js +++ b/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.js @@ -24,6 +24,7 @@ const StyledCard = styled(Stack)(({ theme, selected, pending }) => ({ flexDirection: 'column', alignItems: 'center', width: '294px', + height: '362px', borderRadius: '8px', ...(!selected && { backgroundImage: theme.palette.ds?.bg_gradient_1, @@ -72,7 +73,7 @@ export const GovernanceVoteingCard = ({ title, description, icon, selected, onCl )} {icon} - + {title} diff --git a/packages/yoroi-extension/app/UI/features/governace/common/useStrings.js b/packages/yoroi-extension/app/UI/features/governace/common/useStrings.js index 6e28a57920..608a6dda80 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/useStrings.js +++ b/packages/yoroi-extension/app/UI/features/governace/common/useStrings.js @@ -141,5 +141,7 @@ export const useStrings = () => { selectNoConfidenc: intl.formatMessage(messages.selectNoConfidenc), back: intl.formatMessage(messages.back), confirm: intl.formatMessage(messages.confirm), + total: intl.formatMessage(messages.total), + password: intl.formatMessage(messages.password), }).current; }; diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.js b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.js index 28228890fa..fc173e6ad4 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.js +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.js @@ -13,7 +13,7 @@ import { useCreateAndSendDrepDelegationTransaction } from '../../api/useCreateAn import { useStrings } from '../../common/useStrings'; const Container = styled(Box)(({ theme }) => ({ - paddingTop: '32px', + paddingTop: '23px', maxWidth: '506px', margin: '0 auto', height: '100%', @@ -33,7 +33,7 @@ const TotalBox = styled(Box)(({ theme }) => ({ })); const TransactionDetails = styled(Stack)(({ theme }) => ({ - marginBottom: '34px', + marginBottom: '40px', gap: '16px', })); const Actions = styled(Stack)(({ theme }) => ({ @@ -60,7 +60,7 @@ export const DelagationForm = (): Node => { } }; const idPasswordInvalid = passwaord.match(/\d+/g); - + console.log('sssdsdsds', strings.total); return ( diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js index e1a1d4381f..57f808cddc 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js @@ -57,7 +57,6 @@ export const GovernanceStatusSelection = (): Node => { const { createCertificate: createVotingCertificate, isLoading: isCreatingVotingCertificate } = useVotingCertificate({ useErrorBoundary: true, }); - console.log('governanceData', governanceData); const pageTitle = governanceData?.kind === 'none' ? strings.registerGovernance : strings.governanceStatus; const statusRawText = mapStatus[governanceVote?.kind]; diff --git a/packages/yoroi-extension/app/i18n/locales/en-US.json b/packages/yoroi-extension/app/i18n/locales/en-US.json index 5e9b924556..28ed29063c 100644 --- a/packages/yoroi-extension/app/i18n/locales/en-US.json +++ b/packages/yoroi-extension/app/i18n/locales/en-US.json @@ -1043,7 +1043,7 @@ "governance.drepId":"Drep ID:", "governance.statusSelected":"You have selected {status} as your governance status. You can change it at any time by clicking in the card bellow", "governance.registerGovernance":"Register in Governance", - "governance.chooseDrep":"chooseDrep", + "governance.chooseDrep":"Choose your Drep", "governance.reviewSelection":"Review the selections carefully to assign yourself a Governance Status", "governance.participateDialog.title":"Withdraw warning", "governance.participateDialog.contentInfo":"To withdraw your rewards, you need to participate in the Cardano Governance. Your rewards will continue to accumulate, but you are only able to withdraw it once you join the Governance process.", From 8874f30f0e6969b902e02711349ba563786f3954 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 6 Jun 2024 10:53:46 +0300 Subject: [PATCH 078/464] fix modal height --- .../yoroi-extension/app/UI/components/modals/ModalManager.js | 2 +- .../app/UI/features/governace/common/ChooseDRepModal.js | 2 +- .../SelectGovernanceStatus/GovernanceStatusSelection.js | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/yoroi-extension/app/UI/components/modals/ModalManager.js b/packages/yoroi-extension/app/UI/components/modals/ModalManager.js index f40a5d9274..7bfab07c58 100644 --- a/packages/yoroi-extension/app/UI/components/modals/ModalManager.js +++ b/packages/yoroi-extension/app/UI/components/modals/ModalManager.js @@ -25,7 +25,7 @@ const BootstrapDialog = styled(Dialog)(({ theme, width, height }) => ({ }, '& .MuiPaper-root': { maxWidth: width, - maxHeight: height, + height: height, margin: 0, }, '& .MuiDialogActions-root': { diff --git a/packages/yoroi-extension/app/UI/features/governace/common/ChooseDRepModal.js b/packages/yoroi-extension/app/UI/features/governace/common/ChooseDRepModal.js index 2e09be58ac..2cc145f452 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/ChooseDRepModal.js +++ b/packages/yoroi-extension/app/UI/features/governace/common/ChooseDRepModal.js @@ -47,7 +47,7 @@ export const ChooseDRepModal = ({ onSubmit }: ChooseDRepModallProps): Node => { return ( - + Identify your preferred DRep and enter their ID below to delegate your vote diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js index 57f808cddc..05e4b075c9 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js @@ -71,6 +71,7 @@ export const GovernanceStatusSelection = (): Node => { ), width: '648px', + height: '336px', }); }; From 1a65a89771d0ed92696a9ef8bcecb5d8d6856690 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 6 Jun 2024 11:06:42 +0300 Subject: [PATCH 079/464] fix: strings and line height --- .../app/UI/features/governace/common/useStrings.js | 1 + .../SelectGovernanceStatus/GovernanceStatusSelection.js | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/governace/common/useStrings.js b/packages/yoroi-extension/app/UI/features/governace/common/useStrings.js index 608a6dda80..4bda4b9115 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/useStrings.js +++ b/packages/yoroi-extension/app/UI/features/governace/common/useStrings.js @@ -143,5 +143,6 @@ export const useStrings = () => { confirm: intl.formatMessage(messages.confirm), total: intl.formatMessage(messages.total), password: intl.formatMessage(messages.password), + wrongPassword: intl.formatMessage(messages.wrongPassword), }).current; }; diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js index 05e4b075c9..e529f16b66 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js @@ -188,11 +188,11 @@ export const GovernanceStatusSelection = (): Node => { )} {governanceData?.kind === 'none' && ( - + {strings.becomeADrep} )} - + {strings.learnMore} From 815fab3f2f8a803745623d9c43edb283831202e5 Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Thu, 6 Jun 2024 16:52:57 +0700 Subject: [PATCH 080/464] reverted file changes --- .../portfolio/useCases/TokenDetails/TransactionTable.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js index cb54edc020..e988af9804 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js @@ -1,5 +1,5 @@ // @flow -import React, { useMemo, useState } from 'react'; +import React, { Fragment, useMemo, useState } from 'react'; import { Box, Stack, Typography, IconButton, Table, TableCell, TableHead, TableBody, TableRow, styled } from '@mui/material'; import { useTheme } from '@mui/material/styles'; import { Card } from '../../../../components'; @@ -141,7 +141,7 @@ const TransactionTable = ({ history }) => { {groupedData.map((item, index) => ( - <> + { headCells={headCells} /> ))} - + ))} From 5676abd5f3899db3bbd9c0590265042db70e091e Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 6 Jun 2024 14:05:06 +0300 Subject: [PATCH 081/464] fix: icon and text --- .../yoroi-extension/app/UI/components/Input/PasswordInput.js | 2 +- .../SelectGovernanceStatus/GovernanceStatusSelection.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/yoroi-extension/app/UI/components/Input/PasswordInput.js b/packages/yoroi-extension/app/UI/components/Input/PasswordInput.js index 133a45838b..3bdb2cbbe1 100644 --- a/packages/yoroi-extension/app/UI/components/Input/PasswordInput.js +++ b/packages/yoroi-extension/app/UI/components/Input/PasswordInput.js @@ -53,7 +53,7 @@ export const PasswordInput = ({ id, label, variant, onChange, value, error, help onMouseDown={handleMouseDownPassword} edge="end" > - {showPassword ? : } + {!showPassword ? : } } diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js index e529f16b66..f651dbcdd2 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js @@ -64,7 +64,7 @@ export const GovernanceStatusSelection = (): Node => { const openDRepIdModal = (onSubmit: (drepID: string) => void) => { openModal({ - title: strings.chooseDrep, + title: String(strings.chooseDrep).toUpperCase(), content: ( From 13dd9e214459773bffdd1657825e4f08a6f2cb6d Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 6 Jun 2024 15:12:07 +0300 Subject: [PATCH 082/464] add new Colapsibale component --- .../UI/components/Collapsible/Collapsible.js | 70 +++++++++++++++++++ .../app/UI/components/icons/ChevronDown.js | 14 ++++ .../app/UI/components/icons/ChevronUp.js | 14 ++++ .../app/UI/components/icons/index.js | 3 + .../app/UI/components/index.js | 1 + .../governace/common/ChooseDRepModal.js | 2 +- .../useCases/DelagationForm/DelagationForm.js | 52 +++++++------- 7 files changed, 131 insertions(+), 25 deletions(-) create mode 100644 packages/yoroi-extension/app/UI/components/Collapsible/Collapsible.js create mode 100644 packages/yoroi-extension/app/UI/components/icons/ChevronDown.js create mode 100644 packages/yoroi-extension/app/UI/components/icons/ChevronUp.js diff --git a/packages/yoroi-extension/app/UI/components/Collapsible/Collapsible.js b/packages/yoroi-extension/app/UI/components/Collapsible/Collapsible.js new file mode 100644 index 0000000000..fb60ab5eb7 --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/Collapsible/Collapsible.js @@ -0,0 +1,70 @@ +// @flow +import * as React from 'react'; +import type { Node } from 'react'; +import { styled } from '@mui/material/styles'; +import MuiAccordion from '@mui/material/Accordion'; +import MuiAccordionSummary from '@mui/material/AccordionSummary'; +import MuiAccordionDetails from '@mui/material/AccordionDetails'; +import Typography from '@mui/material/Typography'; +import { Icon } from '../icons/index'; +import { IconButton } from '@mui/material'; +import { Box } from '@mui/material'; + +const Accordion = styled(props => )(({ theme }) => ({ + '&:not(:last-child)': { + borderBottom: 0, + }, + '&::before': { + display: 'none', + }, + '& .MuiAccordionSummary-root': { + margin: '0px', + padding: '0px', + backgroundColor: 'transparent', + minHeight: '24px', + height: '24px', + }, +})); + +const AccordionSummary = styled(MuiAccordionSummary)(({ theme }) => ({ + '& .MuiAccordionSummary-content': { + margin: '0px', + }, +})); + +const AccordionDetails = styled(MuiAccordionDetails)(({ theme }) => ({ + padding: 0, + paddingTop: '16px', +})); + +type Props = {| + title: string, + content: Node, +|}; + +export const Collapsible = ({ title, content }: Props): Node => { + const [expanded, setExpanded] = React.useState('none'); + + const handleChange = panel => (event, newExpanded) => { + setExpanded(newExpanded ? panel : false); + }; + + return ( + + + + + } + > + + {title} + + + {content} + + ); +}; diff --git a/packages/yoroi-extension/app/UI/components/icons/ChevronDown.js b/packages/yoroi-extension/app/UI/components/icons/ChevronDown.js new file mode 100644 index 0000000000..86979ccc8f --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/icons/ChevronDown.js @@ -0,0 +1,14 @@ +import React from 'react'; + +export const ChevronDown = () => { + return ( + + + + ); +}; diff --git a/packages/yoroi-extension/app/UI/components/icons/ChevronUp.js b/packages/yoroi-extension/app/UI/components/icons/ChevronUp.js new file mode 100644 index 0000000000..9e291776ef --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/icons/ChevronUp.js @@ -0,0 +1,14 @@ +import React from 'react'; + +export const ChevronUp = () => { + return ( + + + + ); +}; diff --git a/packages/yoroi-extension/app/UI/components/icons/index.js b/packages/yoroi-extension/app/UI/components/icons/index.js index 4a9b51a196..cbc5a59a31 100644 --- a/packages/yoroi-extension/app/UI/components/icons/index.js +++ b/packages/yoroi-extension/app/UI/components/icons/index.js @@ -1,9 +1,12 @@ import { CloseIcon } from './CloseIcon'; import { VisibilityOff } from './VisibilityOff'; import { VisibilityOn } from './VisibilityOn'; +import { ChevronUp } from './ChevronUp'; +import { ChevronDown } from './ChevronDown'; export const Icon = { CloseIcon, VisibilityOn, VisibilityOff, + ChevronDown, }; diff --git a/packages/yoroi-extension/app/UI/components/index.js b/packages/yoroi-extension/app/UI/components/index.js index ac35e12ae0..8a7de1bc38 100644 --- a/packages/yoroi-extension/app/UI/components/index.js +++ b/packages/yoroi-extension/app/UI/components/index.js @@ -2,4 +2,5 @@ export * from './Input/TextInput'; export * from './Input/PasswordInput'; export * from './TransactionFailed/TransactionFailed'; export * from './TransactionSubmitted/TransactionSubmitted'; +export * from './Collapsible/Collapsible'; export * from './Icons'; diff --git a/packages/yoroi-extension/app/UI/features/governace/common/ChooseDRepModal.js b/packages/yoroi-extension/app/UI/features/governace/common/ChooseDRepModal.js index 2cc145f452..b17246410d 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/ChooseDRepModal.js +++ b/packages/yoroi-extension/app/UI/features/governace/common/ChooseDRepModal.js @@ -7,7 +7,7 @@ import Typography from '@mui/material/Typography'; import Box from '@mui/material/Box'; import Stack from '@mui/material/Stack'; import { CustomModal } from '../../../components/modals/CustomModal'; -import { TextInput } from '../../../components'; +import { TextInput } from '../../../components/index'; import { parseDrepId, useIsValidDRepID } from '@yoroi/staking'; import { isNonNullable } from '@yoroi/common'; import { RustModule } from '../../../../api/ada/lib/cardanoCrypto/rustLoader'; diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.js b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.js index fc173e6ad4..14f2d329da 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.js +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.js @@ -11,6 +11,7 @@ import { PasswordInput } from '../../../../components'; import { useGovernance } from '../../module/GovernanceContextProvider'; import { useCreateAndSendDrepDelegationTransaction } from '../../api/useCreateAndSendDrepDelegationTransaction'; import { useStrings } from '../../common/useStrings'; +import { Collapsible } from '../../../../components'; const Container = styled(Box)(({ theme }) => ({ paddingTop: '23px', @@ -33,7 +34,6 @@ const TotalBox = styled(Box)(({ theme }) => ({ })); const TransactionDetails = styled(Stack)(({ theme }) => ({ - marginBottom: '40px', gap: '16px', })); const Actions = styled(Stack)(({ theme }) => ({ @@ -86,29 +86,33 @@ export const DelagationForm = (): Node => { {strings.transactionDetails} - - - {strings.operations} - - {governanceVote.kind === 'delegate' && ( - <> - {`Delegate voting to ${governanceVote.drepID}`} - - Transaction fee: 0.5 ADA - - - )} - {governanceVote.kind === 'abstain' && ( - <> - {strings.selectAbstein} - - )} - {governanceVote.kind === 'no-confidence' && ( - <> - {strings.selectNoConfidenc} - - )} - + + + {governanceVote.kind === 'delegate' && ( + <> + {`Delegate voting to ${governanceVote.drepID}`} + + Transaction fee: 0.5 ADA + + + )} + {governanceVote.kind === 'abstain' && ( + <> + {strings.selectAbstein} + + )} + {governanceVote.kind === 'no-confidence' && ( + <> + {strings.selectNoConfidenc} + + )} + + } + /> + Date: Thu, 6 Jun 2024 15:22:41 +0300 Subject: [PATCH 083/464] fix: text styles --- .../useCases/DelagationForm/DelagationForm.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.js b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.js index 14f2d329da..2755ac210a 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.js +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.js @@ -93,10 +93,18 @@ export const DelagationForm = (): Node => { {governanceVote.kind === 'delegate' && ( <> - {`Delegate voting to ${governanceVote.drepID}`} - - Transaction fee: 0.5 ADA - + {`Delegate voting to ${governanceVote.drepID}`} + + + Transaction fee + + + 0.5 ADA + + )} {governanceVote.kind === 'abstain' && ( From 16dacb2c045ccdae84a1819d3a1466c18acca00a Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 6 Jun 2024 15:24:58 +0300 Subject: [PATCH 084/464] fix: title line height --- .../yoroi-extension/app/UI/components/modals/ModalManager.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/UI/components/modals/ModalManager.js b/packages/yoroi-extension/app/UI/components/modals/ModalManager.js index 7bfab07c58..14f6958dd4 100644 --- a/packages/yoroi-extension/app/UI/components/modals/ModalManager.js +++ b/packages/yoroi-extension/app/UI/components/modals/ModalManager.js @@ -56,7 +56,7 @@ export const ModalManager = (): Node => { height={height} > - + {title} From c8fb73d6f55dd07432010d4284d7e37d56b43ba7 Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Fri, 7 Jun 2024 14:35:50 +0700 Subject: [PATCH 085/464] refactor and added types --- .../app/UI/components/index.js | 8 +- .../common/components/PortfolioHeader.js | 19 +- .../common/components/PortfolioMenu.js | 3 +- .../common/components/SortableTableHead.js | 15 +- .../portfolio/common/components/Table.js | 14 +- .../portfolio/common/helpers/mockHelper.js | 32 +-- .../common/helpers/transactionHelper.js | 49 +++++ .../portfolio/common/hooks/useChart.js | 88 +++++--- .../portfolio/common/hooks/useTableSort.js | 16 +- .../UI/features/portfolio/common/mockData.js | 198 +++++++++--------- .../features/portfolio/common/types/chart.js | 21 ++ .../features/portfolio/common/types/index.js | 82 ++++++++ .../features/portfolio/common/types/table.js | 9 + .../portfolio/common/types/transaction.js | 25 +++ .../module/PortfolioContextProvider.js | 14 +- .../app/UI/features/portfolio/module/state.js | 12 +- .../useCases/Dapps/LiquidityTable.js | 19 +- .../portfolio/useCases/Dapps/OrderTable.js | 20 +- .../useCases/Dapps/PortfolioDapps.js | 16 +- .../useCases/TokenDetails/TokenDetailChart.js | 35 ++-- .../TokenDetails/TokenDetailOverview.js | 11 +- .../TokenDetails/TokenDetailPerformance.js | 10 +- .../useCases/TokenDetails/TokenDetails.js | 15 +- .../useCases/TokenDetails/TransactionTable.js | 77 ++----- .../useCases/Wallet/PortfolioWallet.js | 13 +- .../portfolio/useCases/Wallet/StatsTable.js | 6 +- 26 files changed, 522 insertions(+), 305 deletions(-) create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/helpers/transactionHelper.js create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/types/chart.js create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/types/index.js create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/types/table.js create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/types/transaction.js diff --git a/packages/yoroi-extension/app/UI/components/index.js b/packages/yoroi-extension/app/UI/components/index.js index 0ae8283814..85a143b0fd 100644 --- a/packages/yoroi-extension/app/UI/components/index.js +++ b/packages/yoroi-extension/app/UI/components/index.js @@ -1,7 +1,7 @@ -export * from './card'; -export * from './tooltip'; -export * from './skeleton'; -export * from './chip'; +export * from './Card'; +export * from './Tooltip'; +export * from './Skeleton'; +export * from './Chip'; export * from './buttons/CopyButton'; export * from './Input/SearchInput'; export * from './Input/TextInput'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioHeader.js b/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioHeader.js index 4f8bcc8cb7..ab35579e58 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioHeader.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioHeader.js @@ -1,28 +1,21 @@ // @flow -import { useState } from 'react'; +import { ReactNode, useState } from 'react'; import { Stack, Typography } from '@mui/material'; import { useTheme } from '@mui/material/styles'; import { useStrings } from '../hooks/useStrings'; -import { Skeleton } from '../../../../components/Skeleton'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import { Icon } from '../../../../components/icons'; -import { SearchInput, Tooltip, Chip } from '../../../../components'; - -type Balance = { - ada: number, - usd: number, - percents: number, - amount: number, -}; +import { SearchInput, Tooltip, Chip, Skeleton } from '../../../../components'; +import { BalanceType } from '../types/index'; interface Props { - balance: Balance; + balance: BalanceType; setKeyword: (keyword: string) => void; isLoading: boolean; - tooltipTitle: React$Node; + tooltipTitle: ReactNode; } -const PortfolioHeader = ({ balance, setKeyword, isLoading, tooltipTitle }: Props): Node => { +const PortfolioHeader = ({ balance, setKeyword, isLoading, tooltipTitle }: Props): ReactNode => { const strings = useStrings(); const theme = useTheme(); const { unitOfAccount, settingFiatPairUnit, changeUnitOfAccount } = usePortfolio(); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.js b/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.js index 94ede1afaf..9a2764efac 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.js @@ -1,4 +1,5 @@ // @flow +import { ReactNode } from 'react'; import SubMenu from '../../../../../components/topbar/SubMenu'; import type { SubMenuOption } from '../topbar/SubMenu'; import { ROUTES } from '../../../../../routes-config'; @@ -10,7 +11,7 @@ interface Props { isActiveItem: string => boolean; } -const PortfolioMenu = ({ onItemClick, isActiveItem }: Props): Node => { +const PortfolioMenu = ({ onItemClick, isActiveItem }: Props): ReactNode => { const strings = useStrings(); const portfolioOptions: SubMenuOption[] = [ diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/components/SortableTableHead.js b/packages/yoroi-extension/app/UI/features/portfolio/common/components/SortableTableHead.js index d19eb33945..b2adc87636 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/components/SortableTableHead.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/components/SortableTableHead.js @@ -1,25 +1,18 @@ // @flow +import { ReactNode } from 'react'; import { TableHead, TableRow, TableCell, Stack, Typography } from '@mui/material'; import { Icon } from '../../../../components/icons'; import { useTheme } from '@mui/material/styles'; - -export interface IHeadCells { - id: string; - label: string; - align: string; - sortType?: string; - disabledSort?: boolean; - isPadding?: boolean; -} +import { IHeadCell } from '../types/table'; interface Props { - headCells: IHeadCells[]; + headCells: IHeadCell[]; order: string; orderBy: string; onRequestSort: (id: string) => void; } -const SortableTableHead = ({ headCells, order, orderBy, onRequestSort }: Props) => { +const SortableTableHead = ({ headCells, order, orderBy, onRequestSort }: Props): ReactNode => { const theme = useTheme(); return ( diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/components/Table.js b/packages/yoroi-extension/app/UI/features/portfolio/common/components/Table.js index b36e29168a..c8840e38e8 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/components/Table.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/components/Table.js @@ -1,22 +1,22 @@ // @flow -import { cloneElement } from 'react'; +import { ReactNode, cloneElement } from 'react'; import { Table as MuiTable, TableBody, Stack, Box, Typography } from '@mui/material'; import { useTheme } from '@mui/material/styles'; import { useStrings } from '../hooks/useStrings'; import illustrationPng from '../assets/images/illustration.png'; import SortableTableHead from './SortableTableHead'; -import type { IHeadCells } from './SortableTableHead'; +import { IHeadCell } from '../types/table'; interface Props { name: string; - headCells: IHeadCells[]; + headCells: IHeadCell[]; data: any[]; order: string; orderBy: string; handleRequestSort: (id: string) => void; isLoading: boolean; - TableRowSkeleton: React$Node; - children: React$Node; + TableRowSkeleton: ReactNode; + children: ReactNode; } const Table = ({ @@ -29,7 +29,7 @@ const Table = ({ isLoading, TableRowSkeleton, children, -}: Props): Node => { +}: Props): ReactNode => { const theme = useTheme(); const strings = useStrings(); @@ -38,7 +38,7 @@ const Table = ({ {isLoading - ? Array.from({ length: 6 }).map((item, index) => cloneElement(TableRowSkeleton, { id: index, key: index, theme })) + ? Array.from({ length: 6 }).map((item, index) => cloneElement(TableRowSkeleton, { key: index, theme })) : children} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/helpers/mockHelper.js b/packages/yoroi-extension/app/UI/features/portfolio/common/helpers/mockHelper.js index 29cd7b7e41..25580c772c 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/helpers/mockHelper.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/helpers/mockHelper.js @@ -1,15 +1,21 @@ +// @flow + +// CONSTANTS export const now = new Date(); -export const start24HoursAgo = new Date(now.getTime() - 24 * 60 * 60 * 1000).getTime(); -export const start1WeekAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000).getTime(); -export const start1MonthAgo = new Date(now.getFullYear(), now.getMonth() - 1, now.getDate()).getTime(); -export const start6MonthAgo = new Date(now.getFullYear(), now.getMonth() - 6, now.getDate()).getTime(); -export const start1YearAgo = new Date(now.getFullYear() - 1, now.getMonth(), now.getDate()).getTime(); +export const start24HoursAgo: number = new Date(now.getTime() - 24 * 60 * 60 * 1000).getTime(); +export const start1WeekAgo: number = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000).getTime(); +export const start1MonthAgo: number = new Date(now.getFullYear(), now.getMonth() - 1, now.getDate()).getTime(); +export const start6MonthAgo: number = new Date(now.getFullYear(), now.getMonth() - 6, now.getDate()).getTime(); +export const start1YearAgo: number = new Date(now.getFullYear() - 1, now.getMonth(), now.getDate()).getTime(); + +// TYPES +type TimePeriodType = '24H' | '1W' | '1M' | '6M' | '1Y'; // UTILS const pad = (number: number, length: number) => { return String(number).padStart(length, '0'); }; -const getQuantityBasedOnTimePeriod = (timePeriod: '24H' | '1W' | '1M' | '6M' | '1Y') => { +const getQuantityBasedOnTimePeriod = (timePeriod: TimePeriodType) => { switch (timePeriod) { case '24H': return 96; // 4 data points per hour (every 15 minutes) @@ -25,7 +31,7 @@ const getQuantityBasedOnTimePeriod = (timePeriod: '24H' | '1W' | '1M' | '6M' | ' throw new Error('Invalid time period'); } }; -const getFromTime = (timePeriod: '24H' | '1W' | '1M' | '6M' | '1Y', now: number) => { +const getFromTime = (timePeriod: TimePeriodType, now: number) => { switch (timePeriod) { case '24H': return start24HoursAgo; @@ -41,7 +47,7 @@ const getFromTime = (timePeriod: '24H' | '1W' | '1M' | '6M' | '1Y', now: number) throw new Error('Invalid time period'); } }; -const getInterval = (timePeriod: '24H' | '1W' | '1M' | '6M' | '1Y') => { +const getInterval = (timePeriod: TimePeriodType) => { switch (timePeriod) { case '24H': return 15 * 60 * 1000; // 15 minutes in milliseconds @@ -57,14 +63,14 @@ const getInterval = (timePeriod: '24H' | '1W' | '1M' | '6M' | '1Y') => { throw new Error('Invalid time period'); } }; -export const getRandomTime = (startDate, endDate) => { +export const getRandomTime = (startDate: number, endDate: number) => { const date = new Date(startDate + Math.random() * (endDate - startDate)); return date.toISOString(); }; -const getRandomNumber = (min, max, toFixed) => { +const getRandomNumber = (min: number, max: number, toFixed: number) => { return (Math.random() * (max - min) + min).toFixed(toFixed); }; -export const createChartData = (timePeriod: '24H' | '1W' | '1M' | '6M' | '1Y') => { +export const createChartData = (timePeriod: TimePeriodType) => { const quantity = getQuantityBasedOnTimePeriod(timePeriod); const fromTime = getFromTime(timePeriod, now); const interval = getInterval(timePeriod); @@ -86,8 +92,8 @@ export const createChartData = (timePeriod: '24H' | '1W' | '1M' | '6M' | '1Y') = return { time: utcString, - value: (value / 110).toFixed(2), - usd: (value / 100).toFixed(2), + value: Number((value / 110).toFixed(2)), + fiatValue: Number((value / 100).toFixed(2)), }; }); return tmp; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/helpers/transactionHelper.js b/packages/yoroi-extension/app/UI/features/portfolio/common/helpers/transactionHelper.js new file mode 100644 index 0000000000..1411e6cec2 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/helpers/transactionHelper.js @@ -0,0 +1,49 @@ +// @flow +import { HistoryItemStatus, HistoryItemType, TransactionItemType } from '../types/transaction'; + +export const mapStrings = (arr: TransactionItemType[], strings: any) => + arr.map(item => { + let labelTemp = ''; + let statusTemp = ''; + + switch (item.type) { + case HistoryItemType.SENT: + labelTemp = strings.sent; + break; + case HistoryItemType.RECEIVED: + labelTemp = strings.received; + break; + case HistoryItemType.ERROR: + labelTemp = strings.transactionError; + break; + case HistoryItemType.WITHDRAW: + labelTemp = strings.rewardWithdraw; + break; + case HistoryItemType.DELEGATE: + labelTemp = strings.stakeDelegate; + break; + + default: + break; + } + + switch (item.status) { + case HistoryItemStatus.LOW: + statusTemp = strings.low; + break; + case HistoryItemStatus.HIGH: + statusTemp = strings.high; + break; + case HistoryItemStatus.FAILED: + statusTemp = strings.failed; + break; + default: + break; + } + + return { + ...item, + label: labelTemp, + status: statusTemp, + }; + }); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useChart.js b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useChart.js index 4e1b3c6975..fe3bf9a15c 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useChart.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useChart.js @@ -1,15 +1,17 @@ // @flow -import { useState } from 'react'; +import React, { useState } from 'react'; import { useStrings } from './useStrings'; import { useTheme } from '@mui/material/styles'; import { Box } from '@mui/material'; import moment from 'moment'; +import { IPeriodButtonProps, IChartData } from '../types/chart'; +import { LineChartProps } from 'recharts'; -const useChart = (data) => { +const useChart = (data: IChartData) => { const strings = useStrings(); const theme = useTheme(); - const [buttonPeriodProps, setButtonPeriodProps] = useState([ + const [periodButtonProps, setPeriodButtonProps] = useState([ { id: 'start24HoursAgo', label: strings['24H'], active: true }, { id: 'start1WeekAgo', label: strings['1W'], active: false }, { id: 'start1MonthAgo', label: strings['1M'], active: false }, @@ -18,14 +20,20 @@ const useChart = (data) => { { id: 'ALL', label: strings['ALL'], active: false }, ]); const [detailInfo, setDetailInfo] = useState({ - value: data[buttonPeriodProps[0].id][data[buttonPeriodProps[0].id].length - 1].value, - usd: data[buttonPeriodProps[0].id][data[buttonPeriodProps[0].id].length - 1].usd, + value: data[periodButtonProps[0].id][data[periodButtonProps[0].id].length - 1].value, + fiatValue: data[periodButtonProps[0].id][data[periodButtonProps[0].id].length - 1].fiatValue, }); const [isDragging, setIsDragging] = useState(false); - const CustomYAxisTick = props => { - const { x, y, payload } = props; - + const CustomYAxisTick = ({ + x, + y, + payload, + }: { + x: number, + y: number, + payload: { value: number }, + }): React.SVGProps => { return ( {payload.value.toFixed(1)} @@ -33,9 +41,25 @@ const useChart = (data) => { ); }; - const CustomActiveDot = props => { - const { cx, cy, payload, value, index, dataLength, chartBottom, rectWidth, rectHeight } = props; - + const CustomActiveDot = ({ + cx, + cy, + payload, + index, + dataLength, + chartBottom, + rectWidth, + rectHeight, + }: { + cx: number, + cy: number, + payload: { time: string }, + index: number, + dataLength: number, + chartBottom: number, + rectWidth: number, + rectHeight: number, + }): React.SVGProps => { let rectX = cx - rectWidth / 2; if (index === 0) { rectX = cx; @@ -86,61 +110,61 @@ const useChart = (data) => { ); }; - const handleChoosePeriod = label => { - const tmp = buttonPeriodProps.map(item => { - if (item.label === label) return { ...item, active: true }; + const handleChoosePeriod = (id: string) => { + const tmp = periodButtonProps.map(item => { + if (item.id === id) return { ...item, active: true }; return { ...item, active: false, }; }); - setButtonPeriodProps(tmp); + setPeriodButtonProps(tmp); }; - const handleMouseMove = e => { + const handleMouseMove = (props: LineChartProps) => { if (!isDragging) return; - if (!e.isTooltipActive) { + if (!props.isTooltipActive) { handleMouseUp(); return; } - const value = e.activePayload && e.activePayload.length > 0 ? e.activePayload[0].payload.value : null; - const usd = e.activePayload && e.activePayload.length > 0 ? e.activePayload[0].payload.usd : null; + const value = props.activePayload && props.activePayload.length > 0 ? props.activePayload[0].payload.value : null; + const fiatValue = props.activePayload && props.activePayload.length > 0 ? props.activePayload[0].payload.fiatValue : null; - if (!value || !usd) return; + if (!value || !fiatValue) return; setDetailInfo({ value, - usd, + fiatValue, }); }; - const handleMouseDown = event => { - if (!event || !event.activePayload || event.activePayload.length <= 0) return; + const handleMouseDown = (props: LineChartProps) => { + if (!props || !props.activePayload || props.activePayload.length <= 0) return; - const value = event.activePayload[0].payload.value; - const usd = event.activePayload[0].payload.usd; + const value = props.activePayload[0].payload.value; + const fiatValue = props.activePayload[0].payload.fiatValue; - if (!value || !usd) return; + if (!value || !fiatValue) return; setDetailInfo({ value, - usd, + fiatValue, }); setIsDragging(true); }; const handleMouseUp = () => { - const currentPeriod = buttonPeriodProps.find(item => item.active).id; + const currentPeriod = periodButtonProps.find(item => item.active).id; setDetailInfo({ value: data[currentPeriod][data[currentPeriod].length - 1].value, - usd: data[currentPeriod][data[currentPeriod].length - 1].usd, + fiatValue: data[currentPeriod][data[currentPeriod].length - 1].fiatValue, }); setIsDragging(false); }; - const minValue = Math.min(...data[buttonPeriodProps.find(item => item.active).id].map(item => item.value)); + const minValue = Math.min(...data[periodButtonProps.find(item => item.active).id].map(item => item.value)); - const maxValue = Math.max(...data[buttonPeriodProps.find(item => item.active).id].map(item => item.value)); + const maxValue = Math.max(...data[periodButtonProps.find(item => item.active).id].map(item => item.value)); return { CustomYAxisTick, @@ -149,7 +173,7 @@ const useChart = (data) => { handleMouseMove, handleMouseDown, handleMouseUp, - buttonPeriodProps, + periodButtonProps, detailInfo, minValue, maxValue, diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useTableSort.js b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useTableSort.js index a5245bcc7f..d36ca66e45 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useTableSort.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useTableSort.js @@ -1,17 +1,19 @@ // @flow import { useCallback } from 'react'; -import type { IHeadCells } from '../components/SortableTableHead'; +import { TokenType, IHeadCell } from '../types/index'; + +export type TableSortType = 'character' | 'numeric'; interface Props { order: string; orderBy: string; - setSortState: () => void; - headCells: IHeadCells[]; - data: any[]; + setSortState: (sortState: { order: string, orderBy: string }) => void; + headCells: IHeadCell[]; + data: TokenType[]; } const useTableSort = ({ order, orderBy, setSortState, headCells, data }: Props) => { - const handleRequestSort = property => { + const handleRequestSort = (property: string) => { let direction = 'asc'; if (order === 'asc') { if (property === orderBy) { @@ -28,7 +30,7 @@ const useTableSort = ({ order, orderBy, setSortState, headCells, data }: Props) }); }; - const descendingComparator = (a, b, sortType) => { + const descendingComparator = (a: any, b: any, sortType: TableSortType) => { switch (sortType) { case 'numeric': if (parseFloat(b[orderBy]) < parseFloat(a[orderBy])) { @@ -48,7 +50,7 @@ const useTableSort = ({ order, orderBy, setSortState, headCells, data }: Props) }; const getSortedData = useCallback( - arr => { + (arr: any[]) => { if (!orderBy || !order) return data; const sortColumn = headCells.find(cell => cell.id === orderBy); const sortType = sortColumn?.sortType ?? 'character'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js b/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js index 04d408b0e9..cdd6fdcc1b 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js @@ -1,21 +1,21 @@ // @flow -import { HistoryItemStatus, HistoryItemType } from '../useCases/TokenDetails/TransactionTable'; import { createChartData, getRandomTime, now, start1WeekAgo, start24HoursAgo } from './helpers/mockHelper'; +import { HistoryItemStatus, HistoryItemType } from './types/transaction'; // ALL THE MOCK DATA FOR RENDERING UI NEW const mockData = { common: { walletBalance: { - ada: (100000 * Math.random()).toFixed(2), - usd: (1000 * Math.random()).toFixed(2), - percents: Math.random().toFixed(2), - amount: Math.random().toFixed(2), + ada: Number((100000 * Math.random()).toFixed(2)), + usd: Number((1000 * Math.random()).toFixed(2)), + percents: Number(Math.random().toFixed(2)), + amount: Number(Math.random().toFixed(2)), }, dappsBalance: { - ada: (100000 * Math.random()).toFixed(2), - usd: (1000 * Math.random()).toFixed(2), - percents: Math.random().toFixed(2), - amount: Math.random().toFixed(2), + ada: Number((100000 * Math.random()).toFixed(2)), + usd: Number((1000 * Math.random()).toFixed(2)), + percents: Number(Math.random().toFixed(2)), + amount: Number(Math.random().toFixed(2)), }, }, @@ -24,13 +24,13 @@ const mockData = { { name: 'AGIX', id: 'Agix', - price: (10 * Math.random()).toFixed(2), + price: Number((10 * Math.random()).toFixed(2)), portfolioPercents: Math.round(100 * Math.random()), - '24h': -(10 * Math.random()).toFixed(2), - '1W': (10 * Math.random()).toFixed(2), - '1M': (10 * Math.random()).toFixed(2), - totalAmount: (100000 * Math.random()).toFixed(3), - totalAmountUsd: (100000 * Math.random()).toFixed(3), + '24h': -Number((10 * Math.random()).toFixed(2)), + '1W': Number((10 * Math.random()).toFixed(2)), + '1M': Number((10 * Math.random()).toFixed(2)), + totalAmount: Number((100000 * Math.random()).toFixed(3)), + totalAmountUsd: Number((100000 * Math.random()).toFixed(3)), overview: { description: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", @@ -41,15 +41,15 @@ const mockData = { 'asset311q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj6789', }, performance: [ - { value: Math.random().toFixed(3) }, - { value: Math.random().toFixed(2) }, + { value: Number(Math.random().toFixed(3)) }, + { value: Number(Math.random().toFixed(2)) }, { value: `${Math.round(1000 * Math.random())}M` }, { value: `${Math.round(100 * Math.random())}M` }, { value: `${Math.round(100 * Math.random())}` }, { value: (1000 * Math.random()).toFixed(2) }, { value: (1000 * Math.random()).toFixed(2) }, { value: null }, - { value: (10 * Math.random()).toFixed(2) }, + { value: Number((10 * Math.random()).toFixed(2)) }, { value: (Math.random() / 100).toFixed(5) }, ], chartData: { @@ -64,13 +64,13 @@ const mockData = { { name: 'DOGE', id: 'Doge', - price: (10 * Math.random()).toFixed(2), + price: Number((10 * Math.random()).toFixed(2)), portfolioPercents: Math.round(100 * Math.random()), - '24h': -(10 * Math.random()).toFixed(2), - '1W': (10 * Math.random()).toFixed(2), - '1M': -(10 * Math.random()).toFixed(2), - totalAmount: Math.round(100000 * Math.random()).toFixed(2), - totalAmountUsd: Math.round(100000 * Math.random()).toFixed(2), + '24h': -Number((10 * Math.random()).toFixed(2)), + '1W': Number((10 * Math.random()).toFixed(2)), + '1M': -Number((10 * Math.random()).toFixed(2)), + totalAmount: Number(Math.round(100000 * Math.random()).toFixed(2)), + totalAmountUsd: Number(Math.round(100000 * Math.random()).toFixed(2)), overview: { description: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", @@ -81,15 +81,15 @@ const mockData = { 'asset322q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', }, performance: [ - { value: Math.random().toFixed(3) }, - { value: Math.random().toFixed(2) }, + { value: Number(Math.random().toFixed(3)) }, + { value: Number(Math.random().toFixed(2)) }, { value: `${Math.round(1000 * Math.random())}M` }, { value: null }, { value: `${Math.round(100 * Math.random())}` }, { value: (100 * Math.random()).toFixed(2) }, { value: (1000 * Math.random()).toFixed(2) }, { value: null }, - { value: (10 * Math.random()).toFixed(2) }, + { value: Number((10 * Math.random()).toFixed(2)) }, { value: (Math.random() / 100).toFixed(5) }, ], chartData: { @@ -104,13 +104,13 @@ const mockData = { { name: 'ADA', id: 'Cardano', - price: (10 * Math.random()).toFixed(2), + price: Number((10 * Math.random()).toFixed(2)), portfolioPercents: Math.round(100 * Math.random()), - '24h': (10 * Math.random()).toFixed(2), - '1W': -(10 * Math.random()).toFixed(2), - '1M': (10 * Math.random()).toFixed(2), - totalAmount: Math.round(100000 * Math.random()).toFixed(2), - totalAmountUsd: Math.round(100000 * Math.random()).toFixed(2), + '24h': Number((10 * Math.random()).toFixed(2)), + '1W': -Number((10 * Math.random()).toFixed(2)), + '1M': Number((10 * Math.random()).toFixed(2)), + totalAmount: Number(Math.round(100000 * Math.random()).toFixed(2)), + totalAmountUsd: Number(Math.round(100000 * Math.random()).toFixed(2)), overview: { description: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", @@ -121,15 +121,15 @@ const mockData = { 'asset333q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', }, performance: [ - { value: Math.random().toFixed(3) }, - { value: Math.random().toFixed(2) }, + { value: Number(Math.random().toFixed(3)) }, + { value: Number(Math.random().toFixed(2)) }, { value: `${Math.round(1000 * Math.random())}M` }, { value: `${Math.round(100 * Math.random())}M` }, { value: `${Math.round(100 * Math.random())}` }, { value: (100 * Math.random()).toFixed(2) }, { value: (1000 * Math.random()).toFixed(2) }, { value: '45B' }, - { value: (10 * Math.random()).toFixed(2) }, + { value: Number((10 * Math.random()).toFixed(2)) }, { value: (Math.random() / 100).toFixed(5) }, ], chartData: { @@ -144,13 +144,13 @@ const mockData = { { name: 'Shiba', id: 'shiba', - price: (10 * Math.random()).toFixed(2), + price: Number((10 * Math.random()).toFixed(2)), portfolioPercents: Math.round(100 * Math.random()), - '24h': -(10 * Math.random()).toFixed(2), - '1W': -(10 * Math.random()).toFixed(2), - '1M': (10 * Math.random()).toFixed(2), - totalAmount: Math.round(100000 * Math.random()).toFixed(2), - totalAmountUsd: Math.round(100000 * Math.random()).toFixed(2), + '24h': -Number((10 * Math.random()).toFixed(2)), + '1W': -Number((10 * Math.random()).toFixed(2)), + '1M': Number((10 * Math.random()).toFixed(2)), + totalAmount: Number(Math.round(100000 * Math.random()).toFixed(2)), + totalAmountUsd: Number(Math.round(100000 * Math.random()).toFixed(2)), overview: { description: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", @@ -161,15 +161,15 @@ const mockData = { 'asset344q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', }, performance: [ - { value: Math.random().toFixed(3) }, - { value: Math.random().toFixed(2) }, + { value: Number(Math.random().toFixed(3)) }, + { value: Number(Math.random().toFixed(2)) }, { value: `${Math.round(1000 * Math.random())}M` }, { value: `${Math.round(100 * Math.random())}M` }, { value: `${Math.round(100 * Math.random())}` }, { value: (100 * Math.random()).toFixed(2) }, { value: (1000 * Math.random()).toFixed(2) }, { value: (1000 * Math.random()).toFixed(2) }, - { value: (10 * Math.random()).toFixed(2) }, + { value: Number((10 * Math.random()).toFixed(2)) }, { value: (Math.random() / 100).toFixed(5) }, ], chartData: { @@ -184,13 +184,13 @@ const mockData = { { name: 'ALT', id: 'alt', - price: (10 * Math.random()).toFixed(2), + price: Number((10 * Math.random()).toFixed(2)), portfolioPercents: Math.round(100 * Math.random()), - '24h': -(10 * Math.random()).toFixed(2), - '1W': (10 * Math.random()).toFixed(2), - '1M': -(10 * Math.random()).toFixed(2), - totalAmount: Math.round(100000 * Math.random()).toFixed(2), - totalAmountUsd: Math.round(100000 * Math.random()).toFixed(2), + '24h': -Number((10 * Math.random()).toFixed(2)), + '1W': Number((10 * Math.random()).toFixed(2)), + '1M': -Number((10 * Math.random()).toFixed(2)), + totalAmount: Number(Math.round(100000 * Math.random()).toFixed(2)), + totalAmountUsd: Number(Math.round(100000 * Math.random()).toFixed(2)), overview: { description: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", @@ -201,15 +201,15 @@ const mockData = { 'asset355q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', }, performance: [ - { value: Math.random().toFixed(3) }, - { value: Math.random().toFixed(2) }, + { value: Number(Math.random().toFixed(3)) }, + { value: Number(Math.random().toFixed(2)) }, { value: `${Math.round(1000 * Math.random())}M` }, { value: `${Math.round(100 * Math.random())}M` }, { value: `${Math.round(100 * Math.random())}` }, { value: (100 * Math.random()).toFixed(2) }, { value: (1000 * Math.random()).toFixed(2) }, { value: (1000 * Math.random()).toFixed(2) }, - { value: (10 * Math.random()).toFixed(2) }, + { value: Number((10 * Math.random()).toFixed(2)) }, { value: (Math.random() / 100).toFixed(5) }, ], chartData: { @@ -224,13 +224,13 @@ const mockData = { { name: 'TKN1', id: 'Tkn1', - price: (10 * Math.random()).toFixed(2), + price: Number((10 * Math.random()).toFixed(2)), portfolioPercents: Math.round(100 * Math.random()), - '24h': (10 * Math.random()).toFixed(2), - '1W': (10 * Math.random()).toFixed(2), - '1M': (10 * Math.random()).toFixed(2), - totalAmount: Math.round(100000 * Math.random()).toFixed(2), - totalAmountUsd: Math.round(100000 * Math.random()).toFixed(2), + '24h': Number((10 * Math.random()).toFixed(2)), + '1W': Number((10 * Math.random()).toFixed(2)), + '1M': Number((10 * Math.random()).toFixed(2)), + totalAmount: Number(Math.round(100000 * Math.random()).toFixed(2)), + totalAmountUsd: Number(Math.round(100000 * Math.random()).toFixed(2)), overview: { description: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", @@ -241,15 +241,15 @@ const mockData = { 'asset366q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', }, performance: [ - { value: Math.random().toFixed(3) }, - { value: Math.random().toFixed(2) }, + { value: Number(Math.random().toFixed(3)) }, + { value: Number(Math.random().toFixed(2)) }, { value: `${Math.round(1000 * Math.random())}M` }, { value: `${Math.round(100 * Math.random())}M` }, { value: `${Math.round(100 * Math.random())}` }, { value: (100 * Math.random()).toFixed(2) }, { value: (1000 * Math.random()).toFixed(2) }, { value: (1000 * Math.random()).toFixed(2) }, - { value: (10 * Math.random()).toFixed(2) }, + { value: Number((10 * Math.random()).toFixed(2)) }, { value: (Math.random() / 100).toFixed(5) }, ], chartData: { @@ -264,13 +264,13 @@ const mockData = { { name: 'TKN2', id: 'Tkn2', - price: (10 * Math.random()).toFixed(2), + price: Number((10 * Math.random()).toFixed(2)), portfolioPercents: Math.round(100 * Math.random()), - '24h': -(10 * Math.random()).toFixed(2), - '1W': -(10 * Math.random()).toFixed(2), - '1M': -(10 * Math.random()).toFixed(2), - totalAmount: Math.round(100000 * Math.random()).toFixed(2), - totalAmountUsd: Math.round(100000 * Math.random()).toFixed(2), + '24h': -Number((10 * Math.random()).toFixed(2)), + '1W': -Number((10 * Math.random()).toFixed(2)), + '1M': -Number((10 * Math.random()).toFixed(2)), + totalAmount: Number(Math.round(100000 * Math.random()).toFixed(2)), + totalAmountUsd: Number(Math.round(100000 * Math.random()).toFixed(2)), overview: { description: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", @@ -281,15 +281,15 @@ const mockData = { 'asset377q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', }, performance: [ - { value: Math.random().toFixed(3) }, - { value: Math.random().toFixed(2) }, + { value: Number(Math.random().toFixed(3)) }, + { value: Number(Math.random().toFixed(2)) }, { value: `${Math.round(1000 * Math.random())}M` }, { value: `${Math.round(100 * Math.random())}M` }, { value: `${Math.round(100 * Math.random())}` }, { value: (100 * Math.random()).toFixed(2) }, { value: (1000 * Math.random()).toFixed(2) }, { value: (1000 * Math.random()).toFixed(2) }, - { value: (10 * Math.random()).toFixed(2) }, + { value: Number((10 * Math.random()).toFixed(2)) }, { value: (Math.random() / 100).toFixed(5) }, ], chartData: { @@ -304,13 +304,13 @@ const mockData = { { name: 'TKN3', id: 'Tkn3', - price: (10 * Math.random()).toFixed(2), + price: Number((10 * Math.random()).toFixed(2)), portfolioPercents: Math.round(100 * Math.random()), - '24h': -(10 * Math.random()).toFixed(2), - '1W': (10 * Math.random()).toFixed(2), - '1M': -(10 * Math.random()).toFixed(2), - totalAmount: Math.round(100000 * Math.random()).toFixed(2), - totalAmountUsd: Math.round(100000 * Math.random()).toFixed(2), + '24h': -Number((10 * Math.random()).toFixed(2)), + '1W': Number((10 * Math.random()).toFixed(2)), + '1M': -Number((10 * Math.random()).toFixed(2)), + totalAmount: Number(Math.round(100000 * Math.random()).toFixed(2)), + totalAmountUsd: Number(Math.round(100000 * Math.random()).toFixed(2)), overview: { description: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", @@ -321,15 +321,15 @@ const mockData = { 'asset388q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', }, performance: [ - { value: Math.random().toFixed(3) }, - { value: Math.random().toFixed(2) }, + { value: Number(Math.random().toFixed(3)) }, + { value: Number(Math.random().toFixed(2)) }, { value: `${Math.round(1000 * Math.random())}M` }, { value: `${Math.round(100 * Math.random())}M` }, { value: `${Math.round(100 * Math.random())}` }, { value: (100 * Math.random()).toFixed(2) }, { value: (1000 * Math.random()).toFixed(2) }, { value: (1000 * Math.random()).toFixed(2) }, - { value: (10 * Math.random()).toFixed(2) }, + { value: Number((10 * Math.random()).toFixed(2)) }, { value: (Math.random() / 100).toFixed(5) }, ], chartData: { @@ -344,13 +344,13 @@ const mockData = { { name: 'TKN6', id: 'Tkn6', - price: (10 * Math.random()).toFixed(2), + price: Number((10 * Math.random()).toFixed(2)), portfolioPercents: Math.round(100 * Math.random()), - '24h': (10 * Math.random()).toFixed(2), - '1W': (10 * Math.random()).toFixed(2), - '1M': (10 * Math.random()).toFixed(2), - totalAmount: Math.round(100000 * Math.random()).toFixed(2), - totalAmountUsd: Math.round(100000 * Math.random()).toFixed(2), + '24h': Number((10 * Math.random()).toFixed(2)), + '1W': Number((10 * Math.random()).toFixed(2)), + '1M': Number((10 * Math.random()).toFixed(2)), + totalAmount: Number(Math.round(100000 * Math.random()).toFixed(2)), + totalAmountUsd: Number(Math.round(100000 * Math.random()).toFixed(2)), overview: { description: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", @@ -361,15 +361,15 @@ const mockData = { 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', }, performance: [ - { value: Math.random().toFixed(3) }, - { value: Math.random().toFixed(2) }, + { value: Number(Math.random().toFixed(3)) }, + { value: Number(Math.random().toFixed(2)) }, { value: `${Math.round(1000 * Math.random())}M` }, { value: `${Math.round(100 * Math.random())}M` }, { value: `${Math.round(100 * Math.random())}` }, { value: (100 * Math.random()).toFixed(2) }, { value: (1000 * Math.random()).toFixed(2) }, { value: (1000 * Math.random()).toFixed(2) }, - { value: (10 * Math.random()).toFixed(2) }, + { value: Number((10 * Math.random()).toFixed(2)) }, { value: (Math.random() / 100).toFixed(5) }, ], chartData: { @@ -384,13 +384,13 @@ const mockData = { { name: 'TKN8', id: 'Tkn8', - price: (10 * Math.random()).toFixed(2), + price: Number((10 * Math.random()).toFixed(2)), portfolioPercents: Math.round(100 * Math.random()), - '24h': (10 * Math.random()).toFixed(2), - '1W': (10 * Math.random()).toFixed(2), - '1M': -(10 * Math.random()).toFixed(2), - totalAmount: Math.round(100000 * Math.random()).toFixed(2), - totalAmountUsd: Math.round(100000 * Math.random()).toFixed(2), + '24h': Number((10 * Math.random()).toFixed(2)), + '1W': Number((10 * Math.random()).toFixed(2)), + '1M': -Number((10 * Math.random()).toFixed(2)), + totalAmount: Number(Math.round(100000 * Math.random()).toFixed(2)), + totalAmountUsd: Number(Math.round(100000 * Math.random()).toFixed(2)), overview: { description: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", @@ -401,15 +401,15 @@ const mockData = { 'asset400q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', }, performance: [ - { value: Math.random().toFixed(3) }, - { value: Math.random().toFixed(2) }, + { value: Number(Math.random().toFixed(3)) }, + { value: Number(Math.random().toFixed(2)) }, { value: `${Math.round(1000 * Math.random())}M` }, { value: `${Math.round(100 * Math.random())}M` }, { value: `${Math.round(100 * Math.random())}` }, { value: (100 * Math.random()).toFixed(2) }, { value: (1000 * Math.random()).toFixed(2) }, { value: (1000 * Math.random()).toFixed(2) }, - { value: (10 * Math.random()).toFixed(2) }, + { value: Number((10 * Math.random()).toFixed(2)) }, { value: (Math.random() / 100).toFixed(5) }, ], chartData: { diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/types/chart.js b/packages/yoroi-extension/app/UI/features/portfolio/common/types/chart.js new file mode 100644 index 0000000000..e58f768abf --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/types/chart.js @@ -0,0 +1,21 @@ +// @flow +export interface IPeriodButtonProps { + id: string; + label: string; + active: boolean; +} + +export interface IChartDataItem { + time: string; + value: number; + fiatValue: number; +} + +export interface IChartData { + start24HoursAgo: IChartDataItem[]; + start1WeekAgo: IChartDataItem[]; + start1MonthAgo: IChartDataItem[]; + start6MonthAgo: IChartDataItem[]; + start1YearAgo: IChartDataItem[]; + ALL: IChartDataItem[]; +} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/types/index.js b/packages/yoroi-extension/app/UI/features/portfolio/common/types/index.js new file mode 100644 index 0000000000..62931cb3f3 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/types/index.js @@ -0,0 +1,82 @@ +// @flow +import { IChartData } from './chart'; + +export * from './table'; +export * from './transaction'; +export * from './chart'; + +export type BalanceType = { + ada: number, + usd: number, + percents: number, + amount: number, +}; + +export interface IDetailOverview { + description: string; + website: string; + detailOn: string; + policyId: string; + fingerprint: string; +} + +export interface IDetailPerformanceItem { + value: number; +} + +export type TokenType = { + name: string, + id: string, + price: number, + portfolioPercents: number, + '24h': number, + '1W': number, + '1M': number, + totalAmount: number, + totalAmountUsd: number, + overview: IDetailOverview, + performance: IDetailPerformanceItem[], + chartData: IChartData, +}; + +export type LiquidityItemType = { + id: number, + tokenPair: string, + DEX: string, + DEXLink: string, + firstToken: { + name: string, + id: string, + }, + secondToken: { + name: string, + id: string, + }, + lpTokens: number, + totalValue: number, + totalValueUsd: number, + firstTokenValue: number, + firstTokenValueUsd: number, + secondTokenValue: number, + secondTokenValueUsd: number, +}; + +export type OrderItemType = { + id: number, + pair: string, + firstToken: { + name: string, + id: string, + }, + secondToken: { + name: string, + id: string, + }, + DEX: string, + DEXLink: string, + assetPrice: number, + assetAmount: number, + transactionId: string, + totalValue: number, + totalValueUsd: number, +}; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/types/table.js b/packages/yoroi-extension/app/UI/features/portfolio/common/types/table.js new file mode 100644 index 0000000000..d3bc22c9b1 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/types/table.js @@ -0,0 +1,9 @@ +// @flow +export interface IHeadCell { + id: string; + label: string; + align: string; + sortType?: string; + disabledSort?: boolean; + isPadding?: boolean; +} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/types/transaction.js b/packages/yoroi-extension/app/UI/features/portfolio/common/types/transaction.js new file mode 100644 index 0000000000..e63303992b --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/types/transaction.js @@ -0,0 +1,25 @@ +// @flow +export const HistoryItemType = Object.freeze({ + SENT: 1, + RECEIVED: 2, + ERROR: 3, + WITHDRAW: 4, + DELEGATE: 5, +}); + +export const HistoryItemStatus = Object.freeze({ + LOW: 'Low', + HIGH: 'High', + FAILED: 'Failed', +}); + +export type TransactionItemType = { + type: typeof HistoryItemType, + status: typeof HistoryItemStatus, + time: number, + feeValue?: number, + feeValueUsd?: number, + amountTotal: number, + amountTotalUsd: number, + amountAsset: number | string, +}; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/module/PortfolioContextProvider.js b/packages/yoroi-extension/app/UI/features/portfolio/module/PortfolioContextProvider.js index f313116c78..0591726c98 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/module/PortfolioContextProvider.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/module/PortfolioContextProvider.js @@ -9,6 +9,7 @@ import { defaultPortfolioState, PortfolioState, PortfolioActions, + CurrencyType, } from './state'; const initialPortfolioProvider = { @@ -17,7 +18,16 @@ const initialPortfolioProvider = { }; const PortfolioContext = React.createContext(initialPortfolioProvider); -type PortfolioProviderProps = any; +type PortfolioProviderProps = { + children: React.ReactNode, + settingFiatPairUnit: { + currency: CurrencyType, + enabled: boolean, + }, + initialState: { + unitOfAccount: CurrencyType, + }, +}; export const PortfolioContextProvider = ({ children, @@ -32,7 +42,7 @@ export const PortfolioContextProvider = ({ }); const actions = React.useRef({ - changeUnitOfAccount: (currency: string) => { + changeUnitOfAccount: (currency: CurrencyType) => { dispatch({ type: PortfolioActionType.UnitOfAccountChanged, unitOfAccount: currency, diff --git a/packages/yoroi-extension/app/UI/features/portfolio/module/state.js b/packages/yoroi-extension/app/UI/features/portfolio/module/state.js index 6eacb8da38..0c57edb49b 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/module/state.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/module/state.js @@ -2,11 +2,11 @@ import { invalid } from '@yoroi/common'; import { produce } from 'immer'; -type currency = 'ADA' | 'USD' | 'BRL' | 'ETH' | 'BTC' | 'KRW' | 'CNY' | 'EUR' | 'JPY'; +export type CurrencyType = 'ADA' | 'USD' | 'BRL' | 'ETH' | 'BTC' | 'KRW' | 'CNY' | 'EUR' | 'JPY'; // Define types export type PortfolioActions = {| - +unitOfAccountChanged: (currency: currency) => void, + +unitOfAccountChanged: (currency: CurrencyType) => void, |}; export const PortfolioActionType = Object.freeze({ @@ -15,16 +15,18 @@ export const PortfolioActionType = Object.freeze({ export type PortfolioAction = {| type: typeof PortfolioActionType.UnitOfAccountChanged, - unitOfAccount: currency, + unitOfAccount: CurrencyType, |}; // Define state type export type PortfolioState = {| - unitOfAccount: currency, + unitOfAccount: CurrencyType, |}; // Define default state -export const defaultPortfolioState: PortfolioState = {}; +export const defaultPortfolioState: PortfolioState = { + unitOfAccount: 'ADA', +}; // Define action handlers export const defaultPortfolioActions: PortfolioActions = { diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js index 040b64f95d..44101aedf2 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js @@ -1,5 +1,5 @@ // @flow -import { useMemo, useState } from 'react'; +import { ReactNode, useMemo, useState } from 'react'; import { TableCell, TableRow, Typography, Stack, Box } from '@mui/material'; import { useTheme } from '@mui/material/styles'; import { useNavigateTo } from '../../common/hooks/useNavigateTo'; @@ -12,10 +12,10 @@ import { useStrings } from '../../common/hooks/useStrings'; import { Icon } from '../../../../components/icons/'; import useTableSort from '../../common/hooks/useTableSort'; import Table from '../../common/components/Table'; +import { IHeadCell } from '../../common/types/table'; -const TableRowSkeleton = ({ id, theme, ...props }) => ( +const TableRowSkeleton = ({ theme, ...props }) => ( ( ); -const LiquidityTable = ({ data, isLoading }) => { +interface Props { + data: LiquidityItemType[]; + isLoading: boolean; +} + +const LiquidityTable = ({ data, isLoading }: Props): ReactNode => { const theme = useTheme(); const navigateTo = useNavigateTo(); const strings = useStrings(); const { unitOfAccount } = usePortfolio(); const [{ order, orderBy }, setSortState] = useState({ - order: null, - orderBy: null, + order: '', + orderBy: '', }); const list = useMemo(() => [...data], [data]); - const headCells = [ + const headCells: IHeadCell[] = [ { id: 'tokenPair', label: strings.tokenPair, align: 'left', sortType: 'character' }, { id: 'DEX', label: strings.dex, align: 'left', sortType: 'character', isPadding: true }, { id: 'firstTokenValue', label: strings.firstTokenValue, align: 'left', sortType: 'numeric', isPadding: true }, diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js index 84a8a548a9..1020ef886a 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js @@ -1,5 +1,5 @@ // @flow -import { useMemo, useState } from 'react'; +import { ReactNode, useMemo, useState } from 'react'; import { TableCell, TableRow, Typography, Stack, Box } from '@mui/material'; import { useTheme } from '@mui/material/styles'; import { useNavigateTo } from '../../common/hooks/useNavigateTo'; @@ -13,10 +13,11 @@ import { usePortfolio } from '../../module/PortfolioContextProvider'; import { Icon } from '../../../../components/icons'; import useTableSort from '../../common/hooks/useTableSort'; import Table from '../../common/components/Table'; +import { IHeadCell } from '../../common/types/table'; +import { OrderItemType } from '../../common/types/index'; -const TableRowSkeleton = ({ id, theme, ...props }) => ( +const TableRowSkeleton = ({ theme, ...props }) => ( ( ); -const OrderTable = ({ data, isLoading }) => { +interface Props { + data: OrderItemType[]; + isLoading: boolean; +} + +const OrderTable = ({ data, isLoading }: Props): ReactNode => { const theme = useTheme(); const navigateTo = useNavigateTo(); const strings = useStrings(); const { unitOfAccount } = usePortfolio(); const [{ order, orderBy }, setSortState] = useState({ - order: null, - orderBy: null, + order: '', + orderBy: '', }); const list = useMemo(() => [...data], [data]); - const headCells = [ + const headCells: IHeadCell[] = [ { id: 'pair', label: strings.pair, align: 'left', disabledSort: true }, { id: 'DEX', label: strings.dex, align: 'left', disabledSort: true }, { id: 'assetPrice', label: strings.assetPrice, align: 'left', disabledSort: true }, diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js index f333dd051a..f994fdc7af 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js @@ -10,6 +10,7 @@ import LendAndBorrow from './LendAndBorrow'; import { useStrings } from '../../common/hooks/useStrings'; import { Icon } from '../../../../components/icons/index'; import PortfolioHeader from '../../common/components/PortfolioHeader'; +import { LiquidityItemType, OrderItemType } from '../../common/types/index'; const StyledButton = styled(Button)(({ theme }) => ({ height: '40px', @@ -24,13 +25,20 @@ const TableTabs = { LENDBORROW: 3, }; -const PortfolioDapps = ({ data }) => { +interface Props { + data: { + liquidityList: LiquidityItemType[], + orderList: OrderItemType[], + }; +} + +const PortfolioDapps = ({ data }: Props) => { const theme = useTheme(); const strings = useStrings(); - const [keyword, setKeyword] = useState(''); + const [keyword, setKeyword] = useState(); const [isLoading, setIsLoading] = useState(); - const [liquidityList, setLiquidlityList] = useState([]); - const [orderList, setOrderList] = useState([]); + const [liquidityList, setLiquidlityList] = useState(data.liquidityList); + const [orderList, setOrderList] = useState(data.orderList); const [buttonProps, setButtonProps] = useState([ { id: TableTabs.LIQUIDITY, diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js index f9c9b5e484..3085c64489 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js @@ -1,6 +1,6 @@ // @flow import { Box, Button, Stack, styled, Typography } from '@mui/material'; -import React, { useEffect, useMemo, useState } from 'react'; +import React, { ReactNode, useEffect, useMemo, useState } from 'react'; import { LineChart, Line, CartesianGrid, XAxis, YAxis, ResponsiveContainer, Label, Tooltip as RechartTooltip } from 'recharts'; import { useTheme } from '@mui/material/styles'; import { Skeleton, Tooltip, Chip } from '../../../../components'; @@ -9,6 +9,7 @@ import { useStrings } from '../../common/hooks/useStrings'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import { Icon } from '../../../../components/icons'; import useChart from '../../common/hooks/useChart'; +import { TokenType } from '../../common/types/index'; const StyledButton = styled(Button)(({ theme, disabled, variant }) => ({ fontWeight: 500, @@ -28,7 +29,13 @@ const StyledButton = styled(Button)(({ theme, disabled, variant }) => ({ }, })); -const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { +interface Props { + isLoading: boolean; + tokenInfo: TokenType; + isAda: boolean; +} + +const TokenDetailChart = ({ isLoading, tokenInfo, isAda }: Props): ReactNode => { const chartHeight = isAda ? 156 : 241; const theme = useTheme(); const strings = useStrings(); @@ -40,7 +47,7 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { handleMouseMove, handleMouseDown, handleMouseUp, - buttonPeriodProps, + periodButtonProps, detailInfo, minValue, maxValue, @@ -61,7 +68,7 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { ) : ( - {detailInfo.usd} + {detailInfo.fiatValue}  {unitOfAccount} @@ -102,11 +109,11 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { ) : ( = 0} + active={detailInfo.fiatValue >= 0} label={ - {detailInfo.usd >= 0 && '+'} - {detailInfo.usd} {unitOfAccount} + {detailInfo.fiatValue >= 0 && '+'} + {detailInfo.fiatValue} {unitOfAccount} } /> @@ -129,7 +136,7 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { {isLoading ? null : ( item.active).id]} + data={tokenInfo.chartData[periodButtonProps.find(item => item.active).id]} onMouseDown={handleMouseDown} onMouseUp={handleMouseUp} onMouseMove={handleMouseMove} @@ -151,7 +158,7 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => { chartBottom={chartHeight} rectWidth={93} rectHeight={34} - dataLength={tokenInfo.chartData[buttonPeriodProps.find(item => item.active).id].length} + dataLength={tokenInfo.chartData[periodButtonProps.find(item => item.active).id].length} {...props} /> )} @@ -167,14 +174,14 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }) => {
- {buttonPeriodProps.map(period => ( + {periodButtonProps.map(({ id, active, label }) => ( handleChoosePeriod(period.label)} + onClick={() => handleChoosePeriod(id)} > - {period.label} + {label} ))} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js index d996046dfb..443f1a717b 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js @@ -1,13 +1,20 @@ // @flow -import React from 'react'; +import React, { ReactNode } from 'react'; import { Stack, Box, Typography, Link, Button } from '@mui/material'; import { Skeleton } from '../../../../components/Skeleton'; import { CopyButton } from '../../../../components/buttons/CopyButton'; import { useTheme } from '@mui/material/styles'; import tokenPng from '../../common/assets/images/token.png'; import { useStrings } from '../../common/hooks/useStrings'; +import { TokenType } from '../../common/types/index'; -const TokenDetailOverview = ({ tokenInfo, isLoading, isAda }) => { +interface Props { + tokenInfo: TokenType; + isLoading: boolean; + isAda: boolean; +} + +const TokenDetailOverview = ({ tokenInfo, isLoading, isAda }: Props): ReactNode => { const theme = useTheme(); const strings = useStrings(); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js index dd40e75ce6..4af509b3c7 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js @@ -1,10 +1,11 @@ // @flow -import React from 'react'; +import React, { ReactNode } from 'react'; import { Box, Stack, Typography, Link } from '@mui/material'; import { useTheme } from '@mui/material/styles'; import { useStrings } from '../../common/hooks/useStrings'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import { Skeleton } from '../../../../components/Skeleton'; +import { TokenType } from '../../common/types/index'; const PerformanceItemType = { FIAT: 'fiat', @@ -12,7 +13,12 @@ const PerformanceItemType = { RANK: 'rank', }; -const TokenDetailPerformance = ({ tokenInfo, isLoading }) => { +interface Props { + tokenInfo: TokenType; + isLoading: boolean; +} + +const TokenDetailPerformance = ({ tokenInfo, isLoading }: Props): ReactNode => { const theme = useTheme(); const strings = useStrings(); const { unitOfAccount } = usePortfolio(); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js index c8c6dc20d9..eb1dc54bc5 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js @@ -1,5 +1,5 @@ // @flow -import React, { useEffect, useState } from 'react'; +import React, { ReactNode, useEffect, useState } from 'react'; import { Badge, Box, Button, Chip, Divider, IconButton, Link, Stack, Typography } from '@mui/material'; import { ReactComponent as BackIcon } from '../../../../../assets/images/assets-page/back-arrow.inline.svg'; import { styled } from '@mui/material/styles'; @@ -15,6 +15,7 @@ import mockData from '../../common/mockData'; import TokenDetailPerformance from './TokenDetailPerformance'; import TokenDetailOverview from './TokenDetailOverview'; import { usePortfolio } from '../../module/PortfolioContextProvider'; +import { TokenType, TransactionItemType } from '../../common/types/index'; const Header = styled(Box)({ display: 'flex', @@ -48,14 +49,22 @@ const TabContent = styled(Box)({ }); const StyledSubMenu = styled(SubMenu)(({ theme }) => ({ - '& > .SubMenuItem_enabled > button': { + '& > button': { padding: '11px 0 !important', + }, + + '& > .SubMenuItem_enabled': { color: theme.palette.ds.el_primary_medium, borderColor: theme.palette.ds.el_primary_medium, }, })); -const TokenDetails = ({ tokenInfo, transactionHistory }) => { +interface Props { + tokenInfo: TokenType; + transactionHistory: TransactionItemType[]; +} + +const TokenDetails = ({ tokenInfo, transactionHistory }: Props): ReactNode => { const theme = useTheme(); const navigateTo = useNavigateTo(); const strings = useStrings(); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js index e988af9804..0f9133fc5d 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js @@ -7,92 +7,39 @@ import moment from 'moment'; import { useStrings } from '../../common/hooks/useStrings'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import { Icon } from '../../../../components/icons'; - -export const HistoryItemType = Object.freeze({ - SENT: 1, - RECEIVED: 2, - ERROR: 3, - WITHDRAW: 4, - DELEGATE: 5, -}); - -export const HistoryItemStatus = Object.freeze({ - LOW: 'Low', - HIGH: 'High', - FAILED: 'Failed', -}); +import { HistoryItemStatus, HistoryItemType } from '../../common/types/transaction'; +import { mapStrings } from '../../common/helpers/transactionHelper'; +import { TransactionItemType } from '../../common/types/transaction'; +import { IHeadCell } from '../../common/types/table'; const Container = styled(Box)(({ theme }) => ({ width: '100%', margin: '30px 0', })); -const TransactionTable = ({ history }) => { +interface Props { + history: TransactionItemType[]; +} + +const TransactionTable = ({ history }: Props): Node => { const theme = useTheme(); const strings = useStrings(); const { unitOfAccount } = usePortfolio(); - const headCells = [ + const headCells: IHeadCell[] = [ { id: 'transactionType', label: strings.transactionType, align: 'left' }, { id: 'status', label: strings.status, align: 'left' }, { id: 'fee', label: strings.fee, align: 'center' }, { id: 'amount', label: strings.amount, align: 'right' }, ]; - const mapStrings = arr => - arr.map(item => { - let labelTemp = ''; - let statusTemp = ''; - - switch (item.type) { - case HistoryItemType.SENT: - labelTemp = strings.sent; - break; - case HistoryItemType.RECEIVED: - labelTemp = strings.received; - break; - case HistoryItemType.ERROR: - labelTemp = strings.transactionError; - break; - case HistoryItemType.WITHDRAW: - labelTemp = strings.rewardWithdraw; - break; - case HistoryItemType.DELEGATE: - labelTemp = strings.stakeDelegate; - break; - - default: - break; - } - - switch (item.status) { - case HistoryItemStatus.LOW: - statusTemp = strings.low; - break; - case HistoryItemStatus.HIGH: - statusTemp = strings.high; - break; - case HistoryItemStatus.FAILED: - statusTemp = strings.failed; - break; - default: - break; - } - - return { - ...item, - label: labelTemp, - status: statusTemp, - }; - }); - const groupedData = useMemo(() => { if (!history) return []; const today = new Date(); const yesterday = new Date(); yesterday.setDate(today.getDate() - 1); - return _.chain(mapStrings(history)) + return _.chain(mapStrings(history, strings)) .groupBy(t => { const time = new Date(t.time); time.setHours(0, 0, 0, 0); // set the time to 00:00:00 for grouping by day @@ -141,7 +88,7 @@ const TransactionTable = ({ history }) => { {groupedData.map((item, index) => ( - + { +interface Props { + data: TokenType[]; +} + +const PortfolioWallet = ({ data }: Props): ReactNode => { const theme = useTheme(); const strings = useStrings(); - const [keyword, setKeyword] = useState(''); + const [keyword, setKeyword] = useState(); const [isLoading, setIsLoading] = useState(); - const [tokenList, setTokenList] = useState([]); + const [tokenList, setTokenList] = useState(data); useEffect(() => { // FAKE FETCHING DATA TO SEE SKELETON diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js index 167153967a..0f8bd9d426 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js @@ -10,10 +10,10 @@ import { useNavigateTo } from '../../common/hooks/useNavigateTo'; import { useStrings } from '../../common/hooks/useStrings'; import useTableSort from '../../common/hooks/useTableSort'; import Table from '../../common/components/Table'; +import { IHeadCell } from '../../common/types/table'; -const TableRowSkeleton = ({ id, theme, ...props }) => ( +const TableRowSkeleton = ({ theme, ...props }) => ( { }); const list = useMemo(() => [...data], [data]); - const headCells = [ + const headCells: IHeadCell[] = [ { id: 'name', label: strings.name, align: 'left', sortType: 'character' }, { id: 'price', label: strings.price, align: 'left', sortType: 'numeric' }, { id: '24h', label: strings['24H'], align: 'left', sortType: 'numeric' }, From 6968cc1f8ae5deb30ca476f0297e9afc2581c16f Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Fri, 7 Jun 2024 16:24:12 +0700 Subject: [PATCH 086/464] update portfolio layout --- .../common/components/PortfolioMenu.js | 4 +- .../portfolio/common/hooks/useStrings.js | 18 +++- .../module/PortfolioContextProvider.js | 1 + .../app/UI/layout/PortfolioPageLayout.js | 90 ------------------- .../app/UI/pages/portfolio/layout.js | 34 ++++++- .../app/i18n/global-messages.js | 8 -- 6 files changed, 48 insertions(+), 107 deletions(-) delete mode 100644 packages/yoroi-extension/app/UI/layout/PortfolioPageLayout.js diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.js b/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.js index 9a2764efac..71e7fcdbe7 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.js @@ -16,12 +16,12 @@ const PortfolioMenu = ({ onItemClick, isActiveItem }: Props): ReactNode => { const portfolioOptions: SubMenuOption[] = [ { - label: `${strings.headerWallet} (${mockData.wallet.tokenList.length})`, + label: `${strings.menuWallet} (${mockData.wallet.tokenList.length})`, route: ROUTES.PORTFOLIO.ROOT, className: 'wallet', }, { - label: `${strings.headerDapps} (${mockData.dapps.liquidityList.length + mockData.dapps.orderList.length})`, + label: `${strings.menuDapps} (${mockData.dapps.liquidityList.length + mockData.dapps.orderList.length})`, route: ROUTES.PORTFOLIO.DAPPS, className: 'dapps', }, diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js index 323f23d450..d96aea69b3 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js @@ -5,11 +5,19 @@ import { useIntl } from '../../../../context/IntlProvider'; export const messages = Object.freeze( defineMessages({ - headerWallet: { + mainHeaderText: { + id: 'portfolio.main.header.text', + defaultMessage: '!!!Tokens', + }, + detailHeaderText: { + id: 'portfolio.detail.header.text', + defaultMessage: '!!!Token details', + }, + menuWallet: { id: 'portfolio.menu.wallet.link.label', defaultMessage: '!!!Wallet', }, - headerDapps: { + menuDapps: { id: 'portfolio.menu.dapps.link.label', defaultMessage: '!!!Dapps', }, @@ -307,8 +315,10 @@ export const messages = Object.freeze( export const useStrings = () => { const { intl } = useIntl(); return React.useRef({ - headerWallet: intl.formatMessage(messages.headerWallet), - headerDapps: intl.formatMessage(messages.headerDapps), + mainHeaderText: intl.formatMessage(messages.mainHeaderText), + detailHeaderText: intl.formatMessage(messages.detailHeaderText), + menuWallet: intl.formatMessage(messages.menuWallet), + menuDapps: intl.formatMessage(messages.menuDapps), dapps: intl.formatMessage(messages.dapps), copyToClipboard: intl.formatMessage(messages.copyToClipboard), copied: intl.formatMessage(messages.copied), diff --git a/packages/yoroi-extension/app/UI/features/portfolio/module/PortfolioContextProvider.js b/packages/yoroi-extension/app/UI/features/portfolio/module/PortfolioContextProvider.js index 0591726c98..84066f41a6 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/module/PortfolioContextProvider.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/module/PortfolioContextProvider.js @@ -36,6 +36,7 @@ export const PortfolioContextProvider = ({ unitOfAccount: settingFiatPairUnit.enabled ? settingFiatPairUnit.currency : 'USD', }, }: PortfolioProviderProps) => { + const [state, dispatch] = React.useReducer(PortfolioReducer, { ...defaultPortfolioState, ...initialState, diff --git a/packages/yoroi-extension/app/UI/layout/PortfolioPageLayout.js b/packages/yoroi-extension/app/UI/layout/PortfolioPageLayout.js deleted file mode 100644 index 2b5a1bb1a8..0000000000 --- a/packages/yoroi-extension/app/UI/layout/PortfolioPageLayout.js +++ /dev/null @@ -1,90 +0,0 @@ -// @flow -import { Component, cloneElement } from 'react'; -import type { Node, ComponentType } from 'react'; -import { observer } from 'mobx-react'; -import { intlShape } from 'react-intl'; -import globalMessages from '../../i18n/global-messages'; -import SettingsLayout from '../../components/settings/SettingsLayout'; -import { buildRoute } from '../../utils/routing'; -import type { StoresAndActionsProps } from '../../types/injectedProps.types'; - -import TopBarLayout from '../../components/layout/TopBarLayout'; -import NavBarTitle from '../../components/topbar/NavBarTitle'; -import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; -import { withLayout, type LayoutComponentMap } from '../../styles/context/layout'; -import PortfolioMenu from '../features/portfolio/common/components/PortfolioMenu'; -import NavBarContainer from '../../containers/NavBarContainer'; -import BannerContainer from '../../containers/banners/BannerContainer'; -import SidebarContainer from '../../containers/SidebarContainer'; -import NavBarContainerRevamp from '../../containers/NavBarContainerRevamp'; -import { ROUTES } from '../../routes-config'; -import { IntlProvider } from '../context/IntlProvider'; - -type Props = {| - ...StoresAndActionsProps, - +children?: Node, -|}; -type InjectedLayoutProps = {| - +renderLayoutComponent: LayoutComponentMap => Node, -|}; - -type AllProps = {| ...Props, ...InjectedLayoutProps |}; -@observer -class PortfolioPageLayout extends Component { - static defaultProps: {| children: void |} = { - children: undefined, - }; - - static contextTypes: {| intl: $npm$ReactIntl$IntlFormat |} = { - intl: intlShape.isRequired, - }; - - isActivePage: string => boolean = route => { - const { location } = this.props.stores.router; - if (route && location) { - return location.pathname === buildRoute(route); - } - return false; - }; - - render(): Node { - const { location } = this.props.stores.router; - const isDetailPage = location.pathname.startsWith(`${ROUTES.PORTFOLIO.ROOT}/details`); - const { actions, stores } = this.props; - const { children } = this.props; - const { intl } = this.context; - const sidebarContainer = ; - - const menu = isDetailPage ? null : ( - actions.router.goToRoute.trigger({ route })} isActiveItem={this.isActivePage} /> - ); - - return ( - - } - sidebar={sidebarContainer} - navbar={ - - } - menu={menu} - /> - } - showInContainer - showAsCard - > - {children} - - - ); - } -} -export default (withLayout(PortfolioPageLayout): ComponentType); diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/layout.js b/packages/yoroi-extension/app/UI/pages/portfolio/layout.js index cd938453e8..5f10f4e21b 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/layout.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/layout.js @@ -1,5 +1,10 @@ // @flow -import PortfolioPageLayout from '../../layout/PortfolioPageLayout'; +import NavBarTitle from '../../../components/topbar/NavBarTitle'; +import NavBarContainerRevamp from '../../../containers/NavBarContainerRevamp'; +import { ROUTES } from '../../../routes-config'; +import { buildRoute } from '../../../utils/routing'; +import PortfolioMenu from '../../features/portfolio/common/components/PortfolioMenu'; +import GeneralPageLayout from '../../layout/GeneralPageLayout'; type Props = {| stores: any, @@ -8,10 +13,33 @@ type Props = {| |}; const PortfolioLayout = ({ stores, actions, children }: Props) => { + const isActivePage: string => boolean = route => { + const { location } = stores.router; + if (route && location) { + return location.pathname === buildRoute(route); + } + return false; + }; + const isDetailPage = stores.router.location.pathname.startsWith(`${ROUTES.PORTFOLIO.ROOT}/details`); + const menu = isDetailPage ? null : ( + actions.router.goToRoute.trigger({ route })} isActiveItem={isActivePage} /> + ); + return ( - + } + menu={menu} + /> + } + > {children} - + ); }; diff --git a/packages/yoroi-extension/app/i18n/global-messages.js b/packages/yoroi-extension/app/i18n/global-messages.js index a192bd7163..acdbd4356f 100644 --- a/packages/yoroi-extension/app/i18n/global-messages.js +++ b/packages/yoroi-extension/app/i18n/global-messages.js @@ -996,14 +996,6 @@ const globalMessages: * = defineMessages({ id: 'buysell.dialog.provider', defaultMessage: '!!!Provider', }, - portfolioHeaderText: { - id: 'portfolio.main.header.text', - defaultMessage: '!!!Tokens', - }, - portfolioDetailHeaderText: { - id: 'portfolio.detail.header.text', - defaultMessage: '!!!Token details', - }, }); export default globalMessages; From dfd17e7d2f1fd2d4176e1bc3497acbbb90c8081f Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Fri, 7 Jun 2024 13:16:43 +0300 Subject: [PATCH 087/464] fix modal --- .../app/UI/components/Input/TextInput.js | 3 +- .../governace/common/ChooseDRepModal.js | 8 +- packages/yoroi-extension/package-lock.json | 80 +++++-------------- 3 files changed, 25 insertions(+), 66 deletions(-) diff --git a/packages/yoroi-extension/app/UI/components/Input/TextInput.js b/packages/yoroi-extension/app/UI/components/Input/TextInput.js index 9478c92752..71e17c3cbb 100644 --- a/packages/yoroi-extension/app/UI/components/Input/TextInput.js +++ b/packages/yoroi-extension/app/UI/components/Input/TextInput.js @@ -22,9 +22,10 @@ export const TextInput = ({ id, label, variant, onChange, value, error, helperTe }; const SInput = styled(TextField)(({ theme, error }) => ({ + margin: '0px 0px', '& .MuiFormHelperText-root': { position: 'absolute', - bottom: -2, + bottom: -22, left: -10, }, '& .MuiInputLabel-root': { diff --git a/packages/yoroi-extension/app/UI/features/governace/common/ChooseDRepModal.js b/packages/yoroi-extension/app/UI/features/governace/common/ChooseDRepModal.js index b17246410d..cb47d76475 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/ChooseDRepModal.js +++ b/packages/yoroi-extension/app/UI/features/governace/common/ChooseDRepModal.js @@ -46,9 +46,9 @@ export const ChooseDRepModal = ({ onSubmit }: ChooseDRepModallProps): Node => { const idInvalid = drepId.match(/\d+/g); return ( - - - + + + Identify your preferred DRep and enter their ID below to delegate your vote { /> - diff --git a/packages/yoroi-extension/package-lock.json b/packages/yoroi-extension/package-lock.json index edcf8f9a24..c527fd107c 100644 --- a/packages/yoroi-extension/package-lock.json +++ b/packages/yoroi-extension/package-lock.json @@ -531,6 +531,7 @@ "version": "7.12.17", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.17.tgz", "integrity": "sha512-V3CuX1aBywbJvV2yzJScRxeiiw0v2KZZYYE3giywxzFJL13RiyPjaaDwhDnxmgFTTS7FgvM2ijr4QmKNIu0AtQ==", + "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", "@babel/generator": "^7.12.17", @@ -560,6 +561,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, "bin": { "semver": "bin/semver" } @@ -2806,19 +2808,6 @@ "form-data": "^4.0.0" } }, - "node_modules/@emurgo/yoroi-eutxo-txs/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/@emurgo/yoroi-lib": { "version": "0.15.4", "resolved": "https://registry.npmjs.org/@emurgo/yoroi-lib/-/yoroi-lib-0.15.4.tgz", @@ -5988,6 +5977,7 @@ "version": "1.21.0", "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.21.0.tgz", "integrity": "sha512-JL0w36KuFHFCvnbOXRekqVAUplmOyT/OuCQkogo6X98MtpSaJOKEAeZnYO8JB0U/RIEixZaGI5px73YbRm/oag==", + "optional": true, "dependencies": { "merge-options": "^3.0.4" }, @@ -7565,19 +7555,6 @@ "nanoassert": "^1.0.0" } }, - "node_modules/@yoroi/api/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/@yoroi/api/node_modules/nanoassert": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-1.1.0.tgz", @@ -7610,19 +7587,6 @@ "proxy-from-env": "^1.1.0" } }, - "node_modules/@yoroi/common/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/@yoroi/exchange": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@yoroi/exchange/-/exchange-2.0.1.tgz", @@ -7738,19 +7702,6 @@ "nanoassert": "^1.0.0" } }, - "node_modules/@yoroi/resolver/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/@yoroi/resolver/node_modules/nanoassert": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-1.1.0.tgz", @@ -12902,6 +12853,7 @@ "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, "optional": true, "dependencies": { "iconv-lite": "^0.6.2" @@ -12911,6 +12863,7 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -15220,6 +15173,19 @@ "node": ">=0.10.0" } }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -16508,15 +16474,6 @@ "url": "https://opencollective.com/immer" } }, - "node_modules/immer": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/immer/-/immer-10.1.1.tgz", - "integrity": "sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -21086,6 +21043,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", + "optional": true, "dependencies": { "is-plain-obj": "^2.1.0" }, From 9280f535b8e1e1c237845943445fa4dfa90bbcab Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Fri, 7 Jun 2024 13:37:11 +0300 Subject: [PATCH 088/464] add strings --- .../UI/features/governace/common/ChooseDRepModal.js | 12 +++++++----- .../app/UI/features/governace/common/useStrings.js | 10 ++++++++++ packages/yoroi-extension/app/i18n/locales/en-US.json | 2 ++ 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/governace/common/ChooseDRepModal.js b/packages/yoroi-extension/app/UI/features/governace/common/ChooseDRepModal.js index cb47d76475..cb6b09a21c 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/ChooseDRepModal.js +++ b/packages/yoroi-extension/app/UI/features/governace/common/ChooseDRepModal.js @@ -12,6 +12,7 @@ import { parseDrepId, useIsValidDRepID } from '@yoroi/staking'; import { isNonNullable } from '@yoroi/common'; import { RustModule } from '../../../../api/ada/lib/cardanoCrypto/rustLoader'; import { useGovernance } from '../module/GovernanceContextProvider'; +import { useStrings } from './useStrings'; type ChooseDRepModallProps = {| onSubmit?: (drepId: string) => void, @@ -22,6 +23,7 @@ export const ChooseDRepModal = ({ onSubmit }: ChooseDRepModallProps): Node => { const [error, setError] = React.useState(false); const { dRepIdChanged, governanceVoteChanged } = useGovernance(); + const strings = useStrings(); // TODO hook endpoint not working well // const { error, isFetched, isFetching } = useIsValidDRepID(drepId, { @@ -49,11 +51,11 @@ export const ChooseDRepModal = ({ onSubmit }: ChooseDRepModallProps): Node => { - Identify your preferred DRep and enter their ID below to delegate your vote + {strings.identifyDrep} { dRepIdChanged(event.target.value); @@ -62,13 +64,13 @@ export const ChooseDRepModal = ({ onSubmit }: ChooseDRepModallProps): Node => { }} value={drepId} error={error} - helperText={error ? 'Incorrect format' : ' '} + helperText={error ? strings.incorectFormat : ' '} defaultValue="drep1wn0dklu87w8d9pkuyr7jalulgvl9w2he0hn0fne9k5a6y4d55mt" /> - ); diff --git a/packages/yoroi-extension/app/UI/features/governace/common/useStrings.js b/packages/yoroi-extension/app/UI/features/governace/common/useStrings.js index 4bda4b9115..f6ae22e572 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/useStrings.js +++ b/packages/yoroi-extension/app/UI/features/governace/common/useStrings.js @@ -96,6 +96,10 @@ export const messages = Object.freeze( id: 'governance.selectNoConfidenc', defaultMessage: '!!!Select no confidenc', }, + identifyDrep: { + id: 'governance.identifyDrep', + defaultMessage: '!!!Identify your preferred DRep and enter their ID below to delegate your vote', + }, password: { id: 'global.labels.password', defaultMessage: '!!!Password', @@ -112,6 +116,10 @@ export const messages = Object.freeze( id: 'global.labels.confirm', defaultMessage: '!!!confirm', }, + incorectFormat: { + id: 'global.labels.incorectFormat', + defaultMessage: '!!!Incorrect format', + }, }) ); @@ -144,5 +152,7 @@ export const useStrings = () => { total: intl.formatMessage(messages.total), password: intl.formatMessage(messages.password), wrongPassword: intl.formatMessage(messages.wrongPassword), + identifyDrep: intl.formatMessage(messages.identifyDrep), + incorectFormat: intl.formatMessage(messages.incorectFormat), }).current; }; diff --git a/packages/yoroi-extension/app/i18n/locales/en-US.json b/packages/yoroi-extension/app/i18n/locales/en-US.json index 28ed29063c..cf2446f069 100644 --- a/packages/yoroi-extension/app/i18n/locales/en-US.json +++ b/packages/yoroi-extension/app/i18n/locales/en-US.json @@ -166,6 +166,7 @@ "global.labels.stakingKeyHash": "Staking key hash", "global.labels.upgrade": "Upgrade", "global.labels.wrongPassword": "Wrong password", + "global.labels.incorectFormat": "Incorrect format", "global.language.chinese.simplified": "简体中文", "global.language.chinese.traditional": "繁體中文", "global.language.czech": "Czech", @@ -1051,5 +1052,6 @@ "governance.operations":"Operations", "governance.selectAbstein":"Select abstain", "governance.selectNoConfidenc":"Select no confidence", + "governance.identifyDrep":"Identify your preferred DRep and enter their ID below to delegate your vote", "governance.designatedSomeone":"You are designating someone else to cast your vote on your behalf for all proposals now and in the future." } From 06af327bb76d1106635feb68ca15edd152659bf8 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Fri, 7 Jun 2024 11:49:32 +0300 Subject: [PATCH 089/464] wip - typescript support --- package.json | 6 +- packages/yoroi-extension/.d.ts | 3 + packages/yoroi-extension/app/Routes.js | 1 - ...sactionFailed.js => TransactionFailed.tsx} | 0 ...sIlustration.js => SuccessIlustration.tsx} | 0 ...nSubmitted.js => TransactionSubmitted.tsx} | 4 +- .../app/UI/components/icons/index.js | 1 + ...tionState.js => useDrepDelegationState.ts} | 9 +- .../governace/common/ChooseDRepModal.js | 5 +- ...SkeletonCard.js => VotingSkeletonCard.tsx} | 5 +- .../common/{constants.js => constants.ts} | 1 - .../common/{helpers.js => helpers.ts} | 8 +- ...Maker.js => useGovernanceManagerMaker.tsx} | 3 +- .../{useNavigateTo.js => useNavigateTo.tsx} | 2 +- .../common/{useStrings.js => useStrings.tsx} | 2 +- ...vider.js => GovernanceContextProvider.tsx} | 7 +- .../governace/module/{state.js => state.ts} | 34 +- .../{DelagationForm.js => DelagationForm.tsx} | 1 - ...ction.js => GovernanceStatusSelection.tsx} | 10 +- .../app/UI/layout/GeneralPageLayout.js | 35 +- ...ge.js => GovernanceDelegationFormPage.tsx} | 12 +- ...StatusPage.js => GovernanceStatusPage.tsx} | 12 +- ...js => GovernanceTransactionFailedPage.tsx} | 12 +- ...=> GovernanceTransactionSubmittedPage.tsx} | 12 +- .../Governance/{layout.js => layout.tsx} | 1 - packages/yoroi-extension/package-lock.json | 29751 ---------------- packages/yoroi-extension/package.json | 2 + packages/yoroi-extension/tsconfig.json | 26 + .../webpack-mv2/commonConfig.js | 88 +- .../yoroi-extension/webpack/commonConfig.js | 86 +- packages/yoroi-extension/yarn.lock | 15080 ++++++++ 31 files changed, 15274 insertions(+), 29945 deletions(-) create mode 100644 packages/yoroi-extension/.d.ts rename packages/yoroi-extension/app/UI/components/TransactionFailed/{TransactionFailed.js => TransactionFailed.tsx} (100%) rename packages/yoroi-extension/app/UI/components/TransactionSubmitted/{SuccessIlustration.js => SuccessIlustration.tsx} (100%) rename packages/yoroi-extension/app/UI/components/TransactionSubmitted/{TransactionSubmitted.js => TransactionSubmitted.tsx} (97%) rename packages/yoroi-extension/app/UI/features/governace/api/{useDrepDelegationState.js => useDrepDelegationState.ts} (94%) rename packages/yoroi-extension/app/UI/features/governace/common/{VotingSkeletonCard.js => VotingSkeletonCard.tsx} (84%) rename packages/yoroi-extension/app/UI/features/governace/common/{constants.js => constants.ts} (96%) rename packages/yoroi-extension/app/UI/features/governace/common/{helpers.js => helpers.ts} (88%) rename packages/yoroi-extension/app/UI/features/governace/common/{useGovernanceManagerMaker.js => useGovernanceManagerMaker.tsx} (87%) rename packages/yoroi-extension/app/UI/features/governace/common/{useNavigateTo.js => useNavigateTo.tsx} (92%) rename packages/yoroi-extension/app/UI/features/governace/common/{useStrings.js => useStrings.tsx} (98%) rename packages/yoroi-extension/app/UI/features/governace/module/{GovernanceContextProvider.js => GovernanceContextProvider.tsx} (91%) rename packages/yoroi-extension/app/UI/features/governace/module/{state.js => state.ts} (72%) rename packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/{DelagationForm.js => DelagationForm.tsx} (99%) rename packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/{GovernanceStatusSelection.js => GovernanceStatusSelection.tsx} (95%) rename packages/yoroi-extension/app/UI/pages/Governance/{GovernanceDelegationFormPage.js => GovernanceDelegationFormPage.tsx} (78%) rename packages/yoroi-extension/app/UI/pages/Governance/{GovernanceStatusPage.js => GovernanceStatusPage.tsx} (80%) rename packages/yoroi-extension/app/UI/pages/Governance/{GovernanceTransactionFailedPage.js => GovernanceTransactionFailedPage.tsx} (78%) rename packages/yoroi-extension/app/UI/pages/Governance/{GovernanceTransactionSubmittedPage.js => GovernanceTransactionSubmittedPage.tsx} (79%) rename packages/yoroi-extension/app/UI/pages/Governance/{layout.js => layout.tsx} (99%) delete mode 100644 packages/yoroi-extension/package-lock.json create mode 100644 packages/yoroi-extension/tsconfig.json create mode 100644 packages/yoroi-extension/yarn.lock diff --git a/package.json b/package.json index bad9641132..0b6f11eeae 100644 --- a/package.json +++ b/package.json @@ -8,10 +8,12 @@ "translations:purge": "lerna run translations:purge -- stream", "archive:src": "func() { git rev-parse HEAD > COMMIT && git rev-parse --abbrev-ref HEAD > BRANCH && git archive --format zip --add-file COMMIT --add-file BRANCH -o $1 HEAD && rm COMMIT BRANCH; }; func" }, - "devDependencies": { "concurrently": "^7.0.0", "husky": "4.3.8", - "lerna": "^4.0.0" + "lerna": "^4.0.0", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack-cli": "^5.1.4" } } diff --git a/packages/yoroi-extension/.d.ts b/packages/yoroi-extension/.d.ts new file mode 100644 index 0000000000..39b095f7db --- /dev/null +++ b/packages/yoroi-extension/.d.ts @@ -0,0 +1,3 @@ +declare module 'react-intl' { + export const value: any; +} diff --git a/packages/yoroi-extension/app/Routes.js b/packages/yoroi-extension/app/Routes.js index 373ef6ee99..f0f05b6733 100644 --- a/packages/yoroi-extension/app/Routes.js +++ b/packages/yoroi-extension/app/Routes.js @@ -1,4 +1,3 @@ -// @flow import type { Node } from 'react'; import type { StoresMap } from './stores/index'; import type { ActionsMap } from './actions/index'; diff --git a/packages/yoroi-extension/app/UI/components/TransactionFailed/TransactionFailed.js b/packages/yoroi-extension/app/UI/components/TransactionFailed/TransactionFailed.tsx similarity index 100% rename from packages/yoroi-extension/app/UI/components/TransactionFailed/TransactionFailed.js rename to packages/yoroi-extension/app/UI/components/TransactionFailed/TransactionFailed.tsx diff --git a/packages/yoroi-extension/app/UI/components/TransactionSubmitted/SuccessIlustration.js b/packages/yoroi-extension/app/UI/components/TransactionSubmitted/SuccessIlustration.tsx similarity index 100% rename from packages/yoroi-extension/app/UI/components/TransactionSubmitted/SuccessIlustration.js rename to packages/yoroi-extension/app/UI/components/TransactionSubmitted/SuccessIlustration.tsx diff --git a/packages/yoroi-extension/app/UI/components/TransactionSubmitted/TransactionSubmitted.js b/packages/yoroi-extension/app/UI/components/TransactionSubmitted/TransactionSubmitted.tsx similarity index 97% rename from packages/yoroi-extension/app/UI/components/TransactionSubmitted/TransactionSubmitted.js rename to packages/yoroi-extension/app/UI/components/TransactionSubmitted/TransactionSubmitted.tsx index c1771156d4..c71432c9fd 100644 --- a/packages/yoroi-extension/app/UI/components/TransactionSubmitted/TransactionSubmitted.js +++ b/packages/yoroi-extension/app/UI/components/TransactionSubmitted/TransactionSubmitted.tsx @@ -2,9 +2,11 @@ import React from 'react'; import { Stack, Typography, Button } from '@mui/material'; import { SuccessIlustration } from './SuccessIlustration'; import { useHistory } from 'react-router-dom'; +// @ts-ignore import { ROUTES } from '../../../routes-config'; -import { FormattedMessage } from 'react-intl'; +// @ts-ignore import globalMessages from '../../../i18n/global-messages'; +import { FormattedMessage } from 'react-intl'; export const TransactionSubmitted = () => { const history = useHistory(); diff --git a/packages/yoroi-extension/app/UI/components/icons/index.js b/packages/yoroi-extension/app/UI/components/icons/index.js index cbc5a59a31..c5ee8efc9f 100644 --- a/packages/yoroi-extension/app/UI/components/icons/index.js +++ b/packages/yoroi-extension/app/UI/components/icons/index.js @@ -9,4 +9,5 @@ export const Icon = { VisibilityOn, VisibilityOff, ChevronDown, + ChevronUp, }; diff --git a/packages/yoroi-extension/app/UI/features/governace/api/useDrepDelegationState.js b/packages/yoroi-extension/app/UI/features/governace/api/useDrepDelegationState.ts similarity index 94% rename from packages/yoroi-extension/app/UI/features/governace/api/useDrepDelegationState.js rename to packages/yoroi-extension/app/UI/features/governace/api/useDrepDelegationState.ts index c1d193ddb4..f006e48204 100644 --- a/packages/yoroi-extension/app/UI/features/governace/api/useDrepDelegationState.js +++ b/packages/yoroi-extension/app/UI/features/governace/api/useDrepDelegationState.ts @@ -1,10 +1,9 @@ -// @flow import { useQuery } from 'react-query'; -type PoolTransition = {| - kind: null | 'none' | 'delegate' | 'abstain' | 'no-confidence', - drepID: 'drep1c93a2zvs3aw8e4naez0ynpmc48jbc7yaa3n2k8ljhwfdt70yscts' | null, -|}; +type PoolTransition = { + kind: null | 'none' | 'delegate' | 'abstain' | 'no-confidence'; + drepID: 'drep1c93a2zvs3aw8e4naez0ynpmc48jbc7yaa3n2k8ljhwfdt70yscts' | null; +}; // TODO mock impementation - add real endpoint export const getDrepDelegationState = async (walletId: string): Promise => { diff --git a/packages/yoroi-extension/app/UI/features/governace/common/ChooseDRepModal.js b/packages/yoroi-extension/app/UI/features/governace/common/ChooseDRepModal.js index cb6b09a21c..aa485dee0f 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/ChooseDRepModal.js +++ b/packages/yoroi-extension/app/UI/features/governace/common/ChooseDRepModal.js @@ -1,15 +1,12 @@ // @flow import * as React from 'react'; -import type { Node } from 'react'; import Button from '@mui/material/Button'; import Typography from '@mui/material/Typography'; import Box from '@mui/material/Box'; import Stack from '@mui/material/Stack'; -import { CustomModal } from '../../../components/modals/CustomModal'; import { TextInput } from '../../../components/index'; import { parseDrepId, useIsValidDRepID } from '@yoroi/staking'; -import { isNonNullable } from '@yoroi/common'; import { RustModule } from '../../../../api/ada/lib/cardanoCrypto/rustLoader'; import { useGovernance } from '../module/GovernanceContextProvider'; import { useStrings } from './useStrings'; @@ -18,7 +15,7 @@ type ChooseDRepModallProps = {| onSubmit?: (drepId: string) => void, |}; -export const ChooseDRepModal = ({ onSubmit }: ChooseDRepModallProps): Node => { +export const ChooseDRepModal = ({ onSubmit }: ChooseDRepModallProps) => { const [drepId, setDrepId] = React.useState(''); const [error, setError] = React.useState(false); diff --git a/packages/yoroi-extension/app/UI/features/governace/common/VotingSkeletonCard.js b/packages/yoroi-extension/app/UI/features/governace/common/VotingSkeletonCard.tsx similarity index 84% rename from packages/yoroi-extension/app/UI/features/governace/common/VotingSkeletonCard.js rename to packages/yoroi-extension/app/UI/features/governace/common/VotingSkeletonCard.tsx index 3c26875437..aff0efa8ae 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/VotingSkeletonCard.js +++ b/packages/yoroi-extension/app/UI/features/governace/common/VotingSkeletonCard.tsx @@ -1,11 +1,10 @@ // @flow import * as React from 'react'; -import type { Node } from 'react'; import { Stack } from '@mui/material'; import { Skeleton } from '@mui/material'; import { styled } from '@mui/material/styles'; -const StyledCard = styled(Stack)(({ theme, selected, pending }) => ({ +const StyledCard = styled(Stack)(({ theme }: any) => ({ position: 'relative', display: 'flex', flexDirection: 'column', @@ -18,7 +17,7 @@ const StyledCard = styled(Stack)(({ theme, selected, pending }) => ({ boxShadow: 'inset 0 100vw white', border: '2px solid transparent', })); -export const VotingSkeletonCard = (): Node => { +export const VotingSkeletonCard = () => { return ( diff --git a/packages/yoroi-extension/app/UI/features/governace/common/constants.js b/packages/yoroi-extension/app/UI/features/governace/common/constants.ts similarity index 96% rename from packages/yoroi-extension/app/UI/features/governace/common/constants.js rename to packages/yoroi-extension/app/UI/features/governace/common/constants.ts index 8bd19f404a..0a3a45a58e 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/constants.js +++ b/packages/yoroi-extension/app/UI/features/governace/common/constants.ts @@ -1,3 +1,2 @@ -// @flow export const BECOME_DREP_LINK = 'https://emurgohelpdesk.zendesk.com/hc/en-us/articles/8600742035855-Who-are-DReps-on-Cardano'; export const LEARN_MORE_LINK = 'https://emurgohelpdesk.zendesk.com/hc/en-us/sections/8582793481231-Governance'; diff --git a/packages/yoroi-extension/app/UI/features/governace/common/helpers.js b/packages/yoroi-extension/app/UI/features/governace/common/helpers.ts similarity index 88% rename from packages/yoroi-extension/app/UI/features/governace/common/helpers.js rename to packages/yoroi-extension/app/UI/features/governace/common/helpers.ts index 23d1aa2bd8..8e0ebeb64a 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/helpers.js +++ b/packages/yoroi-extension/app/UI/features/governace/common/helpers.ts @@ -1,4 +1,4 @@ -export const mapStakingKeyStateToGovernanceAction = state => { +export const mapStakingKeyStateToGovernanceAction = (state: any) => { if (!state.drepDelegation) return null; const vote = state.drepDelegation; return vote.action === 'abstain' @@ -8,7 +8,7 @@ export const mapStakingKeyStateToGovernanceAction = state => { : { kind: 'delegate', drepID: vote.drepID }; }; -const getStakePoolMeta = stores => { +const getStakePoolMeta = (stores: any) => { const publicDeriver = stores.wallets.selected; const delegationStore = stores.delegation; const currentPool = delegationStore.getDelegatedPoolId(publicDeriver); @@ -35,8 +35,8 @@ const getStakePoolMeta = stores => { }; }; -export const createCurrrentWalletInfo = stores => { - const { wallets, delegation, substores } = stores; +export const createCurrrentWalletInfo = (stores: any) => { + const { wallets } = stores; const walletCurrentPoolInfo = getStakePoolMeta(stores); const selectedWallet = wallets.selected; diff --git a/packages/yoroi-extension/app/UI/features/governace/common/useGovernanceManagerMaker.js b/packages/yoroi-extension/app/UI/features/governace/common/useGovernanceManagerMaker.tsx similarity index 87% rename from packages/yoroi-extension/app/UI/features/governace/common/useGovernanceManagerMaker.js rename to packages/yoroi-extension/app/UI/features/governace/common/useGovernanceManagerMaker.tsx index b40afa047b..7bd0c7295d 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/useGovernanceManagerMaker.js +++ b/packages/yoroi-extension/app/UI/features/governace/common/useGovernanceManagerMaker.tsx @@ -1,6 +1,7 @@ // @flow import React from 'react'; -import { governanceApiMaker, governanceManagerMaker, useStakingKeyState } from '@yoroi/staking'; +import { governanceApiMaker, governanceManagerMaker } from '@yoroi/staking'; +// @ts-ignore import { RustModule } from '../../../../api/ada/lib/cardanoCrypto/rustLoader'; export const useGovernanceManagerMaker = (walletId: string, networkId: string): any => { diff --git a/packages/yoroi-extension/app/UI/features/governace/common/useNavigateTo.js b/packages/yoroi-extension/app/UI/features/governace/common/useNavigateTo.tsx similarity index 92% rename from packages/yoroi-extension/app/UI/features/governace/common/useNavigateTo.js rename to packages/yoroi-extension/app/UI/features/governace/common/useNavigateTo.tsx index d0dcc86c8b..8a873a7fd4 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/useNavigateTo.js +++ b/packages/yoroi-extension/app/UI/features/governace/common/useNavigateTo.tsx @@ -1,5 +1,5 @@ import { useHistory } from 'react-router-dom'; -import React, { useRef } from 'react'; +import React from 'react'; import { ROUTES } from '../../../../routes-config'; export const useNavigateTo = () => { diff --git a/packages/yoroi-extension/app/UI/features/governace/common/useStrings.js b/packages/yoroi-extension/app/UI/features/governace/common/useStrings.tsx similarity index 98% rename from packages/yoroi-extension/app/UI/features/governace/common/useStrings.js rename to packages/yoroi-extension/app/UI/features/governace/common/useStrings.tsx index f6ae22e572..d30048949e 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/useStrings.js +++ b/packages/yoroi-extension/app/UI/features/governace/common/useStrings.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { defineMessages, IntlProvider } from 'react-intl'; +import { defineMessages } from 'react-intl'; import { useIntl } from '../../../context/IntlProvider'; export const messages = Object.freeze( diff --git a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.js b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx similarity index 91% rename from packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.js rename to packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx index ecd132bc7f..d9de4371af 100644 --- a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.js +++ b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx @@ -1,4 +1,3 @@ -// flow import * as React from 'react'; import { @@ -11,9 +10,7 @@ import { GovernanceActions, } from './state'; -import { getStrings } from '../common/useStrings'; import { useGovernanceManagerMaker } from '../common/useGovernanceManagerMaker'; -import type { Node } from 'react'; const initialGovernanceProvider = { ...defaultGovernanceState, @@ -22,8 +19,8 @@ const initialGovernanceProvider = { const GovernanceContext = React.createContext(initialGovernanceProvider); type GovernanceProviderProps = { - children: Node, - currentWallet: any, // TODO to be defined + children: Node; + currentWallet: any; // TODO to be defined }; export const GovernanceContextProvider = ({ children, currentWallet }: GovernanceProviderProps) => { diff --git a/packages/yoroi-extension/app/UI/features/governace/module/state.js b/packages/yoroi-extension/app/UI/features/governace/module/state.ts similarity index 72% rename from packages/yoroi-extension/app/UI/features/governace/module/state.js rename to packages/yoroi-extension/app/UI/features/governace/module/state.ts index 2d99334e98..d536b8a690 100644 --- a/packages/yoroi-extension/app/UI/features/governace/module/state.js +++ b/packages/yoroi-extension/app/UI/features/governace/module/state.ts @@ -3,13 +3,13 @@ import { invalid } from '@yoroi/common'; import { produce } from 'immer'; type VoteKind = 'none' | 'delegate' | 'abstain' | 'no-confidence'; -type Vote = {| kind: VoteKind, drepID?: string |}; +type Vote = { kind: VoteKind; drepID?: string }; // Define types -export type GovernanceActions = {| - +governanceVoteChanged: (vote: Vote) => void, - +dRepIdChanged: (id: string) => void, -|}; +export type GovernanceActions = { + governanceVoteChanged: (vote: Vote) => void; + dRepIdChanged: (id: string) => void; +}; export const GovernanceActionType = Object.freeze({ GovernanceVoteChanged: 'governanceVoteChanged', @@ -17,20 +17,20 @@ export const GovernanceActionType = Object.freeze({ }); export type GovernanceAction = - | {| - type: typeof GovernanceActionType.GovernanceVoteChanged, - governanceVote: Vote, - |} - | {| - type: typeof GovernanceActionType.DRepIdChanged, - dRepId: '', - |}; + | { + type: typeof GovernanceActionType.GovernanceVoteChanged; + governanceVote: Vote; + } + | { + type: typeof GovernanceActionType.DRepIdChanged; + dRepId: ''; + }; // Define state type -export type GovernanceState = {| - governanceVote: Vote, - dRepId: ?string, -|}; +export type GovernanceState = { + governanceVote: Vote; + dRepId?: string; +}; // Define default state export const defaultGovernanceState: GovernanceState = { diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.js b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx similarity index 99% rename from packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.js rename to packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx index 2755ac210a..6ad2b92a28 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.js +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx @@ -1,4 +1,3 @@ -// @flow import * as React from 'react'; import { styled } from '@mui/material/styles'; import Typography from '@mui/material/Typography'; diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx similarity index 95% rename from packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js rename to packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx index f651dbcdd2..345b9bf1c8 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.js +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx @@ -1,7 +1,4 @@ -// @flow import * as React from 'react'; -import type { Node } from 'react'; -import { useState } from 'react'; import { styled } from '@mui/material/styles'; import Typography from '@mui/material/Typography'; import Box from '@mui/material/Box'; @@ -11,7 +8,6 @@ import { useStrings } from '../../common/useStrings'; import { Abstein } from '../../common/ilustrations/Abstein'; import { NoConfidance } from '../../common/ilustrations/NoConfidance'; import { Stack } from '@mui/material'; -import { Button } from '@mui/material'; import Link from '@mui/material/Link'; import { useModal } from '../../../../components/modals/ModalContext'; import { ChooseDRepModal } from '../../common/ChooseDRepModal'; @@ -36,9 +32,9 @@ const mapStatus = { 'no-confidence': 'No confidence', }; -export const GovernanceStatusSelection = (): Node => { - const [pendingVote, setPendingVote] = React.useState(false); - const [pendingPage, setPendingPage] = React.useState(false); +export const GovernanceStatusSelection = () => { + const [pendingVote] = React.useState(false); + const [pendingPage] = React.useState(false); const navigateTo = useNavigateTo(); const { openModal } = useModal(); diff --git a/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js b/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js index eef30e05a6..ccb69e5d20 100644 --- a/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js +++ b/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js @@ -1,45 +1,20 @@ -// @flow -import { Component } from 'react'; -import type { Node, ComponentType } from 'react'; -import type { StoresAndActionsProps } from '../../types/injectedProps.types'; import { observer } from 'mobx-react'; -import { intlShape, injectIntl } from 'react-intl'; +import { intlShape } from 'react-intl'; import TopBarLayout from '../../components/layout/TopBarLayout'; import BannerContainer from '../../containers/banners/BannerContainer'; import SidebarContainer from '../../containers/SidebarContainer'; import { withLayout } from '../../styles/context/layout'; -import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; import { ModalProvider } from '../components/modals/ModalContext'; import { ModalManager } from '../components/modals/ModalManager'; import { IntlProvider } from '../context/IntlProvider'; -type Props = {| - ...StoresAndActionsProps, - +children?: Node, - navbar?: Node, -|}; - -type LayoutProps = {| - stores: any, - actions: any, - children?: Node, - navbar?: Node, - intl: $npm$ReactIntl$IntlFormat, -|}; - -type InjectedLayoutProps = {| - +renderLayoutComponent: any => Node, -|}; - -type AllProps = {| ...Props, ...InjectedLayoutProps |}; - @observer -class GeneralPageLayout extends Component { - static defaultProps: {| children: void |} = { +class GeneralPageLayout extends ComponentType { + static defaultProps = { children: undefined, }; - static contextTypes: {| intl: $npm$ReactIntl$IntlFormat |} = { + static contextTypes = { intl: intlShape.isRequired, }; @@ -61,4 +36,4 @@ class GeneralPageLayout extends Component { } } -export default (withLayout(GeneralPageLayout): ComponentType); +export default withLayout(GeneralPageLayout); diff --git a/packages/yoroi-extension/app/UI/pages/Governance/GovernanceDelegationFormPage.js b/packages/yoroi-extension/app/UI/pages/Governance/GovernanceDelegationFormPage.tsx similarity index 78% rename from packages/yoroi-extension/app/UI/pages/Governance/GovernanceDelegationFormPage.js rename to packages/yoroi-extension/app/UI/pages/Governance/GovernanceDelegationFormPage.tsx index 61735e546d..d6d28f4981 100644 --- a/packages/yoroi-extension/app/UI/pages/Governance/GovernanceDelegationFormPage.js +++ b/packages/yoroi-extension/app/UI/pages/Governance/GovernanceDelegationFormPage.tsx @@ -1,12 +1,12 @@ -// @flow +import React from 'react'; import { DelagationForm } from '../../features/governace/useCases/DelagationForm/DelagationForm'; import GovernanceLayout from './layout'; -type Props = {| - stores: any, - actions: any, - children?: React$Node, -|}; +type Props = { + stores: any; + actions: any; + children?: any; +}; const GovernanceDelegationFormPage = (props: Props): any => { return ( diff --git a/packages/yoroi-extension/app/UI/pages/Governance/GovernanceStatusPage.js b/packages/yoroi-extension/app/UI/pages/Governance/GovernanceStatusPage.tsx similarity index 80% rename from packages/yoroi-extension/app/UI/pages/Governance/GovernanceStatusPage.js rename to packages/yoroi-extension/app/UI/pages/Governance/GovernanceStatusPage.tsx index 38cdb90d9f..eaacbf652a 100644 --- a/packages/yoroi-extension/app/UI/pages/Governance/GovernanceStatusPage.js +++ b/packages/yoroi-extension/app/UI/pages/Governance/GovernanceStatusPage.tsx @@ -1,12 +1,12 @@ -// @flow +import React from 'react'; import { GovernanceStatusSelection } from '../../features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection'; import GovernanceLayout from './layout'; -type Props = {| - stores: any, - actions: any, - children?: React$Node, -|}; +type Props = { + stores: any; + actions: any; + children?: any; +}; const GovernanceStatusPage = (props: Props): any => { return ( diff --git a/packages/yoroi-extension/app/UI/pages/Governance/GovernanceTransactionFailedPage.js b/packages/yoroi-extension/app/UI/pages/Governance/GovernanceTransactionFailedPage.tsx similarity index 78% rename from packages/yoroi-extension/app/UI/pages/Governance/GovernanceTransactionFailedPage.js rename to packages/yoroi-extension/app/UI/pages/Governance/GovernanceTransactionFailedPage.tsx index 48b1e78427..e98e16b3c5 100644 --- a/packages/yoroi-extension/app/UI/pages/Governance/GovernanceTransactionFailedPage.js +++ b/packages/yoroi-extension/app/UI/pages/Governance/GovernanceTransactionFailedPage.tsx @@ -1,12 +1,12 @@ -// @flow +import React from 'react'; import { TransactionFailed } from '../../components/TransactionFailed/TransactionFailed'; import GovernanceLayout from './layout'; -type Props = {| - stores: any, - actions: any, - children?: React$Node, -|}; +type Props = { + stores: any; + actions: any; + children?: any; +}; const GovernanceTransactionFailedPage = (props: Props): any => { return ( diff --git a/packages/yoroi-extension/app/UI/pages/Governance/GovernanceTransactionSubmittedPage.js b/packages/yoroi-extension/app/UI/pages/Governance/GovernanceTransactionSubmittedPage.tsx similarity index 79% rename from packages/yoroi-extension/app/UI/pages/Governance/GovernanceTransactionSubmittedPage.js rename to packages/yoroi-extension/app/UI/pages/Governance/GovernanceTransactionSubmittedPage.tsx index 2360d3a6e5..7a5c09d4c0 100644 --- a/packages/yoroi-extension/app/UI/pages/Governance/GovernanceTransactionSubmittedPage.js +++ b/packages/yoroi-extension/app/UI/pages/Governance/GovernanceTransactionSubmittedPage.tsx @@ -1,12 +1,12 @@ -// @flow +import React from 'react'; import { TransactionSubmitted } from '../../components/TransactionSubmitted/TransactionSubmitted'; import GovernanceLayout from './layout'; -type Props = {| - stores: any, - actions: any, - children?: React$Node, -|}; +type Props = { + stores: any; + actions: any; + children?: any; +}; const GovernanceTransactionSubmittedPage = (props: Props): any => { return ( diff --git a/packages/yoroi-extension/app/UI/pages/Governance/layout.js b/packages/yoroi-extension/app/UI/pages/Governance/layout.tsx similarity index 99% rename from packages/yoroi-extension/app/UI/pages/Governance/layout.js rename to packages/yoroi-extension/app/UI/pages/Governance/layout.tsx index 0bf75e11da..064267dfc7 100644 --- a/packages/yoroi-extension/app/UI/pages/Governance/layout.js +++ b/packages/yoroi-extension/app/UI/pages/Governance/layout.tsx @@ -1,4 +1,3 @@ -// @flow import GeneralPageLayout from '../../layout/GeneralPageLayout'; import { GovernanceStatusSelection } from '../../features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection'; import NavBarContainerRevamp from '../../../containers/NavBarContainerRevamp'; diff --git a/packages/yoroi-extension/package-lock.json b/packages/yoroi-extension/package-lock.json deleted file mode 100644 index c527fd107c..0000000000 --- a/packages/yoroi-extension/package-lock.json +++ /dev/null @@ -1,29751 +0,0 @@ -{ - "name": "yoroi", - "version": "5.1.422", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "yoroi", - "version": "5.1.422", - "license": "MIT", - "dependencies": { - "@amplitude/analytics-browser": "^2.1.3", - "@cardano-foundation/ledgerjs-hw-app-cardano": "6.0.0", - "@emotion/react": "^11.4.1", - "@emotion/styled": "^11.3.0", - "@emurgo/cardano-message-signing-browser": "1.0.1", - "@emurgo/cardano-serialization-lib-browser": "12.0.0-alpha.26", - "@emurgo/cip14-js": "2.0.0", - "@emurgo/cip4-js": "1.0.5", - "@emurgo/cross-csl-browser": "4.4.0", - "@emurgo/yoroi-eutxo-txs": "0.0.2-alpha.8", - "@emurgo/yoroi-lib": "0.15.4", - "@ledgerhq/hw-transport-u2f": "5.36.0-deprecated", - "@ledgerhq/hw-transport-webauthn": "5.36.0-deprecated", - "@ledgerhq/hw-transport-webhid": "5.51.1", - "@ledgerhq/hw-transport-webusb": "5.49.0", - "@mui/lab": "^5.0.0-alpha.51", - "@mui/material": "^5.0.4", - "@mui/x-date-pickers": "^5.0.8", - "@svgr/webpack": "5.5.0", - "@vespaiach/axios-fetch-adapter": "^0.3.0", - "@yoroi/exchange": "2.0.1", - "@yoroi/resolver": "2.0.2", - "@yoroi/staking": "^1.5.1", - "@yoroi/swap": "1.5.2", - "@yoroi/types": "1.5.4", - "assert": "2.1.0", - "async-mutex": "0.5.0", - "axios": "0.21.1", - "bech32": "2.0.0", - "bignumber.js": "9.1.2", - "bip32": "4.0.0", - "bip39": "3.1.0", - "blake2b": "2.1.4", - "browserify-zlib": "0.2.0", - "bs58check": "2.1.2", - "buffer": "6.0.3", - "cardano-wallet-browser": "1.2.2", - "cbor": "^8.1.0", - "chacha": "2.1.0", - "classnames": "2.5.1", - "concurrently": "8.2.2", - "crypto-browserify": "3.12.0", - "crypto-random-string": "3.3.1", - "downshift": "^6.1.7", - "dropbox": "4.0.30", - "es6-error": "4.1.1", - "file-saver": "2.0.5", - "immer": "^10.1.1", - "jdenticon": "3.2.0", - "lodash": "4.17.21", - "lottie-react": "2.4.0", - "lovefield": "2.1.12", - "mixwith": "0.1.1", - "mobx": "5.15.7", - "mobx-react": "6.3.1", - "mobx-react-form": "2.0.8", - "mobx-react-router": "4.1.0", - "moment": "2.30.1", - "object-hash": "3.0.0", - "path-browserify": "1.0.1", - "pbkdf2": "3.1.2", - "process": "0.11.10", - "qrcode.react": "3.1.0", - "react": "17.0.2", - "react-beautiful-dnd": "13.1.1", - "react-blockies": "1.4.1", - "react-copy-to-clipboard": "5.0.3", - "react-dom": "17.0.2", - "react-intl": "2.9.0", - "react-markdown": "5.0.3", - "react-query": "^3.39.3", - "react-router": "5.2.0", - "react-router-dom": "5.2.0", - "recharts": "1.8.5", - "semver": "7.6.0", - "stream-browserify": "3.0.0", - "tinycolor2": "1.4.2", - "trezor-connect-flow": "Emurgo/trezor-connect-flow#92d6d8c8faef25c0ea1d481aa1ecb4ba77ce539c", - "ua-parser-js": "1.0.37", - "util": "0.12.5" - }, - "devDependencies": { - "@amplitude/ampli": "^1.32.0", - "@babel/core": "7.12.17", - "@babel/node": "7.12.17", - "@babel/plugin-proposal-class-properties": "7.12.13", - "@babel/plugin-proposal-decorators": "7.12.13", - "@babel/plugin-proposal-export-default-from": "7.12.13", - "@babel/plugin-proposal-export-namespace-from": "7.12.13", - "@babel/plugin-proposal-nullish-coalescing-operator": "7.12.13", - "@babel/plugin-proposal-optional-chaining": "7.12.17", - "@babel/plugin-syntax-dynamic-import": "7.8.3", - "@babel/plugin-transform-runtime": "7.12.17", - "@babel/preset-env": "7.12.17", - "@babel/preset-flow": "7.12.13", - "@babel/preset-react": "7.12.13", - "@babel/register": "7.12.13", - "@babel/runtime": "7.12.18", - "@babel/runtime-corejs3": "7.12.18", - "@emurgo/cardano-message-signing-nodejs": "1.0.1", - "@emurgo/cardano-serialization-lib-nodejs": "12.0.0-alpha.26", - "@emurgo/cross-csl-nodejs": "4.4.0", - "@pmmmwh/react-refresh-webpack-plugin": "0.5.11", - "@yoroi/common": "1.5.0", - "autoprefixer": "10.2.4", - "babel-eslint": "11.0.0-beta.2", - "babel-jest": "26.6.3", - "babel-loader": "8.2.2", - "babel-plugin-add-module-exports": "1.0.4", - "babel-plugin-dynamic-import-node": "2.3.3", - "babel-plugin-module-resolver": "4.1.0", - "babel-plugin-nameof-js": "0.0.2", - "babel-plugin-react-intl": "5.1.18", - "babel-preset-react-optimize": "1.0.1", - "cardano-wallet": "1.2.2", - "chai": "4.3.0", - "chai-as-promised": "7.1.1", - "config": "1.31.0", - "config-webpack": "1.0.4", - "copy-webpack-plugin": "6.0.0", - "crx": "5.0.1", - "css-loader": "5.0.2", - "eslint": "7.20.0", - "eslint-config-airbnb": "18.2.1", - "eslint-config-prettier": "7.2.0", - "eslint-plugin-flowtype": "5.2.1", - "eslint-plugin-import": "2.22.1", - "eslint-plugin-jsx-a11y": "6.4.1", - "eslint-plugin-no-floating-promise": "1.0.2", - "eslint-plugin-prettier": "3.3.1", - "eslint-plugin-promise": "4.3.1", - "eslint-plugin-react": "7.22.0", - "file-loader": "6.2.0", - "flow-bin": "0.142.0", - "flow-typed": "3.3.1", - "html-loader": "2.0.0", - "html-webpack-harddisk-plugin": "2.0.0", - "html-webpack-plugin": "5.1.0", - "jest": "26.6.3", - "jest-canvas-mock": "2.3.1", - "json-stable-stringify": "1.0.1", - "markdown-loader": "6.0.0", - "minimist": "1.2.5", - "node-sass": "9.0.0", - "path-to-regexp": "6.2.0", - "postcss": "8.4.31", - "postcss-loader": "5.0.0", - "prettier": "2.2.1", - "raw-loader": "4.0.2", - "react-intl-translations-manager": "5.0.3", - "react-refresh": "0.9.0", - "rimraf": "3.0.2", - "sass-loader": "11.0.1", - "shelljs": "0.8.4", - "style-loader": "2.0.0", - "unused-webpack-plugin": "2.4.0", - "url-loader": "4.1.1", - "webpack": "5.23.0", - "webpack-cli": "4.5.0", - "webpack-dev-middleware": "4.1.0", - "webpack-dev-server": "^4.9.3", - "webpack-hot-middleware": "2.25.0", - "webpack-httpolyglot-server": "git+https://github.com/Emurgo/webpack-httpolyglot-server.git" - } - }, - "node_modules/@amplitude/ampli": { - "version": "1.34.0", - "resolved": "https://registry.npmjs.org/@amplitude/ampli/-/ampli-1.34.0.tgz", - "integrity": "sha512-44cZJeZahoDy3UEdHczVbNaVFNZ+Uk/XZMcjan6Qpliq0/P75sUpjUyei0uMKcI5hwEbsrzNEqYJTokf3o7kRA==", - "dev": true, - "dependencies": { - "@amplitude/identify": "^1.10.0", - "@amplitude/node": "^1.10.0", - "@amplitude/types": "^1.10.0", - "@babel/parser": "^7.12.11", - "@babel/traverse": "^7.12.12", - "@oclif/command": "^1.6.1", - "@oclif/config": "^1.15.1", - "@oclif/errors": "^1.2.2", - "@oclif/parser": "^3.8.3", - "@oclif/plugin-autocomplete": "^0.3.0", - "@oclif/plugin-help": "^3.2.2", - "@oclif/plugin-update": "^1.3.10", - "@oclif/plugin-warn-if-update-available": "^1.7.0", - "@phenomnomnominal/tsquery": "^3.0.0", - "@sentry/node": "^6.2.5", - "@sentry/types": "^6.2.5", - "@types/debug": "^4.1.5", - "@types/inquirer": "^8.2.4", - "ansi-regex": "^5.0.1", - "antlr4ts": "^0.5.0-alpha.4", - "chalk": "^2.4.2", - "client-oauth2": "^4.3.3", - "conf": "^6.2.0", - "debug": "^4.1.1", - "dotenv": "^8.2.0", - "fs-extra": "^8.1.0", - "get-port": "^5.0.0", - "globby": "^10.0.1", - "graphql": "^15.4.0", - "graphql-request": "^3.3.0", - "graphql-tag": "^2.11.0", - "https-proxy-agent": "^5.0.1", - "ignore-walk": "^3.0.3", - "inquirer": "^8.2.4", - "inquirer-autocomplete-prompt": "^2.0.0", - "json5": "^2.1.1", - "lodash": "^4.17.21", - "minimatch": "^3.0.4", - "node-fetch": "^2.6.1", - "open": "^7.3.1", - "ora": "^4.1.1", - "php-parser": "^3.0.0-prerelease.8", - "pkce-challenge": "^2.2.0", - "randomstring": "^1.1.5", - "rimraf": "^3.0.2", - "stoppable": "^1.1.0", - "tmp": "^0.2.1", - "tslib": "^1.14.1", - "typescript": "^3.9.7", - "uuid": "^9.0.0", - "vue-parser": "^1.1.6" - }, - "bin": { - "ampli": "bin/run" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@amplitude/ampli/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@amplitude/ampli/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@amplitude/ampli/node_modules/globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", - "dev": true, - "dependencies": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@amplitude/ampli/node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@amplitude/ampli/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@amplitude/ampli/node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/@amplitude/ampli/node_modules/typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/@amplitude/ampli/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/@amplitude/ampli/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "dev": true, - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@amplitude/analytics-browser": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@amplitude/analytics-browser/-/analytics-browser-2.3.5.tgz", - "integrity": "sha512-KL9Yv0lXvCsWrCwwWAMB0kzTswBlTLxxyOAS//z0378ckQvszLYvQqje3K5t0AlXrG728cLvKcBFveZ/UgUWfg==", - "dependencies": { - "@amplitude/analytics-client-common": "^2.0.8", - "@amplitude/analytics-core": "^2.1.1", - "@amplitude/analytics-types": "^2.3.1", - "@amplitude/plugin-page-view-tracking-browser": "^2.0.15", - "@amplitude/plugin-web-attribution-browser": "^2.0.15", - "tslib": "^2.4.1" - } - }, - "node_modules/@amplitude/analytics-browser/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "node_modules/@amplitude/analytics-client-common": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@amplitude/analytics-client-common/-/analytics-client-common-2.0.8.tgz", - "integrity": "sha512-zKD/txmMFPfSVtT2gdZw+Tf07pZQEcPcB6X39+a+Wh8PjIIADYIeq6zL/2pn/9uwMkVz66sbKABKbq69XxPfCA==", - "dependencies": { - "@amplitude/analytics-connector": "^1.4.8", - "@amplitude/analytics-core": "^2.1.1", - "@amplitude/analytics-types": "^2.3.1", - "tslib": "^2.4.1" - } - }, - "node_modules/@amplitude/analytics-client-common/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "node_modules/@amplitude/analytics-connector": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@amplitude/analytics-connector/-/analytics-connector-1.5.0.tgz", - "integrity": "sha512-T8mOYzB9RRxckzhL0NTHwdge9xuFxXEOplC8B1Y3UX3NHa3BLh7DlBUZlCOwQgMc2nxDfnSweDL5S3bhC+W90g==" - }, - "node_modules/@amplitude/analytics-core": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@amplitude/analytics-core/-/analytics-core-2.1.1.tgz", - "integrity": "sha512-2dHHiOnK7J/0Uk3gqu70JEvCKSgNBAXIUvw6u7bEHCQHBBW3ulpsVRSQomBeruyBBLKjgarwgawGs3yJrjIDkA==", - "dependencies": { - "@amplitude/analytics-types": "^2.3.1", - "tslib": "^2.4.1" - } - }, - "node_modules/@amplitude/analytics-core/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "node_modules/@amplitude/analytics-types": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@amplitude/analytics-types/-/analytics-types-2.3.1.tgz", - "integrity": "sha512-yojBG20qvph0rpCJKb4i/FJa+otqLINEwv//hfzvjnCOcPPyS0YscI8oiRBM0rG7kZIDgaL9a6jPwkqK4ACmcw==" - }, - "node_modules/@amplitude/identify": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/@amplitude/identify/-/identify-1.10.2.tgz", - "integrity": "sha512-ywxeabS8ukMdJWNwx3rG/EBngXFg/4NsPhlyAxbBUcI7HzBXEJUKepiZfkz8K6Y7f0mpc23Qz1aBf48ZJDZmkQ==", - "dev": true, - "dependencies": { - "@amplitude/types": "^1.10.2", - "@amplitude/utils": "^1.10.2", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@amplitude/identify/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/@amplitude/node": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/@amplitude/node/-/node-1.10.2.tgz", - "integrity": "sha512-E3xp8DOpkF5ThjrRlAmSocnrEYsTPpd3Zg4WdBLms0ackQSgQpw6z84+YMcoPerZHJJ/LEqdo4Cg4Z5Za3D+3Q==", - "dev": true, - "dependencies": { - "@amplitude/identify": "^1.10.2", - "@amplitude/types": "^1.10.2", - "@amplitude/utils": "^1.10.2", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@amplitude/node/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/@amplitude/plugin-page-view-tracking-browser": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/@amplitude/plugin-page-view-tracking-browser/-/plugin-page-view-tracking-browser-2.0.15.tgz", - "integrity": "sha512-iVviovZWROodoNs984dAslm3vCkMsl6bhIq5K0Tabt4ffi4ygIqlhdV8vj4Grr8u6mGtjgEzFchCkxdzb9TU1A==", - "dependencies": { - "@amplitude/analytics-client-common": "^2.0.8", - "@amplitude/analytics-types": "^2.3.1", - "tslib": "^2.4.1" - } - }, - "node_modules/@amplitude/plugin-page-view-tracking-browser/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "node_modules/@amplitude/plugin-web-attribution-browser": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/@amplitude/plugin-web-attribution-browser/-/plugin-web-attribution-browser-2.0.15.tgz", - "integrity": "sha512-HSS6j2a40iSIKwug7ICzezXl6ag+cj7YU7cFbYiSF+cmNIVg4jPYgVCbTqq+IivOw+VW07pr0o+jz0ArL/Lyiw==", - "dependencies": { - "@amplitude/analytics-client-common": "^2.0.8", - "@amplitude/analytics-core": "^2.1.1", - "@amplitude/analytics-types": "^2.3.1", - "tslib": "^2.4.1" - } - }, - "node_modules/@amplitude/plugin-web-attribution-browser/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "node_modules/@amplitude/types": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/@amplitude/types/-/types-1.10.2.tgz", - "integrity": "sha512-I8qenRI7uU6wKNb9LiZrAosSHVoNHziXouKY81CrqxH9xhVTEIJFXeuCV0hbtBr0Al/8ejnGjQRx+S2SvU/pPg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/@amplitude/utils": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/@amplitude/utils/-/utils-1.10.2.tgz", - "integrity": "sha512-tVsHXu61jITEtRjB7NugQ5cVDd4QDzne8T3ifmZye7TiJeUfVRvqe44gDtf55A+7VqhDhyEIIXTA1iVcDGqlEw==", - "dev": true, - "dependencies": { - "@amplitude/types": "^1.10.2", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@amplitude/utils/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/@babel/code-frame": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", - "dependencies": { - "@babel/highlight": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.0.tgz", - "integrity": "sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.17.tgz", - "integrity": "sha512-V3CuX1aBywbJvV2yzJScRxeiiw0v2KZZYYE3giywxzFJL13RiyPjaaDwhDnxmgFTTS7FgvM2ijr4QmKNIu0AtQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.12.17", - "@babel/helper-module-transforms": "^7.12.17", - "@babel/helpers": "^7.12.17", - "@babel/parser": "^7.12.17", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.12.17", - "@babel/types": "^7.12.17", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@babel/generator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", - "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", - "dependencies": { - "@babel/types": "^7.16.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", - "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz", - "integrity": "sha512-9KuleLT0e77wFUku6TUkqZzCEymBdtuQQ27MhEKzf9UOOJu3cYj98kyaDAzxpC7lV6DGiZFuC8XqDsq8/Kl6aQ==", - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.0.tgz", - "integrity": "sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg==", - "dependencies": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz", - "integrity": "sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz", - "integrity": "sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "regexpu-core": "^4.7.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.4.tgz", - "integrity": "sha512-OrpPZ97s+aPi6h2n1OXzdhVis1SGSsMU2aMHgLcOKfsp4/v1NWpx3CWT3lBj5eeBq9cDkPkh+YCfdF7O12uNDQ==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz", - "integrity": "sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ==", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", - "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", - "dependencies": { - "@babel/helper-get-function-arity": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", - "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", - "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", - "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", - "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", - "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", - "dependencies": { - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-simple-access": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/helper-validator-identifier": "^7.15.7", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", - "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.0.tgz", - "integrity": "sha512-MLM1IOMe9aQBqMWxcRw8dcb9jlM86NIw7KA0Wri91Xkfied+dE0QuBFSBjMNvqzmS0OSIDsMNC24dBEkPUi7ew==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-wrap-function": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", - "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", - "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", - "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz", - "integrity": "sha512-VVMGzYY3vkWgCJML+qVLvGIam902mJW0FvT7Avj1zEe0Gn7D93aWdLblYARTxEw+6DhZmtzhBM2zv0ekE5zg1g==", - "dependencies": { - "@babel/helper-function-name": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.0.tgz", - "integrity": "sha512-dVRM0StFMdKlkt7cVcGgwD8UMaBfWJHl3A83Yfs8GQ3MO0LHIIIMvK7Fa0RGOGUQ10qikLaX6D7o5htcQWgTMQ==", - "dependencies": { - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", - "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.15.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/node": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/node/-/node-7.12.17.tgz", - "integrity": "sha512-NLe32pSqoweEFvCEHxvJq3DgBx3oBLtgNfdW5936pMEc5TE2P8jVmDiY6JXQccn/4tt9sBLMUuh+tF3VXWyMhA==", - "dev": true, - "dependencies": { - "@babel/register": "^7.12.13", - "commander": "^4.0.1", - "core-js": "^3.2.1", - "lodash": "^4.17.19", - "node-environment-flags": "^1.0.5", - "regenerator-runtime": "^0.13.4", - "v8flags": "^3.1.1" - }, - "bin": { - "babel-node": "bin/babel-node.js" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/node/node_modules/core-js": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.19.0.tgz", - "integrity": "sha512-L1TpFRWXZ76vH1yLM+z6KssLZrP8Z6GxxW4auoCj+XiViOzNPJCAuTIkn03BGdFe6Z5clX5t64wRIRypsZQrUg==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/@babel/parser": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.0.tgz", - "integrity": "sha512-TEHWXf0xxpi9wKVyBCmRcSSDjbJ/cl6LUdlbYUHEaNQUJGhreJbZrXT6sR4+fZLxVUJqNRB4KyOvjuy/D9009A==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.0.tgz", - "integrity": "sha512-djyecbGMEh4rOb/Tc1M5bUW2Ih1IZRa9PoubnPOCzM+DRE89uGUHR1Y+3aDdTMW4drjGRZ2ol8dt1JUFg6hJLQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz", - "integrity": "sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz", - "integrity": "sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.0.tgz", - "integrity": "sha512-nyYmIo7ZqKsY6P4lnVmBlxp9B3a96CscbLotlsNuktMHahkDwoPYEjXrZHU0Tj844Z9f1IthVxQln57mhkcExw==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead.", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.16.0", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.13.tgz", - "integrity": "sha512-8SCJ0Ddrpwv4T7Gwb33EmW1V9PY5lggTO+A8WjyIwxrSHDUyBw4MtF96ifn1n8H806YlxbVCoKXbbmzD6RD+cA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.0.tgz", - "integrity": "sha512-mAy3sdcY9sKAkf3lQbDiv3olOfiLqI51c9DR9b19uMoR2Z6r5pmGl7dfNFqEvqOyqbf1ta4lknK4gc5PJn3mfA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-static-block instead.", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.12.13.tgz", - "integrity": "sha512-x2aOr5w4ARJoYHFKoG2iEUL/Xe99JAJXjAasHijXp3/KgaetJXGE62SmHgsW3Tia/XUT5AxF2YC0F+JyhPY/0Q==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-syntax-decorators": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.0.tgz", - "integrity": "sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-dynamic-import instead.", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-default-from": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.12.13.tgz", - "integrity": "sha512-idIsBT+DGXdOHL82U+8bwX4goHm/z10g8sGGrQroh+HCRcm7mDv/luaGdWJQMTuCX2FsdXS7X0Nyyzp4znAPJA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-syntax-export-default-from": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz", - "integrity": "sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead.", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.0.tgz", - "integrity": "sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-json-strings instead.", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.0.tgz", - "integrity": "sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead.", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.13.tgz", - "integrity": "sha512-Qoxpy+OxhDBI5kRqliJFAl4uWXk3Bn24WeFstPH0iLymFehSAUR8MHpqU7njyXv/qbo7oN6yTy5bfCmXdKpo1Q==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.0.tgz", - "integrity": "sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.0.tgz", - "integrity": "sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", - "dependencies": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.0.tgz", - "integrity": "sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead.", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.17.tgz", - "integrity": "sha512-TvxwI80pWftrGPKHNfkvX/HnoeSTR7gC4ezWnAL39PuktYUe6r8kEpOLTYnkBTsaoeazXm2jHJ22EQ81sdgfcA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.0.tgz", - "integrity": "sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.0.tgz", - "integrity": "sha512-3jQUr/HBbMVZmi72LpjQwlZ55i1queL8KcDTQEkAHihttJnAPrcvG9ZNXIfsd2ugpizZo595egYV6xy+pv4Ofw==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-create-class-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.0.tgz", - "integrity": "sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead.", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.16.0.tgz", - "integrity": "sha512-nxnnngZClvlY13nHJAIDow0S7Qzhq64fQ/NlqS+VER3kjW/4F0jLhXjeL8jcwSwz6Ca3rotT5NJD2T9I7lcv7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-default-from": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.16.0.tgz", - "integrity": "sha512-xllLOdBj77mFSw8s02I+2SSQGHOftbWTlGmagheuNk/gjQsk7IrYsR/EosXVAVpgIUFffLckB/iPRioQYLHSrQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-flow": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.0.tgz", - "integrity": "sha512-dH91yCo0RyqfzWgoM5Ji9ir8fQ+uFbt9KHM3d2x4jZOuHS6wNA+CRmRUP/BWCsHG2bjc7A2Way6AvH1eQk0wig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.0.tgz", - "integrity": "sha512-8zv2+xiPHwly31RK4RmnEYY5zziuF3O7W2kIDW+07ewWDh6Oi0dRq8kwvulRkFgt6DB97RlKs5c1y068iPlCUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz", - "integrity": "sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.0.tgz", - "integrity": "sha512-PbIr7G9kR8tdH6g8Wouir5uVjklETk91GMVSUq+VaOgiinbCkBP6Q7NN/suM/QutZkMJMvcyAriogcYAdhg8Gw==", - "dependencies": { - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.0.tgz", - "integrity": "sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz", - "integrity": "sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz", - "integrity": "sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz", - "integrity": "sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz", - "integrity": "sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.0.tgz", - "integrity": "sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.0.tgz", - "integrity": "sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.0.tgz", - "integrity": "sha512-OwYEvzFI38hXklsrbNivzpO3fh87skzx8Pnqi4LoSYeav0xHlueSoCJrSgTPfnbyzopo5b3YVAJkFIcUpK2wsw==", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.0.tgz", - "integrity": "sha512-vs/F5roOaO/+WxKfp9PkvLsAyj0G+Q0zbFimHm9X2KDgabN2XmNFoAafmeGEYspUlIF9+MvVmyek9UyHiqeG/w==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-flow": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz", - "integrity": "sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz", - "integrity": "sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg==", - "dependencies": { - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz", - "integrity": "sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.0.tgz", - "integrity": "sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz", - "integrity": "sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw==", - "dependencies": { - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz", - "integrity": "sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ==", - "dependencies": { - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-simple-access": "^7.16.0", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.0.tgz", - "integrity": "sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg==", - "dependencies": { - "@babel/helper-hoist-variables": "^7.16.0", - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-identifier": "^7.15.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.0.tgz", - "integrity": "sha512-nx4f6no57himWiHhxDM5pjwhae5vLpTK2zCnDH8+wNLJy0TVER/LJRHl2bkt6w9Aad2sPD5iNNoUpY3X9sTGDg==", - "dependencies": { - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.0.tgz", - "integrity": "sha512-LogN88uO+7EhxWc8WZuQ8vxdSyVGxhkh8WTC3tzlT8LccMuQdA81e9SGV6zY7kY2LjDhhDOFdQVxdGwPyBCnvg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.0.tgz", - "integrity": "sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz", - "integrity": "sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.0.tgz", - "integrity": "sha512-XgnQEm1CevKROPx+udOi/8f8TiGhrUWiHiaUCIp47tE0tpFDjzXNTZc9E5CmCwxNjXTWEVqvRfWZYOTFvMa/ZQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.0.tgz", - "integrity": "sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.16.0.tgz", - "integrity": "sha512-OgtklS+p9t1X37eWA4XdvvbZG/3gqzX569gqmo3q4/Ui6qjfTQmOs5UTSrfdD9nVByHhX6Gbm/Pyc4KbwUXGWA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.0.tgz", - "integrity": "sha512-FJFdJAqaCpndL+pIf0aeD/qlQwT7QXOvR6Cc8JPvNhKJBi2zc/DPc4g05Y3fbD/0iWAMQFGij4+Xw+4L/BMpTg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.0.tgz", - "integrity": "sha512-rqDgIbukZ44pqq7NIRPGPGNklshPkvlmvqjdx3OZcGPk4zGIenYkxDTvl3LsSL8gqcc3ZzGmXPE6hR/u/voNOw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-jsx": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.0.tgz", - "integrity": "sha512-qq65iSqBRq0Hr3wq57YG2AmW0H6wgTnIzpffTphrUWUgLCOK+zf1f7G0vuOiXrp7dU1qq+fQBoqZ3wCDAkhFzw==", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.0.tgz", - "integrity": "sha512-NC/Bj2MG+t8Ef5Pdpo34Ay74X4Rt804h5y81PwOpfPtmAK3i6CizmQqwyBQzIepz1Yt8wNr2Z2L7Lu3qBMfZMA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz", - "integrity": "sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg==", - "dependencies": { - "regenerator-transform": "^0.14.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.0.tgz", - "integrity": "sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.17.tgz", - "integrity": "sha512-s+kIJxnaTj+E9Q3XxQZ5jOo+xcogSe3V78/iFQ5RmoT0jROdpcdxhfGdq/VLqW1hFSzw6VjqN8aQqTaAMixWsw==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13", - "semver": "^5.5.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.0.tgz", - "integrity": "sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz", - "integrity": "sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.0.tgz", - "integrity": "sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz", - "integrity": "sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.0.tgz", - "integrity": "sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.0.tgz", - "integrity": "sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.0.tgz", - "integrity": "sha512-jHLK4LxhHjvCeZDWyA9c+P9XH1sOxRd1RO9xMtDVRAOND/PczPqizEtVdx4TQF/wyPaewqpT+tgQFYMnN/P94A==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.17.tgz", - "integrity": "sha512-9PMijx8zFbCwTHrd2P4PJR5nWGH3zWebx2OcpTjqQrHhCiL2ssSR2Sc9ko2BsI2VmVBfoaQmPrlMTCui4LmXQg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.12.13", - "@babel/helper-compilation-targets": "^7.12.17", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-proposal-async-generator-functions": "^7.12.13", - "@babel/plugin-proposal-class-properties": "^7.12.13", - "@babel/plugin-proposal-dynamic-import": "^7.12.17", - "@babel/plugin-proposal-export-namespace-from": "^7.12.13", - "@babel/plugin-proposal-json-strings": "^7.12.13", - "@babel/plugin-proposal-logical-assignment-operators": "^7.12.13", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.13", - "@babel/plugin-proposal-numeric-separator": "^7.12.13", - "@babel/plugin-proposal-object-rest-spread": "^7.12.13", - "@babel/plugin-proposal-optional-catch-binding": "^7.12.13", - "@babel/plugin-proposal-optional-chaining": "^7.12.17", - "@babel/plugin-proposal-private-methods": "^7.12.13", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.0", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.12.13", - "@babel/plugin-transform-arrow-functions": "^7.12.13", - "@babel/plugin-transform-async-to-generator": "^7.12.13", - "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.12.13", - "@babel/plugin-transform-classes": "^7.12.13", - "@babel/plugin-transform-computed-properties": "^7.12.13", - "@babel/plugin-transform-destructuring": "^7.12.13", - "@babel/plugin-transform-dotall-regex": "^7.12.13", - "@babel/plugin-transform-duplicate-keys": "^7.12.13", - "@babel/plugin-transform-exponentiation-operator": "^7.12.13", - "@babel/plugin-transform-for-of": "^7.12.13", - "@babel/plugin-transform-function-name": "^7.12.13", - "@babel/plugin-transform-literals": "^7.12.13", - "@babel/plugin-transform-member-expression-literals": "^7.12.13", - "@babel/plugin-transform-modules-amd": "^7.12.13", - "@babel/plugin-transform-modules-commonjs": "^7.12.13", - "@babel/plugin-transform-modules-systemjs": "^7.12.13", - "@babel/plugin-transform-modules-umd": "^7.12.13", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", - "@babel/plugin-transform-new-target": "^7.12.13", - "@babel/plugin-transform-object-super": "^7.12.13", - "@babel/plugin-transform-parameters": "^7.12.13", - "@babel/plugin-transform-property-literals": "^7.12.13", - "@babel/plugin-transform-regenerator": "^7.12.13", - "@babel/plugin-transform-reserved-words": "^7.12.13", - "@babel/plugin-transform-shorthand-properties": "^7.12.13", - "@babel/plugin-transform-spread": "^7.12.13", - "@babel/plugin-transform-sticky-regex": "^7.12.13", - "@babel/plugin-transform-template-literals": "^7.12.13", - "@babel/plugin-transform-typeof-symbol": "^7.12.13", - "@babel/plugin-transform-unicode-escapes": "^7.12.13", - "@babel/plugin-transform-unicode-regex": "^7.12.13", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.12.17", - "core-js-compat": "^3.8.0", - "semver": "^5.5.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@babel/preset-flow": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.12.13.tgz", - "integrity": "sha512-gcEjiwcGHa3bo9idURBp5fmJPcyFPOszPQjztXrOjUE2wWVqc6fIVJPgWPIQksaQ5XZ2HWiRsf2s1fRGVjUtVw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-transform-flow-strip-types": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.12.13.tgz", - "integrity": "sha512-TYM0V9z6Abb6dj1K7i5NrEhA13oS5ujUYQYDfqIBXYHOc2c2VkFgc+q9kyssIyUfy4/hEwqrgSlJ/Qgv8zJLsA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-transform-react-display-name": "^7.12.13", - "@babel/plugin-transform-react-jsx": "^7.12.13", - "@babel/plugin-transform-react-jsx-development": "^7.12.12", - "@babel/plugin-transform-react-pure-annotations": "^7.12.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/register": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.12.13.tgz", - "integrity": "sha512-fnCeRXj970S9seY+973oPALQg61TRvAaW0nRDe1f4ytKqM3fZgsNXewTZWmqZedg74LFIRpg/11dsrPZZvYs2g==", - "dev": true, - "dependencies": { - "find-cache-dir": "^2.0.0", - "lodash": "^4.17.19", - "make-dir": "^2.1.0", - "pirates": "^4.0.0", - "source-map-support": "^0.5.16" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.12.18", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.18.tgz", - "integrity": "sha512-BogPQ7ciE6SYAUPtlm9tWbgI9+2AgqSam6QivMgXgAT+fKbgppaj4ZX15MHeLC1PVF5sNk70huBu20XxWOs8Cg==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.12.18", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.12.18.tgz", - "integrity": "sha512-ngR7yhNTjDxxe1VYmhqQqqXZWujGb6g0IoA4qeG6MxNGRnIw2Zo8ImY8HfaQ7l3T6GklWhdNfyhWk0C0iocdVA==", - "dev": true, - "dependencies": { - "core-js-pure": "^3.0.0", - "regenerator-runtime": "^0.13.4" - } - }, - "node_modules/@babel/template": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", - "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.0.tgz", - "integrity": "sha512-qQ84jIs1aRQxaGaxSysII9TuDaguZ5yVrEuC0BN2vcPlalwfLovVmCjbFDPECPXcYM/wLvNFfp8uDOliLxIoUQ==", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-hoist-variables": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", - "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.15.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@cardano-foundation/ledgerjs-hw-app-cardano": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@cardano-foundation/ledgerjs-hw-app-cardano/-/ledgerjs-hw-app-cardano-6.0.0.tgz", - "integrity": "sha512-aiWlERF5sXMzygE62YH9AXrVePu5ZG+QKGv/ZhvYec35vUhDFJK8qPiLzXmTy6MdoDKSqbYVRPd6jY3KKs5pOg==", - "dependencies": { - "@ledgerhq/hw-transport": "^6.27.10", - "base-x": "^3.0.5", - "bech32": "^1.1.4", - "int64-buffer": "^1.0.1" - } - }, - "node_modules/@cardano-foundation/ledgerjs-hw-app-cardano/node_modules/@ledgerhq/devices": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-8.0.0.tgz", - "integrity": "sha512-gSnRT0KPca+LIpaC6D/WZQjOAlSI5uCvK1dmxXtKhODLAj735rX5Z3SnGnLUavRCHNbUi44FzgvloF5BKTkh7A==", - "dependencies": { - "@ledgerhq/errors": "^6.12.3", - "@ledgerhq/logs": "^6.10.1", - "rxjs": "6", - "semver": "^7.3.5" - } - }, - "node_modules/@cardano-foundation/ledgerjs-hw-app-cardano/node_modules/@ledgerhq/errors": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-6.12.3.tgz", - "integrity": "sha512-djiMSgB/7hnK3aLR/c5ZMMivxjcI7o2+y3VKcsZZpydPoVf9+FXqeJPRfOwmJ0JxbQ//LinUfWpIfHew8LkaVw==" - }, - "node_modules/@cardano-foundation/ledgerjs-hw-app-cardano/node_modules/@ledgerhq/hw-transport": { - "version": "6.28.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-6.28.1.tgz", - "integrity": "sha512-RaZe+abn0zBIz82cE9tp7Y7aZkHWWbEaE2yJpfxT8AhFz3fx+BU0kLYzuRN9fmA7vKueNJ1MTVUCY+Ex9/CHSQ==", - "dependencies": { - "@ledgerhq/devices": "^8.0.0", - "@ledgerhq/errors": "^6.12.3", - "events": "^3.3.0" - } - }, - "node_modules/@cardano-foundation/ledgerjs-hw-app-cardano/node_modules/@ledgerhq/logs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-6.10.1.tgz", - "integrity": "sha512-z+ILK8Q3y+nfUl43ctCPuR4Y2bIxk/ooCQFwZxhtci1EhAtMDzMAx2W25qx8G1PPL9UUOdnUax19+F0OjXoj4w==" - }, - "node_modules/@cardano-foundation/ledgerjs-hw-app-cardano/node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, - "node_modules/@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dev": true, - "dependencies": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - }, - "bin": { - "watch": "cli.js" - }, - "engines": { - "node": ">=0.1.95" - } - }, - "node_modules/@date-io/core": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/@date-io/core/-/core-2.11.0.tgz", - "integrity": "sha512-DvPBnNoeuLaoSJZaxgpu54qzRhRKjSYVyQjhznTFrllKuDpm0sDFjHo6lvNLCM/cfMx2gb2PM2zY2kc9C8nmuw==" - }, - "node_modules/@date-io/date-fns": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/@date-io/date-fns/-/date-fns-2.11.0.tgz", - "integrity": "sha512-mPQ71plBeFrArvBSHtjWMHXA89IUbZ6kuo2dsjlRC/1uNOybo91spIb+wTu03NxKTl8ut07s0jJ9svF71afpRg==", - "dependencies": { - "@date-io/core": "^2.11.0" - }, - "peerDependencies": { - "date-fns": "^2.0.0" - }, - "peerDependenciesMeta": { - "date-fns": { - "optional": true - } - } - }, - "node_modules/@date-io/dayjs": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/@date-io/dayjs/-/dayjs-2.11.0.tgz", - "integrity": "sha512-w67vRK56NZJIKhJM/CrNbfnIcuMvR3ApfxzNZiCZ5w29sxgBDeKuX4M+P7A9r5HXOMGcsOcpgaoTDINNGkdpGQ==", - "dependencies": { - "@date-io/core": "^2.11.0" - }, - "peerDependencies": { - "dayjs": "^1.8.17" - }, - "peerDependenciesMeta": { - "dayjs": { - "optional": true - } - } - }, - "node_modules/@date-io/luxon": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/@date-io/luxon/-/luxon-2.11.1.tgz", - "integrity": "sha512-JUXo01kdPQxLORxqdENrgdUhooKgDUggsNRSdi2BcUhASIY2KGwwWXu8ikVHHGkw+DUF4FOEKGfkQd0RHSvX6g==", - "dependencies": { - "@date-io/core": "^2.11.0" - }, - "peerDependencies": { - "luxon": "^1.21.3 || ^2.x" - }, - "peerDependenciesMeta": { - "luxon": { - "optional": true - } - } - }, - "node_modules/@date-io/moment": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/@date-io/moment/-/moment-2.11.0.tgz", - "integrity": "sha512-QSL+83qezQ9Ty0dtFgAkk6eC0GMl/lgYfDajeVUDB3zVA2A038hzczRLBg29ifnBGhQMPABxuOafgWwhDjlarg==", - "dependencies": { - "@date-io/core": "^2.11.0" - }, - "peerDependencies": { - "moment": "^2.24.0" - }, - "peerDependenciesMeta": { - "moment": { - "optional": true - } - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz", - "integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@emotion/babel-plugin": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.3.0.tgz", - "integrity": "sha512-UZKwBV2rADuhRp+ZOGgNWg2eYgbzKzQXfQPtJbu/PLy8onurxlNCLvxMQEvlr1/GudguPI5IU9qIY1+2z1M5bA==", - "dependencies": { - "@babel/helper-module-imports": "^7.12.13", - "@babel/plugin-syntax-jsx": "^7.12.13", - "@babel/runtime": "^7.13.10", - "@emotion/hash": "^0.8.0", - "@emotion/memoize": "^0.7.5", - "@emotion/serialize": "^1.0.2", - "babel-plugin-macros": "^2.6.1", - "convert-source-map": "^1.5.0", - "escape-string-regexp": "^4.0.0", - "find-root": "^1.1.0", - "source-map": "^0.5.7", - "stylis": "^4.0.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@emotion/babel-plugin/node_modules/@babel/runtime": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", - "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@emotion/cache": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.5.0.tgz", - "integrity": "sha512-mAZ5QRpLriBtaj/k2qyrXwck6yeoz1V5lMt/jfj6igWU35yYlNKs2LziXVgvH81gnJZ+9QQNGelSsnuoAy6uIw==", - "dependencies": { - "@emotion/memoize": "^0.7.4", - "@emotion/sheet": "^1.0.3", - "@emotion/utils": "^1.0.0", - "@emotion/weak-memoize": "^0.2.5", - "stylis": "^4.0.10" - } - }, - "node_modules/@emotion/hash": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", - "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" - }, - "node_modules/@emotion/is-prop-valid": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.1.0.tgz", - "integrity": "sha512-9RkilvXAufQHsSsjQ3PIzSns+pxuX4EW8EbGeSPjZMHuMx6z/MOzb9LpqNieQX4F3mre3NWS2+X3JNRHTQztUQ==", - "dependencies": { - "@emotion/memoize": "^0.7.4" - } - }, - "node_modules/@emotion/memoize": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz", - "integrity": "sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==" - }, - "node_modules/@emotion/react": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.5.0.tgz", - "integrity": "sha512-MYq/bzp3rYbee4EMBORCn4duPQfgpiEB5XzrZEBnUZAL80Qdfr7CEv/T80jwaTl/dnZmt9SnTa8NkTrwFNpLlw==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@emotion/cache": "^11.5.0", - "@emotion/serialize": "^1.0.2", - "@emotion/sheet": "^1.0.3", - "@emotion/utils": "^1.0.0", - "@emotion/weak-memoize": "^0.2.5", - "hoist-non-react-statics": "^3.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "react": ">=16.8.0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@types/react": { - "optional": true - } - } - }, - "node_modules/@emotion/react/node_modules/@babel/runtime": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", - "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@emotion/serialize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.0.2.tgz", - "integrity": "sha512-95MgNJ9+/ajxU7QIAruiOAdYNjxZX7G2mhgrtDWswA21VviYIRP1R5QilZ/bDY42xiKsaktP4egJb3QdYQZi1A==", - "dependencies": { - "@emotion/hash": "^0.8.0", - "@emotion/memoize": "^0.7.4", - "@emotion/unitless": "^0.7.5", - "@emotion/utils": "^1.0.0", - "csstype": "^3.0.2" - } - }, - "node_modules/@emotion/sheet": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.0.3.tgz", - "integrity": "sha512-YoX5GyQ4db7LpbmXHMuc8kebtBGP6nZfRC5Z13OKJMixBEwdZrJ914D6yJv/P+ZH/YY3F5s89NYX2hlZAf3SRQ==" - }, - "node_modules/@emotion/styled": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.3.0.tgz", - "integrity": "sha512-fUoLcN3BfMiLlRhJ8CuPUMEyKkLEoM+n+UyAbnqGEsCd5IzKQ7VQFLtzpJOaCD2/VR2+1hXQTnSZXVJeiTNltA==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@emotion/babel-plugin": "^11.3.0", - "@emotion/is-prop-valid": "^1.1.0", - "@emotion/serialize": "^1.0.2", - "@emotion/utils": "^1.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "@emotion/react": "^11.0.0-rc.0", - "react": ">=16.8.0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@types/react": { - "optional": true - } - } - }, - "node_modules/@emotion/styled/node_modules/@babel/runtime": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", - "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@emotion/unitless": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", - "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" - }, - "node_modules/@emotion/utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.0.0.tgz", - "integrity": "sha512-mQC2b3XLDs6QCW+pDQDiyO/EdGZYOygE8s5N5rrzjSI4M3IejPE/JPndCBwRT9z982aqQNi6beWs1UeayrQxxA==" - }, - "node_modules/@emotion/weak-memoize": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz", - "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==" - }, - "node_modules/@emurgo/cardano-message-signing-browser": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@emurgo/cardano-message-signing-browser/-/cardano-message-signing-browser-1.0.1.tgz", - "integrity": "sha512-yC4Ymq44WR0bXO1wzxCoyc2W/RD1KSAla0oYhin7IYoVkp2raGp8wt7QNF4pDdNnTcejn5fyPyYY9dL4666H1w==" - }, - "node_modules/@emurgo/cardano-message-signing-nodejs": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@emurgo/cardano-message-signing-nodejs/-/cardano-message-signing-nodejs-1.0.1.tgz", - "integrity": "sha512-PoKh1tQnJX18f8iEr8Jk1KXxKCn9eqaSslMI1pyOJvYRJhQVDLCh0+9YReufjp0oFJIY1ShcrR+4/WnECVZUKQ==", - "dev": true - }, - "node_modules/@emurgo/cardano-serialization-lib-browser": { - "version": "12.0.0-alpha.26", - "resolved": "https://registry.npmjs.org/@emurgo/cardano-serialization-lib-browser/-/cardano-serialization-lib-browser-12.0.0-alpha.26.tgz", - "integrity": "sha512-zP3DxaPHuJY0mOFX+3uYcu0F/ItEmgfoMJIWiT/86DeRlg7D3YLD+TxB8yvrGgADxtNKe2jJ7Y1Twrpd09GKNw==" - }, - "node_modules/@emurgo/cardano-serialization-lib-nodejs": { - "version": "12.0.0-alpha.26", - "resolved": "https://registry.npmjs.org/@emurgo/cardano-serialization-lib-nodejs/-/cardano-serialization-lib-nodejs-12.0.0-alpha.26.tgz", - "integrity": "sha512-QheEm7wVZ4Tc0gOIYMUyf2VUb8a1ZjnDy4zNcGSRmuO1zlbJfjLDGv+uXG+pKqZN4fzMAzOtUwolTtbxzTzYbA==", - "dev": true - }, - "node_modules/@emurgo/cip14-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@emurgo/cip14-js/-/cip14-js-2.0.0.tgz", - "integrity": "sha512-EvjgTs4NCqH1j0wxXqWCj31P7NmTzl3aR+9am0OLSsf3NA9GsdKH5QNyXJrvSZILM4yWzlZNum3y8S5PfdM1aA==", - "dependencies": { - "bech32": "2.0.0", - "blake2b": "2.1.3" - } - }, - "node_modules/@emurgo/cip14-js/node_modules/blake2b": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/blake2b/-/blake2b-2.1.3.tgz", - "integrity": "sha512-pkDss4xFVbMb4270aCyGD3qLv92314Et+FsKzilCLxDz5DuZ2/1g3w4nmBbu6nKApPspnjG7JcwTjGZnduB1yg==", - "dependencies": { - "blake2b-wasm": "^1.1.0", - "nanoassert": "^1.0.0" - } - }, - "node_modules/@emurgo/cip14-js/node_modules/blake2b-wasm": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/blake2b-wasm/-/blake2b-wasm-1.1.7.tgz", - "integrity": "sha512-oFIHvXhlz/DUgF0kq5B1CqxIDjIJwh9iDeUUGQUcvgiGz7Wdw03McEO7CfLBy7QKGdsydcMCgO9jFNBAFCtFcA==", - "dependencies": { - "nanoassert": "^1.0.0" - } - }, - "node_modules/@emurgo/cip14-js/node_modules/nanoassert": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-1.1.0.tgz", - "integrity": "sha512-C40jQ3NzfkP53NsO8kEOFd79p4b9kDXQMwgiY1z8ZwrDZgUyom0AHwGegF4Dm99L+YoYhuaB0ceerUcXmqr1rQ==" - }, - "node_modules/@emurgo/cip4-js": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@emurgo/cip4-js/-/cip4-js-1.0.5.tgz", - "integrity": "sha512-vugHV1ca5zcUpx6Hzdt85KMvUbYIBAn/zwdWuSQ/1soCyEZnrOZJShi0hYRJoUghOpQ8TjGOCEln7B+Jgf3IJg==", - "dependencies": { - "blake2b": "2.1.3", - "buffer-crc32": "0.2.13", - "fnv-plus": "1.3.1" - } - }, - "node_modules/@emurgo/cip4-js/node_modules/blake2b": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/blake2b/-/blake2b-2.1.3.tgz", - "integrity": "sha512-pkDss4xFVbMb4270aCyGD3qLv92314Et+FsKzilCLxDz5DuZ2/1g3w4nmBbu6nKApPspnjG7JcwTjGZnduB1yg==", - "dependencies": { - "blake2b-wasm": "^1.1.0", - "nanoassert": "^1.0.0" - } - }, - "node_modules/@emurgo/cip4-js/node_modules/blake2b-wasm": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/blake2b-wasm/-/blake2b-wasm-1.1.7.tgz", - "integrity": "sha512-oFIHvXhlz/DUgF0kq5B1CqxIDjIJwh9iDeUUGQUcvgiGz7Wdw03McEO7CfLBy7QKGdsydcMCgO9jFNBAFCtFcA==", - "dependencies": { - "nanoassert": "^1.0.0" - } - }, - "node_modules/@emurgo/cip4-js/node_modules/nanoassert": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-1.1.0.tgz", - "integrity": "sha512-C40jQ3NzfkP53NsO8kEOFd79p4b9kDXQMwgiY1z8ZwrDZgUyom0AHwGegF4Dm99L+YoYhuaB0ceerUcXmqr1rQ==" - }, - "node_modules/@emurgo/cross-csl-browser": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@emurgo/cross-csl-browser/-/cross-csl-browser-4.4.0.tgz", - "integrity": "sha512-BVtrK9sOjSEuSLl7Xb8tvKf/IdTowAmi0FN2O2Juvzg7WEhsEQY3bUoiZY7eVETOLLBHjl0kDfaRDQOUc3ow9g==", - "dependencies": { - "@emurgo/cardano-serialization-lib-browser": "12.0.0-alpha.26", - "@emurgo/cross-csl-core": "4.4.0" - } - }, - "node_modules/@emurgo/cross-csl-core": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@emurgo/cross-csl-core/-/cross-csl-core-4.4.0.tgz", - "integrity": "sha512-R12cAHmkjeLb7g0+Og5zoi8is7jh5uONICaKLCvebqV6kHhCShSSHSdCbvqmCH3H8szPodkOkLp5qXNmxqfNxA==", - "dependencies": { - "@cardano-foundation/ledgerjs-hw-app-cardano": "^5.0.0", - "@types/mocha": "^9.1.1", - "axios": "^0.24.0", - "bech32": "^2.0.0", - "bignumber.js": "^9.0.1", - "blake2b": "^2.1.4", - "hash-wasm": "^4.9.0", - "mocha": "^10.0.0" - } - }, - "node_modules/@emurgo/cross-csl-core/node_modules/@cardano-foundation/ledgerjs-hw-app-cardano": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@cardano-foundation/ledgerjs-hw-app-cardano/-/ledgerjs-hw-app-cardano-5.1.0.tgz", - "integrity": "sha512-ucuz/XbS/0ZD0Bal/GI/kiTm9jDIl8J+A7ypEqcAcBDGicFsyWmtPotOTwuDovTsiM8+eA/5OGTFX0oRqzxstQ==", - "dependencies": { - "@ledgerhq/hw-transport": "^5.12.0", - "@types/ledgerhq__hw-transport": "^4.21.3", - "base-x": "^3.0.5", - "bech32": "^1.1.4", - "blake2": "^4.0.2", - "int64-buffer": "^1.0.1" - } - }, - "node_modules/@emurgo/cross-csl-core/node_modules/@cardano-foundation/ledgerjs-hw-app-cardano/node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, - "node_modules/@emurgo/cross-csl-core/node_modules/axios": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", - "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", - "dependencies": { - "follow-redirects": "^1.14.4" - } - }, - "node_modules/@emurgo/cross-csl-nodejs": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@emurgo/cross-csl-nodejs/-/cross-csl-nodejs-4.4.0.tgz", - "integrity": "sha512-yDtNFCYobYL7hILvico3Q85DIvDhc5H24UjDd8gdYApu6YGyR5C+Roz34VALxHlR8y2RA9cUM2GUt+a8Ev/Kxg==", - "dev": true, - "dependencies": { - "@emurgo/cardano-serialization-lib-nodejs": "12.0.0-alpha.26", - "@emurgo/cross-csl-core": "4.4.0" - } - }, - "node_modules/@emurgo/yoroi-eutxo-txs": { - "version": "0.0.2-alpha.8", - "resolved": "https://registry.npmjs.org/@emurgo/yoroi-eutxo-txs/-/yoroi-eutxo-txs-0.0.2-alpha.8.tgz", - "integrity": "sha512-H9VdDrqLMsGSFRUyfNXEwBmabn+06Z27Fq1lcH7LiIy5HquiKoqZ7jbp4J5fQnnnYNkHchcZnSFP4wX2KGLApA==", - "dependencies": { - "@cardano-foundation/ledgerjs-hw-app-cardano": "^5.0.0", - "@emurgo/cross-csl-core": "4.4.0", - "@ledgerhq/hw-transport-node-hid": "^6.27.2", - "axios": "^0.27.2", - "bech32": "^2.0.0", - "bignumber.js": "^9.1.0", - "bip39": "^3.0.4", - "hash-wasm": "^4.9.0" - } - }, - "node_modules/@emurgo/yoroi-eutxo-txs/node_modules/@cardano-foundation/ledgerjs-hw-app-cardano": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@cardano-foundation/ledgerjs-hw-app-cardano/-/ledgerjs-hw-app-cardano-5.1.0.tgz", - "integrity": "sha512-ucuz/XbS/0ZD0Bal/GI/kiTm9jDIl8J+A7ypEqcAcBDGicFsyWmtPotOTwuDovTsiM8+eA/5OGTFX0oRqzxstQ==", - "dependencies": { - "@ledgerhq/hw-transport": "^5.12.0", - "@types/ledgerhq__hw-transport": "^4.21.3", - "base-x": "^3.0.5", - "bech32": "^1.1.4", - "blake2": "^4.0.2", - "int64-buffer": "^1.0.1" - } - }, - "node_modules/@emurgo/yoroi-eutxo-txs/node_modules/@cardano-foundation/ledgerjs-hw-app-cardano/node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, - "node_modules/@emurgo/yoroi-eutxo-txs/node_modules/axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "dependencies": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" - } - }, - "node_modules/@emurgo/yoroi-lib": { - "version": "0.15.4", - "resolved": "https://registry.npmjs.org/@emurgo/yoroi-lib/-/yoroi-lib-0.15.4.tgz", - "integrity": "sha512-vHXdRknq0UYzPaIlhxaP/7X8LXNRRZBnyqvMMM8yuIqxNbe8lobxPDbM2ki/BHsOdR1w1Xk8Z3ZTC2RxM69U8w==", - "dependencies": { - "@cardano-foundation/ledgerjs-hw-app-cardano": "^6.0.0", - "@emurgo/cross-csl-core": "4.4.0", - "@noble/hashes": "^1.3.2", - "axios": "^0.24.0", - "bech32": "^2.0.0", - "bignumber.js": "^9.0.1", - "easy-crc": "1.1.0" - } - }, - "node_modules/@emurgo/yoroi-lib/node_modules/axios": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", - "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", - "dependencies": { - "follow-redirects": "^1.14.4" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", - "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "lodash": "^4.17.20", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "dependencies": { - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/@formatjs/intl-unified-numberformat": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/@formatjs/intl-unified-numberformat/-/intl-unified-numberformat-3.3.7.tgz", - "integrity": "sha512-KnWgLRHzCAgT9eyt3OS34RHoyD7dPDYhRcuKn+/6Kv2knDF8Im43J6vlSW6Hm1w63fNq3ZIT1cFk7RuVO3Psag==", - "deprecated": "We have renamed the package to @formatjs/intl-numberformat", - "dev": true, - "dependencies": { - "@formatjs/intl-utils": "^2.3.0" - } - }, - "node_modules/@formatjs/intl-utils": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@formatjs/intl-utils/-/intl-utils-2.3.0.tgz", - "integrity": "sha512-KWk80UPIzPmUg+P0rKh6TqspRw0G6eux1PuJr+zz47ftMaZ9QDwbGzHZbtzWkl5hgayM/qrKRutllRC7D/vVXQ==", - "deprecated": "the package is rather renamed to @formatjs/ecma-abstract with some changes in functionality (primarily selectUnit is removed and we don't plan to make any further changes to this package", - "dev": true - }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/console/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/console/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", - "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/reporters": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^26.6.2", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-resolve-dependencies": "^26.6.3", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "jest-watcher": "^26.6.2", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/core/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/core/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/core/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/environment": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", - "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/fake-timers": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", - "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@sinonjs/fake-timers": "^6.0.1", - "@types/node": "*", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/globals": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", - "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", - "dev": true, - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/types": "^26.6.2", - "expect": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/reporters": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", - "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^7.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "optionalDependencies": { - "node-notifier": "^8.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/reporters/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/@jest/reporters/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@jest/reporters/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/reporters/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/v8-to-istanbul": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", - "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@jest/reporters/node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@jest/source-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", - "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/source-map/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", - "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/transform": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", - "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^26.6.2", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/transform/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/transform/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/transform/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/transform/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/types/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@ledgerhq/devices": { - "version": "5.51.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-5.51.1.tgz", - "integrity": "sha512-4w+P0VkbjzEXC7kv8T1GJ/9AVaP9I6uasMZ/JcdwZBS3qwvKo5A5z9uGhP5c7TvItzcmPb44b5Mw2kT+WjUuAA==", - "dependencies": { - "@ledgerhq/errors": "^5.50.0", - "@ledgerhq/logs": "^5.50.0", - "rxjs": "6", - "semver": "^7.3.5" - } - }, - "node_modules/@ledgerhq/errors": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-5.50.0.tgz", - "integrity": "sha512-gu6aJ/BHuRlpU7kgVpy2vcYk6atjB4iauP2ymF7Gk0ez0Y/6VSMVSJvubeEQN+IV60+OBK0JgeIZG7OiHaw8ow==" - }, - "node_modules/@ledgerhq/hw-transport": { - "version": "5.51.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-5.51.1.tgz", - "integrity": "sha512-6wDYdbWrw9VwHIcoDnqWBaDFyviyjZWv6H9vz9Vyhe4Qd7TIFmbTl/eWs6hZvtZBza9K8y7zD8ChHwRI4s9tSw==", - "dependencies": { - "@ledgerhq/devices": "^5.51.1", - "@ledgerhq/errors": "^5.50.0", - "events": "^3.3.0" - } - }, - "node_modules/@ledgerhq/hw-transport-node-hid": { - "version": "6.27.21", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-6.27.21.tgz", - "integrity": "sha512-8G3Owpa2ex+TkGQSMkKoAbMEGZ7a23g0wZUvVzalQphMqbayebMhuXxue8iPp7F9pulm7uyLxgMYptYyw5i4yQ==", - "dependencies": { - "@ledgerhq/devices": "^8.0.7", - "@ledgerhq/errors": "^6.14.0", - "@ledgerhq/hw-transport": "^6.28.8", - "@ledgerhq/hw-transport-node-hid-noevents": "^6.27.19", - "@ledgerhq/logs": "^6.10.1", - "lodash": "^4.17.21", - "node-hid": "^2.1.2", - "usb": "2.9.0" - } - }, - "node_modules/@ledgerhq/hw-transport-node-hid-noevents": { - "version": "6.27.19", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-6.27.19.tgz", - "integrity": "sha512-zOIB1fBiQH9ZYFzoEpNY4n1lE7bGPgRT+k85fKuLM7cxxm5Sy+TgrdxImvBz0IQUS8EvrtZCm+dVWkb2sH/6OA==", - "dependencies": { - "@ledgerhq/devices": "^8.0.7", - "@ledgerhq/errors": "^6.14.0", - "@ledgerhq/hw-transport": "^6.28.8", - "@ledgerhq/logs": "^6.10.1", - "node-hid": "^2.1.2" - } - }, - "node_modules/@ledgerhq/hw-transport-node-hid-noevents/node_modules/@ledgerhq/devices": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-8.0.7.tgz", - "integrity": "sha512-BbPyET52lXnVs7CxJWrGYqmtGdbGzj+XnfCqLsDnA7QYr1CZREysxmie+Rr6BKpNDBRVesAovXjtaVaZOn+upw==", - "dependencies": { - "@ledgerhq/errors": "^6.14.0", - "@ledgerhq/logs": "^6.10.1", - "rxjs": "6", - "semver": "^7.3.5" - } - }, - "node_modules/@ledgerhq/hw-transport-node-hid-noevents/node_modules/@ledgerhq/errors": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-6.14.0.tgz", - "integrity": "sha512-ZWJw2Ti6Dq1Ott/+qYqJdDWeZm16qI3VNG5rFlb0TQ3UcAyLIQZbnnzzdcVVwVeZiEp66WIpINd/pBdqsHVyOA==" - }, - "node_modules/@ledgerhq/hw-transport-node-hid-noevents/node_modules/@ledgerhq/hw-transport": { - "version": "6.28.8", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-6.28.8.tgz", - "integrity": "sha512-XxQVl4htd018u/M66r0iu5nlHi+J6QfdPsORzDF6N39jaz+tMqItb7tUlXM/isggcuS5lc7GJo7NOuJ8rvHZaQ==", - "dependencies": { - "@ledgerhq/devices": "^8.0.7", - "@ledgerhq/errors": "^6.14.0", - "events": "^3.3.0" - } - }, - "node_modules/@ledgerhq/hw-transport-node-hid-noevents/node_modules/@ledgerhq/logs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-6.10.1.tgz", - "integrity": "sha512-z+ILK8Q3y+nfUl43ctCPuR4Y2bIxk/ooCQFwZxhtci1EhAtMDzMAx2W25qx8G1PPL9UUOdnUax19+F0OjXoj4w==" - }, - "node_modules/@ledgerhq/hw-transport-node-hid/node_modules/@ledgerhq/devices": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-8.0.7.tgz", - "integrity": "sha512-BbPyET52lXnVs7CxJWrGYqmtGdbGzj+XnfCqLsDnA7QYr1CZREysxmie+Rr6BKpNDBRVesAovXjtaVaZOn+upw==", - "dependencies": { - "@ledgerhq/errors": "^6.14.0", - "@ledgerhq/logs": "^6.10.1", - "rxjs": "6", - "semver": "^7.3.5" - } - }, - "node_modules/@ledgerhq/hw-transport-node-hid/node_modules/@ledgerhq/errors": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-6.14.0.tgz", - "integrity": "sha512-ZWJw2Ti6Dq1Ott/+qYqJdDWeZm16qI3VNG5rFlb0TQ3UcAyLIQZbnnzzdcVVwVeZiEp66WIpINd/pBdqsHVyOA==" - }, - "node_modules/@ledgerhq/hw-transport-node-hid/node_modules/@ledgerhq/hw-transport": { - "version": "6.28.8", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-6.28.8.tgz", - "integrity": "sha512-XxQVl4htd018u/M66r0iu5nlHi+J6QfdPsORzDF6N39jaz+tMqItb7tUlXM/isggcuS5lc7GJo7NOuJ8rvHZaQ==", - "dependencies": { - "@ledgerhq/devices": "^8.0.7", - "@ledgerhq/errors": "^6.14.0", - "events": "^3.3.0" - } - }, - "node_modules/@ledgerhq/hw-transport-node-hid/node_modules/@ledgerhq/logs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-6.10.1.tgz", - "integrity": "sha512-z+ILK8Q3y+nfUl43ctCPuR4Y2bIxk/ooCQFwZxhtci1EhAtMDzMAx2W25qx8G1PPL9UUOdnUax19+F0OjXoj4w==" - }, - "node_modules/@ledgerhq/hw-transport-u2f": { - "version": "5.36.0-deprecated", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-u2f/-/hw-transport-u2f-5.36.0-deprecated.tgz", - "integrity": "sha512-T/+mGHIiUK/ZQATad6DMDmobCMZ1mVST952009jKzhaE1Et2Uy2secU+QhRkx3BfEAkvwa0zSRSYCL9d20Iqjg==", - "deprecated": "@ledgerhq/hw-transport-u2f is deprecated. Please use @ledgerhq/hw-transport-webusb or @ledgerhq/hw-transport-webhid. https://github.com/LedgerHQ/ledgerjs/blob/master/docs/migrate_webusb.md", - "dependencies": { - "@ledgerhq/errors": "^5.34.0", - "@ledgerhq/hw-transport": "^5.34.0", - "@ledgerhq/logs": "^5.30.0", - "u2f-api": "0.2.7" - } - }, - "node_modules/@ledgerhq/hw-transport-webauthn": { - "version": "5.36.0-deprecated", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-webauthn/-/hw-transport-webauthn-5.36.0-deprecated.tgz", - "integrity": "sha512-MCT59enCaevP458x+n4BGA8z9nVhuxGP5wtCtlUB7uxkWB6j12RHzPwyqlPo1z7baEby8fQe0VCI5lbGaCSBDQ==", - "dependencies": { - "@ledgerhq/devices": "^5.34.0", - "@ledgerhq/errors": "^5.34.0", - "@ledgerhq/hw-transport": "^5.34.0", - "@ledgerhq/logs": "^5.30.0" - } - }, - "node_modules/@ledgerhq/hw-transport-webhid": { - "version": "5.51.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-webhid/-/hw-transport-webhid-5.51.1.tgz", - "integrity": "sha512-w/2qSU0vwFY+D/4ucuYRViO7iS3Uuxmj9sI/Iiqkoiax9Xppb0/6H5m3ffKv6iPMmRYbgwCgXorqx4SLLSD8Kg==", - "dependencies": { - "@ledgerhq/devices": "^5.51.1", - "@ledgerhq/errors": "^5.50.0", - "@ledgerhq/hw-transport": "^5.51.1", - "@ledgerhq/logs": "^5.50.0" - } - }, - "node_modules/@ledgerhq/hw-transport-webusb": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-webusb/-/hw-transport-webusb-5.49.0.tgz", - "integrity": "sha512-oWgaVdAmQ9lOUnq1dhmCBP9v1ghEV+YBh0nHi7JtdpuLBuGd9red1HXdg5INE2J10rxO/wra3OoHcJlQguR8ew==", - "dependencies": { - "@ledgerhq/devices": "^5.49.0", - "@ledgerhq/errors": "^5.49.0", - "@ledgerhq/hw-transport": "^5.49.0", - "@ledgerhq/logs": "^5.49.0" - } - }, - "node_modules/@ledgerhq/logs": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-5.50.0.tgz", - "integrity": "sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA==" - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true - }, - "node_modules/@mui/core": { - "version": "5.0.0-alpha.53", - "resolved": "https://registry.npmjs.org/@mui/core/-/core-5.0.0-alpha.53.tgz", - "integrity": "sha512-dTwuhzE0puewJ+/Cw35iAiaBGVcZqVyqspheQHVJuhysSd+o58SONRAiM6MQgI/iFKiJ57HKh+En1MwuC7DMLw==", - "deprecated": "You can now upgrade to @mui/base. See https://github.com/mui/material-ui/releases/tag/v5.1.1", - "dependencies": { - "@babel/runtime": "^7.15.4", - "@emotion/is-prop-valid": "^1.1.0", - "@mui/utils": "^5.0.1", - "@popperjs/core": "^2.4.4", - "clsx": "^1.1.1", - "prop-types": "^15.7.2", - "react-is": "^17.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/react": "^16.8.6 || ^17.0.0", - "react": "^17.0.2", - "react-dom": "^17.0.2" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/core/node_modules/@babel/runtime": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", - "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@mui/core/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" - }, - "node_modules/@mui/lab": { - "version": "5.0.0-alpha.53", - "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-5.0.0-alpha.53.tgz", - "integrity": "sha512-fUyGCuxj8Wdwvyc9v0X3YTNshItFWp6DtuCPjhPy6yhKjUAa0u0XKI4FcM5z/wPWUR56nJceNz9WwNZ72vkwWw==", - "dependencies": { - "@babel/runtime": "^7.15.4", - "@date-io/date-fns": "^2.11.0", - "@date-io/dayjs": "^2.11.0", - "@date-io/luxon": "^2.11.1", - "@date-io/moment": "^2.11.0", - "@mui/core": "5.0.0-alpha.53", - "@mui/system": "^5.0.6", - "@mui/utils": "^5.0.1", - "clsx": "^1.1.1", - "prop-types": "^15.7.2", - "react-is": "^17.0.2", - "react-transition-group": "^4.4.2", - "rifm": "^0.12.0" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@mui/material": "^5.0.0", - "@types/react": "^16.8.6 || ^17.0.0", - "date-fns": "^2.25.0", - "dayjs": "^1.10.7", - "luxon": "^1.28.0", - "moment": "^2.29.1", - "react": "^17.0.2", - "react-dom": "^17.0.2" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "date-fns": { - "optional": true - }, - "dayjs": { - "optional": true - }, - "luxon": { - "optional": true - }, - "moment": { - "optional": true - } - } - }, - "node_modules/@mui/lab/node_modules/@babel/runtime": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", - "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@mui/lab/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" - }, - "node_modules/@mui/material": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.0.6.tgz", - "integrity": "sha512-1NmLel2Q+PnSfhFhdrhTbZFLfGpGKcPbu8onwGJu+vbD3YMTjr8gXvQ/sYZC0Motfu8jLnQdlq4FD4fRhqndnw==", - "dependencies": { - "@babel/runtime": "^7.15.4", - "@mui/core": "5.0.0-alpha.53", - "@mui/system": "^5.0.6", - "@mui/types": "^7.0.0", - "@mui/utils": "^5.0.1", - "@types/react-transition-group": "^4.4.4", - "clsx": "^1.1.1", - "csstype": "^3.0.9", - "hoist-non-react-statics": "^3.3.2", - "prop-types": "^15.7.2", - "react-is": "^17.0.2", - "react-transition-group": "^4.4.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/material-ui" - }, - "peerDependencies": { - "@emotion/react": "^11.5.0", - "@emotion/styled": "^11.3.0", - "@types/react": "^16.8.6 || ^17.0.0", - "react": "^17.0.2", - "react-dom": "^17.0.2" - }, - "peerDependenciesMeta": { - "@emotion/react": { - "optional": true - }, - "@emotion/styled": { - "optional": true - }, - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/material/node_modules/@babel/runtime": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", - "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@mui/material/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" - }, - "node_modules/@mui/private-theming": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.0.1.tgz", - "integrity": "sha512-R8Cf2+32cG1OXFAqTighA5Mx9R5BQ57cN1ZVaNgfgdbI87Yig2fVMdFSPrw3txcjKlnwsvFJF8AdwQMqq1tJ3Q==", - "dependencies": { - "@babel/runtime": "^7.15.4", - "@mui/utils": "^5.0.1", - "prop-types": "^15.7.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/material-ui" - }, - "peerDependencies": { - "@types/react": "^16.8.6 || ^17.0.0", - "react": "^17.0.2" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/private-theming/node_modules/@babel/runtime": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", - "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@mui/styled-engine": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.0.2.tgz", - "integrity": "sha512-vApnXLj/5V+SbBy+jGFtPgu3tgs0ybSdwWLwXcnUAdNdRyJBffi2KyOP8fhUONLOcZBMU2heNXWz/Zqn5kbDKQ==", - "dependencies": { - "@babel/runtime": "^7.15.4", - "@emotion/cache": "^11.5.0", - "prop-types": "^15.7.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/material-ui" - }, - "peerDependencies": { - "@emotion/react": "^11.4.1", - "@emotion/styled": "^11.3.0", - "react": "^17.0.2" - }, - "peerDependenciesMeta": { - "@emotion/react": { - "optional": true - }, - "@emotion/styled": { - "optional": true - } - } - }, - "node_modules/@mui/styled-engine/node_modules/@babel/runtime": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", - "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@mui/system": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.0.6.tgz", - "integrity": "sha512-qZdgODiO82/r1bH9KV5bdqqx/q14i32OGUK/bO6phhXM/DX0TmWSUsnPqFX4F7/UKrvBHsGzIb8ohdRuihQD+Q==", - "dependencies": { - "@babel/runtime": "^7.15.4", - "@mui/private-theming": "^5.0.1", - "@mui/styled-engine": "^5.0.2", - "@mui/types": "^7.0.0", - "@mui/utils": "^5.0.1", - "clsx": "^1.1.1", - "csstype": "^3.0.9", - "prop-types": "^15.7.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/material-ui" - }, - "peerDependencies": { - "@emotion/react": "^11.5.0", - "@emotion/styled": "^11.3.0", - "@types/react": "^16.8.6 || ^17.0.0", - "react": "^17.0.2" - }, - "peerDependenciesMeta": { - "@emotion/react": { - "optional": true - }, - "@emotion/styled": { - "optional": true - }, - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/system/node_modules/@babel/runtime": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", - "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@mui/types": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.0.0.tgz", - "integrity": "sha512-M/tkF2pZ4uoPhZ8pnNhlVnOFtz6F3dnYKIsnj8MuXKT6d26IE2u0UjA8B0275ggN74dR9rlHG5xJt5jgDx/Ung==", - "peerDependencies": { - "@types/react": "*" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/utils": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.0.1.tgz", - "integrity": "sha512-GWO104N+o9KG5fKiTEYnAg7kONKEg3vLN+VROAU0f3it6lFGLCVPcQYex/1gJ4QAy96u6Ez8/Hmmhi1+3cX0tQ==", - "dependencies": { - "@babel/runtime": "^7.15.4", - "@types/prop-types": "^15.7.4", - "@types/react-is": "^16.7.1 || ^17.0.0", - "prop-types": "^15.7.2", - "react-is": "^17.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "react": "^17.0.2" - } - }, - "node_modules/@mui/utils/node_modules/@babel/runtime": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", - "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@mui/utils/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" - }, - "node_modules/@mui/x-date-pickers": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-5.0.8.tgz", - "integrity": "sha512-L+9WOyoxIPxj86dk4G/zyVsiakQjBX0MJTIPMNSRitxFi4I6T8KlasdpGUHfnni/EAjqR36w0d/BDwCjc/7gPQ==", - "dependencies": { - "@babel/runtime": "^7.18.9", - "@date-io/core": "^2.15.0", - "@date-io/date-fns": "^2.15.0", - "@date-io/dayjs": "^2.15.0", - "@date-io/luxon": "^2.15.0", - "@date-io/moment": "^2.15.0", - "@mui/utils": "^5.10.3", - "@types/react-transition-group": "^4.4.5", - "clsx": "^1.2.1", - "prop-types": "^15.7.2", - "react-transition-group": "^4.4.5", - "rifm": "^0.12.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "peerDependencies": { - "@emotion/react": "^11.9.0", - "@emotion/styled": "^11.8.1", - "@mui/material": "^5.4.1", - "@mui/system": "^5.4.1", - "date-fns": "^2.25.0", - "dayjs": "^1.10.7", - "luxon": "^1.28.0 || ^2.0.0 || ^3.0.0", - "moment": "^2.29.1", - "react": "^17.0.2 || ^18.0.0", - "react-dom": "^17.0.2 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@emotion/react": { - "optional": true - }, - "@emotion/styled": { - "optional": true - }, - "date-fns": { - "optional": true - }, - "dayjs": { - "optional": true - }, - "luxon": { - "optional": true - }, - "moment": { - "optional": true - } - } - }, - "node_modules/@mui/x-date-pickers/node_modules/@babel/runtime": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", - "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", - "dependencies": { - "regenerator-runtime": "^0.13.10" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@mui/x-date-pickers/node_modules/@date-io/core": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/@date-io/core/-/core-2.16.0.tgz", - "integrity": "sha512-DYmSzkr+jToahwWrsiRA2/pzMEtz9Bq1euJwoOuYwuwIYXnZFtHajY2E6a1VNVDc9jP8YUXK1BvnZH9mmT19Zg==" - }, - "node_modules/@mui/x-date-pickers/node_modules/@date-io/date-fns": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/@date-io/date-fns/-/date-fns-2.16.0.tgz", - "integrity": "sha512-bfm5FJjucqlrnQcXDVU5RD+nlGmL3iWgkHTq3uAZWVIuBu6dDmGa3m8a6zo2VQQpu8ambq9H22UyUpn7590joA==", - "dependencies": { - "@date-io/core": "^2.16.0" - }, - "peerDependencies": { - "date-fns": "^2.0.0" - }, - "peerDependenciesMeta": { - "date-fns": { - "optional": true - } - } - }, - "node_modules/@mui/x-date-pickers/node_modules/@date-io/dayjs": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/@date-io/dayjs/-/dayjs-2.16.0.tgz", - "integrity": "sha512-y5qKyX2j/HG3zMvIxTobYZRGnd1FUW2olZLS0vTj7bEkBQkjd2RO7/FEwDY03Z1geVGlXKnzIATEVBVaGzV4Iw==", - "dependencies": { - "@date-io/core": "^2.16.0" - }, - "peerDependencies": { - "dayjs": "^1.8.17" - }, - "peerDependenciesMeta": { - "dayjs": { - "optional": true - } - } - }, - "node_modules/@mui/x-date-pickers/node_modules/@date-io/luxon": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/@date-io/luxon/-/luxon-2.16.1.tgz", - "integrity": "sha512-aeYp5K9PSHV28946pC+9UKUi/xMMYoaGelrpDibZSgHu2VWHXrr7zWLEr+pMPThSs5vt8Ei365PO+84pCm37WQ==", - "dependencies": { - "@date-io/core": "^2.16.0" - }, - "peerDependencies": { - "luxon": "^1.21.3 || ^2.x || ^3.x" - }, - "peerDependenciesMeta": { - "luxon": { - "optional": true - } - } - }, - "node_modules/@mui/x-date-pickers/node_modules/@date-io/moment": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/@date-io/moment/-/moment-2.16.1.tgz", - "integrity": "sha512-JkxldQxUqZBfZtsaCcCMkm/dmytdyq5pS1RxshCQ4fHhsvP5A7gSqPD22QbVXMcJydi3d3v1Y8BQdUKEuGACZQ==", - "dependencies": { - "@date-io/core": "^2.16.0" - }, - "peerDependencies": { - "moment": "^2.24.0" - }, - "peerDependenciesMeta": { - "moment": { - "optional": true - } - } - }, - "node_modules/@mui/x-date-pickers/node_modules/@mui/utils": { - "version": "5.10.14", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.10.14.tgz", - "integrity": "sha512-12p59+wDZpA++XVJmKwqsZmrA1nmUQ5d0a1yQWtcDjxNyER1EDzozYN/db+FY2i5ceQh2TynPTEwGms2mXDwFg==", - "dependencies": { - "@babel/runtime": "^7.20.1", - "@types/prop-types": "^15.7.5", - "@types/react-is": "^16.7.1 || ^17.0.0", - "prop-types": "^15.8.1", - "react-is": "^18.2.0" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "peerDependencies": { - "react": "^17.0.0 || ^18.0.0" - } - }, - "node_modules/@mui/x-date-pickers/node_modules/@mui/utils/node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/@mui/x-date-pickers/node_modules/@mui/utils/node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/@mui/x-date-pickers/node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "node_modules/@mui/x-date-pickers/node_modules/@types/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@mui/x-date-pickers/node_modules/clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@mui/x-date-pickers/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, - "node_modules/@mui/x-date-pickers/node_modules/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" - } - }, - "node_modules/@mui/x-date-pickers/node_modules/regenerator-runtime": { - "version": "0.13.10", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", - "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==" - }, - "node_modules/@mui/x-date-pickers/node_modules/rifm": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/rifm/-/rifm-0.12.1.tgz", - "integrity": "sha512-OGA1Bitg/dSJtI/c4dh90svzaUPt228kzFsUkJbtA2c964IqEAwWXeL9ZJi86xWv3j5SMqRvGULl7bA6cK0Bvg==", - "peerDependencies": { - "react": ">=16.8" - } - }, - "node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/fs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.0.0.tgz", - "integrity": "sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ==", - "dev": true, - "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "deprecated": "This functionality has been moved to @npmcli/fs", - "dev": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/move-file/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@oclif/color": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@oclif/color/-/color-0.1.2.tgz", - "integrity": "sha512-M9o+DOrb8l603qvgz1FogJBUGLqcMFL1aFg2ZEL0FbXJofiNTLOWIeB4faeZTLwE6dt0xH9GpCVpzksMMzGbmA==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "chalk": "^3.0.0", - "strip-ansi": "^5.2.0", - "supports-color": "^5.4.0", - "tslib": "^1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@oclif/color/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@oclif/color/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@oclif/color/node_modules/chalk/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@oclif/color/node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@oclif/color/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@oclif/color/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@oclif/color/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@oclif/color/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@oclif/command": { - "version": "1.8.36", - "resolved": "https://registry.npmjs.org/@oclif/command/-/command-1.8.36.tgz", - "integrity": "sha512-/zACSgaYGtAQRzc7HjzrlIs14FuEYAZrMOEwicRoUnZVyRunG4+t5iSEeQu0Xy2bgbCD0U1SP/EdeNZSTXRwjQ==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dev": true, - "dependencies": { - "@oclif/config": "^1.18.2", - "@oclif/errors": "^1.3.6", - "@oclif/help": "^1.0.1", - "@oclif/parser": "^3.8.17", - "debug": "^4.1.1", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@oclif/config": "^1" - } - }, - "node_modules/@oclif/config": { - "version": "1.18.17", - "resolved": "https://registry.npmjs.org/@oclif/config/-/config-1.18.17.tgz", - "integrity": "sha512-k77qyeUvjU8qAJ3XK3fr/QVAqsZO8QOBuESnfeM5HHtPNLSyfVcwiMM2zveSW5xRdLSG3MfV8QnLVkuyCL2ENg==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dev": true, - "dependencies": { - "@oclif/errors": "^1.3.6", - "@oclif/parser": "^3.8.17", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-wsl": "^2.1.1", - "tslib": "^2.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@oclif/config/node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/@oclif/config/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@oclif/config/node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/@oclif/config/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@oclif/config/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/@oclif/errors": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/@oclif/errors/-/errors-1.3.6.tgz", - "integrity": "sha512-fYaU4aDceETd89KXP+3cLyg9EHZsLD3RxF2IU9yxahhBpspWjkWi3Dy3bTgcwZ3V47BgxQaGapzJWDM33XIVDQ==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dev": true, - "dependencies": { - "clean-stack": "^3.0.0", - "fs-extra": "^8.1", - "indent-string": "^4.0.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@oclif/errors/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@oclif/errors/node_modules/clean-stack": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", - "integrity": "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@oclif/errors/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@oclif/errors/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@oclif/errors/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@oclif/errors/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/@oclif/help": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/@oclif/help/-/help-1.0.15.tgz", - "integrity": "sha512-Yt8UHoetk/XqohYX76DfdrUYLsPKMc5pgkzsZVHDyBSkLiGRzujVaGZdjr32ckVZU9q3a47IjhWxhip7Dz5W/g==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dev": true, - "dependencies": { - "@oclif/config": "1.18.16", - "@oclif/errors": "1.3.6", - "chalk": "^4.1.2", - "indent-string": "^4.0.0", - "lodash": "^4.17.21", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "widest-line": "^3.1.0", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@oclif/help/node_modules/@oclif/config": { - "version": "1.18.16", - "resolved": "https://registry.npmjs.org/@oclif/config/-/config-1.18.16.tgz", - "integrity": "sha512-VskIxVcN22qJzxRUq+raalq6Q3HUde7sokB7/xk5TqRZGEKRVbFeqdQBxDWwQeudiJEgcNiMvIFbMQ43dY37FA==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dev": true, - "dependencies": { - "@oclif/errors": "^1.3.6", - "@oclif/parser": "^3.8.16", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-wsl": "^2.1.1", - "tslib": "^2.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@oclif/help/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@oclif/help/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@oclif/help/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@oclif/help/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@oclif/help/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@oclif/help/node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/@oclif/help/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@oclif/help/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@oclif/help/node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/@oclif/help/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@oclif/help/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@oclif/help/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@oclif/help/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/@oclif/help/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@oclif/linewrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@oclif/linewrap/-/linewrap-1.0.0.tgz", - "integrity": "sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw==", - "dev": true - }, - "node_modules/@oclif/parser": { - "version": "3.8.17", - "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.17.tgz", - "integrity": "sha512-l04iSd0xoh/16TGVpXb81Gg3z7tlQGrEup16BrVLsZBK6SEYpYHRJZnM32BwZrHI97ZSFfuSwVlzoo6HdsaK8A==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dev": true, - "dependencies": { - "@oclif/errors": "^1.3.6", - "@oclif/linewrap": "^1.0.0", - "chalk": "^4.1.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@oclif/parser/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@oclif/parser/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@oclif/parser/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@oclif/parser/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@oclif/parser/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@oclif/parser/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@oclif/parser/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/@oclif/plugin-autocomplete": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@oclif/plugin-autocomplete/-/plugin-autocomplete-0.3.0.tgz", - "integrity": "sha512-gCuIUCswvoU1BxDDvHSUGxW8rFagiacle8jHqE49+WnuniXD/N8NmJvnzmlNyc8qLE192CnKK+qYyAF+vaFQBg==", - "dev": true, - "dependencies": { - "@oclif/command": "^1.5.13", - "@oclif/config": "^1.13.0", - "chalk": "^4.1.0", - "cli-ux": "^5.2.1", - "debug": "^4.0.0", - "fs-extra": "^9.0.1", - "moment": "^2.22.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@oclif/plugin-autocomplete/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@oclif/plugin-autocomplete/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@oclif/plugin-autocomplete/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@oclif/plugin-autocomplete/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@oclif/plugin-autocomplete/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@oclif/plugin-autocomplete/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@oclif/plugin-help": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-3.3.1.tgz", - "integrity": "sha512-QuSiseNRJygaqAdABYFWn/H1CwIZCp9zp/PLid6yXvy6VcQV7OenEFF5XuYaCvSARe2Tg9r8Jqls5+fw1A9CbQ==", - "dev": true, - "dependencies": { - "@oclif/command": "^1.8.15", - "@oclif/config": "1.18.2", - "@oclif/errors": "1.3.5", - "@oclif/help": "^1.0.1", - "chalk": "^4.1.2", - "indent-string": "^4.0.0", - "lodash": "^4.17.21", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "widest-line": "^3.1.0", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@oclif/plugin-help/node_modules/@oclif/config": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/@oclif/config/-/config-1.18.2.tgz", - "integrity": "sha512-cE3qfHWv8hGRCP31j7fIS7BfCflm/BNZ2HNqHexH+fDrdF2f1D5S8VmXWLC77ffv3oDvWyvE9AZeR0RfmHCCaA==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dev": true, - "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" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@oclif/plugin-help/node_modules/@oclif/errors": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@oclif/errors/-/errors-1.3.5.tgz", - "integrity": "sha512-OivucXPH/eLLlOT7FkCMoZXiaVYf8I/w1eTAM1+gKzfhALwWTusxEx7wBmW0uzvkSg/9ovWLycPaBgJbM3LOCQ==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dev": true, - "dependencies": { - "clean-stack": "^3.0.0", - "fs-extra": "^8.1", - "indent-string": "^4.0.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@oclif/plugin-help/node_modules/@oclif/errors/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@oclif/plugin-help/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@oclif/plugin-help/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@oclif/plugin-help/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@oclif/plugin-help/node_modules/clean-stack": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", - "integrity": "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@oclif/plugin-help/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@oclif/plugin-help/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@oclif/plugin-help/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@oclif/plugin-help/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@oclif/plugin-help/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@oclif/plugin-help/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@oclif/plugin-help/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@oclif/plugin-help/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@oclif/plugin-help/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/@oclif/plugin-help/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/@oclif/plugin-help/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@oclif/plugin-update": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@oclif/plugin-update/-/plugin-update-1.5.0.tgz", - "integrity": "sha512-GsWK1CMeBBO8YknThoOZulj3xE+ZgZAXW1ouNJALXcs3mbROzszLDGjXV3RM6ffbJpnWLiMIqSFNOE8d+vGcgQ==", - "dev": true, - "dependencies": { - "@oclif/color": "^0.1.0", - "@oclif/command": "^1.7.0", - "@oclif/config": "^1.16.0", - "@oclif/errors": "^1.3.4", - "@types/semver": "^7.3.4", - "cli-ux": "^5.5.1", - "cross-spawn": "^7.0.3", - "debug": "^4.3.1", - "filesize": "^6.1.0", - "fs-extra": "^9.0.1", - "http-call": "^5.3.0", - "lodash": "^4.17.21", - "log-chopper": "^1.0.2", - "semver": "^7.3.5", - "tar-fs": "^2.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@oclif/plugin-warn-if-update-available": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@oclif/plugin-warn-if-update-available/-/plugin-warn-if-update-available-1.7.3.tgz", - "integrity": "sha512-q8q0NIneVCwIAJzglUMsl3EbXR/H5aPDk6g+qs7uF0tToxe07SWSONoNaKPzViwRWvYChMPjL77/rXyW1HVn4A==", - "dev": true, - "dependencies": { - "@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": "^9.0.1", - "http-call": "^5.2.2", - "lodash": "^4.17.21", - "semver": "^7.3.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@oclif/plugin-warn-if-update-available/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@oclif/plugin-warn-if-update-available/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@oclif/plugin-warn-if-update-available/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@oclif/plugin-warn-if-update-available/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@oclif/plugin-warn-if-update-available/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@oclif/plugin-warn-if-update-available/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@oclif/screen": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@oclif/screen/-/screen-1.0.4.tgz", - "integrity": "sha512-60CHpq+eqnTxLZQ4PGHYNwUX572hgpMHGPtTWMjdTMsAvlm69lZV/4ly6O3sAYkomo4NggGcomrDpBe34rxUqw==", - "deprecated": "Deprecated in favor of @oclif/core", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@octokit/auth-token": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", - "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", - "dev": true, - "dependencies": { - "@octokit/types": "^6.0.3" - } - }, - "node_modules/@octokit/endpoint": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", - "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", - "dev": true, - "dependencies": { - "@octokit/types": "^6.0.3", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/endpoint/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@octokit/endpoint/node_modules/universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", - "dev": true - }, - "node_modules/@octokit/openapi-types": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.2.0.tgz", - "integrity": "sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA==", - "dev": true - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz", - "integrity": "sha512-jbsSoi5Q1pj63sC16XIUboklNw+8tL9VOnJsWycWYR78TKss5PVpIPb1TUUcMQ+bBh7cY579cVAWmf5qG+dw+Q==", - "dev": true, - "dependencies": { - "@octokit/types": "^2.0.1" - } - }, - "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": { - "version": "2.16.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-2.16.2.tgz", - "integrity": "sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q==", - "dev": true, - "dependencies": { - "@types/node": ">= 8" - } - }, - "node_modules/@octokit/plugin-request-log": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", - "dev": true, - "peerDependencies": { - "@octokit/core": ">=3" - } - }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz", - "integrity": "sha512-EZi/AWhtkdfAYi01obpX0DF7U6b1VRr30QNQ5xSFPITMdLSfhcBqjamE3F+sKcxPbD7eZuMHu3Qkk2V+JGxBDQ==", - "dev": true, - "dependencies": { - "@octokit/types": "^2.0.1", - "deprecation": "^2.3.1" - } - }, - "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { - "version": "2.16.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-2.16.2.tgz", - "integrity": "sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q==", - "dev": true, - "dependencies": { - "@types/node": ">= 8" - } - }, - "node_modules/@octokit/request": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.2.tgz", - "integrity": "sha512-je66CvSEVf0jCpRISxkUcCa0UkxmFs6eGDRSbfJtAVwbLH5ceqF+YEyC8lj8ystKyZTy8adWr0qmkY52EfOeLA==", - "dev": true, - "dependencies": { - "@octokit/endpoint": "^6.0.1", - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.16.1", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.1", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/request-error": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-1.2.1.tgz", - "integrity": "sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA==", - "dev": true, - "dependencies": { - "@octokit/types": "^2.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "node_modules/@octokit/request-error/node_modules/@octokit/types": { - "version": "2.16.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-2.16.2.tgz", - "integrity": "sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q==", - "dev": true, - "dependencies": { - "@types/node": ">= 8" - } - }, - "node_modules/@octokit/request/node_modules/@octokit/request-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", - "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", - "dev": true, - "dependencies": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "node_modules/@octokit/request/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@octokit/request/node_modules/universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", - "dev": true - }, - "node_modules/@octokit/rest": { - "version": "16.43.2", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.43.2.tgz", - "integrity": "sha512-ngDBevLbBTFfrHZeiS7SAMAZ6ssuVmXuya+F/7RaVvlysgGa1JKJkKWY+jV6TCJYcW0OALfJ7nTIGXcBXzycfQ==", - "dev": true, - "dependencies": { - "@octokit/auth-token": "^2.4.0", - "@octokit/plugin-paginate-rest": "^1.1.1", - "@octokit/plugin-request-log": "^1.0.0", - "@octokit/plugin-rest-endpoint-methods": "2.4.0", - "@octokit/request": "^5.2.0", - "@octokit/request-error": "^1.0.2", - "atob-lite": "^2.0.0", - "before-after-hook": "^2.0.0", - "btoa-lite": "^1.0.0", - "deprecation": "^2.0.0", - "lodash.get": "^4.4.2", - "lodash.set": "^4.3.2", - "lodash.uniq": "^4.5.0", - "octokit-pagination-methods": "^1.1.0", - "once": "^1.4.0", - "universal-user-agent": "^4.0.0" - } - }, - "node_modules/@octokit/types": { - "version": "6.34.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.34.0.tgz", - "integrity": "sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==", - "dev": true, - "dependencies": { - "@octokit/openapi-types": "^11.2.0" - } - }, - "node_modules/@phenomnomnominal/tsquery": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-3.0.0.tgz", - "integrity": "sha512-SW8lKitBHWJ9fAYkJ9kJivuctwNYCh3BUxLdH0+XiR1GPBiu+7qiZzh8p8jqlj1LgVC1TbvfNFroaEsmYlL8Iw==", - "dev": true, - "dependencies": { - "esquery": "^1.0.1" - }, - "peerDependencies": { - "typescript": "^3" - } - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.11", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz", - "integrity": "sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==", - "dev": true, - "dependencies": { - "ansi-html-community": "^0.0.8", - "common-path-prefix": "^3.0.0", - "core-js-pure": "^3.23.3", - "error-stack-parser": "^2.0.6", - "find-up": "^5.0.0", - "html-entities": "^2.1.0", - "loader-utils": "^2.0.4", - "schema-utils": "^3.0.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">= 10.13" - }, - "peerDependencies": { - "@types/webpack": "4.x || 5.x", - "react-refresh": ">=0.10.0 <1.0.0", - "sockjs-client": "^1.4.0", - "type-fest": ">=0.17.0 <5.0.0", - "webpack": ">=4.43.0 <6.0.0", - "webpack-dev-server": "3.x || 4.x", - "webpack-hot-middleware": "2.x", - "webpack-plugin-serve": "0.x || 1.x" - }, - "peerDependenciesMeta": { - "@types/webpack": { - "optional": true - }, - "sockjs-client": { - "optional": true - }, - "type-fest": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - }, - "webpack-hot-middleware": { - "optional": true - }, - "webpack-plugin-serve": { - "optional": true - } - } - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ] - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@popperjs/core": { - "version": "2.10.2", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.10.2.tgz", - "integrity": "sha512-IXf3XA7+XyN7CP9gGh/XB0UxVMlvARGEgGXLubFICsUMGz6Q+DU+i4gGlpOxTjKvXjkJDJC8YdqdKkDj9qZHEQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, - "node_modules/@react-native-async-storage/async-storage": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.21.0.tgz", - "integrity": "sha512-JL0w36KuFHFCvnbOXRekqVAUplmOyT/OuCQkogo6X98MtpSaJOKEAeZnYO8JB0U/RIEixZaGI5px73YbRm/oag==", - "optional": true, - "dependencies": { - "merge-options": "^3.0.4" - }, - "peerDependencies": { - "react-native": "^0.0.0-0 || >=0.60 <1.0" - } - }, - "node_modules/@scure/base": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.6.tgz", - "integrity": "sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@sentry/core": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-6.19.7.tgz", - "integrity": "sha512-tOfZ/umqB2AcHPGbIrsFLcvApdTm9ggpi/kQZFkej7kMphjT+SGBiQfYtjyg9jcRW+ilAR4JXC9BGKsdEQ+8Vw==", - "dev": true, - "dependencies": { - "@sentry/hub": "6.19.7", - "@sentry/minimal": "6.19.7", - "@sentry/types": "6.19.7", - "@sentry/utils": "6.19.7", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/hub": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.19.7.tgz", - "integrity": "sha512-y3OtbYFAqKHCWezF0EGGr5lcyI2KbaXW2Ik7Xp8Mu9TxbSTuwTe4rTntwg8ngPjUQU3SUHzgjqVB8qjiGqFXCA==", - "dev": true, - "dependencies": { - "@sentry/types": "6.19.7", - "@sentry/utils": "6.19.7", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/minimal": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.19.7.tgz", - "integrity": "sha512-wcYmSJOdvk6VAPx8IcmZgN08XTXRwRtB1aOLZm+MVHjIZIhHoBGZJYTVQS/BWjldsamj2cX3YGbGXNunaCfYJQ==", - "dev": true, - "dependencies": { - "@sentry/hub": "6.19.7", - "@sentry/types": "6.19.7", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/node": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-6.19.7.tgz", - "integrity": "sha512-gtmRC4dAXKODMpHXKfrkfvyBL3cI8y64vEi3fDD046uqYcrWdgoQsffuBbxMAizc6Ez1ia+f0Flue6p15Qaltg==", - "dev": true, - "dependencies": { - "@sentry/core": "6.19.7", - "@sentry/hub": "6.19.7", - "@sentry/types": "6.19.7", - "@sentry/utils": "6.19.7", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/node/node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@sentry/types": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.19.7.tgz", - "integrity": "sha512-jH84pDYE+hHIbVnab3Hr+ZXr1v8QABfhx39KknxqKWr2l0oEItzepV0URvbEhB446lk/S/59230dlUUIBGsXbg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/utils": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-6.19.7.tgz", - "integrity": "sha512-z95ECmE3i9pbWoXQrD/7PgkBAzJYR+iXtPuTkpBjDKs86O3mT+PXOT3BAn79w2wkn7/i3vOGD2xVr1uiMl26dA==", - "dev": true, - "dependencies": { - "@sentry/types": "6.19.7", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@servie/events": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@servie/events/-/events-1.0.0.tgz", - "integrity": "sha512-sBSO19KzdrJCM3gdx6eIxV8M9Gxfgg6iDQmH5TIAGaUu+X9VDdsINXJOnoiZ1Kx3TrHdH4bt5UVglkjsEGBcvw==", - "dev": true - }, - "node_modules/@sindresorhus/is": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-2.1.1.tgz", - "integrity": "sha512-/aPsuoj/1Dw/kzhkgz+ES6TxG0zfTMGLwuK2ZG00k/iJzYHTLCE8mVU8EPqEOp/lmxPoq1C1C9RYToRKb2KEfg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", - "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-preset": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", - "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", - "@svgr/babel-plugin-transform-svg-component": "^5.5.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", - "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", - "dependencies": { - "@svgr/plugin-jsx": "^5.5.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/core/node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", - "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", - "dependencies": { - "@babel/types": "^7.12.6" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", - "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", - "dependencies": { - "@babel/core": "^7.12.3", - "@svgr/babel-preset": "^5.5.0", - "@svgr/hast-util-to-babel-ast": "^5.5.0", - "svg-parser": "^2.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx/node_modules/@babel/core": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", - "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helpers": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@svgr/plugin-jsx/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@svgr/plugin-svgo": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", - "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", - "dependencies": { - "cosmiconfig": "^7.0.0", - "deepmerge": "^4.2.2", - "svgo": "^1.2.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@svgr/webpack": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", - "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/plugin-transform-react-constant-elements": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/preset-react": "^7.12.5", - "@svgr/core": "^5.5.0", - "@svgr/plugin-jsx": "^5.5.0", - "@svgr/plugin-svgo": "^5.5.0", - "loader-utils": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/core": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", - "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helpers": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz", - "integrity": "sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.0.tgz", - "integrity": "sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead.", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz", - "integrity": "sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz", - "integrity": "sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/preset-env": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.0.tgz", - "integrity": "sha512-cdTu/W0IrviamtnZiTfixPfIncr2M1VqRrkjzZWlr1B4TVYimCFK5jkyOdP4qw2MrlKHi+b3ORj6x8GoCew8Dg==", - "dependencies": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.0", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.0", - "@babel/plugin-proposal-async-generator-functions": "^7.16.0", - "@babel/plugin-proposal-class-properties": "^7.16.0", - "@babel/plugin-proposal-class-static-block": "^7.16.0", - "@babel/plugin-proposal-dynamic-import": "^7.16.0", - "@babel/plugin-proposal-export-namespace-from": "^7.16.0", - "@babel/plugin-proposal-json-strings": "^7.16.0", - "@babel/plugin-proposal-logical-assignment-operators": "^7.16.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", - "@babel/plugin-proposal-numeric-separator": "^7.16.0", - "@babel/plugin-proposal-object-rest-spread": "^7.16.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.0", - "@babel/plugin-proposal-private-methods": "^7.16.0", - "@babel/plugin-proposal-private-property-in-object": "^7.16.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.16.0", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.16.0", - "@babel/plugin-transform-async-to-generator": "^7.16.0", - "@babel/plugin-transform-block-scoped-functions": "^7.16.0", - "@babel/plugin-transform-block-scoping": "^7.16.0", - "@babel/plugin-transform-classes": "^7.16.0", - "@babel/plugin-transform-computed-properties": "^7.16.0", - "@babel/plugin-transform-destructuring": "^7.16.0", - "@babel/plugin-transform-dotall-regex": "^7.16.0", - "@babel/plugin-transform-duplicate-keys": "^7.16.0", - "@babel/plugin-transform-exponentiation-operator": "^7.16.0", - "@babel/plugin-transform-for-of": "^7.16.0", - "@babel/plugin-transform-function-name": "^7.16.0", - "@babel/plugin-transform-literals": "^7.16.0", - "@babel/plugin-transform-member-expression-literals": "^7.16.0", - "@babel/plugin-transform-modules-amd": "^7.16.0", - "@babel/plugin-transform-modules-commonjs": "^7.16.0", - "@babel/plugin-transform-modules-systemjs": "^7.16.0", - "@babel/plugin-transform-modules-umd": "^7.16.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.0", - "@babel/plugin-transform-new-target": "^7.16.0", - "@babel/plugin-transform-object-super": "^7.16.0", - "@babel/plugin-transform-parameters": "^7.16.0", - "@babel/plugin-transform-property-literals": "^7.16.0", - "@babel/plugin-transform-regenerator": "^7.16.0", - "@babel/plugin-transform-reserved-words": "^7.16.0", - "@babel/plugin-transform-shorthand-properties": "^7.16.0", - "@babel/plugin-transform-spread": "^7.16.0", - "@babel/plugin-transform-sticky-regex": "^7.16.0", - "@babel/plugin-transform-template-literals": "^7.16.0", - "@babel/plugin-transform-typeof-symbol": "^7.16.0", - "@babel/plugin-transform-unicode-escapes": "^7.16.0", - "@babel/plugin-transform-unicode-regex": "^7.16.0", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.16.0", - "babel-plugin-polyfill-corejs2": "^0.2.3", - "babel-plugin-polyfill-corejs3": "^0.3.0", - "babel-plugin-polyfill-regenerator": "^0.2.3", - "core-js-compat": "^3.19.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/preset-react": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.0.tgz", - "integrity": "sha512-d31IFW2bLRB28uL1WoElyro8RH5l6531XfxMtCeCmp6RVAF1uTfxxUA0LH1tXl+psZdwfmIbwoG4U5VwgbhtLw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-transform-react-display-name": "^7.16.0", - "@babel/plugin-transform-react-jsx": "^7.16.0", - "@babel/plugin-transform-react-jsx-development": "^7.16.0", - "@babel/plugin-transform-react-pure-annotations": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dev": true, - "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@trezor/analytics": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@trezor/analytics/-/analytics-1.0.5.tgz", - "integrity": "sha512-XpgAsQDi8uZ+PmfCS6KUn+frUqR1ckOY9NdeC0PMGmkTzWm47oatvoyLSy2umd30T9M4h1LJECBqA80XpEV5MA==", - "dependencies": { - "@trezor/env-utils": "1.0.4", - "@trezor/utils": "9.0.11" - } - }, - "node_modules/@trezor/blockchain-link": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/@trezor/blockchain-link/-/blockchain-link-2.1.15.tgz", - "integrity": "sha512-Y7QsggFUGk84yKY06eSuS3oTNwH+chz0fuCWMs7aKr4TxXsxILNwzoYg7Erecf+WZuydAdmjZRDT4QbmMUc65g==", - "dependencies": { - "@trezor/blockchain-link-types": "1.0.4", - "@trezor/blockchain-link-utils": "1.0.5", - "@trezor/utils": "9.0.11", - "@trezor/utxo-lib": "1.0.9", - "@types/web": "^0.0.100", - "bignumber.js": "^9.1.1", - "events": "^3.3.0", - "ripple-lib": "^1.10.1", - "socks-proxy-agent": "6.1.1", - "ws": "7.5.9" - } - }, - "node_modules/@trezor/blockchain-link-types": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@trezor/blockchain-link-types/-/blockchain-link-types-1.0.4.tgz", - "integrity": "sha512-EBX8Fi38mqIRStOQsUNbma1RwEP57B104N77p1CPHML3Kxu6M0DVcTulFKJKAJ6laQyfULzTeUYfEdn//dCcFA==" - }, - "node_modules/@trezor/blockchain-link-utils": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@trezor/blockchain-link-utils/-/blockchain-link-utils-1.0.5.tgz", - "integrity": "sha512-Kj8Zuy22ApV+FcLhMFdFVMAjbJwS4VaXndkz1OgjF7UHTb0jEJtIk5JSe5KNbvNUsyGcEAn9vZ+RogfZETOVGw==", - "dependencies": { - "@trezor/utils": "9.0.11", - "bignumber.js": "^9.1.1" - } - }, - "node_modules/@trezor/blockchain-link/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@trezor/connect": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@trezor/connect/-/connect-9.1.1.tgz", - "integrity": "sha512-qIovN55BN5zciRiwIeEAHISjspy9jWkusBntk5z5SFmXw95KG6trms7GCodpbEuueboUS9Ts9xHorYwvqMmweg==", - "dependencies": { - "@trezor/blockchain-link": "2.1.15", - "@trezor/blockchain-link-types": "1.0.4", - "@trezor/connect-analytics": "1.0.4", - "@trezor/connect-common": "0.0.18", - "@trezor/transport": "1.1.14", - "@trezor/utils": "9.0.11", - "@trezor/utxo-lib": "1.0.9", - "bignumber.js": "^9.1.1", - "blakejs": "^1.2.1", - "bs58": "^5.0.0", - "bs58check": "^3.0.1", - "cross-fetch": "^3.1.6", - "events": "^3.3.0", - "randombytes": "2.1.0" - } - }, - "node_modules/@trezor/connect-analytics": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@trezor/connect-analytics/-/connect-analytics-1.0.4.tgz", - "integrity": "sha512-GLD5CCh6hcXsovxM2Fyns25GbGRCJ3lgFhWQ9WyqkFveI41cwMGCJZuXSyGSWCeMpazOYdvpgyXMqc22J2tatg==", - "dependencies": { - "@trezor/analytics": "1.0.5" - } - }, - "node_modules/@trezor/connect-common": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/@trezor/connect-common/-/connect-common-0.0.18.tgz", - "integrity": "sha512-tFian3z2ce/gQpjtFddr5NCKeJEEpV/t+Srb0Sa/STXqY/mTaADzti1aqp+/w4bL+1E2NNdAmCtsCl5AZc4a+A==", - "dependencies": { - "@trezor/env-utils": "1.0.4" - } - }, - "node_modules/@trezor/connect-web": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@trezor/connect-web/-/connect-web-9.1.1.tgz", - "integrity": "sha512-FDwdARtUAITO80bahfU5gR4NS0q85rOvtyCCtwGgbH04JpOvmmoaNgYdXwfYfPaZCd2ZxZZ4omBermVPaE/wvA==", - "dependencies": { - "@trezor/connect": "9.1.1", - "@trezor/utils": "9.0.11", - "events": "^3.3.0" - } - }, - "node_modules/@trezor/connect/node_modules/base-x": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", - "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" - }, - "node_modules/@trezor/connect/node_modules/bs58": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", - "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", - "dependencies": { - "base-x": "^4.0.0" - } - }, - "node_modules/@trezor/connect/node_modules/bs58check": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-3.0.1.tgz", - "integrity": "sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ==", - "dependencies": { - "@noble/hashes": "^1.2.0", - "bs58": "^5.0.0" - } - }, - "node_modules/@trezor/env-utils": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@trezor/env-utils/-/env-utils-1.0.4.tgz", - "integrity": "sha512-V9DdjpCH6hyN7AYPEIV1WR44fmgN6d3iF8DtHYNljnMFOaan167DDVq51ZpSPAnyppulIEhdK7kuLDW3KPcnpw==", - "dependencies": { - "ua-parser-js": "^1.0.35" - }, - "peerDependencies": { - "expo-localization": "^14.1.1", - "react-native": "0.71.8", - "react-native-config": "^1.5.0" - }, - "peerDependenciesMeta": { - "expo-localization": { - "optional": true - }, - "react-native": { - "optional": true - }, - "react-native-config": { - "optional": true - } - } - }, - "node_modules/@trezor/transport": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/@trezor/transport/-/transport-1.1.14.tgz", - "integrity": "sha512-KRurYZonsPugKyCJFEEkDi82gjD1lwNDEaROCwQvIHcdXO2spHj1XDlIWa8dgBVrglukJmYutqCzE+RtaMeVVQ==", - "dependencies": { - "@trezor/utils": "9.0.11", - "bytebuffer": "^5.0.1", - "cross-fetch": "^3.1.6", - "json-stable-stringify": "^1.0.2", - "long": "^4.0.0", - "prettier": "2.8.8", - "protobufjs": "7.2.4", - "usb": "^2.9.0" - } - }, - "node_modules/@trezor/transport/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - }, - "node_modules/@trezor/transport/node_modules/json-stable-stringify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.1.0.tgz", - "integrity": "sha512-zfA+5SuwYN2VWqN1/5HZaDzQKLJHaBVMZIIM+wuYjdptkaQsqzDdqjqf+lZZJUuJq1aanHiY8LhH8LmH+qBYJA==", - "dependencies": { - "call-bind": "^1.0.5", - "isarray": "^2.0.5", - "jsonify": "^0.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/@trezor/transport/node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/@trezor/utils": { - "version": "9.0.11", - "resolved": "https://registry.npmjs.org/@trezor/utils/-/utils-9.0.11.tgz", - "integrity": "sha512-HJBgR6/VYjJX8AP/fNIcYC+gDNjP2JLfgYBrT/naupEwDQJcxfn8KgUBrR1/akm61g8CPOot/YEj4o5nXuRt/g==" - }, - "node_modules/@trezor/utxo-lib": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@trezor/utxo-lib/-/utxo-lib-1.0.9.tgz", - "integrity": "sha512-ezLJzAslhW6HVTyZWpfBmrXY5/hz5XKT0FkYRS7lhnf56LwtVPUkLvLqGtDPuV8djF04meXxoRNO8jjtnQgYqA==", - "dependencies": { - "@trezor/utils": "9.0.11", - "bchaddrjs": "^0.5.2", - "bech32": "^2.0.0", - "bip66": "^1.1.5", - "bitcoin-ops": "^1.4.1", - "blake-hash": "^2.0.0", - "blakejs": "^1.2.1", - "bn.js": "^5.2.1", - "bs58": "^5.0.0", - "bs58check": "^3.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "int64-buffer": "^1.0.1", - "pushdata-bitcoin": "^1.0.1", - "tiny-secp256k1": "^1.1.6", - "typeforce": "^1.18.0", - "varuint-bitcoin": "^1.1.2", - "wif": "^2.0.6" - } - }, - "node_modules/@trezor/utxo-lib/node_modules/base-x": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", - "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" - }, - "node_modules/@trezor/utxo-lib/node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "node_modules/@trezor/utxo-lib/node_modules/bs58": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", - "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", - "dependencies": { - "base-x": "^4.0.0" - } - }, - "node_modules/@trezor/utxo-lib/node_modules/bs58check": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-3.0.1.tgz", - "integrity": "sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ==", - "dependencies": { - "@noble/hashes": "^1.2.0", - "bs58": "^5.0.0" - } - }, - "node_modules/@types/babel__core": { - "version": "7.1.16", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", - "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", - "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.3.0" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/cacheable-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", - "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", - "dev": true, - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", - "dev": true, - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "dev": true, - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/eslint": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.2.tgz", - "integrity": "sha512-KubbADPkfoU75KgKeKLsFHXnU4ipH7wYg0TRT33NK3N3yiu7jlFAAoygIWBV+KbuHx/G+AvuGX6DllnK35gfJA==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "0.0.46", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.46.tgz", - "integrity": "sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg==", - "dev": true - }, - "node_modules/@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.30", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz", - "integrity": "sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", - "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "node_modules/@types/html-minifier-terser": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", - "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", - "dev": true - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true - }, - "node_modules/@types/http-proxy": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", - "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/inquirer": { - "version": "8.2.10", - "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-8.2.10.tgz", - "integrity": "sha512-IdD5NmHyVjWM8SHWo/kPBgtzXatwPkfwzyP3fN1jF2g9BWt5WO+8hL2F4o2GKIYsU40PpqeevuUWvkS/roXJkA==", - "dev": true, - "dependencies": { - "@types/through": "*", - "rxjs": "^7.2.0" - } - }, - "node_modules/@types/inquirer/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@types/inquirer/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true - }, - "node_modules/@types/keyv": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", - "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/ledgerhq__hw-transport": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/@types/ledgerhq__hw-transport/-/ledgerhq__hw-transport-4.21.4.tgz", - "integrity": "sha512-vep+6yZnGv6owAthIY0w3f72w4dJIb4+yE5PCHveInTlZE9wukvU6Wc5Eig0OUUxcdhTazzeZx1xUaNVLqyQSg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/lodash": { - "version": "4.14.202", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz", - "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==" - }, - "node_modules/@types/mdast": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", - "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", - "dev": true - }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true - }, - "node_modules/@types/mocha": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", - "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==" - }, - "node_modules/@types/ms": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", - "dev": true - }, - "node_modules/@types/node": { - "version": "16.11.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz", - "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==" - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "node_modules/@types/prettier": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz", - "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==", - "dev": true - }, - "node_modules/@types/prop-types": { - "version": "15.7.4", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", - "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==" - }, - "node_modules/@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "node_modules/@types/react": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.33.tgz", - "integrity": "sha512-pLWntxXpDPaU+RTAuSGWGSEL2FRTNyRQOjSWDke/rxRg14ncsZvx8AKWMWZqvc1UOaJIAoObdZhAWvRaHFi5rw==", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-is": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-17.0.3.tgz", - "integrity": "sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/react-redux": { - "version": "7.1.20", - "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.20.tgz", - "integrity": "sha512-q42es4c8iIeTgcnB+yJgRTTzftv3eYYvCZOh1Ckn2eX/3o5TdsQYKUWpLoLuGlcY/p+VAhV9IOEZJcWk/vfkXw==", - "dependencies": { - "@types/hoist-non-react-statics": "^3.3.0", - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0", - "redux": "^4.0.0" - } - }, - "node_modules/@types/react-transition-group": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.4.tgz", - "integrity": "sha512-7gAPz7anVK5xzbeQW9wFBDg7G++aPLAFY0QaSMOou9rJZpbuI58WAuJrgu+qR92l61grlnCUe7AFX8KGahAgug==", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "node_modules/@types/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-YesPanU1+WCigC/Aj1Mga8UCOjHIfMNHZ3zzDsUY7lI8GlKnh/Kv2QwJOQ+jNQ36Ru7IfzSedlG14hppYaN13A==", - "dev": true - }, - "node_modules/@types/semver": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.5.tgz", - "integrity": "sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==", - "dev": true - }, - "node_modules/@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dev": true, - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", - "dev": true, - "dependencies": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "node_modules/@types/through": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.33.tgz", - "integrity": "sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/tough-cookie": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.11.tgz", - "integrity": "sha512-xtFyCxnfpItBS6wRt6M+be0PzNEP6J/CqTR0mHCf/OzIbbOOh6DQ1MjiyzDrzDctzgYSmRcHH3PBvTO2hYovLg==", - "dev": true - }, - "node_modules/@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" - }, - "node_modules/@types/w3c-web-usb": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/w3c-web-usb/-/w3c-web-usb-1.0.8.tgz", - "integrity": "sha512-ouEoUTyB27wFXUUyl0uKIE6VkeCczDtazWTiZGD1M4onceJnp8KnHDf7CzLbpwzek2ZFWXTC5KrNDRc9q/Jf6Q==" - }, - "node_modules/@types/web": { - "version": "0.0.100", - "resolved": "https://registry.npmjs.org/@types/web/-/web-0.0.100.tgz", - "integrity": "sha512-8NDSrDsyF7qv93SQ7aNFk0NqpNb1QEC1meoEZW/+KGMHZWd0WOC2DiT9pVhS5+w5q+u9+2bkBCfUQpe9wbqiPA==" - }, - "node_modules/@types/ws": { - "version": "7.4.7", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", - "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", - "dev": true - }, - "node_modules/@vespaiach/axios-fetch-adapter": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@vespaiach/axios-fetch-adapter/-/axios-fetch-adapter-0.3.0.tgz", - "integrity": "sha512-X3U9VANu+8R4Wu/77bAUiUSqgeTelDFZeJcGZDe63DiFcPI6onjrMWrG3py/N4Qf8qCU3YLq+wO2d8V6ftYcaw==", - "peerDependencies": { - "axios": ">=0.26.0" - } - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", - "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-numbers/node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", - "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-numbers/node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", - "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", - "dev": true - }, - "node_modules/@webpack-cli/configtest": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.0.tgz", - "integrity": "sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==", - "dev": true, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x", - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.0.tgz", - "integrity": "sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==", - "dev": true, - "dependencies": { - "envinfo": "^7.7.3" - }, - "peerDependencies": { - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.0.tgz", - "integrity": "sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==", - "dev": true, - "peerDependencies": { - "webpack-cli": "4.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/@yoroi/api": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@yoroi/api/-/api-1.5.1.tgz", - "integrity": "sha512-upwmeE1a9pdykkDMBRl1Ubwvb4YDWbK5M3OKHAA9b0iKivpblo+vhjOqyqfaaUqRR5GdCljkgvJuaJLYqd0PVA==", - "dependencies": { - "@emurgo/cip14-js": "^3.0.1", - "@yoroi/common": "1.5.1", - "axios": "^1.5.0", - "zod": "^3.22.1" - }, - "engines": { - "node": ">= 16.19.0" - }, - "peerDependencies": { - "react": ">= 16.8.0 <= 19.0.0", - "react-query": "^3.39.3" - } - }, - "node_modules/@yoroi/api/node_modules/@emurgo/cip14-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@emurgo/cip14-js/-/cip14-js-3.0.1.tgz", - "integrity": "sha512-u0XobeajNSlmeGBmY3ntA+NE/Vns7hKP0xrFzWyAO7YubETOifTjUddJN4gpvXE4S08DPUcNBVe3sx1m5GPIOg==", - "dependencies": { - "bech32": "2.0.0", - "blake2b": "2.1.3" - } - }, - "node_modules/@yoroi/api/node_modules/@yoroi/common": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@yoroi/common/-/common-1.5.1.tgz", - "integrity": "sha512-ifOdu0wOoXUqMAWfsK05UAQIBytUHK6W60P5gdcBDjg7s28IykxRP7h0MnbGocgV89p5Sdyd/10yb0eRh2o+Nw==", - "dependencies": { - "axios": "^1.5.0", - "zod": "^3.22.1" - }, - "engines": { - "node": ">= 16.19.0" - }, - "peerDependencies": { - "@react-native-async-storage/async-storage": ">= 1.19.3 <= 1.20.0", - "react": ">= 16.8.0 <= 19.0.0", - "react-query": "^3.39.3" - } - }, - "node_modules/@yoroi/api/node_modules/axios": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.1.tgz", - "integrity": "sha512-+LV37nQcd1EpFalkXksWNBiA17NZ5m5/WspmHGmZmdx1qBOg/VNq/c4eRJiA9VQQHBOs+N0ZhhdU10h2TyNK7Q==", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/@yoroi/api/node_modules/blake2b": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/blake2b/-/blake2b-2.1.3.tgz", - "integrity": "sha512-pkDss4xFVbMb4270aCyGD3qLv92314Et+FsKzilCLxDz5DuZ2/1g3w4nmBbu6nKApPspnjG7JcwTjGZnduB1yg==", - "dependencies": { - "blake2b-wasm": "^1.1.0", - "nanoassert": "^1.0.0" - } - }, - "node_modules/@yoroi/api/node_modules/blake2b-wasm": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/blake2b-wasm/-/blake2b-wasm-1.1.7.tgz", - "integrity": "sha512-oFIHvXhlz/DUgF0kq5B1CqxIDjIJwh9iDeUUGQUcvgiGz7Wdw03McEO7CfLBy7QKGdsydcMCgO9jFNBAFCtFcA==", - "dependencies": { - "nanoassert": "^1.0.0" - } - }, - "node_modules/@yoroi/api/node_modules/nanoassert": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-1.1.0.tgz", - "integrity": "sha512-C40jQ3NzfkP53NsO8kEOFd79p4b9kDXQMwgiY1z8ZwrDZgUyom0AHwGegF4Dm99L+YoYhuaB0ceerUcXmqr1rQ==" - }, - "node_modules/@yoroi/common": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@yoroi/common/-/common-1.5.0.tgz", - "integrity": "sha512-MSKqDSGQ8Iv18f2KCxkIl+I+nPHLww/2Y1jBiHvgaSEQ6MoN6rZsV+CIoPorSAhcc/mIiWX7gl3sdfU7trsiUQ==", - "dependencies": { - "axios": "^1.5.0", - "zod": "^3.22.1" - }, - "engines": { - "node": ">= 16.19.0" - }, - "peerDependencies": { - "@react-native-async-storage/async-storage": ">= 1.19.3 <= 1.20.0", - "react": ">= 16.8.0 <= 19.0.0", - "react-query": "^3.39.3" - } - }, - "node_modules/@yoroi/common/node_modules/axios": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", - "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/@yoroi/exchange": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@yoroi/exchange/-/exchange-2.0.1.tgz", - "integrity": "sha512-NK2Z0ektfkiD73lRIQQDHmXg5L26rQ1K3YaLLElSCsnR2jFWxJNTCY/xpX9/y3pB+jtuIP6B0NxvHKM+6PK1GQ==", - "dependencies": { - "@yoroi/common": "1.5.2", - "@yoroi/types": "1.5.4" - }, - "engines": { - "node": ">= 16.19.0" - }, - "optionalDependencies": { - "@react-native-async-storage/async-storage": "^1.19.3" - }, - "peerDependencies": { - "@react-native-async-storage/async-storage": ">= 1.19.3 <= 1.20.0", - "axios": "^1.5.0", - "immer": "^10.0.2", - "react": ">= 16.8.0 <= 19.0.0", - "react-query": "^3.39.3", - "zod": "^3.22.4" - } - }, - "node_modules/@yoroi/exchange/node_modules/@yoroi/common": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@yoroi/common/-/common-1.5.2.tgz", - "integrity": "sha512-RBmWIqcZr7SrJTnbIhAlf4WzqGuaO6Lt+Bj/RkWlH0hFkETg7kqaXBmxrRN/ZrwngB+1XXXlRL2Zz21sqwLy/A==", - "dependencies": { - "@yoroi/types": "1.5.4" - }, - "engines": { - "node": ">= 16.19.0" - }, - "peerDependencies": { - "@react-native-async-storage/async-storage": ">= 1.19.3 <= 1.20.0", - "axios": "^1.5.0", - "react": ">= 16.8.0 <= 19.0.0", - "react-native-mmkv": "^2.11.0", - "react-query": "^3.39.3", - "zod": "^3.22.1" - } - }, - "node_modules/@yoroi/resolver": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@yoroi/resolver/-/resolver-2.0.2.tgz", - "integrity": "sha512-Oc57u66flJOxJIkOWxLZQoiU9pfGPXfJLXGpsh8PCwMxhu18+EZM+CXTEbPHoX3cakGQbjnmjWcjNyBMh8gtig==", - "dependencies": { - "@yoroi/api": "1.5.0", - "@yoroi/common": "1.5.0", - "axios": "^1.5.0", - "zod": "^3.22.2" - }, - "engines": { - "node": ">= 16.19.0" - }, - "peerDependencies": { - "@react-native-async-storage/async-storage": ">= 1.19.3 <= 1.20.0", - "react": ">= 16.8.0 <= 19.0.0", - "react-query": "^3.39.3" - } - }, - "node_modules/@yoroi/resolver/node_modules/@emurgo/cip14-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@emurgo/cip14-js/-/cip14-js-3.0.1.tgz", - "integrity": "sha512-u0XobeajNSlmeGBmY3ntA+NE/Vns7hKP0xrFzWyAO7YubETOifTjUddJN4gpvXE4S08DPUcNBVe3sx1m5GPIOg==", - "dependencies": { - "bech32": "2.0.0", - "blake2b": "2.1.3" - } - }, - "node_modules/@yoroi/resolver/node_modules/@yoroi/api": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@yoroi/api/-/api-1.5.0.tgz", - "integrity": "sha512-NDBooUvBn/1dk3wSF1elNhRxuxE5qSsqA6V6kcYPrb/vCWPQlom1T/zouPfT9Vfyc/eHDDZxz83/6dOIw3W4QA==", - "dependencies": { - "@emurgo/cip14-js": "^3.0.1", - "@yoroi/common": "1.5.0", - "axios": "^1.5.0", - "zod": "^3.22.1" - }, - "engines": { - "node": ">= 16.19.0" - }, - "peerDependencies": { - "react": ">= 16.8.0 <= 19.0.0", - "react-query": "^3.39.3" - } - }, - "node_modules/@yoroi/resolver/node_modules/axios": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz", - "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==", - "dependencies": { - "follow-redirects": "^1.15.4", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/@yoroi/resolver/node_modules/blake2b": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/blake2b/-/blake2b-2.1.3.tgz", - "integrity": "sha512-pkDss4xFVbMb4270aCyGD3qLv92314Et+FsKzilCLxDz5DuZ2/1g3w4nmBbu6nKApPspnjG7JcwTjGZnduB1yg==", - "dependencies": { - "blake2b-wasm": "^1.1.0", - "nanoassert": "^1.0.0" - } - }, - "node_modules/@yoroi/resolver/node_modules/blake2b-wasm": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/blake2b-wasm/-/blake2b-wasm-1.1.7.tgz", - "integrity": "sha512-oFIHvXhlz/DUgF0kq5B1CqxIDjIJwh9iDeUUGQUcvgiGz7Wdw03McEO7CfLBy7QKGdsydcMCgO9jFNBAFCtFcA==", - "dependencies": { - "nanoassert": "^1.0.0" - } - }, - "node_modules/@yoroi/resolver/node_modules/nanoassert": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-1.1.0.tgz", - "integrity": "sha512-C40jQ3NzfkP53NsO8kEOFd79p4b9kDXQMwgiY1z8ZwrDZgUyom0AHwGegF4Dm99L+YoYhuaB0ceerUcXmqr1rQ==" - }, - "node_modules/@yoroi/staking": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@yoroi/staking/-/staking-1.5.1.tgz", - "integrity": "sha512-CgJhPR7rf07QSstwdhPt5C+P8jNuZiqv3s4+ODlj8x60johIl6/5sz2vt+zGcx4R8pzFw1D/pDyFmdw0BDvzlg==", - "dependencies": { - "@emurgo/cip14-js": "^3.0.1", - "bech32": "^2.0.0", - "bip39": "^3.1.0", - "immer": "^10.0.2" - }, - "engines": { - "node": ">= 16.19.0" - }, - "optionalDependencies": { - "@react-native-async-storage/async-storage": "^1.19.3" - }, - "peerDependencies": { - "@react-native-async-storage/async-storage": ">= 1.19.3 <= 1.20.0", - "react": ">= 16.8.0 <= 19.0.0", - "react-query": "^3.39.3" - } - }, - "node_modules/@yoroi/staking/node_modules/@emurgo/cip14-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@emurgo/cip14-js/-/cip14-js-3.0.1.tgz", - "integrity": "sha512-u0XobeajNSlmeGBmY3ntA+NE/Vns7hKP0xrFzWyAO7YubETOifTjUddJN4gpvXE4S08DPUcNBVe3sx1m5GPIOg==", - "dependencies": { - "bech32": "2.0.0", - "blake2b": "2.1.3" - } - }, - "node_modules/@yoroi/staking/node_modules/blake2b": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/blake2b/-/blake2b-2.1.3.tgz", - "integrity": "sha512-pkDss4xFVbMb4270aCyGD3qLv92314Et+FsKzilCLxDz5DuZ2/1g3w4nmBbu6nKApPspnjG7JcwTjGZnduB1yg==", - "dependencies": { - "blake2b-wasm": "^1.1.0", - "nanoassert": "^1.0.0" - } - }, - "node_modules/@yoroi/staking/node_modules/blake2b-wasm": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/blake2b-wasm/-/blake2b-wasm-1.1.7.tgz", - "integrity": "sha512-oFIHvXhlz/DUgF0kq5B1CqxIDjIJwh9iDeUUGQUcvgiGz7Wdw03McEO7CfLBy7QKGdsydcMCgO9jFNBAFCtFcA==", - "dependencies": { - "nanoassert": "^1.0.0" - } - }, - "node_modules/@yoroi/staking/node_modules/nanoassert": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-1.1.0.tgz", - "integrity": "sha512-C40jQ3NzfkP53NsO8kEOFd79p4b9kDXQMwgiY1z8ZwrDZgUyom0AHwGegF4Dm99L+YoYhuaB0ceerUcXmqr1rQ==" - }, - "node_modules/@yoroi/swap": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@yoroi/swap/-/swap-1.5.2.tgz", - "integrity": "sha512-kC3ER0TfEd3fmxlAqQt/mzrFbd/JRyzHhXxPCkyQPzEX2sYMgZDJh+TJOwLpanSG71LwQHpY3YXDJJuzFJUnCQ==", - "dependencies": { - "@emurgo/cip14-js": "^3.0.1", - "@yoroi/api": "1.5.1", - "@yoroi/common": "1.5.1", - "immer": "^10.0.2" - }, - "engines": { - "node": ">= 16.19.0" - }, - "optionalDependencies": { - "@react-native-async-storage/async-storage": "^1.19.3" - }, - "peerDependencies": { - "@emurgo/yoroi-lib": "0.15.0", - "@react-native-async-storage/async-storage": ">= 1.19.3 <= 1.20.0", - "react": ">= 16.8.0 <= 19.0.0", - "react-query": "^3.39.3" - } - }, - "node_modules/@yoroi/swap/node_modules/@emurgo/cip14-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@emurgo/cip14-js/-/cip14-js-3.0.1.tgz", - "integrity": "sha512-u0XobeajNSlmeGBmY3ntA+NE/Vns7hKP0xrFzWyAO7YubETOifTjUddJN4gpvXE4S08DPUcNBVe3sx1m5GPIOg==", - "dependencies": { - "bech32": "2.0.0", - "blake2b": "2.1.3" - } - }, - "node_modules/@yoroi/swap/node_modules/@yoroi/common": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@yoroi/common/-/common-1.5.1.tgz", - "integrity": "sha512-ifOdu0wOoXUqMAWfsK05UAQIBytUHK6W60P5gdcBDjg7s28IykxRP7h0MnbGocgV89p5Sdyd/10yb0eRh2o+Nw==", - "dependencies": { - "axios": "^1.5.0", - "zod": "^3.22.1" - }, - "engines": { - "node": ">= 16.19.0" - }, - "peerDependencies": { - "@react-native-async-storage/async-storage": ">= 1.19.3 <= 1.20.0", - "react": ">= 16.8.0 <= 19.0.0", - "react-query": "^3.39.3" - } - }, - "node_modules/@yoroi/swap/node_modules/axios": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.1.tgz", - "integrity": "sha512-+LV37nQcd1EpFalkXksWNBiA17NZ5m5/WspmHGmZmdx1qBOg/VNq/c4eRJiA9VQQHBOs+N0ZhhdU10h2TyNK7Q==", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/@yoroi/swap/node_modules/blake2b": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/blake2b/-/blake2b-2.1.3.tgz", - "integrity": "sha512-pkDss4xFVbMb4270aCyGD3qLv92314Et+FsKzilCLxDz5DuZ2/1g3w4nmBbu6nKApPspnjG7JcwTjGZnduB1yg==", - "dependencies": { - "blake2b-wasm": "^1.1.0", - "nanoassert": "^1.0.0" - } - }, - "node_modules/@yoroi/swap/node_modules/blake2b-wasm": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/blake2b-wasm/-/blake2b-wasm-1.1.7.tgz", - "integrity": "sha512-oFIHvXhlz/DUgF0kq5B1CqxIDjIJwh9iDeUUGQUcvgiGz7Wdw03McEO7CfLBy7QKGdsydcMCgO9jFNBAFCtFcA==", - "dependencies": { - "nanoassert": "^1.0.0" - } - }, - "node_modules/@yoroi/swap/node_modules/nanoassert": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-1.1.0.tgz", - "integrity": "sha512-C40jQ3NzfkP53NsO8kEOFd79p4b9kDXQMwgiY1z8ZwrDZgUyom0AHwGegF4Dm99L+YoYhuaB0ceerUcXmqr1rQ==" - }, - "node_modules/@yoroi/types": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@yoroi/types/-/types-1.5.4.tgz", - "integrity": "sha512-Hk3YHG6glQcStNjkwgDI+pWfLNfFGk+N3Iz8Iv/t+8mVFU4tZy4ZQYwtx5IIRVTwrl62maGlH9/84rwXp2u3Yw==", - "engines": { - "node": ">= 16.19.0" - }, - "peerDependencies": { - "axios": "^1.5.0" - } - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", - "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", - "dev": true, - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ansicolors": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", - "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==", - "dev": true - }, - "node_modules/antlr4ts": { - "version": "0.5.0-alpha.4", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", - "dev": true - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "node_modules/archiver": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-3.1.1.tgz", - "integrity": "sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg==", - "dev": true, - "dependencies": { - "archiver-utils": "^2.1.0", - "async": "^2.6.3", - "buffer-crc32": "^0.2.1", - "glob": "^7.1.4", - "readable-stream": "^3.4.0", - "tar-stream": "^2.1.0", - "zip-stream": "^2.1.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "dev": true, - "dependencies": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/archiver-utils/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/archiver-utils/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/archiver-utils/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/archiver-utils/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "node_modules/array-includes": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", - "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", - "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/assert": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", - "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", - "dependencies": { - "call-bind": "^1.0.2", - "is-nan": "^1.3.2", - "object-is": "^1.1.5", - "object.assign": "^4.1.4", - "util": "^0.12.5" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", - "dev": true - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/async-mutex": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.5.0.tgz", - "integrity": "sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/async-mutex/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/atob-lite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz", - "integrity": "sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=", - "dev": true - }, - "node_modules/autoprefixer": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.4.tgz", - "integrity": "sha512-DCCdUQiMD+P/as8m3XkeTUkUKuuRqLGcwD0nll7wevhqoJfMRpJlkFd1+MQh1pvupjiQuip42lc/VFvfUTMSKw==", - "dev": true, - "dependencies": { - "browserslist": "^4.16.1", - "caniuse-lite": "^1.0.30001181", - "colorette": "^1.2.1", - "fraction.js": "^4.0.13", - "normalize-range": "^0.1.2", - "postcss-value-parser": "^4.1.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axe-core": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz", - "integrity": "sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", - "dependencies": { - "follow-redirects": "^1.10.0" - } - }, - "node_modules/axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", - "dev": true - }, - "node_modules/b4a": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", - "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==" - }, - "node_modules/babel-eslint": { - "version": "11.0.0-beta.2", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-11.0.0-beta.2.tgz", - "integrity": "sha512-D2tunrOu04XloEdU2XVUminUu25FILlGruZmffqH5OSnLDhCheKNvUoM1ihrexdUvhizlix8bjqRnsss4V/UIQ==", - "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", - "dev": true, - "dependencies": { - "eslint-scope": "5.0.0", - "eslint-visitor-keys": "^1.1.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "@babel/core": ">=7.2.0", - "eslint": ">= 6.0.0" - } - }, - "node_modules/babel-eslint/node_modules/eslint-scope": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", - "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/babel-eslint/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-helper-is-react-class": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/babel-helper-is-react-class/-/babel-helper-is-react-class-1.0.0.tgz", - "integrity": "sha1-7282eLBcdtve7a3q16+YwnJNhDE=", - "dev": true - }, - "node_modules/babel-jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", - "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", - "dev": true, - "dependencies": { - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/babel-jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-loader": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", - "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", - "dev": true, - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^1.4.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-loader/node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/babel-loader/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/babel-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/babel-loader/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-loader/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-loader/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-loader/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-loader/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-loader/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-add-module-exports": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-1.0.4.tgz", - "integrity": "sha512-g+8yxHUZ60RcyaUpfNzy56OtWW+x9cyEe9j+CranqLiqbju2yf/Cy6ZtYK40EZxtrdHllzlVZgLmcOUCTlJ7Jg==", - "dev": true - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", - "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/babel-plugin-macros": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", - "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "cosmiconfig": "^6.0.0", - "resolve": "^1.12.0" - } - }, - "node_modules/babel-plugin-macros/node_modules/@babel/runtime": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", - "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/babel-plugin-module-resolver": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-4.1.0.tgz", - "integrity": "sha512-MlX10UDheRr3lb3P0WcaIdtCSRlxdQsB1sBqL7W0raF070bGl1HQQq5K3T2vf2XAYie+ww+5AKC/WrkjRO2knA==", - "dev": true, - "dependencies": { - "find-babel-config": "^1.2.0", - "glob": "^7.1.6", - "pkg-up": "^3.1.0", - "reselect": "^4.0.0", - "resolve": "^1.13.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/babel-plugin-nameof-js": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-nameof-js/-/babel-plugin-nameof-js-0.0.2.tgz", - "integrity": "sha1-fJqorwAmvZ41UAQjWjN8EydT/fM=", - "dev": true - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.3.tgz", - "integrity": "sha512-NDZ0auNRzmAfE1oDDPW2JhzIMXUk+FFe2ICejmt5T4ocKgiQx3e0VCRx9NCAidcMtL2RUZaWtXnmjTCkx0tcbA==", - "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.4", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.3.0.tgz", - "integrity": "sha512-JLwi9vloVdXLjzACL80j24bG6/T1gYxwowG44dg6HN/7aTPdyPbJJidf6ajoA3RPHHtW0j9KMrSOLpIZpAnPpg==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.4", - "core-js-compat": "^3.18.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.3.tgz", - "integrity": "sha512-JVE78oRZPKFIeUqFGrSORNzQnrDwZR16oiWeGM8ZyjBn2XAT5OjP+wXx5ESuo33nUsFUEJYjtklnsKbxW5L+7g==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-react-intl": { - "version": "5.1.18", - "resolved": "https://registry.npmjs.org/babel-plugin-react-intl/-/babel-plugin-react-intl-5.1.18.tgz", - "integrity": "sha512-tzzZoGDNQOiHmGFh+NPQJDpC10RbKlfw1CBVfALulqRa6UGkAv5eMs9sirxjhD3HryHPbYZ4x5FNdbzOyG2GJw==", - "deprecated": "this package has been renamed to babel-plugin-formatjs", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.2", - "@babel/helper-plugin-utils": "^7.0.0", - "@types/babel__core": "^7.1.3", - "@types/schema-utils": "^1.0.0", - "fs-extra": "^8.1.0", - "intl-messageformat-parser": "^3.6.4", - "schema-utils": "^2.2.0" - } - }, - "node_modules/babel-plugin-react-intl/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/babel-plugin-react-intl/node_modules/intl-messageformat-parser": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-3.6.4.tgz", - "integrity": "sha512-RgPGwue0mJtoX2Ax8EmMzJzttxjnva7gx0Q7mKJ4oALrTZvtmCeAw5Msz2PcjW4dtCh/h7vN/8GJCxZO1uv+OA==", - "deprecated": "We've written a new parser that's 6x faster and is backwards compatible. Please use @formatjs/icu-messageformat-parser", - "dev": true, - "dependencies": { - "@formatjs/intl-unified-numberformat": "^3.2.0" - } - }, - "node_modules/babel-plugin-react-intl/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/babel-plugin-react-intl/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/babel-plugin-transform-react-constant-elements": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-constant-elements/-/babel-plugin-transform-react-constant-elements-6.23.0.tgz", - "integrity": "sha1-LxGb9NLN1F65uqrldAU8YE9hR90=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-react-inline-elements": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-inline-elements/-/babel-plugin-transform-react-inline-elements-6.22.0.tgz", - "integrity": "sha1-ZochGjK0mlLyLFc6K1UEol7xfFM=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-react-pure-class-to-function": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-pure-class-to-function/-/babel-plugin-transform-react-pure-class-to-function-1.0.1.tgz", - "integrity": "sha1-MqZJyX1lMlC0Gc/RSJMxsCkNnuQ=", - "dev": true, - "dependencies": { - "babel-helper-is-react-class": "^1.0.0" - } - }, - "node_modules/babel-plugin-transform-react-remove-prop-types": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.2.12.tgz", - "integrity": "sha1-NAZpbfC4tFYIn51ybSfn4SPS+Sk=", - "dev": true - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", - "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^26.6.2", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-react-optimize": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-react-optimize/-/babel-preset-react-optimize-1.0.1.tgz", - "integrity": "sha1-wjUJ+6fLx2195wUOfSa80ivDBOg=", - "dev": true, - "dependencies": { - "babel-plugin-transform-react-constant-elements": "^6.5.0", - "babel-plugin-transform-react-inline-elements": "^6.6.5", - "babel-plugin-transform-react-pure-class-to-function": "^1.0.1", - "babel-plugin-transform-react-remove-prop-types": "^0.2.5" - } - }, - "node_modules/babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "dependencies": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "node_modules/babel-runtime/node_modules/regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - }, - "node_modules/bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "node_modules/bchaddrjs": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/bchaddrjs/-/bchaddrjs-0.5.2.tgz", - "integrity": "sha512-OO7gIn3m7ea4FVx4cT8gdlWQR2+++EquhdpWQJH9BQjK63tJJ6ngB3QMZDO6DiBoXiIGUsTPHjlrHVxPGcGxLQ==", - "dependencies": { - "bs58check": "2.1.2", - "buffer": "^6.0.3", - "cashaddrjs": "0.4.4", - "stream-browserify": "^3.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/bech32": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz", - "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==" - }, - "node_modules/before-after-hook": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", - "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", - "dev": true - }, - "node_modules/big-integer": { - "version": "1.6.36", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.36.tgz", - "integrity": "sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "engines": { - "node": "*" - } - }, - "node_modules/bignumber.js": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", - "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", - "engines": { - "node": "*" - } - }, - "node_modules/binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", - "dev": true, - "dependencies": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bip32": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/bip32/-/bip32-4.0.0.tgz", - "integrity": "sha512-aOGy88DDlVUhspIXJN+dVEtclhIsfAUppD43V0j40cPTld3pv/0X/MlrZSZ6jowIaQQzFwP8M6rFU2z2mVYjDQ==", - "dependencies": { - "@noble/hashes": "^1.2.0", - "@scure/base": "^1.1.1", - "typeforce": "^1.11.5", - "wif": "^2.0.6" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/bip39": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.1.0.tgz", - "integrity": "sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A==", - "dependencies": { - "@noble/hashes": "^1.2.0" - } - }, - "node_modules/bip66": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", - "integrity": "sha512-nemMHz95EmS38a26XbbdxIYj5csHd3RMP3H5bwQknX0WYHF01qhpufP42mLOwVICuH2JmhIhXiWs89MfUGL7Xw==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/bitcoin-ops": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/bitcoin-ops/-/bitcoin-ops-1.4.1.tgz", - "integrity": "sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow==" - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/blake-hash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/blake-hash/-/blake-hash-2.0.0.tgz", - "integrity": "sha512-Igj8YowDu1PRkRsxZA7NVkdFNxH5rKv5cpLxQ0CVXSIA77pVYwCPRQJ2sMew/oneUpfuYRyjG6r8SmmmnbZb1w==", - "hasInstallScript": true, - "dependencies": { - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.2", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/blake2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/blake2/-/blake2-4.1.1.tgz", - "integrity": "sha512-HUmkY0MUDUVgejJVNrpNKAva8C4IWD/Rd862sdexoSibu86b6iu0gO0/RjovO2lM5+w6JqjIEmkuAgGhfHlnJw==", - "hasInstallScript": true, - "dependencies": { - "nan": "^2.15.0" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/blake2b": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/blake2b/-/blake2b-2.1.4.tgz", - "integrity": "sha512-AyBuuJNI64gIvwx13qiICz6H6hpmjvYS5DGkG6jbXMOT8Z3WUJ3V1X0FlhIoT1b/5JtHE3ki+xjtMvu1nn+t9A==", - "dependencies": { - "blake2b-wasm": "^2.4.0", - "nanoassert": "^2.0.0" - } - }, - "node_modules/blake2b-wasm": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/blake2b-wasm/-/blake2b-wasm-2.4.0.tgz", - "integrity": "sha512-S1kwmW2ZhZFFFOghcx73+ZajEfKBqhP82JMssxtLVMxlaPea1p9uoLiUZ5WYyHn0KddwbLc+0vh4wR0KBNoT5w==", - "dependencies": { - "b4a": "^1.0.1", - "nanoassert": "^2.0.0" - } - }, - "node_modules/blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" - }, - "node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "dependencies": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/bonjour-service": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.13.tgz", - "integrity": "sha512-LWKRU/7EqDUC9CTAQtuZl5HzBALoCYwtLhffW3et7vZMwv3bWLpJf8bRYlMD5OCcDpTfnPgNCV4yo9ZIaJGMiA==", - "dev": true, - "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/bonjour-service/node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/brace-expansion/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/broadcast-channel": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/broadcast-channel/-/broadcast-channel-3.7.0.tgz", - "integrity": "sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "detect-node": "^2.1.0", - "js-sha3": "0.8.0", - "microseconds": "0.2.0", - "nano-time": "1.0.0", - "oblivious-set": "1.0.0", - "rimraf": "3.0.2", - "unload": "2.2.0" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/browserify-rsa/node_modules/bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" - }, - "node_modules/browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "node_modules/browserify-sign/node_modules/bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" - }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dependencies": { - "pako": "~1.0.5" - } - }, - "node_modules/browserslist": { - "version": "4.17.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.5.tgz", - "integrity": "sha512-I3ekeB92mmpctWBoLXe0d5wPS2cBuRvvW0JyyJHMrk9/HmP2ZjrTboNAZ8iuGqaEIlKguljbQY32OkOJIRrgoA==", - "dependencies": { - "caniuse-lite": "^1.0.30001271", - "electron-to-chromium": "^1.3.878", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", - "dependencies": { - "base-x": "^3.0.2" - } - }, - "node_modules/bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/btoa-lite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=", - "dev": true - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "engines": { - "node": "*" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/buffer-indexof-polyfill": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", - "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "node_modules/buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", - "dev": true, - "engines": { - "node": ">=0.2.0" - } - }, - "node_modules/byline": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", - "integrity": "sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/byte-length/-/byte-length-1.0.2.tgz", - "integrity": "sha512-ovBpjmsgd/teRmgcPh23d4gJvxDoXtAzEL9xTfMU8Yc2kqCDb7L9jAG0XHl1nzuGl+h3ebCIF1i62UFyA9V/2Q==", - "dev": true - }, - "node_modules/bytebuffer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz", - "integrity": "sha512-IuzSdmADppkZ6DlpycMkm8l9zeEq16fWtLvunEwFiYciR/BHo4E8/xs5piFquG+Za8OWmMqHF8zuRviz2LHvRQ==", - "dependencies": { - "long": "~3" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/bytebuffer/node_modules/long": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", - "integrity": "sha512-ZYvPPOMqUwPoDsbJaR10iQJYnMuZhRTvHYl62ErLIEX7RgFlziSBUUvrt3OVfc47QlHHpzPZYP17g3Fv7oeJkg==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cache-base/node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cacheable-lookup": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-2.0.1.tgz", - "integrity": "sha512-EMMbsiOTcdngM/K6gV/OxF2x0t07+vMOWxZNSCRQMjO2MY2nhZQ6OYhOOpyQrbhqsgtvKGI7hcq6xjnA92USjg==", - "dev": true, - "dependencies": { - "@types/keyv": "^3.1.1", - "keyv": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", - "dev": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", - "dependencies": { - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camel-case/node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "dev": true - }, - "node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-keys/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001332", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001332.tgz", - "integrity": "sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/canvas-renderer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/canvas-renderer/-/canvas-renderer-2.2.0.tgz", - "integrity": "sha512-Itdq9pwXcs4IbbkRCXc7reeGBk6i6tlDtZTjE1yc+KvYkx1Mt3WLf6tidZ/Ixbm7Vmi+jpWKG0dRBor67x9yGw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "dependencies": { - "rsvp": "^4.8.4" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/cardano-wallet": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cardano-wallet/-/cardano-wallet-1.2.2.tgz", - "integrity": "sha512-G3nq0CDOQLph6cdeDj4Ienkjf0WTJOC5f8mnxgi8BGO68Qx9oCLjK6gIwJr2WXisCUTK+m21KvLQxHuw1zEmug==", - "dev": true - }, - "node_modules/cardano-wallet-browser": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cardano-wallet-browser/-/cardano-wallet-browser-1.2.2.tgz", - "integrity": "sha512-KogurUQeo/jiaHkB+TJygawTHPMPVjLvj8c5OjnxS7jQL7mTAqwMnrWrsFYX0iBb6mqFy5DhwNR4Kco/RoLMaQ==" - }, - "node_modules/cardinal": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", - "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==", - "dev": true, - "dependencies": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" - }, - "bin": { - "cdl": "bin/cdl.js" - } - }, - "node_modules/cashaddrjs": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cashaddrjs/-/cashaddrjs-0.4.4.tgz", - "integrity": "sha512-xZkuWdNOh0uq/mxJIng6vYWfTowZLd9F4GMAlp2DwFHlcCqCm91NtuAc47RuV4L7r4PYcY5p6Cr2OKNb4hnkWA==", - "dependencies": { - "big-integer": "1.6.36" - } - }, - "node_modules/cbor": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", - "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", - "dependencies": { - "nofilter": "^3.1.0" - }, - "engines": { - "node": ">=12.19" - } - }, - "node_modules/chacha": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chacha/-/chacha-2.1.0.tgz", - "integrity": "sha1-9NV8h2ihtCBumWf4WLSNp90o6qY=", - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^1.0.33" - }, - "optionalDependencies": { - "chacha-native": "^2.0.0" - } - }, - "node_modules/chacha-native": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/chacha-native/-/chacha-native-2.0.3.tgz", - "integrity": "sha512-93h+osfjhR2sMHAaapTLlL/COoBPEZ6upicPBQ4GfUyadoMb8t9/M0PKK8kC+F+DEA/Oy3Kg9w3HzY3J1foP3g==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "bindings": "^1.2.1", - "inherits": "^2.0.1", - "nan": "^2.4.0" - } - }, - "node_modules/chacha/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/chacha/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "node_modules/chai": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.0.tgz", - "integrity": "sha512-/BFd2J30EcOwmdOgXvVsmM48l0Br0nmZPlO0uOW4XKh6kpsUumRXBgPV+IlaqFaqr9cYbeoZAM1Npx0i4A+aiA==", - "dev": true, - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.0", - "type-detect": "^4.0.5" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chai-as-promised": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", - "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", - "dev": true, - "dependencies": { - "check-error": "^1.0.2" - }, - "peerDependencies": { - "chai": ">= 2.1.2 < 5" - } - }, - "node_modules/chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", - "dev": true, - "dependencies": { - "traverse": ">=0.3.0 <0.4" - }, - "engines": { - "node": "*" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/cjs-module-lexer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", - "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", - "dev": true - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/classnames": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", - "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" - }, - "node_modules/clean-css": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", - "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", - "dev": true, - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/clean-css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-progress": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz", - "integrity": "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==", - "dev": true, - "dependencies": { - "string-width": "^4.2.3" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz", - "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-ux": { - "version": "5.6.7", - "resolved": "https://registry.npmjs.org/cli-ux/-/cli-ux-5.6.7.tgz", - "integrity": "sha512-dsKAurMNyFDnO6X1TiiRNiVbL90XReLKcvIq4H777NMqXGBxBws23ag8ubCJE97vVZEgWG2eSUhsyLf63Jv8+g==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dev": true, - "dependencies": { - "@oclif/command": "^1.8.15", - "@oclif/errors": "^1.3.5", - "@oclif/linewrap": "^1.0.0", - "@oclif/screen": "^1.0.4", - "ansi-escapes": "^4.3.0", - "ansi-styles": "^4.2.0", - "cardinal": "^2.1.1", - "chalk": "^4.1.0", - "clean-stack": "^3.0.0", - "cli-progress": "^3.4.0", - "extract-stack": "^2.0.0", - "fs-extra": "^8.1", - "hyperlinker": "^1.0.0", - "indent-string": "^4.0.0", - "is-wsl": "^2.2.0", - "js-yaml": "^3.13.1", - "lodash": "^4.17.21", - "natural-orderby": "^2.0.1", - "object-treeify": "^1.1.4", - "password-prompt": "^1.1.2", - "semver": "^7.3.2", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "supports-color": "^8.1.0", - "supports-hyperlinks": "^2.1.0", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/cli-ux/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-ux/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cli-ux/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/cli-ux/node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-ux/node_modules/clean-stack": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", - "integrity": "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-ux/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/cli-ux/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/cli-ux/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/cli-ux/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-ux/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-ux/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/cli-ux/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-ux/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/cli-ux/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/cli-ux/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/client-oauth2": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/client-oauth2/-/client-oauth2-4.3.3.tgz", - "integrity": "sha512-k8AvUYJon0vv75ufoVo4nALYb/qwFFicO3I0+39C6xEdflqVtr+f9cy+0ZxAduoVSTfhP5DX2tY2XICAd5hy6Q==", - "dev": true, - "dependencies": { - "popsicle": "^12.0.5", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - } - }, - "node_modules/clone-response/node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/clsx": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", - "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dependencies": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", - "dev": true - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "dev": true - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "node_modules/compress-commons": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-2.1.1.tgz", - "integrity": "sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q==", - "dev": true, - "dependencies": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^3.0.1", - "normalize-path": "^3.0.0", - "readable-stream": "^2.3.6" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/compress-commons/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/compress-commons/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/compress-commons/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/compress-commons/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/compute-scroll-into-view": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.17.tgz", - "integrity": "sha512-j4dx+Fb0URmzbwwMUrhqWM2BEWHdFGx+qZ9qqASHRPqvTYdqvWnHg0H1hIbcyLnvgnoNAVMlwkepyqM3DaIFUg==" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "node_modules/concurrently": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz", - "integrity": "sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==", - "dependencies": { - "chalk": "^4.1.2", - "date-fns": "^2.30.0", - "lodash": "^4.17.21", - "rxjs": "^7.8.1", - "shell-quote": "^1.8.1", - "spawn-command": "0.0.2", - "supports-color": "^8.1.1", - "tree-kill": "^1.2.2", - "yargs": "^17.7.2" - }, - "bin": { - "conc": "dist/bin/concurrently.js", - "concurrently": "dist/bin/concurrently.js" - }, - "engines": { - "node": "^14.13.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" - } - }, - "node_modules/concurrently/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/concurrently/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/concurrently/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/concurrently/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/concurrently/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/concurrently/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/concurrently/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/concurrently/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/concurrently/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/concurrently/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/concurrently/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "node_modules/concurrently/node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/concurrently/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dependencies": { - "cliui": "^8.0.1", - "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.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/concurrently/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/conf": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/conf/-/conf-6.2.4.tgz", - "integrity": "sha512-GjgyPRLo1qK1LR9RWAdUagqo+DP18f5HWCFk4va7GS+wpxQTOzfuKTwKOvGW2c01/YXNicAyyoyuSddmdkBzZQ==", - "dev": true, - "dependencies": { - "ajv": "^6.10.2", - "debounce-fn": "^3.0.1", - "dot-prop": "^5.0.0", - "env-paths": "^2.2.0", - "json-schema-typed": "^7.0.1", - "make-dir": "^3.0.0", - "onetime": "^5.1.0", - "pkg-up": "^3.0.1", - "semver": "^6.2.0", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conf/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conf/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/config": { - "version": "1.31.0", - "resolved": "https://registry.npmjs.org/config/-/config-1.31.0.tgz", - "integrity": "sha512-Ep/l9Rd1J9IPueztJfpbOqVzuKHQh4ZODMNt9xqTYdBBNRXbV4oTu34kCkkfdRVcDq0ohtpaeXGgb+c0LQxFRA==", - "dev": true, - "dependencies": { - "json5": "^1.0.1" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/config-webpack": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/config-webpack/-/config-webpack-1.0.4.tgz", - "integrity": "sha512-7Eb3HfaS855sW01JUwldttWflh3UejJn/ZRfDPCSyv4p/ao8eHyGrfIR5Lyerbl5CHTEEKIRwArXPXJHIQ2X3g==", - "dev": true, - "peerDependencies": { - "config": "^1.30.0", - "webpack": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0" - } - }, - "node_modules/config/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/confusing-browser-globals": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", - "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==", - "dev": true - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "node_modules/contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-disposition/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/convert-source-map/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/copy-to-clipboard": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", - "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", - "dependencies": { - "toggle-selection": "^1.0.6" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.0.0.tgz", - "integrity": "sha512-tM6DhoJm8jvkHLjH62r5NHKSxmtyHYWOwWTkLWEZYHbxEH0Aele2pGRZ2HSDJb8Rdb/BcYWYFiJXTzHt377fPg==", - "dev": true, - "dependencies": { - "cacache": "^15.0.3", - "find-cache-dir": "^3.3.1", - "glob-parent": "^5.1.1", - "globby": "^11.0.0", - "loader-utils": "^2.0.0", - "normalize-path": "^3.0.0", - "p-limit": "^2.3.0", - "schema-utils": "^2.6.6", - "serialize-javascript": "^3.0.0", - "webpack-sources": "^1.4.3" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/copy-webpack-plugin/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/copy-webpack-plugin/node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/copy-webpack-plugin/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/copy-webpack-plugin/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/copy-webpack-plugin/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/copy-webpack-plugin/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/copy-webpack-plugin/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/copy-webpack-plugin/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/copy-webpack-plugin/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/copy-webpack-plugin/node_modules/serialize-javascript": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz", - "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", - "hasInstallScript": true - }, - "node_modules/core-js-compat": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.0.tgz", - "integrity": "sha512-R09rKZ56ccGBebjTLZHvzDxhz93YPT37gBm6qUhnwj3Kt7aCjjZWD1injyNbyeFHxNKfeZBSyds6O9n3MKq1sw==", - "dependencies": { - "browserslist": "^4.17.5", - "semver": "7.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/core-js-pure": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.35.0.tgz", - "integrity": "sha512-f+eRYmkou59uh7BPcyJ8MC76DiGhspj1KMxVIcF24tzP8NA9HVa1uC7BTW2tgx7E1QVCzDzsgp7kArrzhlz8Ew==", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/crc32-stream": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz", - "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==", - "dev": true, - "dependencies": { - "crc": "^3.4.4", - "readable-stream": "^3.4.0" - }, - "engines": { - "node": ">= 6.9.0" - } - }, - "node_modules/crc32-stream/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/crc32-stream/node_modules/crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", - "dev": true, - "dependencies": { - "buffer": "^5.1.0" - } - }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/cross-fetch": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", - "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", - "dependencies": { - "node-fetch": "^2.6.12" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crx": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/crx/-/crx-5.0.1.tgz", - "integrity": "sha512-n/PzBx/fR1+xZCiJBats9y5zw/a+YBcoJ0ABnUaY56xb1RpXuFhsiCMpNY6WjVtylLzhUUXSWsbitesVg7v2vg==", - "dev": true, - "dependencies": { - "archiver": "^3.0.3", - "commander": "^2.20.0", - "node-rsa": "^1.0.5", - "pbf": "^3.2.0" - }, - "bin": { - "crx": "src/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/crx/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" - } - }, - "node_modules/crypto-random-string": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-3.3.1.tgz", - "integrity": "sha512-5j88ECEn6h17UePrLi6pn1JcLtAiANa3KExyr9y9Z5vo2mv56Gh3I4Aja/B9P9uyMwyxNHAHWv+nE72f30T5Dg==", - "dependencies": { - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/css-box-model": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz", - "integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==", - "dependencies": { - "tiny-invariant": "^1.0.6" - } - }, - "node_modules/css-loader": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.0.2.tgz", - "integrity": "sha512-gbkBigdcHbmNvZ1Cg6aV6qh6k9N6XOr8YWzISLQGrwk2mgOH8LLrizhkxbDhQtaLtktyKHD4970S0xwz5btfTA==", - "dev": true, - "dependencies": { - "camelcase": "^6.2.0", - "cssesc": "^3.0.0", - "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.4", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.4" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.27.0 || ^5.0.0" - } - }, - "node_modules/css-loader/node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/css-loader/node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/css-loader/node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/css-loader/node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/css-loader/node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/css-loader/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "node_modules/css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" - }, - "node_modules/css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "dependencies": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-tree/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssfontparser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/cssfontparser/-/cssfontparser-1.2.1.tgz", - "integrity": "sha1-9AIvyPlwDGgCnVQghK+69CWj8+M=", - "dev": true - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/csso/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/csstype": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.9.tgz", - "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==" - }, - "node_modules/d3-array": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", - "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" - }, - "node_modules/d3-collection": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", - "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" - }, - "node_modules/d3-color": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", - "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==" - }, - "node_modules/d3-format": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", - "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==" - }, - "node_modules/d3-interpolate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", - "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", - "dependencies": { - "d3-color": "1" - } - }, - "node_modules/d3-path": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", - "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" - }, - "node_modules/d3-scale": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz", - "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==", - "dependencies": { - "d3-array": "^1.2.0", - "d3-collection": "1", - "d3-format": "1", - "d3-interpolate": "1", - "d3-time": "1", - "d3-time-format": "2" - } - }, - "node_modules/d3-shape": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", - "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", - "dependencies": { - "d3-path": "1" - } - }, - "node_modules/d3-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", - "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==" - }, - "node_modules/d3-time-format": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", - "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", - "dependencies": { - "d3-time": "1" - } - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz", - "integrity": "sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw==", - "dev": true - }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/data-urls/node_modules/abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "deprecated": "Use your platform's native atob() and btoa() methods instead", - "dev": true - }, - "node_modules/data-urls/node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/data-urls/node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "engines": { - "node": ">=10.4" - } - }, - "node_modules/data-urls/node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/date-fns": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", - "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", - "dependencies": { - "@babel/runtime": "^7.21.0" - }, - "engines": { - "node": ">=0.11" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" - } - }, - "node_modules/date-fns/node_modules/@babel/runtime": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.5.tgz", - "integrity": "sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/date-fns/node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - }, - "node_modules/debounce-fn": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-3.0.1.tgz", - "integrity": "sha512-aBoJh5AhpqlRoHZjHmOzZlRx+wz2xVwGL9rjs+Kj0EWUrL4/h4K7OD176thl2Tdoqui/AaA4xhHrNArGLAaI3Q==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/debounce-fn/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/debug-log": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", - "integrity": "sha512-gV/pe1YIaKNgLYnd1g9VNW80tcb7oV5qvNUxG7NM8rbDpnl6RGunzlAtlGSb0wEs3nesu2vHNiX9TSsZ+Y+RjA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", - "dev": true, - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==" - }, - "node_modules/decimal.js-light": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", - "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==" - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/decompress-response": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-5.0.0.tgz", - "integrity": "sha512-TLZWWybuxWgoW7Lykv+gq9xvzOsUjQ9tF09Tj6NSTYGMTCHNXzrPnD6Hi+TgZq19PyTAGH4Ll/NIM/eTGglnMw==", - "dev": true, - "dependencies": { - "mimic-response": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/default-gateway/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/default-gateway/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-gateway/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/default-gateway/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-gateway/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", - "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/deglob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/deglob/-/deglob-3.1.0.tgz", - "integrity": "sha512-al10l5QAYaM/PeuXkAr1Y9AQz0LCtWsnJG23pIgh44hDxHFOj36l6qvhfjnIWBYwZOqM1fXUFV9tkjL7JPdGvw==", - "dev": true, - "dependencies": { - "find-root": "^1.0.0", - "glob": "^7.0.5", - "ignore": "^5.0.0", - "pkg-config": "^1.1.0", - "run-parallel": "^1.1.2", - "uniq": "^1.0.1" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true - }, - "node_modules/des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "node_modules/detect-libc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", - "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "node_modules/diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", - "dev": true, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, - "node_modules/dns-packet": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", - "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", - "dev": true, - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "dependencies": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, - "node_modules/dom-helpers/node_modules/@babel/runtime": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", - "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "node_modules/dom-serializer/node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "deprecated": "Use your platform's native DOMException instead", - "dev": true, - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domhandler/node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dot-case/node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "dev": true - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/downshift": { - "version": "6.1.7", - "resolved": "https://registry.npmjs.org/downshift/-/downshift-6.1.7.tgz", - "integrity": "sha512-cVprZg/9Lvj/uhYRxELzlu1aezRcgPWBjTvspiGTVEU64gF5pRdSRKFVLcxqsZC637cLAGMbL40JavEfWnqgNg==", - "dependencies": { - "@babel/runtime": "^7.14.8", - "compute-scroll-into-view": "^1.0.17", - "prop-types": "^15.7.2", - "react-is": "^17.0.2", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "react": ">=16.12.0" - } - }, - "node_modules/downshift/node_modules/@babel/runtime": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", - "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/downshift/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" - }, - "node_modules/downshift/node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, - "node_modules/dropbox": { - "version": "4.0.30", - "resolved": "https://registry.npmjs.org/dropbox/-/dropbox-4.0.30.tgz", - "integrity": "sha512-qmSeT8rhjARDHj3vxOTKQjc6IQ46AlRwJS8dqE26R323fikkjC4EXzocV12PsO7DOrjaqbOH3FjEdEEnrFraJw==", - "dependencies": { - "buffer": "^5.0.8", - "moment": "^2.19.3" - } - }, - "node_modules/dropbox/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "node_modules/duplexer2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/duplexer2/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/duplexer2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/duplexer2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "node_modules/easy-crc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/easy-crc/-/easy-crc-1.1.0.tgz", - "integrity": "sha512-cvtERLTu8mYt1pOVVekJ4E0VdwyuKgL+VAfE3LY+Lw762i9M1bSEikm6fyGD2grxOdBfI0HgOmSi3HQneKr33A==" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.3.885", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.885.tgz", - "integrity": "sha512-JXKFJcVWrdHa09n4CNZYfYaK6EW5aAew7/wr3L1OnsD1L+JHL+RCtd7QgIsxUbFPeTwPlvnpqNNTOLkoefmtXg==" - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/emittery": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", - "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/error-stack-parser": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", - "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", - "dev": true, - "dependencies": { - "stackframe": "^1.1.1" - } - }, - "node_modules/es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-module-lexer": { - "version": "0.3.26", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.3.26.tgz", - "integrity": "sha512-Va0Q/xqtrss45hWzP8CZJwzGSZJjDM5/MJRE3IXXnUCcVLElR9BRaE9F62BopysASyc4nM3uwhSW7FFB9nlWAA==", - "dev": true - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.20.0.tgz", - "integrity": "sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.3.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "file-entry-cache": "^6.0.0", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash": "^4.17.20", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.4", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-airbnb": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-18.2.1.tgz", - "integrity": "sha512-glZNDEZ36VdlZWoxn/bUR1r/sdFKPd1mHPbqUtkctgNG4yT2DLLtJ3D+yCV+jzZCc2V1nBVkmdknOJBZ5Hc0fg==", - "dev": true, - "dependencies": { - "eslint-config-airbnb-base": "^14.2.1", - "object.assign": "^4.1.2", - "object.entries": "^1.1.2" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-jsx-a11y": "^6.4.1", - "eslint-plugin-react": "^7.21.5", - "eslint-plugin-react-hooks": "^4 || ^3 || ^2.3.0 || ^1.7.0" - } - }, - "node_modules/eslint-config-airbnb-base": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz", - "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==", - "dev": true, - "dependencies": { - "confusing-browser-globals": "^1.0.10", - "object.assign": "^4.1.2", - "object.entries": "^1.1.2" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0", - "eslint-plugin-import": "^2.22.1" - } - }, - "node_modules/eslint-config-prettier": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz", - "integrity": "sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz", - "integrity": "sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "find-up": "^2.1.0", - "pkg-dir": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "dependencies": { - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-flowtype": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.2.1.tgz", - "integrity": "sha512-uXZbEzC7iGmJLoOQ4aQVLrmNGqz5il4lTblB9wmq8R53GnCkv4/Y4K0WiJ6v07rpHHI1kOm6NTp8V//P5xTqBA==", - "dev": true, - "dependencies": { - "lodash": "^4.17.15", - "string-natural-compare": "^3.0.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "peerDependencies": { - "eslint": "^7.1.0" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.22.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", - "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.1", - "array.prototype.flat": "^1.2.3", - "contains-path": "^0.1.0", - "debug": "^2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.4", - "eslint-module-utils": "^2.6.0", - "has": "^1.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.1", - "read-pkg-up": "^2.0.0", - "resolve": "^1.17.0", - "tsconfig-paths": "^3.9.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "dependencies": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-import/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/eslint-plugin-import/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/eslint-plugin-import/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-import/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-import/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-import/node_modules/path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "dependencies": { - "pify": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-import/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "dependencies": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-import/node_modules/read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "dependencies": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz", - "integrity": "sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.11.2", - "aria-query": "^4.2.2", - "array-includes": "^3.1.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.0.2", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.6", - "emoji-regex": "^9.0.0", - "has": "^1.0.3", - "jsx-ast-utils": "^3.1.0", - "language-tags": "^1.0.5" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/eslint-plugin-no-floating-promise": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-floating-promise/-/eslint-plugin-no-floating-promise-1.0.2.tgz", - "integrity": "sha512-ccbyIlvDuKJOrwypw9NWn6CIxTK+/CYARhsqMyP6cXYgIFcNFs01sGXOqq8XzOJFw02Umkj6hCnffaV6nSiqyw==", - "dev": true, - "dependencies": { - "requireindex": "1.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz", - "integrity": "sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ==", - "dev": true, - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "eslint": ">=5.0.0", - "prettier": ">=1.13.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-promise": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz", - "integrity": "sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.22.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.22.0.tgz", - "integrity": "sha512-p30tuX3VS+NWv9nQot9xIGAHBXR0+xJVaZriEsHoJrASGCJZDJ8JLNM0YqKqI0AKm6Uxaa1VUHoNEibxRCMQHA==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.1", - "array.prototype.flatmap": "^1.2.3", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "object.entries": "^1.1.2", - "object.fromentries": "^2.0.2", - "object.values": "^1.1.1", - "prop-types": "^15.7.2", - "resolve": "^1.18.1", - "string.prototype.matchall": "^4.0.2" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/eslint/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "dependencies": { - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/eslint/node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/espree/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/exec-sh": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", - "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", - "dev": true - }, - "node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/execa/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/execa/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/execa/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/execa/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/expect/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/expect/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/expect/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dev": true, - "dependencies": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "node_modules/express/node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/express/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend-shallow/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/external-editor/node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extract-files": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-9.0.0.tgz", - "integrity": "sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==", - "dev": true, - "engines": { - "node": "^10.17.0 || ^12.0.0 || >= 13.7.0" - }, - "funding": { - "url": "https://github.com/sponsors/jaydenseric" - } - }, - "node_modules/extract-stack": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/extract-stack/-/extract-stack-2.0.0.tgz", - "integrity": "sha512-AEo4zm+TenK7zQorGK1f9mJ8L14hnTDi2ZQPR+Mub1NX8zimka1mXpV5LpH8x9HoUmFSHZCfLHqWvp0Y4FxxzQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/file-saver": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", - "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "node_modules/filesize": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", - "integrity": "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/find-babel-config": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz", - "integrity": "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==", - "dev": true, - "dependencies": { - "json5": "^0.5.1", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/find-babel-config/node_modules/json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" - }, - "node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", - "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", - "dev": true - }, - "node_modules/flow-bin": { - "version": "0.142.0", - "resolved": "https://registry.npmjs.org/flow-bin/-/flow-bin-0.142.0.tgz", - "integrity": "sha512-YgiapK/wrJjcgSgOWfoncbZ4vZrZWdHs+p7V9duI9zo4ehW2nM/VRrpSaWoZ+CWu3t+duGyAvupJvC6MM2l07w==", - "dev": true, - "bin": { - "flow": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/flow-typed": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flow-typed/-/flow-typed-3.3.1.tgz", - "integrity": "sha512-svxMNRJNTeKfOwBt/bPZvOrgkjpYH1nXC2v7dgbq4sZgZu/Slna6kAPD45fnOJ4D0TCS2B4yp6Nhc32AV1sxpQ==", - "dev": true, - "dependencies": { - "@octokit/rest": "^16.43.1", - "colors": "^1.4.0", - "flowgen": "^1.10.0", - "fs-extra": "^8.1.0", - "glob": "^7.1.6", - "got": "^10.5.7", - "md5": "^2.2.1", - "mkdirp": "^1.0.3", - "prettier": "^1.19.1", - "rimraf": "^3.0.2", - "semver": "7.3.2", - "table": "^5.4.6", - "through": "^2.3.8", - "unzipper": "^0.10.8", - "which": "^2.0.2", - "yargs": "^15.1.0" - }, - "bin": { - "flow-typed": "dist/cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/flow-typed/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/flow-typed/node_modules/astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/flow-typed/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/flow-typed/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/flow-typed/node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/flow-typed/node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/flow-typed/node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/flow-typed/node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flow-typed/node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flow-typed/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/flow-typed/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/flow-typed/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/flow-typed/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flow-typed/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/flow-typed/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/flow-typed/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/flow-typed/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flow-typed/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/flow-typed/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flow-typed/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/flow-typed/node_modules/prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/flow-typed/node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/flow-typed/node_modules/slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/flow-typed/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/flow-typed/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/flow-typed/node_modules/table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, - "dependencies": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/flow-typed/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/flow-typed/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flow-typed/node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/flow-typed/node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/flow-typed/node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/flow-typed/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/flow-typed/node_modules/wrap-ansi/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flow-typed/node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flow-typed/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flow-typed/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/flow-typed/node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/flow-typed/node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/flow-typed/node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/flow-typed/node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flow-typed/node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flowgen": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/flowgen/-/flowgen-1.15.0.tgz", - "integrity": "sha512-ym/kL2RGolCHArTAPRTPJa95CC0ZDWSh69KTCLIunc6wsXMT5MGpRFT/UhOVv205a2JHekm5booya1XHOqEi9Q==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/highlight": "^7.10.4", - "commander": "^6.1.0", - "lodash": "^4.17.20", - "prettier": "^2.1.1", - "shelljs": "^0.8.4", - "typescript": "^4.0.2", - "typescript-compiler": "^1.4.1-2" - }, - "bin": { - "flowgen": "lib/cli/index.js" - } - }, - "node_modules/flowgen/node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fnv-plus": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/fnv-plus/-/fnv-plus-1.3.1.tgz", - "integrity": "sha512-Gz1EvfOneuFfk4yG458dJ3TLJ7gV19q3OM/vVvvHf7eT02Hm1DleB4edsia6ahbKgAYxO9gvyQ1ioWZR+a00Yw==" - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.1.tgz", - "integrity": "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==", - "dev": true, - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fs-extra/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/fstream/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "node_modules/gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", - "dev": true, - "dependencies": { - "globule": "^1.0.0" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", - "dependencies": { - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-port": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", - "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globule": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.3.tgz", - "integrity": "sha512-mb1aYtDbIjTu4ShMB85m3UzjX9BVKe9WCzsnfMSZk+K5GpIbBOexgg4PPCt5eHDEG5/ZQAUX2Kct02zfiPLsKg==", - "dev": true, - "dependencies": { - "glob": "~7.1.1", - "lodash": "~4.17.10", - "minimatch": "~3.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/globule/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/got": { - "version": "10.7.0", - "resolved": "https://registry.npmjs.org/got/-/got-10.7.0.tgz", - "integrity": "sha512-aWTDeNw9g+XqEZNcTjMMZSy7B7yE9toWOFYip7ofFTLleJhvZwUxxTxkTpKvF+p1SAA4VHmuEy7PiHTHyq8tJg==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^2.0.0", - "@szmarczak/http-timer": "^4.0.0", - "@types/cacheable-request": "^6.0.1", - "cacheable-lookup": "^2.0.0", - "cacheable-request": "^7.0.1", - "decompress-response": "^5.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^5.0.0", - "lowercase-keys": "^2.0.0", - "mimic-response": "^2.1.0", - "p-cancelable": "^2.0.0", - "p-event": "^4.0.0", - "responselike": "^2.0.0", - "to-readable-stream": "^2.0.0", - "type-fest": "^0.10.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/got/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/got/node_modules/type-fest": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.10.0.tgz", - "integrity": "sha512-EUV9jo4sffrwlg8s0zDhP0T2WD3pru5Xi0+HTE3zTUmBaZNhfkite9PdSJwdXLwPVW0jnAHT56pZHIOYckPEiw==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "dev": true - }, - "node_modules/graphql": { - "version": "15.8.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", - "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", - "dev": true, - "engines": { - "node": ">= 10.x" - } - }, - "node_modules/graphql-request": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-3.7.0.tgz", - "integrity": "sha512-dw5PxHCgBneN2DDNqpWu8QkbbJ07oOziy8z+bK/TAXufsOLaETuVO4GkXrbs0WjhdKhBMN3BkpN/RIvUHkmNUQ==", - "dev": true, - "dependencies": { - "cross-fetch": "^3.0.6", - "extract-files": "^9.0.0", - "form-data": "^3.0.0" - }, - "peerDependencies": { - "graphql": "14 - 16" - } - }, - "node_modules/graphql-request/node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/graphql-tag": { - "version": "2.12.6", - "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", - "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" - } - }, - "node_modules/graphql-tag/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true, - "optional": true - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", - "dependencies": { - "get-intrinsic": "^1.2.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-value/node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash-wasm": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/hash-wasm/-/hash-wasm-4.9.0.tgz", - "integrity": "sha512-7SW7ejyfnRxuOc7ptQHSf4LDoZaWOivfzqw+5rpcQku0nHfmicPKE51ra9BiRLAmT8+gGLestr1XroUkqdjL6w==" - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "bin": { - "he": "bin/he" - } - }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/history/node_modules/@babel/runtime": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", - "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "dependencies": { - "parse-passwd": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", - "dev": true - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/html-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-2.0.0.tgz", - "integrity": "sha512-/8yd7xrPJM0ugzz4VDK/xLV39nPGpelwehonX/msg/N5ORvQj9G4VncX5coIWKkOSLBANseNaEcW+3Ga0twDWg==", - "dev": true, - "dependencies": { - "html-minifier-terser": "^5.1.1", - "parse5-sax-parser": "^6.0.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", - "dev": true, - "dependencies": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/html-to-react": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/html-to-react/-/html-to-react-1.4.7.tgz", - "integrity": "sha512-adtKiee5AtnuUhdB8bxbASRP2bW/A0OrlwysEuqZxXdURb0/1XR0m/woE1V5cJA1U5nyzAvk/PdFNO9S73DE/g==", - "dependencies": { - "domhandler": "^4.0", - "htmlparser2": "^7.0", - "lodash.camelcase": "^4.3.0", - "ramda": "^0.27.1" - }, - "peerDependencies": { - "react": "^16.0 || ^17.0" - } - }, - "node_modules/html-webpack-harddisk-plugin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/html-webpack-harddisk-plugin/-/html-webpack-harddisk-plugin-2.0.0.tgz", - "integrity": "sha512-fWKH72FyaQ5K/j+kYy6LnQsQucSDnsEkghmB6g29TtpJ4sxHYFduEeUV1hfDqyDpCRW+bP7yacjQ+1ikeIDqeg==", - "dev": true, - "engines": { - "node": ">=10.13" - }, - "peerDependencies": { - "html-webpack-plugin": "^5.0.0", - "webpack": "^5.0.0" - } - }, - "node_modules/html-webpack-plugin": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.1.0.tgz", - "integrity": "sha512-2axkp+2NHmvHUWrKe1dY4LyM3WatQEdFChr42OY7R/Ad7f0AQzaKscGCcqN/FtQBxo8rdfJP7M3RMFDttqok3g==", - "dev": true, - "dependencies": { - "@types/html-minifier-terser": "^5.0.0", - "html-minifier-terser": "^5.0.1", - "loader-utils": "^2.0.0", - "lodash": "^4.17.20", - "pretty-error": "^2.1.1", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "webpack": "^5.20.0" - } - }, - "node_modules/html-webpack-plugin/node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/htmlparser2": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.1.2.tgz", - "integrity": "sha512-d6cqsbJba2nRdg8WW2okyD4ceonFHn9jLFxhwlNcLhQWcFPdxXeJulgOLjLKtAK9T6ahd+GQNZwG9fjmGW7lyg==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.2", - "domutils": "^2.8.0", - "entities": "^3.0.1" - } - }, - "node_modules/htmlparser2/node_modules/dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/htmlparser2/node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/htmlparser2/node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/htmlparser2/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/htmlparser2/node_modules/entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "node_modules/http-call": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/http-call/-/http-call-5.3.0.tgz", - "integrity": "sha512-ahwimsC23ICE4kPl9xTBjKB4inbRaeLyZeRunC/1Jy/Z6X8tv22MEAjK+KBOMSVLaqXPTTmd8638waVIKLGx2w==", - "dev": true, - "dependencies": { - "content-type": "^1.0.4", - "debug": "^4.1.1", - "is-retry-allowed": "^1.1.0", - "is-stream": "^2.0.0", - "parse-json": "^4.0.0", - "tunnel-agent": "^0.6.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-call/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/http-call/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true - }, - "node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dev": true, - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/httpolyglot": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/httpolyglot/-/httpolyglot-0.1.2.tgz", - "integrity": "sha1-5NNH/omEpi9GfUBg31J/GFH2mXs=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/hyperlinker": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz", - "integrity": "sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", - "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", - "dev": true, - "dependencies": { - "minimatch": "^3.0.4" - } - }, - "node_modules/immer": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/immer/-/immer-10.1.1.tgz", - "integrity": "sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", - "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-local/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-local/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-local/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-local/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-local/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/inquirer": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", - "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/inquirer-autocomplete-prompt": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-2.0.1.tgz", - "integrity": "sha512-jUHrH0btO7j5r8DTQgANf2CBkTZChoVySD8zF/wp5fZCOLIuUbleXhf4ZY5jNBOc1owA3gdfWtfZuppfYBhcUg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.3.2", - "figures": "^3.2.0", - "picocolors": "^1.0.0", - "run-async": "^2.4.1", - "rxjs": "^7.5.4" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "inquirer": "^8.0.0" - } - }, - "node_modules/inquirer-autocomplete-prompt/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/inquirer-autocomplete-prompt/node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inquirer-autocomplete-prompt/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/inquirer-autocomplete-prompt/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/inquirer/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/inquirer/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/inquirer/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/inquirer/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/inquirer/node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inquirer/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inquirer/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/inquirer/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/inquirer/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/int64-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/int64-buffer/-/int64-buffer-1.0.1.tgz", - "integrity": "sha512-+3azY4pXrjAupJHU1V9uGERWlhoqNswJNji6aD/02xac7oxol508AsMC5lxKhEqyZeDFy3enq5OGWXF4u75hiw==", - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/intl-format-cache": { - "version": "2.2.9", - "resolved": "https://registry.npmjs.org/intl-format-cache/-/intl-format-cache-2.2.9.tgz", - "integrity": "sha512-Zv/u8wRpekckv0cLkwpVdABYST4hZNTDaX7reFetrYTJwxExR2VyTqQm+l0WmL0Qo8Mjb9Tf33qnfj0T7pjxdQ==" - }, - "node_modules/intl-messageformat": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-2.2.0.tgz", - "integrity": "sha1-NFvNRt5jC3aDMwwuUhd/9eq0hPw=", - "dependencies": { - "intl-messageformat-parser": "1.4.0" - } - }, - "node_modules/intl-messageformat-parser": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-1.4.0.tgz", - "integrity": "sha1-tD1FqXRoytvkQzHXS7Ho3qRPwHU=", - "deprecated": "We've written a new parser that's 6x faster and is backwards compatible. Please use @formatjs/icu-messageformat-parser" - }, - "node_modules/intl-relativeformat": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/intl-relativeformat/-/intl-relativeformat-2.2.0.tgz", - "integrity": "sha512-4bV/7kSKaPEmu6ArxXf9xjv1ny74Zkwuey8Pm01NH4zggPP7JHwg2STk8Y3JdspCKRDriwIyLRfEXnj2ZLr4Bw==", - "deprecated": "This package has been deprecated, please see migration guide at 'https://github.com/formatjs/formatjs/tree/master/packages/intl-relativeformat#migration-guide'", - "dependencies": { - "intl-messageformat": "^2.0.0" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor/node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-data-descriptor/node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true - }, - "node_modules/is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-object/node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dependencies": { - "which-typed-array": "^1.1.11" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-weakref": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", - "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", - "dependencies": { - "call-bind": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/istanbul-lib-report/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", - "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jdenticon": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jdenticon/-/jdenticon-3.2.0.tgz", - "integrity": "sha512-z6Iq3fTODUMSOiR2nNYrqigS6Y0GvdXfyQWrUby7htDHvX7GNEwaWR4hcaL+FmhEgBe08Xkup/BKxXQhDJByPA==", - "dependencies": { - "canvas-renderer": "~2.2.0" - }, - "bin": { - "jdenticon": "bin/jdenticon.js" - }, - "engines": { - "node": ">=6.4.0" - } - }, - "node_modules/jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", - "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", - "dev": true, - "dependencies": { - "@jest/core": "^26.6.3", - "import-local": "^3.0.2", - "jest-cli": "^26.6.3" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-canvas-mock": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/jest-canvas-mock/-/jest-canvas-mock-2.3.1.tgz", - "integrity": "sha512-5FnSZPrX3Q2ZfsbYNE3wqKR3+XorN8qFzDzB5o0golWgt6EOX1+emBnpOc9IAQ+NXFj8Nzm3h7ZdE/9H0ylBcg==", - "dev": true, - "dependencies": { - "cssfontparser": "^1.2.1", - "moo-color": "^1.0.2" - } - }, - "node_modules/jest-changed-files": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", - "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-changed-files/node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/jest-changed-files/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-changed-files/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-changed-files/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-config": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", - "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.6.3", - "@jest/types": "^26.6.2", - "babel-jest": "^26.6.3", - "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^26.6.2", - "jest-environment-node": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.6.3", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-config/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-config/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-config/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-diff/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-docblock": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", - "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-each": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", - "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-each/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-each/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-each/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", - "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", - "dev": true, - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2", - "jsdom": "^16.4.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-environment-jsdom/node_modules/abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "deprecated": "Use your platform's native atob() and btoa() methods instead", - "dev": true - }, - "node_modules/jest-environment-jsdom/node_modules/acorn": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/jest-environment-jsdom/node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/jest-environment-jsdom/node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/jest-environment-jsdom/node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "node_modules/jest-environment-jsdom/node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-jsdom/node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "node_modules/jest-environment-jsdom/node_modules/escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/jest-environment-jsdom/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/jest-environment-jsdom/node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-environment-jsdom/node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jest-environment-jsdom/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/jest-environment-jsdom/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-environment-jsdom/node_modules/tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-environment-jsdom/node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-jsdom/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/jest-environment-jsdom/node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "engines": { - "node": ">=10.4" - } - }, - "node_modules/jest-environment-jsdom/node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-environment-jsdom/node_modules/ws": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", - "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/jest-environment-jsdom/node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "node_modules/jest-environment-node": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", - "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", - "dev": true, - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", - "dev": true, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - }, - "engines": { - "node": ">= 10.14.2" - }, - "optionalDependencies": { - "fsevents": "^2.1.2" - } - }, - "node_modules/jest-haste-map/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-haste-map/node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-haste-map/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-jasmine2": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", - "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^26.6.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-jasmine2/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-jasmine2/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-jasmine2/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-jasmine2/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-jasmine2/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-leak-detector": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", - "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", - "dev": true, - "dependencies": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-matcher-utils": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", - "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-matcher-utils/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-message-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-message-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-mock": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", - "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", - "dev": true, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", - "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.6.2", - "read-pkg-up": "^7.0.1", - "resolve": "^1.18.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", - "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-resolve/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-resolve/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-resolve/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", - "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.7.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-docblock": "^26.0.0", - "jest-haste-map": "^26.6.2", - "jest-leak-detector": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runner/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-runner/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner/node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-runner/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", - "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/globals": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^0.6.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.4.1" - }, - "bin": { - "jest-runtime": "bin/jest-runtime.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-runtime/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/jest-runtime/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runtime/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-runtime/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-snapshot": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", - "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.0.0", - "chalk": "^4.0.0", - "expect": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-haste-map": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "natural-compare": "^1.4.0", - "pretty-format": "^26.6.2", - "semver": "^7.3.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-snapshot/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-snapshot/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "leven": "^3.1.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-validate/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-validate/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", - "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", - "dev": true, - "dependencies": { - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^26.6.2", - "string-length": "^4.0.1" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-watcher/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-watcher/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-watcher/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz", - "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jest/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/jest-cli": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", - "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", - "dev": true, - "dependencies": { - "@jest/core": "^26.6.3", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.6.3", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "prompts": "^2.0.1", - "yargs": "^15.4.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/js-base64": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", - "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", - "dev": true - }, - "node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-schema-typed": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz", - "integrity": "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==", - "dev": true - }, - "node_modules/json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "dependencies": { - "jsonify": "~0.0.0" - } - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", - "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/jsonschema": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.2.tgz", - "integrity": "sha512-iX5OFQ6yx9NgbHCwse51ohhKgLuLL7Z5cNOeZOPIlDUtAMrxlruHLzVZxbltdHE5mEDXN+75oFOwq6Gn0MZwsA==", - "engines": { - "node": "*" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", - "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.3", - "object.assign": "^4.1.2" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/keyv": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz", - "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", - "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==", - "dev": true - }, - "node_modules/language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", - "dev": true, - "dependencies": { - "language-subtag-registry": "~0.3.2" - } - }, - "node_modules/lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.5" - }, - "engines": { - "node": ">= 0.6.3" - } - }, - "node_modules/lazystream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/lazystream/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/lazystream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/lazystream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" - }, - "node_modules/listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", - "dev": true - }, - "node_modules/load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/load-json-file/node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/load-json-file/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", - "dev": true - }, - "node_modules/lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", - "dev": true - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", - "dev": true - }, - "node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", - "dev": true - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true - }, - "node_modules/lodash.omit": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", - "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=", - "dev": true - }, - "node_modules/lodash.set": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", - "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=", - "dev": true - }, - "node_modules/lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "node_modules/lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", - "dev": true - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "node_modules/log-chopper": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-chopper/-/log-chopper-1.0.2.tgz", - "integrity": "sha512-tEWS6Fb+Xv0yLChJ6saA1DP3H1yPL0PfiIN7SDJ+U/CyP+fD4G/dhKfow+P5UuJWi6BdE4mUcPkJclGXCWxDrg==", - "dev": true, - "dependencies": { - "byline": "5.x" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lottie-react": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/lottie-react/-/lottie-react-2.4.0.tgz", - "integrity": "sha512-pDJGj+AQlnlyHvOHFK7vLdsDcvbuqvwPZdMlJ360wrzGFurXeKPr8SiRCjLf3LrNYKANQtSsh5dz9UYQHuqx4w==", - "dependencies": { - "lottie-web": "^5.10.2" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/lottie-web": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/lottie-web/-/lottie-web-5.10.2.tgz", - "integrity": "sha512-d0PFIGiwuMsJYaF4uPo+qG8dEorlI+xFI2zrrFtE1bGO4WoLIz+NjremxEq1swpR7juR10aeOtmNh3d6G3ub0A==" - }, - "node_modules/lovefield": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/lovefield/-/lovefield-2.1.12.tgz", - "integrity": "sha1-B/ufHXhAV47HhHBsrQ++feTJP1I=", - "dependencies": { - "js-yaml": "~3.1.0", - "nopt": "~2.2.1" - }, - "bin": { - "lovefield-spac": "spac/lovefield-spac" - }, - "engines": { - "node": ">=4.3" - } - }, - "node_modules/lovefield/node_modules/argparse": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", - "integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=", - "dependencies": { - "underscore": "~1.7.0", - "underscore.string": "~2.4.0" - } - }, - "node_modules/lovefield/node_modules/esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", - "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/lovefield/node_modules/js-yaml": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.1.0.tgz", - "integrity": "sha1-NroC5hjFB0jnct01JCiQTLutz0Q=", - "dependencies": { - "argparse": "~ 0.1.11", - "esprima": "~ 1.0.2" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lower-case/node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "dev": true - }, - "node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", - "dev": true - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/macos-release": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.0.tgz", - "integrity": "sha512-EIgv+QZ9r+814gjJj0Bt5vSLJLzswGmSUbUpbi9AIr/fsN2IWFBl2NucV9PAiek+U1STK468tEkxmVYUtuAN3g==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/make-error-cause": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/make-error-cause/-/make-error-cause-2.3.0.tgz", - "integrity": "sha512-etgt+n4LlOkGSJbBTV9VROHA5R7ekIPS4vfh+bCAoJgRrJWdqJCBbpS3osRJ/HrT7R68MzMiY3L3sDJ/Fd8aBg==", - "dev": true, - "dependencies": { - "make-error": "^1.3.5" - } - }, - "node_modules/make-fetch-happen": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", - "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/@npmcli/fs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", - "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", - "dev": true, - "dependencies": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/@npmcli/move-file": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", - "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", - "deprecated": "This functionality has been moved to @npmcli/fs", - "dev": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/make-fetch-happen/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/make-fetch-happen/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/cacache": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", - "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-fetch-happen/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/make-fetch-happen/node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/make-fetch-happen/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-fetch-happen/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-fetch-happen/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/make-fetch-happen/node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/make-fetch-happen/node_modules/ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", - "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/unique-filename": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", - "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", - "dev": true, - "dependencies": { - "unique-slug": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/unique-slug": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", - "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "dependencies": { - "p-defer": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/markdown-loader": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/markdown-loader/-/markdown-loader-6.0.0.tgz", - "integrity": "sha512-kUTEEpWRc5zcQbdjpK0QYdp/9Z5Oep440foKSXc7wWetcRxrWm4vbbXRW0Gqhht5CKJ4gm7el4HOPPyqs/ziTA==", - "dev": true, - "dependencies": { - "loader-utils": "^1.2.3", - "marked": "^0.7.0" - } - }, - "node_modules/markdown-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/markdown-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/marked": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz", - "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==", - "dev": true, - "bin": { - "marked": "bin/marked" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/match-sorter": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.1.tgz", - "integrity": "sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==", - "dependencies": { - "@babel/runtime": "^7.12.5", - "remove-accents": "0.4.2" - } - }, - "node_modules/math-expression-evaluator": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.3.8.tgz", - "integrity": "sha512-9FbRY3i6U+CbHgrdNbAUaisjWTozkm1ZfupYQJiZ87NtYHk2Zh9DvxMgp/fifxVhqTLpd5fCCLossUbpZxGeKw==" - }, - "node_modules/md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "dev": true, - "dependencies": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/md5/node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/mdast-add-list-metadata": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdast-add-list-metadata/-/mdast-add-list-metadata-1.0.1.tgz", - "integrity": "sha512-fB/VP4MJ0LaRsog7hGPxgOrSL3gE/2uEdZyDuSEnKCv/8IkYHiDkIQSbChiJoHyxZZXZ9bzckyRk+vNxFzh8rA==", - "dependencies": { - "unist-util-visit-parents": "1.1.2" - } - }, - "node_modules/mdast-util-from-markdown": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", - "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^2.0.0", - "micromark": "~2.11.0", - "parse-entities": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mem": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", - "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", - "dev": true, - "dependencies": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/mem?sponsor=1" - } - }, - "node_modules/memfs": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.3.0.tgz", - "integrity": "sha512-BEE62uMfKOavX3iG7GYX43QJ+hAeeWnwIAuJ/R6q96jaMtiLzhsxHJC8B1L7fK7Pt/vXDRwb3SG/yBpNGDPqzg==", - "dev": true, - "dependencies": { - "fs-monkey": "1.0.3" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/memoize-one": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" - }, - "node_modules/meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "node_modules/merge-options": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", - "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", - "optional": true, - "dependencies": { - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromark": { - "version": "2.11.4", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", - "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "debug": "^4.0.0", - "parse-entities": "^2.0.0" - } - }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/microseconds": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/microseconds/-/microseconds-0.2.0.tgz", - "integrity": "sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==" - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", - "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.33", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", - "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", - "dependencies": { - "mime-db": "1.50.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", - "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/mini-create-react-context": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz", - "integrity": "sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dependencies": { - "@babel/runtime": "^7.12.1", - "tiny-warning": "^1.0.3" - }, - "peerDependencies": { - "prop-types": "^15.0.0", - "react": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/mini-create-react-context/node_modules/@babel/runtime": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", - "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/minimist-options/node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/minimist-options/node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", - "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", - "dev": true, - "dependencies": { - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixwith": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/mixwith/-/mixwith-0.1.1.tgz", - "integrity": "sha1-yJlZGMW2H7/amtN3qFfNR3UFQcA=" - }, - "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, - "node_modules/mobx": { - "version": "5.15.7", - "resolved": "https://registry.npmjs.org/mobx/-/mobx-5.15.7.tgz", - "integrity": "sha512-wyM3FghTkhmC+hQjyPGGFdpehrcX1KOXsDuERhfK2YbJemkUhEB+6wzEN639T21onxlfYBmriA1PFnvxTUhcKw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mobx" - } - }, - "node_modules/mobx-react": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/mobx-react/-/mobx-react-6.3.1.tgz", - "integrity": "sha512-IOxdJGnRSNSJrL2uGpWO5w9JH5q5HoxEqwOF4gye1gmZYdjoYkkMzSGMDnRCUpN/BNzZcFoMdHXrjvkwO7KgaQ==", - "dependencies": { - "mobx-react-lite": "^2.2.0" - }, - "peerDependencies": { - "mobx": "^5.15.4 || ^4.15.4", - "react": "^16.8.0 || 16.9.0-alpha.0" - } - }, - "node_modules/mobx-react-form": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/mobx-react-form/-/mobx-react-form-2.0.8.tgz", - "integrity": "sha512-Z/JsXkN7B5xjG1tolHKytJiKmtLSdqkFKMco5AVagL8cQ0yJmE+iRZ212JKGHfkEKZrRWn7EDnX2STawIQFqxg==", - "dependencies": { - "lodash": "^4.17.11" - }, - "engines": { - "node": ">=8.0.0" - }, - "peerDependencies": { - "mobx": "^2.5.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" - } - }, - "node_modules/mobx-react-lite": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-2.2.2.tgz", - "integrity": "sha512-2SlXALHIkyUPDsV4VTKVR9DW7K3Ksh1aaIv3NrNJygTbhXe2A9GrcKHZ2ovIiOp/BXilOcTYemfHHZubP431dg==", - "peerDependencies": { - "mobx": "^4.0.0 || ^5.0.0", - "react": "^16.8.0" - }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - } - } - }, - "node_modules/mobx-react-router": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mobx-react-router/-/mobx-react-router-4.1.0.tgz", - "integrity": "sha512-2knsbDqVorWLngZWbdO8tr7xcZXaLpVFsFlCaGaoyZ+EP9erVGRxnlWGqKyFObs3EH1JPLyTDOJ2LPTxb/lB6Q==", - "deprecated": "Package transfered to @ibm/mobx-react-router", - "peerDependencies": { - "mobx": "^3.0.0 || ^4.0.0 || ^5.0.0", - "react-router": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/mocha": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.4.0.tgz", - "integrity": "sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==", - "dependencies": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "8.1.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/mocha/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/mocha/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/mocha/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/mocha/node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/mocha/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mocha/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/mocha/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/mocha/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/mocha/node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/moment": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", - "engines": { - "node": "*" - } - }, - "node_modules/moo-color": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/moo-color/-/moo-color-1.0.2.tgz", - "integrity": "sha512-5iXz5n9LWQzx/C2WesGFfpE6RLamzdHwsn3KpfzShwbfIqs7stnoEpaNErf/7+3mbxwZ4s8Foq7I0tPxw7BWHg==", - "dev": true, - "dependencies": { - "color-name": "^1.1.4" - } - }, - "node_modules/moo-color/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "node_modules/nan": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", - "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==" - }, - "node_modules/nano-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/nano-time/-/nano-time-1.0.0.tgz", - "integrity": "sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA==", - "dependencies": { - "big-integer": "^1.6.16" - } - }, - "node_modules/nanoassert": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-2.0.0.tgz", - "integrity": "sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA==" - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/natural-orderby": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz", - "integrity": "sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/no-case/node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "dev": true - }, - "node_modules/node-abi": { - "version": "3.50.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.50.0.tgz", - "integrity": "sha512-2Gxu7Eq7vnBIRfYSmqPruEllMM14FjOQFJSoqdGWthVn+tmwEXzmdPpya6cvvwf0uZA3F5N1fMFr9mijZBplFA==", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" - }, - "node_modules/node-environment-flags": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", - "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", - "dev": true, - "dependencies": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - } - }, - "node_modules/node-environment-flags/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-gyp": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", - "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": ">= 10.12.0" - } - }, - "node_modules/node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-gyp/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/node-gyp/node_modules/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/node-gyp/node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/node-gyp/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-gyp/node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "dev": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/node-gyp/node_modules/make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/node-gyp/node_modules/minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", - "dev": true, - "dependencies": { - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "optionalDependencies": { - "encoding": "^0.1.12" - } - }, - "node_modules/node-gyp/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-gyp/node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/node-gyp/node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "dev": true, - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/node-gyp/node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/node-gyp/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/node-hid": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-2.1.2.tgz", - "integrity": "sha512-qhCyQqrPpP93F/6Wc/xUR7L8mAJW0Z6R7HMQV8jCHHksAxNDe/4z4Un/H9CpLOT+5K39OPyt9tIQlavxWES3lg==", - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.5.0", - "node-addon-api": "^3.0.2", - "prebuild-install": "^7.1.1" - }, - "bin": { - "hid-showdevices": "src/show-devices.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node_modules/node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/node-notifier": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz", - "integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==", - "dev": true, - "optional": true, - "dependencies": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" - } - }, - "node_modules/node-notifier/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "optional": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/node-notifier/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "optional": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==" - }, - "node_modules/node-rsa": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/node-rsa/-/node-rsa-1.1.1.tgz", - "integrity": "sha512-Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw==", - "dev": true, - "dependencies": { - "asn1": "^0.2.4" - } - }, - "node_modules/node-sass": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-9.0.0.tgz", - "integrity": "sha512-yltEuuLrfH6M7Pq2gAj5B6Zm7m+gdZoG66wTqG6mIZV/zijq3M2OO2HswtT6oBspPyFhHDcaxWpsBm0fRNDHPg==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "async-foreach": "^0.1.3", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "gaze": "^1.0.0", - "get-stdin": "^4.0.1", - "glob": "^7.0.3", - "lodash": "^4.17.15", - "make-fetch-happen": "^10.0.4", - "meow": "^9.0.0", - "nan": "^2.17.0", - "node-gyp": "^8.4.1", - "sass-graph": "^4.0.1", - "stdout-stream": "^1.4.0", - "true-case-path": "^2.2.1" - }, - "bin": { - "node-sass": "bin/node-sass" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/node-sass/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/node-sass/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/node-sass/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/node-sass/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/node-sass/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/node-sass/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nofilter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", - "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", - "engines": { - "node": ">=12.19" - } - }, - "node_modules/nopt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.2.1.tgz", - "integrity": "sha1-KqCbfRdoSHs7ianFqlIzW/8Lrqc=", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-treeify": { - "version": "1.1.33", - "resolved": "https://registry.npmjs.org/object-treeify/-/object-treeify-1.1.33.tgz", - "integrity": "sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-visit/node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", - "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", - "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.pick/node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/oblivious-set": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/oblivious-set/-/oblivious-set-1.0.0.tgz", - "integrity": "sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==" - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "node_modules/octokit-pagination-methods": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz", - "integrity": "sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ==", - "dev": true - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/onetime/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ora": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz", - "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==", - "dev": true, - "dependencies": { - "chalk": "^3.0.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.2.0", - "is-interactive": "^1.0.0", - "log-symbols": "^3.0.0", - "mute-stream": "0.0.8", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/ora/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ora/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/log-symbols/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ora/node_modules/log-symbols/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ora/node_modules/log-symbols/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/ora/node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/ora/node_modules/log-symbols/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ora/node_modules/log-symbols/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ora/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/os-name": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz", - "integrity": "sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==", - "dev": true, - "dependencies": { - "macos-release": "^2.2.0", - "windows-release": "^3.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-event": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", - "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", - "dev": true, - "dependencies": { - "p-timeout": "^3.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dev": true, - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/param-case/node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "dev": true - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse5-sax-parser": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz", - "integrity": "sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==", - "dev": true, - "dependencies": { - "parse5": "^6.0.1" - } - }, - "node_modules/parse5-sax-parser/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/pascal-case/node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "dev": true - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/password-prompt": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.3.tgz", - "integrity": "sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.3.2", - "cross-spawn": "^7.0.3" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" - }, - "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-to-regexp": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.0.tgz", - "integrity": "sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/pbf": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", - "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", - "dev": true, - "dependencies": { - "ieee754": "^1.1.12", - "resolve-protobuf-schema": "^2.1.0" - }, - "bin": { - "pbf": "bin/pbf" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "node_modules/php-parser": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/php-parser/-/php-parser-3.1.5.tgz", - "integrity": "sha512-jEY2DcbgCm5aclzBdfW86GM6VEIWcSlhTBSHN1qhJguVePlYe28GhwS0yoeLYXpM2K8y6wzLwrbq814n2PHSoQ==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "dependencies": { - "node-modules-regexp": "^1.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkce-challenge": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-2.2.0.tgz", - "integrity": "sha512-Ly0Y0OwhtG2N1ynk5ruqoyJxkrWhAPmvdRk0teiLh9Dp2+J4URKpv1JSKWD0j1Sd+QCeiwO9lTl0EjmrB2jWeA==", - "dev": true - }, - "node_modules/pkg-config": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz", - "integrity": "sha512-ft/WI9YK6FuTuw4Ql+QUaNXtm/ASQNqDUUsZEgFZKyFpW6amyP8Gx01xrRs8KdiNbbqXfYxkOXplpq1euWbOjw==", - "dev": true, - "dependencies": { - "debug-log": "^1.0.0", - "find-root": "^1.0.0", - "xtend": "^4.0.1" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/popsicle": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/popsicle/-/popsicle-12.1.0.tgz", - "integrity": "sha512-muNC/cIrWhfR6HqqhHazkxjob3eyECBe8uZYSQ/N5vixNAgssacVleerXnE8Are5fspR0a+d2qWaBR1g7RYlmw==", - "dev": true, - "dependencies": { - "popsicle-content-encoding": "^1.0.0", - "popsicle-cookie-jar": "^1.0.0", - "popsicle-redirects": "^1.1.0", - "popsicle-transport-http": "^1.0.8", - "popsicle-transport-xhr": "^2.0.0", - "popsicle-user-agent": "^1.0.0", - "servie": "^4.3.3", - "throwback": "^4.1.0" - } - }, - "node_modules/popsicle-content-encoding": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/popsicle-content-encoding/-/popsicle-content-encoding-1.0.0.tgz", - "integrity": "sha512-4Df+vTfM8wCCJVTzPujiI6eOl3SiWQkcZg0AMrOkD1enMXsF3glIkFUZGvour1Sj7jOWCsNSEhBxpbbhclHhzw==", - "dev": true, - "peerDependencies": { - "servie": "^4.0.0" - } - }, - "node_modules/popsicle-cookie-jar": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/popsicle-cookie-jar/-/popsicle-cookie-jar-1.0.0.tgz", - "integrity": "sha512-vrlOGvNVELko0+J8NpGC5lHWDGrk8LQJq9nwAMIVEVBfN1Lib3BLxAaLRGDTuUnvl45j5N9dT2H85PULz6IjjQ==", - "dev": true, - "dependencies": { - "@types/tough-cookie": "^2.3.5", - "tough-cookie": "^3.0.1" - }, - "peerDependencies": { - "servie": "^4.0.0" - } - }, - "node_modules/popsicle-cookie-jar/node_modules/ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/popsicle-cookie-jar/node_modules/tough-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", - "dev": true, - "dependencies": { - "ip-regex": "^2.1.0", - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/popsicle-redirects": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/popsicle-redirects/-/popsicle-redirects-1.1.1.tgz", - "integrity": "sha512-mC2HrKjdTAWDalOjGxlXw9j6Qxrz/Yd2ui6bPxpi2IQDYWpF4gUAMxbA8EpSWJhLi0PuWKDwTHHPrUPGutAoIA==", - "dev": true, - "peerDependencies": { - "servie": "^4.1.0" - } - }, - "node_modules/popsicle-transport-http": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/popsicle-transport-http/-/popsicle-transport-http-1.2.1.tgz", - "integrity": "sha512-i5r3IGHkGiBDm1oPFvOfEeSGWR0lQJcsdTqwvvDjXqcTHYJJi4iSi3ecXIttDiTBoBtRAFAE9nF91fspQr63FQ==", - "dev": true, - "dependencies": { - "make-error-cause": "^2.2.0" - }, - "peerDependencies": { - "servie": "^4.2.0" - } - }, - "node_modules/popsicle-transport-xhr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/popsicle-transport-xhr/-/popsicle-transport-xhr-2.0.0.tgz", - "integrity": "sha512-5Sbud4Widngf1dodJE5cjEYXkzEUIl8CzyYRYR57t6vpy9a9KPGQX6KBKdPjmBZlR5A06pOBXuJnVr23l27rtA==", - "dev": true, - "peerDependencies": { - "servie": "^4.2.0" - } - }, - "node_modules/popsicle-user-agent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/popsicle-user-agent/-/popsicle-user-agent-1.0.0.tgz", - "integrity": "sha512-epKaq3TTfTzXcxBxjpoKYMcTTcAX8Rykus6QZu77XNhJuRHSRxMd+JJrbX/3PFI0opFGSN0BabbAYCbGxbu0mA==", - "dev": true, - "peerDependencies": { - "servie": "^4.0.0" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-5.0.0.tgz", - "integrity": "sha512-bOvyWP5VHCJbThbv7wrBwCBc3DsVpyCfd+k/wHOL3wTAMMHmSSfNts90EADf8bHa6I810ird1JBEKmBRgJu3cg==", - "dev": true, - "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.4", - "semver": "^7.3.4" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-loader/node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", - "dev": true - }, - "node_modules/prebuild-install": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", - "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pretty-error": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", - "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^2.0.4" - } - }, - "node_modules/pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/pretty-format/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/pretty-format/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/pretty-format/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/pretty-format/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/promise-retry/node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/prompts": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", - "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "node_modules/protobufjs": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz", - "integrity": "sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/protobufjs/node_modules/long": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" - }, - "node_modules/protocol-buffers-schema": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", - "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==", - "dev": true - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pushdata-bitcoin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pushdata-bitcoin/-/pushdata-bitcoin-1.0.1.tgz", - "integrity": "sha512-hw7rcYTJRAl4olM8Owe8x0fBuJJ+WGbMhQuLWOXEMN3PxPCKQHRkhfL+XG0+iXUmSHjkMmb3Ba55Mt21cZc9kQ==", - "dependencies": { - "bitcoin-ops": "^1.3.0" - } - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qrcode.react": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/qrcode.react/-/qrcode.react-3.1.0.tgz", - "integrity": "sha512-oyF+Urr3oAMUG/OiOuONL3HXM+53wvuH3mtIWQrYmsXoAq0DkvZp2RYUWFSMFtbdOpuS++9v+WAkzNVkMlNW6Q==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/querystring": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", - "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "dependencies": { - "performance-now": "^2.1.0" - } - }, - "node_modules/raf-schd": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/raf-schd/-/raf-schd-4.0.3.tgz", - "integrity": "sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==" - }, - "node_modules/ramda": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.1.tgz", - "integrity": "sha512-PgIdVpn5y5Yns8vqb8FzBUEYn98V3xcPgawAkkgj0YJ0qDsnHCiNmZYfOGMgOvoB0eWFLpYbhxUR3mxfDIMvpw==" - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomstring": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/randomstring/-/randomstring-1.3.0.tgz", - "integrity": "sha512-gY7aQ4i1BgwZ8I1Op4YseITAyiDiajeZOPQUbIq9TPGPhUm5FX59izIaOpmKbME1nmnEiABf28d9K2VSii6BBg==", - "dev": true, - "dependencies": { - "randombytes": "2.0.3" - }, - "bin": { - "randomstring": "bin/randomstring" - }, - "engines": { - "node": "*" - } - }, - "node_modules/randomstring/node_modules/randombytes": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.3.tgz", - "integrity": "sha512-lDVjxQQFoCG1jcrP06LNo2lbWp4QTShEXnhActFBwYuHprllQV6VUpwreApsYqCgD+N1mHoqJ/BI/4eV4R2GYg==", - "dev": true - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dev": true, - "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-loader": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", - "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/raw-loader/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-beautiful-dnd": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/react-beautiful-dnd/-/react-beautiful-dnd-13.1.1.tgz", - "integrity": "sha512-0Lvs4tq2VcrEjEgDXHjT98r+63drkKEgqyxdA7qD3mvKwga6a5SscbdLPO2IExotU1jW8L0Ksdl0Cj2AF67nPQ==", - "dependencies": { - "@babel/runtime": "^7.9.2", - "css-box-model": "^1.2.0", - "memoize-one": "^5.1.1", - "raf-schd": "^4.0.2", - "react-redux": "^7.2.0", - "redux": "^4.0.4", - "use-memo-one": "^1.1.1" - }, - "peerDependencies": { - "react": "^16.8.5 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.5 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-beautiful-dnd/node_modules/@babel/runtime": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", - "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/react-blockies": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/react-blockies/-/react-blockies-1.4.1.tgz", - "integrity": "sha512-4N015X5oPNnD3xQPsiqolOFzPZSSWyc5mJhJUZShUCHtiGUxVN+1qsWTcglkHMNySux9hUofaispqcw9QkWP5Q==", - "dependencies": { - "prop-types": "^15.5.10" - }, - "peerDependencies": { - "react": ">=15.0.0" - } - }, - "node_modules/react-copy-to-clipboard": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.3.tgz", - "integrity": "sha512-9S3j+m+UxDZOM0Qb8mhnT/rMR0NGSrj9A/073yz2DSxPMYhmYFBMYIdI2X4o8AjOjyFsSNxDRnCX6s/gRxpriw==", - "dependencies": { - "copy-to-clipboard": "^3", - "prop-types": "^15.5.8" - }, - "peerDependencies": { - "react": "^15.3.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - }, - "peerDependencies": { - "react": "17.0.2" - } - }, - "node_modules/react-intl": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-2.9.0.tgz", - "integrity": "sha512-27jnDlb/d2A7mSJwrbOBnUgD+rPep+abmoJE511Tf8BnoONIAUehy/U1zZCHGO17mnOwMWxqN4qC0nW11cD6rA==", - "dependencies": { - "hoist-non-react-statics": "^3.3.0", - "intl-format-cache": "^2.0.5", - "intl-messageformat": "^2.1.0", - "intl-relativeformat": "^2.1.0", - "invariant": "^2.1.1" - }, - "peerDependencies": { - "prop-types": "^15.5.4", - "react": "^0.14.9 || ^15.0.0 || ^16.0.0" - } - }, - "node_modules/react-intl-translations-manager": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/react-intl-translations-manager/-/react-intl-translations-manager-5.0.3.tgz", - "integrity": "sha512-EfBeugnOGFcdUbQyY9TqBMbuauQ8wm73ZqFr0UqCljhbXl7YDHQcVzclWFRkVmlUffzxitLQFhAZEVVeRNQSwA==", - "dev": true, - "dependencies": { - "chalk": "^2.3.2", - "glob": "^7.1.2", - "json-stable-stringify": "^1.0.1", - "mkdirp": "^0.5.1" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "node_modules/react-markdown": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-5.0.3.tgz", - "integrity": "sha512-jDWOc1AvWn0WahpjW6NK64mtx6cwjM4iSsLHJPNBqoAgGOVoIdJMqaKX4++plhOtdd4JksdqzlDibgPx6B/M2w==", - "dependencies": { - "@types/mdast": "^3.0.3", - "@types/unist": "^2.0.3", - "html-to-react": "^1.3.4", - "mdast-add-list-metadata": "1.0.1", - "prop-types": "^15.7.2", - "react-is": "^16.8.6", - "remark-parse": "^9.0.0", - "unified": "^9.0.0", - "unist-util-visit": "^2.0.0", - "xtend": "^4.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@types/react": ">=16", - "react": ">=16" - } - }, - "node_modules/react-query": { - "version": "3.39.3", - "resolved": "https://registry.npmjs.org/react-query/-/react-query-3.39.3.tgz", - "integrity": "sha512-nLfLz7GiohKTJDuT4us4X3h/8unOh+00MLb2yJoGTPjxKs2bc1iDhkNx2bd5MKklXnOD3NrVZ+J2UXujA5In4g==", - "dependencies": { - "@babel/runtime": "^7.5.5", - "broadcast-channel": "^3.4.1", - "match-sorter": "^6.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - } - } - }, - "node_modules/react-redux": { - "version": "7.2.6", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.6.tgz", - "integrity": "sha512-10RPdsz0UUrRL1NZE0ejTkucnclYSgXp5q+tB5SWx2qeG2ZJQJyymgAhwKy73yiL/13btfB6fPr+rgbMAaZIAQ==", - "dependencies": { - "@babel/runtime": "^7.15.4", - "@types/react-redux": "^7.1.20", - "hoist-non-react-statics": "^3.3.2", - "loose-envify": "^1.4.0", - "prop-types": "^15.7.2", - "react-is": "^17.0.2" - }, - "peerDependencies": { - "react": "^16.8.3 || ^17" - }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - } - } - }, - "node_modules/react-redux/node_modules/@babel/runtime": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", - "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/react-redux/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" - }, - "node_modules/react-refresh": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.9.0.tgz", - "integrity": "sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-resize-detector": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-2.3.0.tgz", - "integrity": "sha512-oCAddEWWeFWYH5FAcHdBYcZjAw9fMzRUK9sWSx6WvSSOPVRxcHd5zTIGy/mOus+AhN/u6T4TMiWxvq79PywnJQ==", - "dependencies": { - "lodash.debounce": "^4.0.8", - "lodash.throttle": "^4.1.1", - "prop-types": "^15.6.0", - "resize-observer-polyfill": "^1.5.0" - }, - "peerDependencies": { - "react": "^0.14.7 || ^15.0.0 || ^16.0.0" - } - }, - "node_modules/react-router": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", - "integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "mini-create-react-context": "^0.4.0", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router-dom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz", - "integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.2.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router-dom/node_modules/@babel/runtime": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", - "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/react-router/node_modules/@babel/runtime": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", - "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/react-router/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/react-smooth": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-1.0.6.tgz", - "integrity": "sha512-B2vL4trGpNSMSOzFiAul9kFAsxTukL9Wyy9EXtkQy3GJr6sZqW9e1nShdVOJ3hRYamPZ94O17r3Q0bjSw3UYtg==", - "dependencies": { - "lodash": "~4.17.4", - "prop-types": "^15.6.0", - "raf": "^3.4.0", - "react-transition-group": "^2.5.0" - }, - "peerDependencies": { - "react": "^15.0.0 || ^16.0.0", - "react-dom": "^15.0.0 || ^16.0.0" - } - }, - "node_modules/react-smooth/node_modules/@babel/runtime": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", - "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/react-smooth/node_modules/dom-helpers": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", - "dependencies": { - "@babel/runtime": "^7.1.2" - } - }, - "node_modules/react-smooth/node_modules/react-transition-group": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", - "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", - "dependencies": { - "dom-helpers": "^3.4.0", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2", - "react-lifecycles-compat": "^3.0.4" - }, - "peerDependencies": { - "react": ">=15.0.0", - "react-dom": ">=15.0.0" - } - }, - "node_modules/react-transition-group": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz", - "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==", - "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" - } - }, - "node_modules/react-transition-group/node_modules/@babel/runtime": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", - "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/recharts": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/recharts/-/recharts-1.8.5.tgz", - "integrity": "sha512-tM9mprJbXVEBxjM7zHsIy6Cc41oO/pVYqyAsOHLxlJrbNBuLs0PHB3iys2M+RqCF0//k8nJtZF6X6swSkWY3tg==", - "dependencies": { - "classnames": "^2.2.5", - "core-js": "^2.6.10", - "d3-interpolate": "^1.3.0", - "d3-scale": "^2.1.0", - "d3-shape": "^1.2.0", - "lodash": "^4.17.5", - "prop-types": "^15.6.0", - "react-resize-detector": "^2.3.0", - "react-smooth": "^1.0.5", - "recharts-scale": "^0.4.2", - "reduce-css-calc": "^1.3.0" - }, - "peerDependencies": { - "react": "^15.0.0 || ^16.0.0", - "react-dom": "^15.0.0 || ^16.0.0" - } - }, - "node_modules/recharts-scale": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz", - "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", - "dependencies": { - "decimal.js-light": "^2.4.1" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/redeyed": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", - "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==", - "dev": true, - "dependencies": { - "esprima": "~4.0.0" - } - }, - "node_modules/reduce-css-calc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", - "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", - "dependencies": { - "balanced-match": "^0.4.2", - "math-expression-evaluator": "^1.2.14", - "reduce-function-call": "^1.0.1" - } - }, - "node_modules/reduce-function-call": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.3.tgz", - "integrity": "sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/reduce-function-call/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/redux": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.2.tgz", - "integrity": "sha512-SH8PglcebESbd/shgf6mii6EIoRM0zrQyjcuQ+ojmfxjTtE0z9Y8pa62iA/OJ58qjP6j27uyW4kUF4jl/jd6sw==", - "dependencies": { - "@babel/runtime": "^7.9.2" - } - }, - "node_modules/redux/node_modules/@babel/runtime": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", - "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "node_modules/regenerate-unicode-properties": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", - "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" - }, - "node_modules/regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regenerator-transform/node_modules/@babel/runtime": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", - "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regexpu-core": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", - "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^9.0.0", - "regjsgen": "^0.5.2", - "regjsparser": "^0.7.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" - }, - "node_modules/regjsparser": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", - "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remark-parse": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", - "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", - "dependencies": { - "mdast-util-from-markdown": "^0.8.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remove-accents": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz", - "integrity": "sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==" - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "node_modules/renderkid": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", - "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", - "dev": true, - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^3.0.1" - } - }, - "node_modules/renderkid/node_modules/css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/renderkid/node_modules/css-what": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", - "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/renderkid/node_modules/dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/renderkid/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/renderkid/node_modules/nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/requireindex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", - "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", - "dev": true, - "engines": { - "node": ">=0.10.5" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "node_modules/reselect": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.1.tgz", - "integrity": "sha512-Jjt8Us6hAWJpjucyladHvUGR+q1mHHgWtGDXlhvvKyNyIeQ3bjuWLDX0bsTLhbm/gd4iXEACBlODUHBlLWiNnA==", - "dev": true - }, - "node_modules/resize-observer-polyfill": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", - "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, - "node_modules/resolve-protobuf-schema": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", - "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", - "dev": true, - "dependencies": { - "protocol-buffers-schema": "^3.3.1" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true - }, - "node_modules/responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", - "dev": true, - "dependencies": { - "lowercase-keys": "^2.0.0" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rifm": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/rifm/-/rifm-0.12.0.tgz", - "integrity": "sha512-PqOl+Mo2lyqrKiD34FPlnQ+ksD3F+a62TQlphiZshgriyHdfjn6jGyqUZhd+s3nsMYXwXYDdjrrv8wX7QsOG3g==", - "peerDependencies": { - "react": ">=16.8" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/ripple-address-codec": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ripple-address-codec/-/ripple-address-codec-4.3.1.tgz", - "integrity": "sha512-Qa3+9wKVvpL/xYtT6+wANsn0A1QcC5CT6IMZbRJZ/1lGt7gmwIfsrCuz1X0+LCEO7zgb+3UT1I1dc0k/5dwKQQ==", - "dependencies": { - "base-x": "^3.0.9", - "create-hash": "^1.1.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/ripple-binary-codec": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/ripple-binary-codec/-/ripple-binary-codec-1.11.0.tgz", - "integrity": "sha512-g7+gs3T+NfoeW6vIq5dcN0CkIT4t/zwRzFxz8X2RzfbrWRnewPUKqQbmBgs05tXLX5NuWPaneiaAVpFpYBcdfw==", - "dependencies": { - "assert": "^2.0.0", - "big-integer": "^1.6.48", - "buffer": "6.0.3", - "create-hash": "^1.2.0", - "decimal.js": "^10.2.0", - "ripple-address-codec": "^4.3.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/ripple-binary-codec/node_modules/big-integer": { - "version": "1.6.52", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", - "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/ripple-keypairs": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/ripple-keypairs/-/ripple-keypairs-1.3.1.tgz", - "integrity": "sha512-dmPlraWKJciFJxHcoubDahGnoIalG5e/BtV6HNDUs7wLXmtnLMHt6w4ed9R8MTL2zNrVPiIdI/HCtMMo0Tm7JQ==", - "dependencies": { - "bn.js": "^5.1.1", - "brorand": "^1.0.5", - "elliptic": "^6.5.4", - "hash.js": "^1.0.3", - "ripple-address-codec": "^4.3.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/ripple-keypairs/node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "node_modules/ripple-lib": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/ripple-lib/-/ripple-lib-1.10.1.tgz", - "integrity": "sha512-OQk+Syl2JfxKxV2KuF/kBMtnh012I5tNnziP3G4WDGCGSIAgeqkOgkR59IQ0YDNrs1YW8GbApxrdMSRi/QClcA==", - "deprecated": "ripple-lib is deprecated. Please migrate to xrpl.js using this migration guide: https://xrpl.org/xrpljs2-migration-guide.html", - "dependencies": { - "@types/lodash": "^4.14.136", - "@types/ws": "^7.2.0", - "bignumber.js": "^9.0.0", - "https-proxy-agent": "^5.0.0", - "jsonschema": "1.2.2", - "lodash": "^4.17.4", - "ripple-address-codec": "^4.1.1", - "ripple-binary-codec": "^1.1.3", - "ripple-keypairs": "^1.0.3", - "ripple-lib-transactionparser": "0.8.2", - "ws": "^7.2.0" - }, - "engines": { - "node": ">=10.13.0", - "yarn": "^1.15.2" - } - }, - "node_modules/ripple-lib-transactionparser": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/ripple-lib-transactionparser/-/ripple-lib-transactionparser-0.8.2.tgz", - "integrity": "sha512-1teosQLjYHLyOQrKUQfYyMjDR3MAq/Ga+MJuLUfpBMypl4LZB4bEoMcmG99/+WVTEiZOezJmH9iCSvm/MyxD+g==", - "dependencies": { - "bignumber.js": "^9.0.0", - "lodash": "^4.17.15" - } - }, - "node_modules/rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true, - "engines": { - "node": "6.* || >= 7.*" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", - "dev": true, - "dependencies": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "bin": { - "sane": "src/cli.js" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/sane/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/sane/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/sane/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sass-graph": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-4.0.1.tgz", - "integrity": "sha512-5YCfmGBmxoIRYHnKK2AKzrAkCoQ8ozO+iumT8K4tXJXRVCPf+7s1/9KxTSW3Rbvf+7Y7b4FR3mWyLnQr3PHocA==", - "dev": true, - "dependencies": { - "glob": "^7.0.0", - "lodash": "^4.17.11", - "scss-tokenizer": "^0.4.3", - "yargs": "^17.2.1" - }, - "bin": { - "sassgraph": "bin/sassgraph" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/sass-graph/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/sass-graph/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/sass-graph/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sass-graph/node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/sass-graph/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "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.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/sass-graph/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/sass-loader": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-11.0.1.tgz", - "integrity": "sha512-Vp1LcP4slTsTNLEiDkTcm8zGN/XYYrZz2BZybQbliWA8eXveqA/AxsEjllQTpJbg2MzCsx/qNO48sHdZtOaxTw==", - "dev": true, - "dependencies": { - "klona": "^2.0.4", - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0", - "sass": "^1.3.0", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/scss-tokenizer": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.4.3.tgz", - "integrity": "sha512-raKLgf1LI5QMQnG+RxHz6oK0sL3x3I4FN2UDLqgLOGO8hodECNnNh5BXn7fAyBxrA8zVzdQizQ6XjNJQ+uBwMw==", - "dev": true, - "dependencies": { - "js-base64": "^2.4.9", - "source-map": "^0.7.3" - } - }, - "node_modules/scss-tokenizer/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true - }, - "node_modules/selfsigned": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz", - "integrity": "sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ==", - "dev": true, - "dependencies": { - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "node_modules/serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/servie": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/servie/-/servie-4.3.3.tgz", - "integrity": "sha512-b0IrY3b1gVMsWvJppCf19g1p3JSnS0hQi6xu4Hi40CIhf0Lx8pQHcvBL+xunShpmOiQzg1NOia812NAWdSaShw==", - "dev": true, - "dependencies": { - "@servie/events": "^1.0.0", - "byte-length": "^1.0.2", - "ts-expect": "^1.1.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", - "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", - "dev": true, - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/shelljs/node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true, - "optional": true - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/simple-get/node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/simple-get/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/sockjs/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", - "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", - "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.1", - "socks": "^2.6.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/socks/node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" - }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated", - "dev": true - }, - "node_modules/spawn-command": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", - "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==" - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", - "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", - "dev": true - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" - }, - "node_modules/stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/stackframe": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", - "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==", - "dev": true - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/stdout-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", - "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.1" - } - }, - "node_modules/stdout-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/stdout-stream/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/stdout-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/stdout-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/stoppable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", - "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", - "dev": true, - "engines": { - "node": ">=4", - "npm": ">=6" - } - }, - "node_modules/stream-browserify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", - "dependencies": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-length/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-length/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-natural-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", - "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==", - "dev": true - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz", - "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.3.1", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", - "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/style-loader/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/stylis": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.10.tgz", - "integrity": "sha512-m3k+dk7QeJw660eIKRRn3xPF6uuvHs/FFzjX3HQ5ove0qYsiygoAhwn5a3IYKaZPo5LrYD0rfVmtv1gNY1uYwg==" - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" - }, - "node_modules/svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", - "dependencies": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "node_modules/table": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz", - "integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", - "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/table/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "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" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dev": true, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.4.tgz", - "integrity": "sha512-E2CkNMN+1cho04YpdANyRrn8CyN4yMy+WdFKZIySFZrGXZxJwJP6PMNGGc/Mcr6qygQHUUqRxnAPmi0M9f00XA==", - "dev": true, - "dependencies": { - "jest-worker": "^27.0.6", - "p-limit": "^3.1.0", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/terser-webpack-plugin/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser-webpack-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/terser": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", - "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", - "dev": true, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin/node_modules/terser/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/terser/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "node_modules/throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "node_modules/throwback": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/throwback/-/throwback-4.1.0.tgz", - "integrity": "sha512-dLFe8bU8SeH0xeqeKL7BNo8XoPC/o91nz9/ooeplZPiso+DZukhoyZcSz9TFnUNScm+cA9qjU1m1853M6sPOng==", - "dev": true - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "node_modules/tiny-invariant": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.2.0.tgz", - "integrity": "sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg==" - }, - "node_modules/tiny-secp256k1": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-1.1.6.tgz", - "integrity": "sha512-FmqJZGduTyvsr2cF3375fqGHUovSwDi/QytexX1Se4BPuPZpTE5Ftp5fg+EFSuEf3lhZqgCRjEG3ydUQ/aNiwA==", - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.3.0", - "bn.js": "^4.11.8", - "create-hmac": "^1.1.7", - "elliptic": "^6.4.0", - "nan": "^2.13.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "node_modules/tinycolor2": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", - "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==", - "engines": { - "node": "*" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-readable-stream": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-2.1.0.tgz", - "integrity": "sha512-o3Qa6DGg1CEXshSdvWNX2sN4QHqg03SPq7U6jPXRahlQdl5dK8oXjkU/2/sGrnOZKeGV1zLSO8qPwyKklPPE7w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toggle-selection": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", - "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" - }, - "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" - }, - "node_modules/traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/trezor-connect-flow": { - "version": "1.0.0", - "resolved": "git+ssh://git@github.com/Emurgo/trezor-connect-flow.git#92d6d8c8faef25c0ea1d481aa1ecb4ba77ce539c", - "integrity": "sha512-XkgQsN8AVPs8ucg2qWUUY+u2lgBJnfzzBjC7SoHAp0N5VFI5vsi5CRJ4URbaC7kTMJwoOrjQ2rNyIgFEKYwm+Q==", - "license": "MIT", - "dependencies": { - "@trezor/connect-web": "9.1.1" - } - }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/true-case-path": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", - "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==", - "dev": true - }, - "node_modules/ts-expect": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-expect/-/ts-expect-1.3.0.tgz", - "integrity": "sha512-e4g0EJtAjk64xgnFPD6kTBUtpnMVzDrMb12N1YZV0VvSlhnVT3SGxiYTLdGy8Q5cYHOIC/FAHmZ10eGrAguicQ==", - "dev": true - }, - "node_modules/tsconfig-paths": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz", - "integrity": "sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typeforce": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/typeforce/-/typeforce-1.18.0.tgz", - "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==" - }, - "node_modules/typescript": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", - "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/typescript-compiler": { - "version": "1.4.1-2", - "resolved": "https://registry.npmjs.org/typescript-compiler/-/typescript-compiler-1.4.1-2.tgz", - "integrity": "sha1-uk99si2RU0oZKdkACdzhYety/T8=", - "dev": true - }, - "node_modules/u2f-api": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/u2f-api/-/u2f-api-0.2.7.tgz", - "integrity": "sha512-fqLNg8vpvLOD5J/z4B6wpPg4Lvowz1nJ9xdHcCzdUPKcFE/qNCceV2gNZxSJd5vhAZemHr/K/hbzVA0zxB5mkg==" - }, - "node_modules/ua-parser-js": { - "version": "1.0.37", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz", - "integrity": "sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - }, - { - "type": "github", - "url": "https://github.com/sponsors/faisalman" - } - ], - "engines": { - "node": "*" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/underscore": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", - "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=" - }, - "node_modules/underscore.string": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", - "integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=", - "engines": { - "node": "*" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unified": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", - "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==", - "dev": true - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-1.1.2.tgz", - "integrity": "sha512-yvo+MMLjEwdc3RhhPYSximset7rwjMrdt9E41Smmvg25UQIenzrN83cRnF1JMzoMi9zZOQeYXHSDf7p+IQkW3Q==" - }, - "node_modules/unist-util-visit/node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/universal-user-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-4.0.1.tgz", - "integrity": "sha512-LnST3ebHwVL2aNe4mejI9IQh2HfZ1RLo8Io2HugSif8ekzD1TlWpHpColOB/eh8JHMLkGH3Akqf040I+4ylNxg==", - "dev": true, - "dependencies": { - "os-name": "^3.1.0" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unload": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unload/-/unload-2.2.0.tgz", - "integrity": "sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA==", - "dependencies": { - "@babel/runtime": "^7.6.2", - "detect-node": "^2.0.4" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/unset-value/node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unused-webpack-plugin": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/unused-webpack-plugin/-/unused-webpack-plugin-2.4.0.tgz", - "integrity": "sha512-v/9lL+ICYVJodolusinh7j+Lj51Quj6erA5YiBl5W0L19BAZ29H+88l9GCdWl3bZEb6BowGX2Ig8CMvxKzqhwQ==", - "dev": true, - "dependencies": { - "chalk": "^2.1.0", - "deglob": "^3.1.0" - } - }, - "node_modules/unzipper": { - "version": "0.10.11", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", - "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", - "dev": true, - "dependencies": { - "big-integer": "^1.6.17", - "binary": "~0.3.0", - "bluebird": "~3.4.1", - "buffer-indexof-polyfill": "~1.0.0", - "duplexer2": "~0.1.4", - "fstream": "^1.0.12", - "graceful-fs": "^4.2.2", - "listenercount": "~1.0.1", - "readable-stream": "~2.3.6", - "setimmediate": "~1.0.4" - } - }, - "node_modules/unzipper/node_modules/bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", - "dev": true - }, - "node_modules/unzipper/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/unzipper/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/unzipper/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/unzipper/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true - }, - "node_modules/url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "file-loader": "*", - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "file-loader": { - "optional": true - } - } - }, - "node_modules/url-loader/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/usb": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/usb/-/usb-2.9.0.tgz", - "integrity": "sha512-G0I/fPgfHUzWH8xo2KkDxTTFruUWfppgSFJ+bQxz/kVY2x15EQ/XDB7dqD1G432G4gBG4jYQuF3U7j/orSs5nw==", - "hasInstallScript": true, - "dependencies": { - "@types/w3c-web-usb": "^1.0.6", - "node-addon-api": "^6.0.0", - "node-gyp-build": "^4.5.0" - }, - "engines": { - "node": ">=10.20.0 <11.x || >=12.17.0 <13.0 || >=14.0.0" - } - }, - "node_modules/usb/node_modules/node-addon-api": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", - "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==" - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/use-memo-one": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.2.tgz", - "integrity": "sha512-u2qFKtxLsia/r8qG0ZKkbytbztzRb317XCkT7yP8wxL0tZ/CzK2G+WWie5vWvpyeP7+YoPIwbJoIHJ4Ba4k0oQ==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0" - } - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", - "dev": true - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/v8flags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", - "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", - "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "node_modules/varuint-bitcoin": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/varuint-bitcoin/-/varuint-bitcoin-1.1.2.tgz", - "integrity": "sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw==", - "dependencies": { - "safe-buffer": "^5.1.1" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vue-parser": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/vue-parser/-/vue-parser-1.1.6.tgz", - "integrity": "sha512-v3/R7PLbaFVF/c8IIzWs1HgRpT2gN0dLRkaLIT5q+zJGVgmhN4VuZJF4Y9N4hFtFjS4B1EHxAOP6/tzqM4Ug2g==", - "dev": true, - "dependencies": { - "parse5": "^3.0.3" - }, - "engines": { - "node": ">= 4.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/vue-parser/node_modules/parse5": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", - "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/w3c-xmlserializer/node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" - }, - "node_modules/webpack": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.23.0.tgz", - "integrity": "sha512-RC6dwDuRxiU75F8XC4H08NtzUrMfufw5LDnO8dTtaKU2+fszEdySCgZhNwSBBn516iNaJbQI7T7OPHIgCwcJmg==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.46", - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/wasm-edit": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "acorn": "^8.0.4", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.7.0", - "es-module-lexer": "^0.3.26", - "eslint-scope": "^5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.0.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.1", - "watchpack": "^2.0.0", - "webpack-sources": "^2.1.1" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-cli": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.5.0.tgz", - "integrity": "sha512-wXg/ef6Ibstl2f50mnkcHblRPN/P9J4Nlod5Hg9HGFgSeF8rsqDGHJeVe4aR26q9l62TUJi6vmvC2Qz96YJw1Q==", - "dev": true, - "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.0.1", - "@webpack-cli/info": "^1.2.2", - "@webpack-cli/serve": "^1.3.0", - "colorette": "^1.2.1", - "commander": "^7.0.0", - "enquirer": "^2.3.6", - "execa": "^5.0.0", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "v8-compile-cache": "^2.2.0", - "webpack-merge": "^5.7.3" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x" - }, - "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, - "@webpack-cli/init": { - "optional": true - }, - "@webpack-cli/migrate": { - "optional": true - }, - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/webpack-cli/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-cli/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/webpack-cli/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/webpack-cli/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/webpack-cli/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/webpack-cli/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/webpack-cli/node_modules/rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "dev": true, - "dependencies": { - "resolve": "^1.9.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/webpack-dev-middleware": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.1.0.tgz", - "integrity": "sha512-mpa/FY+DiBu5+r5JUIyTCYWRfkWgyA3/OOE9lwfzV9S70A4vJYLsVRKj5rMFEsezBroy2FmPyQ8oBRVW8QmK1A==", - "dev": true, - "dependencies": { - "colorette": "^1.2.1", - "mem": "^8.0.0", - "memfs": "^3.2.0", - "mime-types": "^2.1.28", - "range-parser": "^1.2.1", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.9.3.tgz", - "integrity": "sha512-3qp/eoboZG5/6QgiZ3llN8TUzkSpYg1Ko9khWX1h40MIEUNS2mDoIa8aXsPfskER+GbTvs/IJZ1QTBBhhuetSw==", - "dev": true, - "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/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.0.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/webpack-dev-server/node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-server/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-server/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-server/node_modules/body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/webpack-dev-server/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/webpack-dev-server/node_modules/colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, - "node_modules/webpack-dev-server/node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-server/node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-server/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/webpack-dev-server/node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/webpack-dev-server/node_modules/express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", - "dev": true, - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/webpack-dev-server/node_modules/html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", - "dev": true - }, - "node_modules/webpack-dev-server/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/webpack-dev-server/node_modules/ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-dev-server/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/webpack-dev-server/node_modules/memfs": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.7.tgz", - "integrity": "sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw==", - "dev": true, - "dependencies": { - "fs-monkey": "^1.0.3" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-server/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-server/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/webpack-dev-server/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-server/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/webpack-dev-server/node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/webpack-dev-server/node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true - }, - "node_modules/webpack-dev-server/node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/webpack-dev-server/node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server/node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/webpack-dev-server/node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/webpack-dev-server/node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/webpack-dev-server/node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/webpack-dev-server/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/webpack-dev-server/node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dev": true, - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", - "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-hot-middleware": { - "version": "2.25.0", - "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.0.tgz", - "integrity": "sha512-xs5dPOrGPCzuRXNi8F6rwhawWvQQkeli5Ro48PRuQh8pYPCPmNnltP9itiUPT4xI8oW+y0m59lyyeQk54s5VgA==", - "dev": true, - "dependencies": { - "ansi-html": "0.0.7", - "html-entities": "^1.2.0", - "querystring": "^0.2.0", - "strip-ansi": "^3.0.0" - } - }, - "node_modules/webpack-httpolyglot-server": { - "version": "0.3.0", - "resolved": "git+ssh://git@github.com/Emurgo/webpack-httpolyglot-server.git#ce520ad87d48bb5ae0121ca97f6c93cbb18f0f27", - "integrity": "sha512-4xjSSTP5ii8IGNGtyErl8do9d4/6ziSqm6Yihawy4+h6Tgw1cs1dUIq18eNrnsds0S6t3GYLyZNr1EuLvTFnSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "express": "^4.14.0", - "httpolyglot": "^0.1.1", - "lodash.omit": "^4.5.0", - "webpack-dev-middleware": "*", - "webpack-hot-middleware": "^2.12.2" - }, - "peerDependencies": { - "webpack": ">= 2" - } - }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/webpack-sources/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/@webassemblyjs/ast": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", - "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0" - } - }, - "node_modules/webpack/node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", - "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", - "dev": true - }, - "node_modules/webpack/node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", - "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", - "dev": true - }, - "node_modules/webpack/node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", - "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", - "dev": true - }, - "node_modules/webpack/node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", - "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0" - } - }, - "node_modules/webpack/node_modules/@webassemblyjs/ieee754": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", - "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/webpack/node_modules/@webassemblyjs/leb128": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", - "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/webpack/node_modules/@webassemblyjs/utf8": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", - "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", - "dev": true - }, - "node_modules/webpack/node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", - "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/helper-wasm-section": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-opt": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "@webassemblyjs/wast-printer": "1.11.0" - } - }, - "node_modules/webpack/node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", - "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" - } - }, - "node_modules/webpack/node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", - "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0" - } - }, - "node_modules/webpack/node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", - "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" - } - }, - "node_modules/webpack/node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", - "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/webpack/node_modules/acorn": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/webpack/node_modules/enhanced-resolve": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", - "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webpack/node_modules/loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", - "dev": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack/node_modules/watchpack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", - "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", - "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/webpack-sources": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", - "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", - "dev": true, - "dependencies": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "node_modules/which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wif": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/wif/-/wif-2.0.6.tgz", - "integrity": "sha1-CNP1IFbGZnkplyb63g1DKudLRwQ=", - "dependencies": { - "bs58check": "<3.0.0" - } - }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, - "node_modules/windows-release": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.3.3.tgz", - "integrity": "sha512-OSOGH1QYiW5yVor9TtmXKQvt2vjQqbYS+DqmsZw+r7xDwLXEeT3JGW0ZppFmHx4diyXmxt238KFR3N9jzevBRg==", - "dev": true, - "dependencies": { - "execa": "^1.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==" - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.3.tgz", - "integrity": "sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser/node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yargs/node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zip-stream": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-2.1.3.tgz", - "integrity": "sha512-EkXc2JGcKhO5N5aZ7TmuNo45budRaFGHOmz24wtJR7znbNqDPmdZtUauKX6et8KAVseAMBOyWJqEpXcHTBsh7Q==", - "dev": true, - "dependencies": { - "archiver-utils": "^2.1.0", - "compress-commons": "^2.1.1", - "readable-stream": "^3.4.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/zod": { - "version": "3.22.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", - "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - } - } -} diff --git a/packages/yoroi-extension/package.json b/packages/yoroi-extension/package.json index 5137e5e4bf..a0b2cae924 100644 --- a/packages/yoroi-extension/package.json +++ b/packages/yoroi-extension/package.json @@ -76,6 +76,8 @@ "@emurgo/cardano-serialization-lib-nodejs": "12.0.0-alpha.26", "@emurgo/cross-csl-nodejs": "4.4.0", "@pmmmwh/react-refresh-webpack-plugin": "0.5.11", + "@types/react-intl": "^3.0.0", + "@types/react-router-dom": "^5.3.3", "@yoroi/common": "1.5.0", "autoprefixer": "10.2.4", "babel-eslint": "11.0.0-beta.2", diff --git a/packages/yoroi-extension/tsconfig.json b/packages/yoroi-extension/tsconfig.json new file mode 100644 index 0000000000..7233d61517 --- /dev/null +++ b/packages/yoroi-extension/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "declaration": true, + "baseUrl": "./app", + "allowUnreachableCode": false, + "allowUnusedLabels": false, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "jsx": "react", + "lib": ["es6"], + "module": "esnext", + "moduleResolution": "node", + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "noImplicitUseStrict": false, + "noStrictGenericChecks": false, + "noUncheckedIndexedAccess": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "strict": true, + "target": "esnext" + } + } + \ No newline at end of file diff --git a/packages/yoroi-extension/webpack-mv2/commonConfig.js b/packages/yoroi-extension/webpack-mv2/commonConfig.js index cbda7f4628..717d1c1786 100644 --- a/packages/yoroi-extension/webpack-mv2/commonConfig.js +++ b/packages/yoroi-extension/webpack-mv2/commonConfig.js @@ -44,14 +44,14 @@ const plugins = (folder /*: string */, _networkName /*: string */) /*: * */ => { filename: path.join(__dirname, `../${folder}/background.html`), template: path.join(__dirname, '../chrome/views/background.html'), chunks: ['background'], - alwaysWriteToDisk: true + alwaysWriteToDisk: true, }), new HtmlWebpackPlugin({ filename: path.join(__dirname, `../${folder}/ledger.html`), template: path.join(__dirname, '../ledger/index.html'), favicon: path.join(__dirname, '../ledger/assets/img/favicon.ico'), chunks: ['ledger'], - alwaysWriteToDisk: true + alwaysWriteToDisk: true, }), /** @@ -99,8 +99,13 @@ const plugins = (folder /*: string */, _networkName /*: string */) /*: * */ => { ]; }; -const rules /*: boolean => Array<*> */ = (_isDev) => [ +const rules /*: boolean => Array<*> */ = _isDev => [ // Pdfjs Worker webpack config, reference to issue: https://github.com/mozilla/pdf.js/issues/7612#issuecomment-315179422 + { + test: /\.tsx?$/, + use: 'ts-loader', + exclude: /node_modules/, + }, { test: /pdf\.worker(\.min)?\.js$/, use: 'raw-loader', @@ -118,7 +123,7 @@ const rules /*: boolean => Array<*> */ = (_isDev) => [ modules: { mode: 'local', localIdentName: '[name]__[local]___[hash:base64:5]', - } + }, }, }, { @@ -126,10 +131,10 @@ const rules /*: boolean => Array<*> */ = (_isDev) => [ options: { postcssOptions: { plugins: () => [autoprefixer], - } - } - } - ] + }, + }, + }, + ], }, { test: /\.global\.scss$/, @@ -145,8 +150,8 @@ const rules /*: boolean => Array<*> */ = (_isDev) => [ }, }, }, - 'sass-loader' - ] + 'sass-loader', + ], }, { test: /^((?!\.global).)*\.scss$/, @@ -161,15 +166,15 @@ const rules /*: boolean => Array<*> */ = (_isDev) => [ modules: { mode: 'local', localIdentName: '[name]_[local]', - } + }, }, }, - 'sass-loader' - ] + 'sass-loader', + ], }, { test: /\.(eot|otf|ttf|woff|woff2|gif|png)$/, - include: [ path.resolve(__dirname, '../ledger') ], + include: [path.resolve(__dirname, '../ledger')], loader: 'file-loader', options: { esModule: false, @@ -183,27 +188,28 @@ const rules /*: boolean => Array<*> */ = (_isDev) => [ { test: /\.svg$/, issuer: { not: [/\.scss$/] }, - use: [{ - loader: '@svgr/webpack', - options: { - svgoConfig: { - plugins: [{ - removeViewBox: false - }] - } - } - }, 'file-loader'] + use: [ + { + loader: '@svgr/webpack', + options: { + svgoConfig: { + plugins: [ + { + removeViewBox: false, + }, + ], + }, + }, + }, + 'file-loader', + ], }, { test: /\.md$/, - use: [ - 'html-loader', - 'markdown-loader', - ] + use: ['html-loader', 'markdown-loader'], }, ]; - const optimization = { // https://github.com/webpack/webpack/issues/7470 nodeEnv: false, @@ -213,11 +219,11 @@ const optimization = { chunks: 'all', // Firefox require all files to be <4MBs maxSize: 4000000, - } + }, }; const resolve = () /*: * */ => ({ - extensions: ['*', '.js', '.wasm'], + extensions: ['*', '.tsx', '.ts', '.js', '.wasm'], fallback: { vm: false, fs: false, @@ -230,7 +236,7 @@ const resolve = () /*: * */ => ({ 'react-native': false, 'react-native-mmkv': false, }, - alias: { process: 'process/browser', } + alias: { process: 'process/browser' }, }); const definePlugin = ( @@ -243,21 +249,17 @@ const definePlugin = ( 'process.env': { NODE_ENV: JSON.stringify(isProd ? 'production' : 'development'), COMMIT: JSON.stringify( - shell.exec( - 'if [ -e ../../COMMIT ]; then cat ../../COMMIT; else git rev-parse HEAD; fi', - { silent: true } - ).trim() + shell.exec('if [ -e ../../COMMIT ]; then cat ../../COMMIT; else git rev-parse HEAD; fi', { silent: true }).trim() ), BRANCH: JSON.stringify( - shell.exec( - 'if [ -e ../../BRANCH ]; then cat ../../BRANCH; else git rev-parse --abbrev-ref HEAD; fi', - { silent: true } - ).trim() + shell + .exec('if [ -e ../../BRANCH ]; then cat ../../BRANCH; else git rev-parse --abbrev-ref HEAD; fi', { silent: true }) + .trim() ), NIGHTLY: isNightly, POOLS_UI_URL_FOR_YOROI: JSON.stringify(manifestEnvs.POOLS_UI_URL_FOR_YOROI), - IS_LIGHT: isLight , - } + IS_LIGHT: isLight, + }, }; }; @@ -267,5 +269,5 @@ module.exports = { optimization, resolve, definePlugin, - experiments: { syncWebAssembly: true } + experiments: { syncWebAssembly: true }, }; diff --git a/packages/yoroi-extension/webpack/commonConfig.js b/packages/yoroi-extension/webpack/commonConfig.js index 7b4a1a7987..77b12c88e7 100644 --- a/packages/yoroi-extension/webpack/commonConfig.js +++ b/packages/yoroi-extension/webpack/commonConfig.js @@ -44,7 +44,7 @@ const plugins = (folder /*: string */, _networkName /*: string */) /*: * */ => { template: path.join(__dirname, '../ledger/index.html'), favicon: path.join(__dirname, '../ledger/assets/img/favicon.ico'), chunks: ['ledger'], - alwaysWriteToDisk: true + alwaysWriteToDisk: true, }), /** @@ -73,7 +73,7 @@ const plugins = (folder /*: string */, _networkName /*: string */) /*: * */ => { ]; }; -const rules /*: boolean => Array<*> */ = (_isDev) => [ +const rules /*: boolean => Array<*> */ = _isDev => [ // Pdfjs Worker webpack config, reference to issue: https://github.com/mozilla/pdf.js/issues/7612#issuecomment-315179422 { test: /pdf\.worker(\.min)?\.js$/, @@ -92,7 +92,7 @@ const rules /*: boolean => Array<*> */ = (_isDev) => [ modules: { mode: 'local', localIdentName: '[name]__[local]___[hash:base64:5]', - } + }, }, }, { @@ -100,10 +100,10 @@ const rules /*: boolean => Array<*> */ = (_isDev) => [ options: { postcssOptions: { plugins: () => [autoprefixer], - } - } - } - ] + }, + }, + }, + ], }, { test: /\.global\.scss$/, @@ -119,8 +119,8 @@ const rules /*: boolean => Array<*> */ = (_isDev) => [ }, }, }, - 'sass-loader' - ] + 'sass-loader', + ], }, { test: /^((?!\.global).)*\.scss$/, @@ -135,15 +135,15 @@ const rules /*: boolean => Array<*> */ = (_isDev) => [ modules: { mode: 'local', localIdentName: '[name]_[local]', - } + }, }, }, - 'sass-loader' - ] + 'sass-loader', + ], }, { test: /\.(eot|otf|ttf|woff|woff2|gif|png)$/, - include: [ path.resolve(__dirname, '../ledger') ], + include: [path.resolve(__dirname, '../ledger')], loader: 'file-loader', options: { esModule: false, @@ -157,27 +157,33 @@ const rules /*: boolean => Array<*> */ = (_isDev) => [ { test: /\.svg$/, issuer: { not: [/\.scss$/] }, - use: [{ - loader: '@svgr/webpack', - options: { - svgoConfig: { - plugins: [{ - removeViewBox: false - }] - } - } - }, 'file-loader'] + use: [ + { + loader: '@svgr/webpack', + options: { + svgoConfig: { + plugins: [ + { + removeViewBox: false, + }, + ], + }, + }, + }, + 'file-loader', + ], }, { test: /\.md$/, - use: [ - 'html-loader', - 'markdown-loader', - ] + use: ['html-loader', 'markdown-loader'], + }, + { + test: /\.tsx?$/, + use: 'ts-loader', + exclude: /node_modules/, }, ]; - const optimization = { // https://github.com/webpack/webpack/issues/7470 nodeEnv: false, @@ -187,11 +193,11 @@ const optimization = { chunks: 'all', // Firefox require all files to be <4MBs maxSize: 4000000, - } + }, }; const resolve = () /*: * */ => ({ - extensions: ['*', '.js', '.wasm'], + extensions: ['*', '.tsx', '.ts', '.js', '.wasm'], fallback: { vm: false, fs: false, @@ -203,7 +209,7 @@ const resolve = () /*: * */ => ({ assert: require.resolve('assert/'), util: require.resolve('util/'), }, - alias: { process: 'process/browser', } + alias: { process: 'process/browser' }, }); const definePlugin = ( @@ -216,21 +222,17 @@ const definePlugin = ( 'process.env': { NODE_ENV: JSON.stringify(isProd ? 'production' : 'development'), COMMIT: JSON.stringify( - shell.exec( - 'if [ -e ../../COMMIT ]; then cat ../../COMMIT; else git rev-parse HEAD; fi', - { silent: true } - ).trim() + shell.exec('if [ -e ../../COMMIT ]; then cat ../../COMMIT; else git rev-parse HEAD; fi', { silent: true }).trim() ), BRANCH: JSON.stringify( - shell.exec( - 'if [ -e ../../BRANCH ]; then cat ../../BRANCH; else git rev-parse --abbrev-ref HEAD; fi', - { silent: true } - ).trim() + shell + .exec('if [ -e ../../BRANCH ]; then cat ../../BRANCH; else git rev-parse --abbrev-ref HEAD; fi', { silent: true }) + .trim() ), NIGHTLY: isNightly, POOLS_UI_URL_FOR_YOROI: JSON.stringify(manifestEnvs.POOLS_UI_URL_FOR_YOROI), - IS_LIGHT: isLight , - } + IS_LIGHT: isLight, + }, }; }; @@ -240,5 +242,5 @@ module.exports = { optimization, resolve, definePlugin, - experiments: { syncWebAssembly: true } + experiments: { syncWebAssembly: true }, }; diff --git a/packages/yoroi-extension/yarn.lock b/packages/yoroi-extension/yarn.lock new file mode 100644 index 0000000000..1b9adfa210 --- /dev/null +++ b/packages/yoroi-extension/yarn.lock @@ -0,0 +1,15080 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@amplitude/ampli@^1.32.0": + version "1.35.0" + resolved "https://registry.yarnpkg.com/@amplitude/ampli/-/ampli-1.35.0.tgz#1f41b62732abad4c3344defa5b4707535515dfae" + integrity sha512-5OzsJBMrlzWwyV+08Hjbox3H4ItH9zJUj5E821nUlTsrh5cJk/+0sMHAJvCMakCoQ/VJBKULI1CNa7JGKL62uQ== + dependencies: + "@amplitude/identify" "^1.10.0" + "@amplitude/node" "^1.10.0" + "@amplitude/types" "^1.10.0" + "@babel/parser" "^7.12.11" + "@babel/traverse" "^7.12.12" + "@oclif/command" "^1.6.1" + "@oclif/config" "^1.15.1" + "@oclif/errors" "^1.2.2" + "@oclif/parser" "^3.8.3" + "@oclif/plugin-autocomplete" "^0.3.0" + "@oclif/plugin-help" "^3.2.2" + "@oclif/plugin-update" "^1.3.10" + "@oclif/plugin-warn-if-update-available" "^1.7.0" + "@phenomnomnominal/tsquery" "^3.0.0" + "@sentry/node" "^6.2.5" + "@sentry/types" "^6.2.5" + "@types/debug" "^4.1.5" + "@types/inquirer" "^8.2.4" + ansi-regex "^5.0.1" + antlr4ts "^0.5.0-alpha.4" + chalk "^2.4.2" + client-oauth2 "^4.3.3" + conf "^6.2.0" + debug "^4.1.1" + dotenv "^8.2.0" + fs-extra "^8.1.0" + get-port "^5.0.0" + globby "^10.0.1" + graphql "^15.4.0" + graphql-request "^3.3.0" + graphql-tag "^2.11.0" + https-proxy-agent "^5.0.1" + ignore-walk "^3.0.3" + inquirer "^8.2.4" + inquirer-autocomplete-prompt "^2.0.0" + json5 "^2.1.1" + lodash "^4.17.21" + minimatch "^3.0.4" + node-fetch "^2.6.1" + open "^7.3.1" + ora "^4.1.1" + php-parser "^3.0.0-prerelease.8" + pkce-challenge "^2.2.0" + randomstring "^1.1.5" + rimraf "^3.0.2" + stoppable "^1.1.0" + tmp "^0.2.1" + tslib "^1.14.1" + typescript "^3.9.7" + uuid "^9.0.0" + vue-parser "^1.1.6" + +"@amplitude/analytics-browser@^2.1.3": + version "2.8.1" + resolved "https://registry.yarnpkg.com/@amplitude/analytics-browser/-/analytics-browser-2.8.1.tgz#e23ccc1bb36106ca437d3bad20883e97168f7ecf" + integrity sha512-gvCvGQUbHjrmQQma5qBDQo25TD/p+TCoWX20XfGJC0rR51MCWacbYQZ6CQrECXte7c6XNzc11hC6Kf50bO0Sxw== + dependencies: + "@amplitude/analytics-client-common" "^2.2.1" + "@amplitude/analytics-core" "^2.2.8" + "@amplitude/analytics-types" "^2.5.1" + "@amplitude/plugin-page-view-tracking-browser" "^2.2.13" + tslib "^2.4.1" + +"@amplitude/analytics-client-common@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@amplitude/analytics-client-common/-/analytics-client-common-2.2.1.tgz#83bff4c49046547d2efed8e8a154d12c8a338526" + integrity sha512-JXpLjKgP7LiBMZF5eMjtiPiSPW8FxvF4bHubDg26Ck2buBUQvrBq6D4VyOky0m1zG7WA4vOoLANu3sWfF02/7Q== + dependencies: + "@amplitude/analytics-connector" "^1.4.8" + "@amplitude/analytics-core" "^2.2.8" + "@amplitude/analytics-types" "^2.5.1" + tslib "^2.4.1" + +"@amplitude/analytics-connector@^1.4.8": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@amplitude/analytics-connector/-/analytics-connector-1.5.0.tgz#89a78b8c6463abe4de1d621db4af6c62f0d62b0a" + integrity sha512-T8mOYzB9RRxckzhL0NTHwdge9xuFxXEOplC8B1Y3UX3NHa3BLh7DlBUZlCOwQgMc2nxDfnSweDL5S3bhC+W90g== + +"@amplitude/analytics-core@^2.2.8": + version "2.2.8" + resolved "https://registry.yarnpkg.com/@amplitude/analytics-core/-/analytics-core-2.2.8.tgz#135d2a39c2af2826636212295712e571affd8e68" + integrity sha512-T4ZFk1LUD+4z02XMSWK4qPvMREUTgNtEoYQc6BvNyfOx1Ih21qyJLFcdSw05gL26JuuuYZWFkpHxxKm8IoZh8Q== + dependencies: + "@amplitude/analytics-types" "^2.5.1" + tslib "^2.4.1" + +"@amplitude/analytics-types@^2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@amplitude/analytics-types/-/analytics-types-2.5.1.tgz#ca14f4b4ed09bbf21ea5294a22eba5c197515167" + integrity sha512-xGuLiHRLv5z3RSAHiICjzHK4TjUZJ7aHr/jM0XhSgD/V1YdmG/s8y1UAWGI2Stsxm2x0DWNOyEpjYkGohlnXtA== + +"@amplitude/identify@^1.10.0", "@amplitude/identify@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@amplitude/identify/-/identify-1.10.2.tgz#25d88f9e3bedd99701c777b9e44408ac69179aa1" + integrity sha512-ywxeabS8ukMdJWNwx3rG/EBngXFg/4NsPhlyAxbBUcI7HzBXEJUKepiZfkz8K6Y7f0mpc23Qz1aBf48ZJDZmkQ== + dependencies: + "@amplitude/types" "^1.10.2" + "@amplitude/utils" "^1.10.2" + tslib "^2.0.0" + +"@amplitude/node@^1.10.0": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@amplitude/node/-/node-1.10.2.tgz#79fb80e7228486521156eae510de998264e6620c" + integrity sha512-E3xp8DOpkF5ThjrRlAmSocnrEYsTPpd3Zg4WdBLms0ackQSgQpw6z84+YMcoPerZHJJ/LEqdo4Cg4Z5Za3D+3Q== + dependencies: + "@amplitude/identify" "^1.10.2" + "@amplitude/types" "^1.10.2" + "@amplitude/utils" "^1.10.2" + tslib "^2.0.0" + +"@amplitude/plugin-page-view-tracking-browser@^2.2.13": + version "2.2.13" + resolved "https://registry.yarnpkg.com/@amplitude/plugin-page-view-tracking-browser/-/plugin-page-view-tracking-browser-2.2.13.tgz#da799d259a86d83d5c0304a78d7feff7628e1fb6" + integrity sha512-EYvG4RTyNqIGlq3J+UnrTRRj75xp3nOSETeInPQbnHhiPaCzxTjWrb9URkzy2IYSyBSn4KEQkZegmzhWXxlvvw== + dependencies: + "@amplitude/analytics-client-common" "^2.2.1" + "@amplitude/analytics-types" "^2.5.1" + tslib "^2.4.1" + +"@amplitude/types@^1.10.0", "@amplitude/types@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@amplitude/types/-/types-1.10.2.tgz#8f3c6c3c9ee24f401ee037b351c3c67eb945eefc" + integrity sha512-I8qenRI7uU6wKNb9LiZrAosSHVoNHziXouKY81CrqxH9xhVTEIJFXeuCV0hbtBr0Al/8ejnGjQRx+S2SvU/pPg== + +"@amplitude/utils@^1.10.2": + version "1.10.2" + resolved "https://registry.yarnpkg.com/@amplitude/utils/-/utils-1.10.2.tgz#ce77dc8a54fcd3843511531cc7d56363247c7ad8" + integrity sha512-tVsHXu61jITEtRjB7NugQ5cVDd4QDzne8T3ifmZye7TiJeUfVRvqe44gDtf55A+7VqhDhyEIIXTA1iVcDGqlEw== + dependencies: + "@amplitude/types" "^1.10.2" + tslib "^2.0.0" + +"@ampproject/remapping@^2.2.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@babel/code-frame@7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" + integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== + dependencies: + "@babel/highlight" "^7.24.7" + picocolors "^1.0.0" + +"@babel/compat-data@^7.12.13", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.7.tgz#d23bbea508c3883ba8251fb4164982c36ea577ed" + integrity sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw== + +"@babel/core@7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.17.tgz#993c5e893333107a2815d8e0d73a2c3755e280b2" + integrity sha512-V3CuX1aBywbJvV2yzJScRxeiiw0v2KZZYYE3giywxzFJL13RiyPjaaDwhDnxmgFTTS7FgvM2ijr4QmKNIu0AtQ== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.12.17" + "@babel/helper-module-transforms" "^7.12.17" + "@babel/helpers" "^7.12.17" + "@babel/parser" "^7.12.17" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.12.17" + "@babel/types" "^7.12.17" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.7.5": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.7.tgz#b676450141e0b52a3d43bc91da86aa608f950ac4" + integrity sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.24.7" + "@babel/generator" "^7.24.7" + "@babel/helper-compilation-targets" "^7.24.7" + "@babel/helper-module-transforms" "^7.24.7" + "@babel/helpers" "^7.24.7" + "@babel/parser" "^7.24.7" + "@babel/template" "^7.24.7" + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.12.17", "@babel/generator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.7.tgz#1654d01de20ad66b4b4d99c135471bc654c55e6d" + integrity sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA== + dependencies: + "@babel/types" "^7.24.7" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz#5373c7bc8366b12a033b4be1ac13a206c6656aab" + integrity sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg== + dependencies: + "@babel/types" "^7.24.7" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz#37d66feb012024f2422b762b9b2a7cfe27c7fba3" + integrity sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-compilation-targets@^7.12.17", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz#4eb6c4a80d6ffeac25ab8cd9a21b5dfa48d503a9" + integrity sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg== + dependencies: + "@babel/compat-data" "^7.24.7" + "@babel/helper-validator-option" "^7.24.7" + browserslist "^4.22.2" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.12.13", "@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz#2eaed36b3a1c11c53bdf80d53838b293c52f5b3b" + integrity sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-function-name" "^7.24.7" + "@babel/helper-member-expression-to-functions" "^7.24.7" + "@babel/helper-optimise-call-expression" "^7.24.7" + "@babel/helper-replace-supers" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/helper-split-export-declaration" "^7.24.7" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.7.tgz#be4f435a80dc2b053c76eeb4b7d16dd22cfc89da" + integrity sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + regexpu-core "^5.3.1" + semver "^6.3.1" + +"@babel/helper-define-polyfill-provider@^0.6.1", "@babel/helper-define-polyfill-provider@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" + integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== + dependencies: + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + +"@babel/helper-environment-visitor@^7.18.9", "@babel/helper-environment-visitor@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz#4b31ba9551d1f90781ba83491dd59cf9b269f7d9" + integrity sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ== + dependencies: + "@babel/types" "^7.24.7" + +"@babel/helper-function-name@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz#75f1e1725742f39ac6584ee0b16d94513da38dd2" + integrity sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA== + dependencies: + "@babel/template" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-hoist-variables@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz#b4ede1cde2fd89436397f30dc9376ee06b0f25ee" + integrity sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ== + dependencies: + "@babel/types" "^7.24.7" + +"@babel/helper-member-expression-to-functions@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.7.tgz#67613d068615a70e4ed5101099affc7a41c5225f" + integrity sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b" + integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-module-transforms@^7.12.17", "@babel/helper-module-transforms@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz#31b6c9a2930679498db65b685b1698bfd6c7daf8" + integrity sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ== + dependencies: + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-simple-access" "^7.24.7" + "@babel/helper-split-export-declaration" "^7.24.7" + "@babel/helper-validator-identifier" "^7.24.7" + +"@babel/helper-optimise-call-expression@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz#8b0a0456c92f6b323d27cfd00d1d664e76692a0f" + integrity sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A== + dependencies: + "@babel/types" "^7.24.7" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz#98c84fe6fe3d0d3ae7bfc3a5e166a46844feb2a0" + integrity sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg== + +"@babel/helper-remap-async-to-generator@^7.18.9", "@babel/helper-remap-async-to-generator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.7.tgz#b3f0f203628522713849d49403f1a414468be4c7" + integrity sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-wrap-function" "^7.24.7" + +"@babel/helper-replace-supers@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz#f933b7eed81a1c0265740edc91491ce51250f765" + integrity sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg== + dependencies: + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-member-expression-to-functions" "^7.24.7" + "@babel/helper-optimise-call-expression" "^7.24.7" + +"@babel/helper-simple-access@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3" + integrity sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-skip-transparent-expression-wrappers@^7.12.1", "@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz#5f8fa83b69ed5c27adc56044f8be2b3ea96669d9" + integrity sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-split-export-declaration@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz#83949436890e07fa3d6873c61a96e3bbf692d856" + integrity sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA== + dependencies: + "@babel/types" "^7.24.7" + +"@babel/helper-string-parser@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz#4d2d0f14820ede3b9807ea5fc36dfc8cd7da07f2" + integrity sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg== + +"@babel/helper-validator-identifier@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" + integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== + +"@babel/helper-validator-option@^7.12.17", "@babel/helper-validator-option@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz#24c3bb77c7a425d1742eec8fb433b5a1b38e62f6" + integrity sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw== + +"@babel/helper-wrap-function@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz#52d893af7e42edca7c6d2c6764549826336aae1f" + integrity sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw== + dependencies: + "@babel/helper-function-name" "^7.24.7" + "@babel/template" "^7.24.7" + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helpers@^7.12.17", "@babel/helpers@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.7.tgz#aa2ccda29f62185acb5d42fb4a3a1b1082107416" + integrity sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg== + dependencies: + "@babel/template" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.7", "@babel/highlight@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" + integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== + dependencies: + "@babel/helper-validator-identifier" "^7.24.7" + chalk "^2.4.2" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/node@7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.12.17.tgz#f892e4a16a108a62f7d4cc327f1608d8dae0d556" + integrity sha512-NLe32pSqoweEFvCEHxvJq3DgBx3oBLtgNfdW5936pMEc5TE2P8jVmDiY6JXQccn/4tt9sBLMUuh+tF3VXWyMhA== + dependencies: + "@babel/register" "^7.12.13" + commander "^4.0.1" + core-js "^3.2.1" + lodash "^4.17.19" + node-environment-flags "^1.0.5" + regenerator-runtime "^0.13.4" + v8flags "^3.1.1" + +"@babel/parser@^7.1.0", "@babel/parser@^7.12.11", "@babel/parser@^7.12.17", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.7.tgz#9a5226f92f0c5c8ead550b750f5608e766c8ce85" + integrity sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw== + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.7.tgz#fd059fd27b184ea2b4c7e646868a9a381bbc3055" + integrity sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ== + dependencies: + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.7.tgz#468096ca44bbcbe8fcc570574e12eb1950e18107" + integrity sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz#e4eabdd5109acc399b38d7999b2ef66fc2022f89" + integrity sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/plugin-transform-optional-chaining" "^7.24.7" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.7.tgz#71b21bb0286d5810e63a1538aa901c58e87375ec" + integrity sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg== + dependencies: + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-proposal-async-generator-functions@^7.12.13": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" + integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.13.tgz#3d2ce350367058033c93c098e348161d6dc0d8c8" + integrity sha512-8SCJ0Ddrpwv4T7Gwb33EmW1V9PY5lggTO+A8WjyIwxrSHDUyBw4MtF96ifn1n8H806YlxbVCoKXbbmzD6RD+cA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-proposal-class-properties@^7.12.13": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-decorators@7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.12.13.tgz#d4c89b40c2b7a526b0d394de4f4def36191e413e" + integrity sha512-x2aOr5w4ARJoYHFKoG2iEUL/Xe99JAJXjAasHijXp3/KgaetJXGE62SmHgsW3Tia/XUT5AxF2YC0F+JyhPY/0Q== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-syntax-decorators" "^7.12.13" + +"@babel/plugin-proposal-dynamic-import@^7.12.17": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" + integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-default-from@7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.12.13.tgz#f110284108a9b2b96f01b15b3be9e54c2610a989" + integrity sha512-idIsBT+DGXdOHL82U+8bwX4goHm/z10g8sGGrQroh+HCRcm7mDv/luaGdWJQMTuCX2FsdXS7X0Nyyzp4znAPJA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-syntax-export-default-from" "^7.12.13" + +"@babel/plugin-proposal-export-namespace-from@7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz#393be47a4acd03fa2af6e3cde9b06e33de1b446d" + integrity sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.12.13": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" + integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.12.13": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" + integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.12.13": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83" + integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.13.tgz#24867307285cee4e1031170efd8a7ac807deefde" + integrity sha512-Qoxpy+OxhDBI5kRqliJFAl4uWXk3Bn24WeFstPH0iLymFehSAUR8MHpqU7njyXv/qbo7oN6yTy5bfCmXdKpo1Q== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.13": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" + integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.12.13": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" + integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.12.13": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" + integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== + dependencies: + "@babel/compat-data" "^7.20.5" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.20.7" + +"@babel/plugin-proposal-optional-catch-binding@^7.12.13": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" + integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.17.tgz#e382becadc2cb16b7913b6c672d92e4b33385b5c" + integrity sha512-TvxwI80pWftrGPKHNfkvX/HnoeSTR7gC4ezWnAL39PuktYUe6r8kEpOLTYnkBTsaoeazXm2jHJ22EQ81sdgfcA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-optional-chaining@^7.12.17": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" + integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.12.13": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" + integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== + +"@babel/plugin-proposal-unicode-property-regex@^7.12.13", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" + integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-decorators@^7.12.13": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.7.tgz#e4f8a0a8778ccec669611cd5aed1ed8e6e3a6fcf" + integrity sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-syntax-dynamic-import@7.8.3", "@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-default-from@^7.12.13": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.24.7.tgz#85dae9098933573aae137fb52141dd3ca52ae7ac" + integrity sha512-bTPz4/635WQ9WhwsyPdxUJDVpsi/X9BMmy/8Rf/UAlOO4jSql4CxUCjWI5PiM+jG+c4LVPTScoTw80geFj9+Bw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-flow@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.7.tgz#d1759e84dd4b437cf9fae69b4c06c41d7625bfb7" + integrity sha512-9G8GYT/dxn/D1IIKOUBmGX0mnmj46mGH9NnZyJLwtCpgh5f7D2VbuKodb+2s9m1Yavh1s7ASQN8lf0eqrb1LTw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-syntax-import-assertions@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz#2a0b406b5871a20a841240586b1300ce2088a778" + integrity sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-syntax-import-attributes@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz#b4f9ea95a79e6912480c4b626739f86a076624ca" + integrity sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz#39a1fa4a7e3d3d7f34e2acc6be585b718d30e02d" + integrity sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.12.13", "@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-arrow-functions@^7.12.13", "@babel/plugin-transform-arrow-functions@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz#4f6886c11e423bd69f3ce51dbf42424a5f275514" + integrity sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-async-generator-functions@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz#7330a5c50e05181ca52351b8fd01642000c96cfd" + integrity sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g== + dependencies: + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-remap-async-to-generator" "^7.24.7" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-transform-async-to-generator@^7.12.13", "@babel/plugin-transform-async-to-generator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz#72a3af6c451d575842a7e9b5a02863414355bdcc" + integrity sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA== + dependencies: + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-remap-async-to-generator" "^7.24.7" + +"@babel/plugin-transform-block-scoped-functions@^7.12.13", "@babel/plugin-transform-block-scoped-functions@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz#a4251d98ea0c0f399dafe1a35801eaba455bbf1f" + integrity sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-block-scoping@^7.12.13", "@babel/plugin-transform-block-scoping@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.7.tgz#42063e4deb850c7bd7c55e626bf4e7ab48e6ce02" + integrity sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-class-properties@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz#256879467b57b0b68c7ddfc5b76584f398cd6834" + integrity sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-class-static-block@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz#c82027ebb7010bc33c116d4b5044fbbf8c05484d" + integrity sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-transform-classes@^7.12.13", "@babel/plugin-transform-classes@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.7.tgz#4ae6ef43a12492134138c1e45913f7c46c41b4bf" + integrity sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-compilation-targets" "^7.24.7" + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-function-name" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-replace-supers" "^7.24.7" + "@babel/helper-split-export-declaration" "^7.24.7" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.12.13", "@babel/plugin-transform-computed-properties@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz#4cab3214e80bc71fae3853238d13d097b004c707" + integrity sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/template" "^7.24.7" + +"@babel/plugin-transform-destructuring@^7.12.13", "@babel/plugin-transform-destructuring@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.7.tgz#a097f25292defb6e6cc16d6333a4cfc1e3c72d9e" + integrity sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-dotall-regex@^7.12.13", "@babel/plugin-transform-dotall-regex@^7.24.7", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz#5f8bf8a680f2116a7207e16288a5f974ad47a7a0" + integrity sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-duplicate-keys@^7.12.13", "@babel/plugin-transform-duplicate-keys@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz#dd20102897c9a2324e5adfffb67ff3610359a8ee" + integrity sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-dynamic-import@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz#4d8b95e3bae2b037673091aa09cd33fecd6419f4" + integrity sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-transform-exponentiation-operator@^7.12.13", "@babel/plugin-transform-exponentiation-operator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz#b629ee22645f412024297d5245bce425c31f9b0d" + integrity sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-export-namespace-from@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz#176d52d8d8ed516aeae7013ee9556d540c53f197" + integrity sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-transform-flow-strip-types@^7.12.13": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.24.7.tgz#ae454e62219288fbb734541ab00389bfb13c063e" + integrity sha512-cjRKJ7FobOH2eakx7Ja+KpJRj8+y+/SiB3ooYm/n2UJfxu0oEaOoxOinitkJcPqv9KxS0kxTGPUaR7L2XcXDXA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-flow" "^7.24.7" + +"@babel/plugin-transform-for-of@^7.12.13", "@babel/plugin-transform-for-of@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz#f25b33f72df1d8be76399e1b8f3f9d366eb5bc70" + integrity sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + +"@babel/plugin-transform-function-name@^7.12.13", "@babel/plugin-transform-function-name@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.7.tgz#6d8601fbffe665c894440ab4470bc721dd9131d6" + integrity sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w== + dependencies: + "@babel/helper-compilation-targets" "^7.24.7" + "@babel/helper-function-name" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-json-strings@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz#f3e9c37c0a373fee86e36880d45b3664cedaf73a" + integrity sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-transform-literals@^7.12.13", "@babel/plugin-transform-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.7.tgz#36b505c1e655151a9d7607799a9988fc5467d06c" + integrity sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-logical-assignment-operators@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz#a58fb6eda16c9dc8f9ff1c7b1ba6deb7f4694cb0" + integrity sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-transform-member-expression-literals@^7.12.13", "@babel/plugin-transform-member-expression-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz#3b4454fb0e302e18ba4945ba3246acb1248315df" + integrity sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-modules-amd@^7.12.13", "@babel/plugin-transform-modules-amd@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz#65090ed493c4a834976a3ca1cde776e6ccff32d7" + integrity sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg== + dependencies: + "@babel/helper-module-transforms" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-modules-commonjs@^7.12.13", "@babel/plugin-transform-modules-commonjs@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.7.tgz#9fd5f7fdadee9085886b183f1ad13d1ab260f4ab" + integrity sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ== + dependencies: + "@babel/helper-module-transforms" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-simple-access" "^7.24.7" + +"@babel/plugin-transform-modules-systemjs@^7.12.13", "@babel/plugin-transform-modules-systemjs@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.7.tgz#f8012316c5098f6e8dee6ecd58e2bc6f003d0ce7" + integrity sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw== + dependencies: + "@babel/helper-hoist-variables" "^7.24.7" + "@babel/helper-module-transforms" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-validator-identifier" "^7.24.7" + +"@babel/plugin-transform-modules-umd@^7.12.13", "@babel/plugin-transform-modules-umd@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz#edd9f43ec549099620df7df24e7ba13b5c76efc8" + integrity sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A== + dependencies: + "@babel/helper-module-transforms" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.12.13", "@babel/plugin-transform-named-capturing-groups-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz#9042e9b856bc6b3688c0c2e4060e9e10b1460923" + integrity sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-new-target@^7.12.13", "@babel/plugin-transform-new-target@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz#31ff54c4e0555cc549d5816e4ab39241dfb6ab00" + integrity sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-nullish-coalescing-operator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz#1de4534c590af9596f53d67f52a92f12db984120" + integrity sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-transform-numeric-separator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz#bea62b538c80605d8a0fac9b40f48e97efa7de63" + integrity sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-transform-object-rest-spread@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz#d13a2b93435aeb8a197e115221cab266ba6e55d6" + integrity sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q== + dependencies: + "@babel/helper-compilation-targets" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.24.7" + +"@babel/plugin-transform-object-super@^7.12.13", "@babel/plugin-transform-object-super@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz#66eeaff7830bba945dd8989b632a40c04ed625be" + integrity sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-replace-supers" "^7.24.7" + +"@babel/plugin-transform-optional-catch-binding@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz#00eabd883d0dd6a60c1c557548785919b6e717b4" + integrity sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-transform-optional-chaining@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.7.tgz#b8f6848a80cf2da98a8a204429bec04756c6d454" + integrity sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-transform-parameters@^7.12.13", "@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz#5881f0ae21018400e320fc7eb817e529d1254b68" + integrity sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-private-methods@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz#e6318746b2ae70a59d023d5cc1344a2ba7a75f5e" + integrity sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-private-property-in-object@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz#4eec6bc701288c1fab5f72e6a4bbc9d67faca061" + integrity sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-transform-property-literals@^7.12.13", "@babel/plugin-transform-property-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz#f0d2ed8380dfbed949c42d4d790266525d63bbdc" + integrity sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-react-constant-elements@^7.12.1": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.24.7.tgz#b85e8f240b14400277f106c9c9b585d9acf608a1" + integrity sha512-7LidzZfUXyfZ8/buRW6qIIHBY8wAZ1OrY9c/wTr8YhZ6vMPo+Uc/CVFLYY1spZrEQlD4w5u8wjqk5NQ3OVqQKA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-react-display-name@^7.12.13", "@babel/plugin-transform-react-display-name@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz#9caff79836803bc666bcfe210aeb6626230c293b" + integrity sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-react-jsx-development@^7.12.12", "@babel/plugin-transform-react-jsx-development@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz#eaee12f15a93f6496d852509a850085e6361470b" + integrity sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.24.7" + +"@babel/plugin-transform-react-jsx@^7.12.13", "@babel/plugin-transform-react-jsx@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.7.tgz#17cd06b75a9f0e2bd076503400e7c4b99beedac4" + integrity sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-jsx" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/plugin-transform-react-pure-annotations@^7.12.1", "@babel/plugin-transform-react-pure-annotations@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz#bdd9d140d1c318b4f28b29a00fb94f97ecab1595" + integrity sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-regenerator@^7.12.13", "@babel/plugin-transform-regenerator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz#021562de4534d8b4b1851759fd7af4e05d2c47f8" + integrity sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + regenerator-transform "^0.15.2" + +"@babel/plugin-transform-reserved-words@^7.12.13", "@babel/plugin-transform-reserved-words@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz#80037fe4fbf031fc1125022178ff3938bb3743a4" + integrity sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-runtime@7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.17.tgz#329cb61d293b7e60a7685b91dda7c300668cee18" + integrity sha512-s+kIJxnaTj+E9Q3XxQZ5jOo+xcogSe3V78/iFQ5RmoT0jROdpcdxhfGdq/VLqW1hFSzw6VjqN8aQqTaAMixWsw== + dependencies: + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + semver "^5.5.1" + +"@babel/plugin-transform-shorthand-properties@^7.12.13", "@babel/plugin-transform-shorthand-properties@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz#85448c6b996e122fa9e289746140aaa99da64e73" + integrity sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-spread@^7.12.13", "@babel/plugin-transform-spread@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz#e8a38c0fde7882e0fb8f160378f74bd885cc7bb3" + integrity sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + +"@babel/plugin-transform-sticky-regex@^7.12.13", "@babel/plugin-transform-sticky-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz#96ae80d7a7e5251f657b5cf18f1ea6bf926f5feb" + integrity sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-template-literals@^7.12.13", "@babel/plugin-transform-template-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz#a05debb4a9072ae8f985bcf77f3f215434c8f8c8" + integrity sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-typeof-symbol@^7.12.13", "@babel/plugin-transform-typeof-symbol@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.7.tgz#f074be466580d47d6e6b27473a840c9f9ca08fb0" + integrity sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-unicode-escapes@^7.12.13", "@babel/plugin-transform-unicode-escapes@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz#2023a82ced1fb4971630a2e079764502c4148e0e" + integrity sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-unicode-property-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz#9073a4cd13b86ea71c3264659590ac086605bbcd" + integrity sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-unicode-regex@^7.12.13", "@babel/plugin-transform-unicode-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz#dfc3d4a51127108099b19817c0963be6a2adf19f" + integrity sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-unicode-sets-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz#d40705d67523803a576e29c63cef6e516b858ed9" + integrity sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/preset-env@7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.17.tgz#94a3793ff089c32ee74d76a3c03a7597693ebaaa" + integrity sha512-9PMijx8zFbCwTHrd2P4PJR5nWGH3zWebx2OcpTjqQrHhCiL2ssSR2Sc9ko2BsI2VmVBfoaQmPrlMTCui4LmXQg== + dependencies: + "@babel/compat-data" "^7.12.13" + "@babel/helper-compilation-targets" "^7.12.17" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-validator-option" "^7.12.17" + "@babel/plugin-proposal-async-generator-functions" "^7.12.13" + "@babel/plugin-proposal-class-properties" "^7.12.13" + "@babel/plugin-proposal-dynamic-import" "^7.12.17" + "@babel/plugin-proposal-export-namespace-from" "^7.12.13" + "@babel/plugin-proposal-json-strings" "^7.12.13" + "@babel/plugin-proposal-logical-assignment-operators" "^7.12.13" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.13" + "@babel/plugin-proposal-numeric-separator" "^7.12.13" + "@babel/plugin-proposal-object-rest-spread" "^7.12.13" + "@babel/plugin-proposal-optional-catch-binding" "^7.12.13" + "@babel/plugin-proposal-optional-chaining" "^7.12.17" + "@babel/plugin-proposal-private-methods" "^7.12.13" + "@babel/plugin-proposal-unicode-property-regex" "^7.12.13" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.12.13" + "@babel/plugin-transform-arrow-functions" "^7.12.13" + "@babel/plugin-transform-async-to-generator" "^7.12.13" + "@babel/plugin-transform-block-scoped-functions" "^7.12.13" + "@babel/plugin-transform-block-scoping" "^7.12.13" + "@babel/plugin-transform-classes" "^7.12.13" + "@babel/plugin-transform-computed-properties" "^7.12.13" + "@babel/plugin-transform-destructuring" "^7.12.13" + "@babel/plugin-transform-dotall-regex" "^7.12.13" + "@babel/plugin-transform-duplicate-keys" "^7.12.13" + "@babel/plugin-transform-exponentiation-operator" "^7.12.13" + "@babel/plugin-transform-for-of" "^7.12.13" + "@babel/plugin-transform-function-name" "^7.12.13" + "@babel/plugin-transform-literals" "^7.12.13" + "@babel/plugin-transform-member-expression-literals" "^7.12.13" + "@babel/plugin-transform-modules-amd" "^7.12.13" + "@babel/plugin-transform-modules-commonjs" "^7.12.13" + "@babel/plugin-transform-modules-systemjs" "^7.12.13" + "@babel/plugin-transform-modules-umd" "^7.12.13" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.13" + "@babel/plugin-transform-new-target" "^7.12.13" + "@babel/plugin-transform-object-super" "^7.12.13" + "@babel/plugin-transform-parameters" "^7.12.13" + "@babel/plugin-transform-property-literals" "^7.12.13" + "@babel/plugin-transform-regenerator" "^7.12.13" + "@babel/plugin-transform-reserved-words" "^7.12.13" + "@babel/plugin-transform-shorthand-properties" "^7.12.13" + "@babel/plugin-transform-spread" "^7.12.13" + "@babel/plugin-transform-sticky-regex" "^7.12.13" + "@babel/plugin-transform-template-literals" "^7.12.13" + "@babel/plugin-transform-typeof-symbol" "^7.12.13" + "@babel/plugin-transform-unicode-escapes" "^7.12.13" + "@babel/plugin-transform-unicode-regex" "^7.12.13" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.12.17" + core-js-compat "^3.8.0" + semver "^5.5.0" + +"@babel/preset-env@^7.12.1": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.7.tgz#ff067b4e30ba4a72f225f12f123173e77b987f37" + integrity sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ== + dependencies: + "@babel/compat-data" "^7.24.7" + "@babel/helper-compilation-targets" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-validator-option" "^7.24.7" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.24.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.24.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.7" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.24.7" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.24.7" + "@babel/plugin-syntax-import-attributes" "^7.24.7" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.24.7" + "@babel/plugin-transform-async-generator-functions" "^7.24.7" + "@babel/plugin-transform-async-to-generator" "^7.24.7" + "@babel/plugin-transform-block-scoped-functions" "^7.24.7" + "@babel/plugin-transform-block-scoping" "^7.24.7" + "@babel/plugin-transform-class-properties" "^7.24.7" + "@babel/plugin-transform-class-static-block" "^7.24.7" + "@babel/plugin-transform-classes" "^7.24.7" + "@babel/plugin-transform-computed-properties" "^7.24.7" + "@babel/plugin-transform-destructuring" "^7.24.7" + "@babel/plugin-transform-dotall-regex" "^7.24.7" + "@babel/plugin-transform-duplicate-keys" "^7.24.7" + "@babel/plugin-transform-dynamic-import" "^7.24.7" + "@babel/plugin-transform-exponentiation-operator" "^7.24.7" + "@babel/plugin-transform-export-namespace-from" "^7.24.7" + "@babel/plugin-transform-for-of" "^7.24.7" + "@babel/plugin-transform-function-name" "^7.24.7" + "@babel/plugin-transform-json-strings" "^7.24.7" + "@babel/plugin-transform-literals" "^7.24.7" + "@babel/plugin-transform-logical-assignment-operators" "^7.24.7" + "@babel/plugin-transform-member-expression-literals" "^7.24.7" + "@babel/plugin-transform-modules-amd" "^7.24.7" + "@babel/plugin-transform-modules-commonjs" "^7.24.7" + "@babel/plugin-transform-modules-systemjs" "^7.24.7" + "@babel/plugin-transform-modules-umd" "^7.24.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.24.7" + "@babel/plugin-transform-new-target" "^7.24.7" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.7" + "@babel/plugin-transform-numeric-separator" "^7.24.7" + "@babel/plugin-transform-object-rest-spread" "^7.24.7" + "@babel/plugin-transform-object-super" "^7.24.7" + "@babel/plugin-transform-optional-catch-binding" "^7.24.7" + "@babel/plugin-transform-optional-chaining" "^7.24.7" + "@babel/plugin-transform-parameters" "^7.24.7" + "@babel/plugin-transform-private-methods" "^7.24.7" + "@babel/plugin-transform-private-property-in-object" "^7.24.7" + "@babel/plugin-transform-property-literals" "^7.24.7" + "@babel/plugin-transform-regenerator" "^7.24.7" + "@babel/plugin-transform-reserved-words" "^7.24.7" + "@babel/plugin-transform-shorthand-properties" "^7.24.7" + "@babel/plugin-transform-spread" "^7.24.7" + "@babel/plugin-transform-sticky-regex" "^7.24.7" + "@babel/plugin-transform-template-literals" "^7.24.7" + "@babel/plugin-transform-typeof-symbol" "^7.24.7" + "@babel/plugin-transform-unicode-escapes" "^7.24.7" + "@babel/plugin-transform-unicode-property-regex" "^7.24.7" + "@babel/plugin-transform-unicode-regex" "^7.24.7" + "@babel/plugin-transform-unicode-sets-regex" "^7.24.7" + "@babel/preset-modules" "0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.4" + babel-plugin-polyfill-regenerator "^0.6.1" + core-js-compat "^3.31.0" + semver "^6.3.1" + +"@babel/preset-flow@7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.12.13.tgz#71ee7fe65a95b507ac12bcad65a4ced27d8dfc3e" + integrity sha512-gcEjiwcGHa3bo9idURBp5fmJPcyFPOszPQjztXrOjUE2wWVqc6fIVJPgWPIQksaQ5XZ2HWiRsf2s1fRGVjUtVw== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-transform-flow-strip-types" "^7.12.13" + +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-modules@^0.1.3": + version "0.1.6" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6.tgz#31bcdd8f19538437339d17af00d177d854d9d458" + integrity sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-react@7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.13.tgz#5f911b2eb24277fa686820d5bd81cad9a0602a0a" + integrity sha512-TYM0V9z6Abb6dj1K7i5NrEhA13oS5ujUYQYDfqIBXYHOc2c2VkFgc+q9kyssIyUfy4/hEwqrgSlJ/Qgv8zJLsA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-transform-react-display-name" "^7.12.13" + "@babel/plugin-transform-react-jsx" "^7.12.13" + "@babel/plugin-transform-react-jsx-development" "^7.12.12" + "@babel/plugin-transform-react-pure-annotations" "^7.12.1" + +"@babel/preset-react@^7.12.5": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.24.7.tgz#480aeb389b2a798880bf1f889199e3641cbb22dc" + integrity sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-validator-option" "^7.24.7" + "@babel/plugin-transform-react-display-name" "^7.24.7" + "@babel/plugin-transform-react-jsx" "^7.24.7" + "@babel/plugin-transform-react-jsx-development" "^7.24.7" + "@babel/plugin-transform-react-pure-annotations" "^7.24.7" + +"@babel/register@7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.12.13.tgz#e9cb57618264f2944634da941ba9755088ef9ec5" + integrity sha512-fnCeRXj970S9seY+973oPALQg61TRvAaW0nRDe1f4ytKqM3fZgsNXewTZWmqZedg74LFIRpg/11dsrPZZvYs2g== + dependencies: + find-cache-dir "^2.0.0" + lodash "^4.17.19" + make-dir "^2.1.0" + pirates "^4.0.0" + source-map-support "^0.5.16" + +"@babel/register@^7.12.13": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.24.6.tgz#59e21dcc79e1d04eed5377633b0f88029a6bef9e" + integrity sha512-WSuFCc2wCqMeXkz/i3yfAAsxwWflEgbVkZzivgAmXl/MxrXeoYFZOOPllbC8R8WTF7u61wSRQtDVZ1879cdu6w== + dependencies: + clone-deep "^4.0.1" + find-cache-dir "^2.0.0" + make-dir "^2.1.0" + pirates "^4.0.6" + source-map-support "^0.5.16" + +"@babel/regjsgen@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + +"@babel/runtime-corejs3@7.12.18": + version "7.12.18" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.12.18.tgz#e5663237e5658e4c09586995d2dd6d2c8cfd6fc0" + integrity sha512-ngR7yhNTjDxxe1VYmhqQqqXZWujGb6g0IoA4qeG6MxNGRnIw2Zo8ImY8HfaQ7l3T6GklWhdNfyhWk0C0iocdVA== + dependencies: + core-js-pure "^3.0.0" + regenerator-runtime "^0.13.4" + +"@babel/runtime-corejs3@^7.10.2": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.24.7.tgz#65a99097e4c28e6c3a174825591700cc5abd710e" + integrity sha512-eytSX6JLBY6PVAeQa2bFlDx/7Mmln/gaEpsit5a3WEvjGfiIytEsgAwuIXCPM0xvw0v0cJn3ilq0/TvXrW0kgA== + dependencies: + core-js-pure "^3.30.2" + regenerator-runtime "^0.14.0" + +"@babel/runtime@7.12.18": + version "7.12.18" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.18.tgz#af137bd7e7d9705a412b3caaf991fe6aaa97831b" + integrity sha512-BogPQ7ciE6SYAUPtlm9tWbgI9+2AgqSam6QivMgXgAT+fKbgppaj4ZX15MHeLC1PVF5sNk70huBu20XxWOs8Cg== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.8", "@babel/runtime@^7.15.4", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.9", "@babel/runtime@^7.21.0", "@babel/runtime@^7.23.8", "@babel/runtime@^7.23.9", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.7.tgz#f4f0d5530e8dbdf59b3451b9b3e594b6ba082e12" + integrity sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/template@^7.12.13", "@babel/template@^7.24.7", "@babel/template@^7.3.3": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.7.tgz#02efcee317d0609d2c07117cb70ef8fb17ab7315" + integrity sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/parser" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.12", "@babel/traverse@^7.12.17", "@babel/traverse@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.7.tgz#de2b900163fa741721ba382163fe46a936c40cf5" + integrity sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/generator" "^7.24.7" + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-function-name" "^7.24.7" + "@babel/helper-hoist-variables" "^7.24.7" + "@babel/helper-split-export-declaration" "^7.24.7" + "@babel/parser" "^7.24.7" + "@babel/types" "^7.24.7" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.12.17", "@babel/types@^7.12.6", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.7.tgz#6027fe12bc1aa724cd32ab113fb7f1988f1f66f2" + integrity sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q== + dependencies: + "@babel/helper-string-parser" "^7.24.7" + "@babel/helper-validator-identifier" "^7.24.7" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@cardano-foundation/ledgerjs-hw-app-cardano@6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@cardano-foundation/ledgerjs-hw-app-cardano/-/ledgerjs-hw-app-cardano-6.0.0.tgz#720f2eb90efd8ca90a055bb09e22d8988bdda7cd" + integrity sha512-aiWlERF5sXMzygE62YH9AXrVePu5ZG+QKGv/ZhvYec35vUhDFJK8qPiLzXmTy6MdoDKSqbYVRPd6jY3KKs5pOg== + dependencies: + "@ledgerhq/hw-transport" "^6.27.10" + base-x "^3.0.5" + bech32 "^1.1.4" + int64-buffer "^1.0.1" + +"@cardano-foundation/ledgerjs-hw-app-cardano@^5.0.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@cardano-foundation/ledgerjs-hw-app-cardano/-/ledgerjs-hw-app-cardano-5.1.0.tgz#69b94f7c5055bdb19aa719ff277fa5f683d11067" + integrity sha512-ucuz/XbS/0ZD0Bal/GI/kiTm9jDIl8J+A7ypEqcAcBDGicFsyWmtPotOTwuDovTsiM8+eA/5OGTFX0oRqzxstQ== + dependencies: + "@ledgerhq/hw-transport" "^5.12.0" + "@types/ledgerhq__hw-transport" "^4.21.3" + base-x "^3.0.5" + bech32 "^1.1.4" + blake2 "^4.0.2" + int64-buffer "^1.0.1" + +"@cardano-foundation/ledgerjs-hw-app-cardano@^6.0.0": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@cardano-foundation/ledgerjs-hw-app-cardano/-/ledgerjs-hw-app-cardano-6.0.1.tgz#733ae494f615716f7a5efd64dc1997fd29ba72f0" + integrity sha512-35LU2482b6mGA8NVhCut5sEid0zqy82lXmgoenkQfDxDJtx7zV6U7/Dx9OjuDLpcedEUm/7s2WPjjHv/lsinIQ== + dependencies: + "@ledgerhq/hw-transport" "^6.27.10" + base-x "^3.0.5" + bech32 "^1.1.4" + int64-buffer "^1.0.1" + +"@cnakazawa/watch@^1.0.3": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== + dependencies: + exec-sh "^0.3.2" + minimist "^1.2.0" + +"@date-io/core@^2.15.0", "@date-io/core@^2.17.0": + version "2.17.0" + resolved "https://registry.yarnpkg.com/@date-io/core/-/core-2.17.0.tgz#360a4d0641f069776ed22e457876e8a8a58c205e" + integrity sha512-+EQE8xZhRM/hsY0CDTVyayMDDY5ihc4MqXCrPxooKw19yAzUIC6uUqsZeaOFNL9YKTNxYKrJP5DFgE8o5xRCOw== + +"@date-io/date-fns@^2.15.0": + version "2.17.0" + resolved "https://registry.yarnpkg.com/@date-io/date-fns/-/date-fns-2.17.0.tgz#1d9d0a02e0137524331819c9576a4e8e19a6142b" + integrity sha512-L0hWZ/mTpy3Gx/xXJ5tq5CzHo0L7ry6KEO9/w/JWiFWFLZgiNVo3ex92gOl3zmzjHqY/3Ev+5sehAr8UnGLEng== + dependencies: + "@date-io/core" "^2.17.0" + +"@date-io/dayjs@^2.15.0": + version "2.17.0" + resolved "https://registry.yarnpkg.com/@date-io/dayjs/-/dayjs-2.17.0.tgz#ec3e2384136c028971ca2f78800a6877b9fdbe62" + integrity sha512-Iq1wjY5XzBh0lheFA0it6Dsyv94e8mTiNR8vuTai+KopxDkreL3YjwTmZHxkgB7/vd0RMIACStzVgWvPATnDCA== + dependencies: + "@date-io/core" "^2.17.0" + +"@date-io/luxon@^2.15.0": + version "2.17.0" + resolved "https://registry.yarnpkg.com/@date-io/luxon/-/luxon-2.17.0.tgz#76e1f001aaa38fe7f0049f010fe356db1bb517d2" + integrity sha512-l712Vdm/uTddD2XWt9TlQloZUiTiRQtY5TCOG45MQ/8u0tu8M17BD6QYHar/3OrnkGybALAMPzCy1r5D7+0HBg== + dependencies: + "@date-io/core" "^2.17.0" + +"@date-io/moment@^2.15.0": + version "2.17.0" + resolved "https://registry.yarnpkg.com/@date-io/moment/-/moment-2.17.0.tgz#04d2487d9d15d468b2e7903b87268fa1c89b56cb" + integrity sha512-e4nb4CDZU4k0WRVhz1Wvl7d+hFsedObSauDHKtZwU9kt7gdYEAzKgnrSCTHsEaXrDumdrkCYTeZ0Tmyk7uV4tw== + dependencies: + "@date-io/core" "^2.17.0" + +"@discoveryjs/json-ext@^0.5.0": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== + +"@emotion/babel-plugin@^11.11.0": + version "11.11.0" + resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz#c2d872b6a7767a9d176d007f5b31f7d504bb5d6c" + integrity sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/runtime" "^7.18.3" + "@emotion/hash" "^0.9.1" + "@emotion/memoize" "^0.8.1" + "@emotion/serialize" "^1.1.2" + babel-plugin-macros "^3.1.0" + convert-source-map "^1.5.0" + escape-string-regexp "^4.0.0" + find-root "^1.1.0" + source-map "^0.5.7" + stylis "4.2.0" + +"@emotion/cache@^11.11.0": + version "11.11.0" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.11.0.tgz#809b33ee6b1cb1a625fef7a45bc568ccd9b8f3ff" + integrity sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ== + dependencies: + "@emotion/memoize" "^0.8.1" + "@emotion/sheet" "^1.2.2" + "@emotion/utils" "^1.2.1" + "@emotion/weak-memoize" "^0.3.1" + stylis "4.2.0" + +"@emotion/hash@^0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43" + integrity sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ== + +"@emotion/is-prop-valid@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz#d4175076679c6a26faa92b03bb786f9e52612337" + integrity sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw== + dependencies: + "@emotion/memoize" "^0.8.1" + +"@emotion/memoize@^0.8.1": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" + integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== + +"@emotion/react@^11.4.1": + version "11.11.4" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.4.tgz#3a829cac25c1f00e126408fab7f891f00ecc3c1d" + integrity sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw== + dependencies: + "@babel/runtime" "^7.18.3" + "@emotion/babel-plugin" "^11.11.0" + "@emotion/cache" "^11.11.0" + "@emotion/serialize" "^1.1.3" + "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" + "@emotion/utils" "^1.2.1" + "@emotion/weak-memoize" "^0.3.1" + hoist-non-react-statics "^3.3.1" + +"@emotion/serialize@^1.1.2", "@emotion/serialize@^1.1.3", "@emotion/serialize@^1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.4.tgz#fc8f6d80c492cfa08801d544a05331d1cc7cd451" + integrity sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ== + dependencies: + "@emotion/hash" "^0.9.1" + "@emotion/memoize" "^0.8.1" + "@emotion/unitless" "^0.8.1" + "@emotion/utils" "^1.2.1" + csstype "^3.0.2" + +"@emotion/sheet@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.2.tgz#d58e788ee27267a14342303e1abb3d508b6d0fec" + integrity sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA== + +"@emotion/styled@^11.3.0": + version "11.11.5" + resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.11.5.tgz#0c5c8febef9d86e8a926e663b2e5488705545dfb" + integrity sha512-/ZjjnaNKvuMPxcIiUkf/9SHoG4Q196DRl1w82hQ3WCsjo1IUR8uaGWrC6a87CrYAW0Kb/pK7hk8BnLgLRi9KoQ== + dependencies: + "@babel/runtime" "^7.18.3" + "@emotion/babel-plugin" "^11.11.0" + "@emotion/is-prop-valid" "^1.2.2" + "@emotion/serialize" "^1.1.4" + "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" + "@emotion/utils" "^1.2.1" + +"@emotion/unitless@^0.8.1": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.1.tgz#182b5a4704ef8ad91bde93f7a860a88fd92c79a3" + integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ== + +"@emotion/use-insertion-effect-with-fallbacks@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz#08de79f54eb3406f9daaf77c76e35313da963963" + integrity sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw== + +"@emotion/utils@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.1.tgz#bbab58465738d31ae4cb3dbb6fc00a5991f755e4" + integrity sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg== + +"@emotion/weak-memoize@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6" + integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww== + +"@emurgo/cardano-message-signing-browser@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@emurgo/cardano-message-signing-browser/-/cardano-message-signing-browser-1.0.1.tgz#fb0a481575131d15bf15bb8781cb03bd3f7d56b0" + integrity sha512-yC4Ymq44WR0bXO1wzxCoyc2W/RD1KSAla0oYhin7IYoVkp2raGp8wt7QNF4pDdNnTcejn5fyPyYY9dL4666H1w== + +"@emurgo/cardano-message-signing-nodejs@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@emurgo/cardano-message-signing-nodejs/-/cardano-message-signing-nodejs-1.0.1.tgz#b2fa1f7541055a6c4b8e805492b1a9362bea5835" + integrity sha512-PoKh1tQnJX18f8iEr8Jk1KXxKCn9eqaSslMI1pyOJvYRJhQVDLCh0+9YReufjp0oFJIY1ShcrR+4/WnECVZUKQ== + +"@emurgo/cardano-serialization-lib-browser@12.0.0-alpha.26": + version "12.0.0-alpha.26" + resolved "https://registry.yarnpkg.com/@emurgo/cardano-serialization-lib-browser/-/cardano-serialization-lib-browser-12.0.0-alpha.26.tgz#36c9982bc56bf4d0587c3736d5a422cc7130e347" + integrity sha512-zP3DxaPHuJY0mOFX+3uYcu0F/ItEmgfoMJIWiT/86DeRlg7D3YLD+TxB8yvrGgADxtNKe2jJ7Y1Twrpd09GKNw== + +"@emurgo/cardano-serialization-lib-nodejs@12.0.0-alpha.26": + version "12.0.0-alpha.26" + resolved "https://registry.yarnpkg.com/@emurgo/cardano-serialization-lib-nodejs/-/cardano-serialization-lib-nodejs-12.0.0-alpha.26.tgz#4e5fea7ba6d72888e21c5a9bea6bcff367834a4b" + integrity sha512-QheEm7wVZ4Tc0gOIYMUyf2VUb8a1ZjnDy4zNcGSRmuO1zlbJfjLDGv+uXG+pKqZN4fzMAzOtUwolTtbxzTzYbA== + +"@emurgo/cip14-js@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@emurgo/cip14-js/-/cip14-js-2.0.0.tgz#6ef78ddac8a35f2725e9ccebfd5ae114716c4b48" + integrity sha512-EvjgTs4NCqH1j0wxXqWCj31P7NmTzl3aR+9am0OLSsf3NA9GsdKH5QNyXJrvSZILM4yWzlZNum3y8S5PfdM1aA== + dependencies: + bech32 "2.0.0" + blake2b "2.1.3" + +"@emurgo/cip14-js@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@emurgo/cip14-js/-/cip14-js-3.0.1.tgz#68bcf6db1e4891d347e19f1e643df9be5ebc92dc" + integrity sha512-u0XobeajNSlmeGBmY3ntA+NE/Vns7hKP0xrFzWyAO7YubETOifTjUddJN4gpvXE4S08DPUcNBVe3sx1m5GPIOg== + dependencies: + bech32 "2.0.0" + blake2b "2.1.3" + +"@emurgo/cip4-js@1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@emurgo/cip4-js/-/cip4-js-1.0.5.tgz#b99ca25024b61743cc6fc733011e3dc8da21d622" + integrity sha512-vugHV1ca5zcUpx6Hzdt85KMvUbYIBAn/zwdWuSQ/1soCyEZnrOZJShi0hYRJoUghOpQ8TjGOCEln7B+Jgf3IJg== + dependencies: + blake2b "2.1.3" + buffer-crc32 "0.2.13" + fnv-plus "1.3.1" + +"@emurgo/cross-csl-browser@4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@emurgo/cross-csl-browser/-/cross-csl-browser-4.4.0.tgz#57bfe5359868a22e1f6d82359ffcb2ba7793f207" + integrity sha512-BVtrK9sOjSEuSLl7Xb8tvKf/IdTowAmi0FN2O2Juvzg7WEhsEQY3bUoiZY7eVETOLLBHjl0kDfaRDQOUc3ow9g== + dependencies: + "@emurgo/cardano-serialization-lib-browser" "12.0.0-alpha.26" + "@emurgo/cross-csl-core" "4.4.0" + +"@emurgo/cross-csl-core@4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@emurgo/cross-csl-core/-/cross-csl-core-4.4.0.tgz#b808b562f2c2442784a46384aea750718f6e5a59" + integrity sha512-R12cAHmkjeLb7g0+Og5zoi8is7jh5uONICaKLCvebqV6kHhCShSSHSdCbvqmCH3H8szPodkOkLp5qXNmxqfNxA== + dependencies: + "@cardano-foundation/ledgerjs-hw-app-cardano" "^5.0.0" + "@types/mocha" "^9.1.1" + axios "^0.24.0" + bech32 "^2.0.0" + bignumber.js "^9.0.1" + blake2b "^2.1.4" + hash-wasm "^4.9.0" + mocha "^10.0.0" + +"@emurgo/cross-csl-nodejs@4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@emurgo/cross-csl-nodejs/-/cross-csl-nodejs-4.4.0.tgz#7a8c8b7078018080283a9dc5340326e0e9a8d59c" + integrity sha512-yDtNFCYobYL7hILvico3Q85DIvDhc5H24UjDd8gdYApu6YGyR5C+Roz34VALxHlR8y2RA9cUM2GUt+a8Ev/Kxg== + dependencies: + "@emurgo/cardano-serialization-lib-nodejs" "12.0.0-alpha.26" + "@emurgo/cross-csl-core" "4.4.0" + +"@emurgo/yoroi-eutxo-txs@0.0.2-alpha.8": + version "0.0.2-alpha.8" + resolved "https://registry.yarnpkg.com/@emurgo/yoroi-eutxo-txs/-/yoroi-eutxo-txs-0.0.2-alpha.8.tgz#9971abde5128917c81ebad9d202dc9701f33eb7c" + integrity sha512-H9VdDrqLMsGSFRUyfNXEwBmabn+06Z27Fq1lcH7LiIy5HquiKoqZ7jbp4J5fQnnnYNkHchcZnSFP4wX2KGLApA== + dependencies: + "@cardano-foundation/ledgerjs-hw-app-cardano" "^5.0.0" + "@emurgo/cross-csl-core" "4.4.0" + "@ledgerhq/hw-transport-node-hid" "^6.27.2" + axios "^0.27.2" + bech32 "^2.0.0" + bignumber.js "^9.1.0" + bip39 "^3.0.4" + hash-wasm "^4.9.0" + +"@emurgo/yoroi-lib@0.15.4": + version "0.15.4" + resolved "https://registry.yarnpkg.com/@emurgo/yoroi-lib/-/yoroi-lib-0.15.4.tgz#cfa722819ff5a89db21d5efe8d9d16cb2d616eb7" + integrity sha512-vHXdRknq0UYzPaIlhxaP/7X8LXNRRZBnyqvMMM8yuIqxNbe8lobxPDbM2ki/BHsOdR1w1Xk8Z3ZTC2RxM69U8w== + dependencies: + "@cardano-foundation/ledgerjs-hw-app-cardano" "^6.0.0" + "@emurgo/cross-csl-core" "4.4.0" + "@noble/hashes" "^1.3.2" + axios "^0.24.0" + bech32 "^2.0.0" + bignumber.js "^9.0.1" + easy-crc "1.1.0" + +"@eslint/eslintrc@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.3.0.tgz#d736d6963d7003b6514e6324bec9c602ac340318" + integrity sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + lodash "^4.17.20" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + +"@floating-ui/core@^1.0.0": + version "1.6.2" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.2.tgz#d37f3e0ac1f1c756c7de45db13303a266226851a" + integrity sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg== + dependencies: + "@floating-ui/utils" "^0.2.0" + +"@floating-ui/dom@^1.0.0": + version "1.6.5" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.5.tgz#323f065c003f1d3ecf0ff16d2c2c4d38979f4cb9" + integrity sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw== + dependencies: + "@floating-ui/core" "^1.0.0" + "@floating-ui/utils" "^0.2.0" + +"@floating-ui/react-dom@^2.0.8": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.0.tgz#4f0e5e9920137874b2405f7d6c862873baf4beff" + integrity sha512-lNzj5EQmEKn5FFKc04+zasr09h/uX8RtJRNj5gUXsSQIXHVWTVh+hVAg1vOMCexkX8EgvemMvIFpQfkosnVNyA== + dependencies: + "@floating-ui/dom" "^1.0.0" + +"@floating-ui/utils@^0.2.0": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.2.tgz#d8bae93ac8b815b2bd7a98078cf91e2724ef11e5" + integrity sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw== + +"@formatjs/ecma402-abstract@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-2.0.0.tgz#39197ab90b1c78b7342b129a56a7acdb8f512e17" + integrity sha512-rRqXOqdFmk7RYvj4khklyqzcfQl9vEL/usogncBHRZfZBDOwMGuSRNFl02fu5KGHXdbinju+YXyuR+Nk8xlr/g== + dependencies: + "@formatjs/intl-localematcher" "0.5.4" + tslib "^2.4.0" + +"@formatjs/fast-memoize@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-2.2.0.tgz#33bd616d2e486c3e8ef4e68c99648c196887802b" + integrity sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA== + dependencies: + tslib "^2.4.0" + +"@formatjs/icu-messageformat-parser@2.7.8": + version "2.7.8" + resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.8.tgz#f6d7643001e9bb5930d812f1f9a9856f30fa0343" + integrity sha512-nBZJYmhpcSX0WeJ5SDYUkZ42AgR3xiyhNCsQweFx3cz/ULJjym8bHAzWKvG5e2+1XO98dBYC0fWeeAECAVSwLA== + dependencies: + "@formatjs/ecma402-abstract" "2.0.0" + "@formatjs/icu-skeleton-parser" "1.8.2" + tslib "^2.4.0" + +"@formatjs/icu-skeleton-parser@1.8.2": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.2.tgz#2252c949ae84ee66930e726130ea66731a123c9f" + integrity sha512-k4ERKgw7aKGWJZgTarIcNEmvyTVD9FYh0mTrrBMHZ1b8hUu6iOJ4SzsZlo3UNAvHYa+PnvntIwRPt1/vy4nA9Q== + dependencies: + "@formatjs/ecma402-abstract" "2.0.0" + tslib "^2.4.0" + +"@formatjs/intl-displaynames@6.6.8": + version "6.6.8" + resolved "https://registry.yarnpkg.com/@formatjs/intl-displaynames/-/intl-displaynames-6.6.8.tgz#2f5afac8df83167f5a6ef8543600eaf1ef99c885" + integrity sha512-Lgx6n5KxN16B3Pb05z3NLEBQkGoXnGjkTBNCZI+Cn17YjHJ3fhCeEJJUqRlIZmJdmaXQhjcQVDp6WIiNeRYT5g== + dependencies: + "@formatjs/ecma402-abstract" "2.0.0" + "@formatjs/intl-localematcher" "0.5.4" + tslib "^2.4.0" + +"@formatjs/intl-listformat@7.5.7": + version "7.5.7" + resolved "https://registry.yarnpkg.com/@formatjs/intl-listformat/-/intl-listformat-7.5.7.tgz#125e05105fabd1ae5f11881d6ab74484f2098ee4" + integrity sha512-MG2TSChQJQT9f7Rlv+eXwUFiG24mKSzmF144PLb8m8OixyXqn4+YWU+5wZracZGCgVTVmx8viCf7IH3QXoiB2g== + dependencies: + "@formatjs/ecma402-abstract" "2.0.0" + "@formatjs/intl-localematcher" "0.5.4" + tslib "^2.4.0" + +"@formatjs/intl-localematcher@0.5.4": + version "0.5.4" + resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz#caa71f2e40d93e37d58be35cfffe57865f2b366f" + integrity sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g== + dependencies: + tslib "^2.4.0" + +"@formatjs/intl-unified-numberformat@^3.2.0": + version "3.3.7" + resolved "https://registry.yarnpkg.com/@formatjs/intl-unified-numberformat/-/intl-unified-numberformat-3.3.7.tgz#9995a24568908188e716d81a1de5b702b2ee00e2" + integrity sha512-KnWgLRHzCAgT9eyt3OS34RHoyD7dPDYhRcuKn+/6Kv2knDF8Im43J6vlSW6Hm1w63fNq3ZIT1cFk7RuVO3Psag== + dependencies: + "@formatjs/intl-utils" "^2.3.0" + +"@formatjs/intl-utils@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@formatjs/intl-utils/-/intl-utils-2.3.0.tgz#2dc8c57044de0340eb53a7ba602e59abf80dc799" + integrity sha512-KWk80UPIzPmUg+P0rKh6TqspRw0G6eux1PuJr+zz47ftMaZ9QDwbGzHZbtzWkl5hgayM/qrKRutllRC7D/vVXQ== + +"@formatjs/intl@2.10.4": + version "2.10.4" + resolved "https://registry.yarnpkg.com/@formatjs/intl/-/intl-2.10.4.tgz#e1819e0858fb05ca65923a020f346bc74e894e92" + integrity sha512-56483O+HVcL0c7VucAS2tyH020mt9XTozZO67cwtGg0a7KWDukS/FzW3OnvaHmTHDuYsoPIzO+ZHVfU6fT/bJw== + dependencies: + "@formatjs/ecma402-abstract" "2.0.0" + "@formatjs/fast-memoize" "2.2.0" + "@formatjs/icu-messageformat-parser" "2.7.8" + "@formatjs/intl-displaynames" "6.6.8" + "@formatjs/intl-listformat" "7.5.7" + intl-messageformat "10.5.14" + tslib "^2.4.0" + +"@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" + integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^26.6.2" + jest-util "^26.6.2" + slash "^3.0.0" + +"@jest/core@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" + integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== + dependencies: + "@jest/console" "^26.6.2" + "@jest/reporters" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-changed-files "^26.6.2" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-resolve-dependencies "^26.6.3" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + jest-watcher "^26.6.2" + micromatch "^4.0.2" + p-each-series "^2.1.0" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" + integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== + dependencies: + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + +"@jest/fake-timers@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" + integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== + dependencies: + "@jest/types" "^26.6.2" + "@sinonjs/fake-timers" "^6.0.1" + "@types/node" "*" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-util "^26.6.2" + +"@jest/globals@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" + integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/types" "^26.6.2" + expect "^26.6.2" + +"@jest/reporters@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" + integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.2.4" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^4.0.3" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + jest-haste-map "^26.6.2" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^7.0.0" + optionalDependencies: + node-notifier "^8.0.0" + +"@jest/source-map@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" + integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.2.4" + source-map "^0.6.0" + +"@jest/test-result@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" + integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== + dependencies: + "@jest/console" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" + integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== + dependencies: + "@jest/test-result" "^26.6.2" + graceful-fs "^4.2.4" + jest-haste-map "^26.6.2" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + +"@jest/transform@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" + integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^26.6.2" + babel-plugin-istanbul "^6.0.0" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.4" + jest-haste-map "^26.6.2" + jest-regex-util "^26.0.0" + jest-util "^26.6.2" + micromatch "^4.0.2" + pirates "^4.0.1" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + +"@jest/types@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" + integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/source-map@^0.3.3": + version "0.3.6" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" + integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@jsonjoy.com/base64@^1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/base64/-/base64-1.1.2.tgz#cf8ea9dcb849b81c95f14fc0aaa151c6b54d2578" + integrity sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA== + +"@jsonjoy.com/json-pack@^1.0.3": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pack/-/json-pack-1.0.4.tgz#ab59c642a2e5368e8bcfd815d817143d4f3035d0" + integrity sha512-aOcSN4MeAtFROysrbqG137b7gaDDSmVrl5mpo6sT/w+kcXpWnzhMjmY/Fh/sDx26NBxyIE7MB1seqLeCAzy9Sg== + dependencies: + "@jsonjoy.com/base64" "^1.1.1" + "@jsonjoy.com/util" "^1.1.2" + hyperdyperid "^1.2.0" + thingies "^1.20.0" + +"@jsonjoy.com/util@^1.1.2": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/util/-/util-1.1.3.tgz#75b1c3cf21b70e665789d1ad3eabeff8b7fd1429" + integrity sha512-g//kkF4kOwUjemValCtOc/xiYzmwMRmWq3Bn+YnzOzuZLHq2PpMOxxIayN3cKbo7Ko2Np65t6D9H81IvXbXhqg== + +"@ledgerhq/devices@^5.34.0", "@ledgerhq/devices@^5.49.0", "@ledgerhq/devices@^5.51.1": + version "5.51.1" + resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-5.51.1.tgz#d741a4a5d8f17c2f9d282fd27147e6fe1999edb7" + integrity sha512-4w+P0VkbjzEXC7kv8T1GJ/9AVaP9I6uasMZ/JcdwZBS3qwvKo5A5z9uGhP5c7TvItzcmPb44b5Mw2kT+WjUuAA== + dependencies: + "@ledgerhq/errors" "^5.50.0" + "@ledgerhq/logs" "^5.50.0" + rxjs "6" + semver "^7.3.5" + +"@ledgerhq/devices@^8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-8.3.0.tgz#a1e1a21608e162fb3a512f57863bf9842b29493f" + integrity sha512-h5Scr+yIae8yjPOViCHLdMjpqn4oC2Whrsq8LinRxe48LEGMdPqSV1yY7+3Ch827wtzNpMv+/ilKnd8rY+rTlg== + dependencies: + "@ledgerhq/errors" "^6.16.4" + "@ledgerhq/logs" "^6.12.0" + rxjs "^7.8.1" + semver "^7.3.5" + +"@ledgerhq/errors@^5.34.0", "@ledgerhq/errors@^5.49.0", "@ledgerhq/errors@^5.50.0": + version "5.50.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-5.50.0.tgz#e3a6834cb8c19346efca214c1af84ed28e69dad9" + integrity sha512-gu6aJ/BHuRlpU7kgVpy2vcYk6atjB4iauP2ymF7Gk0ez0Y/6VSMVSJvubeEQN+IV60+OBK0JgeIZG7OiHaw8ow== + +"@ledgerhq/errors@^6.16.4": + version "6.16.4" + resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-6.16.4.tgz#a38baffe8b096d9fff3ad839cadb55704c8d8e7b" + integrity sha512-M57yFaLYSN+fZCX0E0zUqOmrV6eipK+s5RhijHoUNlHUqrsvUz7iRQgpd5gRgHB5VkIjav7KdaZjKiWGcHovaQ== + +"@ledgerhq/hw-transport-node-hid-noevents@^6.29.6": + version "6.29.6" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-6.29.6.tgz#a328bdde245283f3ca3b82ffa19f7f31b745a22d" + integrity sha512-H1cGC4TLwSCxve3rbV7qfPJBZfy7VD7k9Czc9HOMDwQ9zHFtaoeiIotIMGjzHjfPtAGauMpAYvrpmEdBBX5sHg== + dependencies: + "@ledgerhq/devices" "^8.3.0" + "@ledgerhq/errors" "^6.16.4" + "@ledgerhq/hw-transport" "^6.30.6" + "@ledgerhq/logs" "^6.12.0" + node-hid "^2.1.2" + +"@ledgerhq/hw-transport-node-hid@^6.27.2": + version "6.28.6" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-6.28.6.tgz#8a62d1aaf4d62c53639e42171078a082d7cdda50" + integrity sha512-USSTOO0zv9XtguWismP7/StnNS/s7Rz0JOGGaBhKe3Bzl7d5XPncUlmOvoNFzzY/QdasEoFs2QId1+ibJG71Vw== + dependencies: + "@ledgerhq/devices" "^8.3.0" + "@ledgerhq/errors" "^6.16.4" + "@ledgerhq/hw-transport" "^6.30.6" + "@ledgerhq/hw-transport-node-hid-noevents" "^6.29.6" + "@ledgerhq/logs" "^6.12.0" + lodash "^4.17.21" + node-hid "^2.1.2" + usb "2.9.0" + +"@ledgerhq/hw-transport-u2f@5.36.0-deprecated": + version "5.36.0-deprecated" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-u2f/-/hw-transport-u2f-5.36.0-deprecated.tgz#66e3ed399a117a1c0110871a055dd54f5fe707fd" + integrity sha512-T/+mGHIiUK/ZQATad6DMDmobCMZ1mVST952009jKzhaE1Et2Uy2secU+QhRkx3BfEAkvwa0zSRSYCL9d20Iqjg== + dependencies: + "@ledgerhq/errors" "^5.34.0" + "@ledgerhq/hw-transport" "^5.34.0" + "@ledgerhq/logs" "^5.30.0" + u2f-api "0.2.7" + +"@ledgerhq/hw-transport-webauthn@5.36.0-deprecated": + version "5.36.0-deprecated" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-webauthn/-/hw-transport-webauthn-5.36.0-deprecated.tgz#d5c40ebd9e2099a8f5f1792f4f45af73e0731fe3" + integrity sha512-MCT59enCaevP458x+n4BGA8z9nVhuxGP5wtCtlUB7uxkWB6j12RHzPwyqlPo1z7baEby8fQe0VCI5lbGaCSBDQ== + dependencies: + "@ledgerhq/devices" "^5.34.0" + "@ledgerhq/errors" "^5.34.0" + "@ledgerhq/hw-transport" "^5.34.0" + "@ledgerhq/logs" "^5.30.0" + +"@ledgerhq/hw-transport-webhid@5.51.1": + version "5.51.1" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-webhid/-/hw-transport-webhid-5.51.1.tgz#2050d65ef4ce179e8f43cd7245b811d8f05fdcfc" + integrity sha512-w/2qSU0vwFY+D/4ucuYRViO7iS3Uuxmj9sI/Iiqkoiax9Xppb0/6H5m3ffKv6iPMmRYbgwCgXorqx4SLLSD8Kg== + dependencies: + "@ledgerhq/devices" "^5.51.1" + "@ledgerhq/errors" "^5.50.0" + "@ledgerhq/hw-transport" "^5.51.1" + "@ledgerhq/logs" "^5.50.0" + +"@ledgerhq/hw-transport-webusb@5.49.0": + version "5.49.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-webusb/-/hw-transport-webusb-5.49.0.tgz#3edbeca4d1c554d36acf9bd2cc5a79250eeab101" + integrity sha512-oWgaVdAmQ9lOUnq1dhmCBP9v1ghEV+YBh0nHi7JtdpuLBuGd9red1HXdg5INE2J10rxO/wra3OoHcJlQguR8ew== + dependencies: + "@ledgerhq/devices" "^5.49.0" + "@ledgerhq/errors" "^5.49.0" + "@ledgerhq/hw-transport" "^5.49.0" + "@ledgerhq/logs" "^5.49.0" + +"@ledgerhq/hw-transport@^5.12.0", "@ledgerhq/hw-transport@^5.34.0", "@ledgerhq/hw-transport@^5.49.0", "@ledgerhq/hw-transport@^5.51.1": + version "5.51.1" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-5.51.1.tgz#8dd14a8e58cbee4df0c29eaeef983a79f5f22578" + integrity sha512-6wDYdbWrw9VwHIcoDnqWBaDFyviyjZWv6H9vz9Vyhe4Qd7TIFmbTl/eWs6hZvtZBza9K8y7zD8ChHwRI4s9tSw== + dependencies: + "@ledgerhq/devices" "^5.51.1" + "@ledgerhq/errors" "^5.50.0" + events "^3.3.0" + +"@ledgerhq/hw-transport@^6.27.10", "@ledgerhq/hw-transport@^6.30.6": + version "6.30.6" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-6.30.6.tgz#c6d84672ac4828f311831998f4101ea205215a6d" + integrity sha512-fT0Z4IywiuJuZrZE/+W0blkV5UCotDPFTYKLkKCLzYzuE6javva7D/ajRaIeR+hZ4kTmKF4EqnsmDCXwElez+w== + dependencies: + "@ledgerhq/devices" "^8.3.0" + "@ledgerhq/errors" "^6.16.4" + "@ledgerhq/logs" "^6.12.0" + events "^3.3.0" + +"@ledgerhq/logs@^5.30.0", "@ledgerhq/logs@^5.49.0", "@ledgerhq/logs@^5.50.0": + version "5.50.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.50.0.tgz#29c6419e8379d496ab6d0426eadf3c4d100cd186" + integrity sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA== + +"@ledgerhq/logs@^6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-6.12.0.tgz#ad903528bf3687a44da435d7b2479d724d374f5d" + integrity sha512-ExDoj1QV5eC6TEbMdLUMMk9cfvNKhhv5gXol4SmULRVCx/3iyCPhJ74nsb3S0Vb+/f+XujBEj3vQn5+cwS0fNA== + +"@leichtgewicht/ip-codec@^2.0.1": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1" + integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw== + +"@mui/base@5.0.0-beta.40": + version "5.0.0-beta.40" + resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.40.tgz#1f8a782f1fbf3f84a961e954c8176b187de3dae2" + integrity sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ== + dependencies: + "@babel/runtime" "^7.23.9" + "@floating-ui/react-dom" "^2.0.8" + "@mui/types" "^7.2.14" + "@mui/utils" "^5.15.14" + "@popperjs/core" "^2.11.8" + clsx "^2.1.0" + prop-types "^15.8.1" + +"@mui/core-downloads-tracker@^5.15.19": + version "5.15.19" + resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.19.tgz#7af0025c871f126367a55219486681954e4821d7" + integrity sha512-tCHSi/Tomez9ERynFhZRvFO6n9ATyrPs+2N80DMDzp6xDVirbBjEwhPcE+x7Lj+nwYw0SqFkOxyvMP0irnm55w== + +"@mui/lab@^5.0.0-alpha.51": + version "5.0.0-alpha.170" + resolved "https://registry.yarnpkg.com/@mui/lab/-/lab-5.0.0-alpha.170.tgz#4519dfc8d1c51ca54fb9d8b91b95a3733d07be16" + integrity sha512-0bDVECGmrNjd3+bLdcLiwYZ0O4HP5j5WSQm5DV6iA/Z9kr8O6AnvZ1bv9ImQbbX7Gj3pX4o43EKwCutj3EQxQg== + dependencies: + "@babel/runtime" "^7.23.9" + "@mui/base" "5.0.0-beta.40" + "@mui/system" "^5.15.15" + "@mui/types" "^7.2.14" + "@mui/utils" "^5.15.14" + clsx "^2.1.0" + prop-types "^15.8.1" + +"@mui/material@^5.0.4": + version "5.15.19" + resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.15.19.tgz#a5bd50b6e68cee4ed39ea91dbecede5a020aaa97" + integrity sha512-lp5xQBbcRuxNtjpWU0BWZgIrv2XLUz4RJ0RqFXBdESIsKoGCQZ6P3wwU5ZPuj5TjssNiKv9AlM+vHopRxZhvVQ== + dependencies: + "@babel/runtime" "^7.23.9" + "@mui/base" "5.0.0-beta.40" + "@mui/core-downloads-tracker" "^5.15.19" + "@mui/system" "^5.15.15" + "@mui/types" "^7.2.14" + "@mui/utils" "^5.15.14" + "@types/react-transition-group" "^4.4.10" + clsx "^2.1.0" + csstype "^3.1.3" + prop-types "^15.8.1" + react-is "^18.2.0" + react-transition-group "^4.4.5" + +"@mui/private-theming@^5.15.14": + version "5.15.14" + resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.15.14.tgz#edd9a82948ed01586a01c842eb89f0e3f68970ee" + integrity sha512-UH0EiZckOWcxiXLX3Jbb0K7rC8mxTr9L9l6QhOZxYc4r8FHUkefltV9VDGLrzCaWh30SQiJvAEd7djX3XXY6Xw== + dependencies: + "@babel/runtime" "^7.23.9" + "@mui/utils" "^5.15.14" + prop-types "^15.8.1" + +"@mui/styled-engine@^5.15.14": + version "5.15.14" + resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.15.14.tgz#168b154c4327fa4ccc1933a498331d53f61c0de2" + integrity sha512-RILkuVD8gY6PvjZjqnWhz8fu68dVkqhM5+jYWfB5yhlSQKg+2rHkmEwm75XIeAqI3qwOndK6zELK5H6Zxn4NHw== + dependencies: + "@babel/runtime" "^7.23.9" + "@emotion/cache" "^11.11.0" + csstype "^3.1.3" + prop-types "^15.8.1" + +"@mui/system@^5.15.15": + version "5.15.15" + resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.15.15.tgz#658771b200ce3c4a0f28e58169f02e5e718d1c53" + integrity sha512-aulox6N1dnu5PABsfxVGOZffDVmlxPOVgj56HrUnJE8MCSh8lOvvkd47cebIVQQYAjpwieXQXiDPj5pwM40jTQ== + dependencies: + "@babel/runtime" "^7.23.9" + "@mui/private-theming" "^5.15.14" + "@mui/styled-engine" "^5.15.14" + "@mui/types" "^7.2.14" + "@mui/utils" "^5.15.14" + clsx "^2.1.0" + csstype "^3.1.3" + prop-types "^15.8.1" + +"@mui/types@^7.2.14": + version "7.2.14" + resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.14.tgz#8a02ac129b70f3d82f2f9b76ded2c8d48e3fc8c9" + integrity sha512-MZsBZ4q4HfzBsywtXgM1Ksj6HDThtiwmOKUXH1pKYISI9gAVXCNHNpo7TlGoGrBaYWZTdNoirIN7JsQcQUjmQQ== + +"@mui/utils@^5.10.3", "@mui/utils@^5.15.14": + version "5.15.14" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.15.14.tgz#e414d7efd5db00bfdc875273a40c0a89112ade3a" + integrity sha512-0lF/7Hh/ezDv5X7Pry6enMsbYyGKjADzvHyo3Qrc/SSlTsQ1VkbDMbH0m2t3OR5iIVLwMoxwM7yGd+6FCMtTFA== + dependencies: + "@babel/runtime" "^7.23.9" + "@types/prop-types" "^15.7.11" + prop-types "^15.8.1" + react-is "^18.2.0" + +"@mui/x-date-pickers@^5.0.8": + version "5.0.20" + resolved "https://registry.yarnpkg.com/@mui/x-date-pickers/-/x-date-pickers-5.0.20.tgz#7b4e5b5a214a8095937ba7d82bb82acd6f270d72" + integrity sha512-ERukSeHIoNLbI1C2XRhF9wRhqfsr+Q4B1SAw2ZlU7CWgcG8UBOxgqRKDEOVAIoSWL+DWT6GRuQjOKvj6UXZceA== + dependencies: + "@babel/runtime" "^7.18.9" + "@date-io/core" "^2.15.0" + "@date-io/date-fns" "^2.15.0" + "@date-io/dayjs" "^2.15.0" + "@date-io/luxon" "^2.15.0" + "@date-io/moment" "^2.15.0" + "@mui/utils" "^5.10.3" + "@types/react-transition-group" "^4.4.5" + clsx "^1.2.1" + prop-types "^15.7.2" + react-transition-group "^4.4.5" + rifm "^0.12.1" + +"@noble/hashes@^1.2.0", "@noble/hashes@^1.3.2": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" + integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@npmcli/fs@^1.0.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" + integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== + dependencies: + "@gar/promisify" "^1.0.1" + semver "^7.3.5" + +"@npmcli/fs@^2.1.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" + integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== + dependencies: + "@gar/promisify" "^1.1.3" + semver "^7.3.5" + +"@npmcli/move-file@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@npmcli/move-file@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" + integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@oclif/color@^0.1.0": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@oclif/color/-/color-0.1.2.tgz#28b07e2850d9ce814d0b587ce3403b7ad8f7d987" + integrity sha512-M9o+DOrb8l603qvgz1FogJBUGLqcMFL1aFg2ZEL0FbXJofiNTLOWIeB4faeZTLwE6dt0xH9GpCVpzksMMzGbmA== + dependencies: + ansi-styles "^3.2.1" + chalk "^3.0.0" + strip-ansi "^5.2.0" + supports-color "^5.4.0" + tslib "^1" + +"@oclif/command@^1.5.13", "@oclif/command@^1.6.1", "@oclif/command@^1.7.0", "@oclif/command@^1.8.15", "@oclif/command@^1.8.6": + version "1.8.36" + resolved "https://registry.yarnpkg.com/@oclif/command/-/command-1.8.36.tgz#9739b9c268580d064a50887c4597d1b4e86ca8b5" + integrity sha512-/zACSgaYGtAQRzc7HjzrlIs14FuEYAZrMOEwicRoUnZVyRunG4+t5iSEeQu0Xy2bgbCD0U1SP/EdeNZSTXRwjQ== + dependencies: + "@oclif/config" "^1.18.2" + "@oclif/errors" "^1.3.6" + "@oclif/help" "^1.0.1" + "@oclif/parser" "^3.8.17" + debug "^4.1.1" + semver "^7.5.4" + +"@oclif/config@1.18.16": + version "1.18.16" + resolved "https://registry.yarnpkg.com/@oclif/config/-/config-1.18.16.tgz#3235d260ab1eb8388ebb6255bca3dd956249d796" + integrity sha512-VskIxVcN22qJzxRUq+raalq6Q3HUde7sokB7/xk5TqRZGEKRVbFeqdQBxDWwQeudiJEgcNiMvIFbMQ43dY37FA== + dependencies: + "@oclif/errors" "^1.3.6" + "@oclif/parser" "^3.8.16" + debug "^4.3.4" + globby "^11.1.0" + is-wsl "^2.1.1" + tslib "^2.6.1" + +"@oclif/config@1.18.2": + version "1.18.2" + resolved "https://registry.yarnpkg.com/@oclif/config/-/config-1.18.2.tgz#5bfe74a9ba6a8ca3dceb314a81bd9ce2e15ebbfe" + integrity sha512-cE3qfHWv8hGRCP31j7fIS7BfCflm/BNZ2HNqHexH+fDrdF2f1D5S8VmXWLC77ffv3oDvWyvE9AZeR0RfmHCCaA== + 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.13.0", "@oclif/config@^1.15.1", "@oclif/config@^1.16.0", "@oclif/config@^1.17.1", "@oclif/config@^1.18.2": + version "1.18.17" + resolved "https://registry.yarnpkg.com/@oclif/config/-/config-1.18.17.tgz#00aa4049da27edca8f06fc106832d9f0f38786a5" + integrity sha512-k77qyeUvjU8qAJ3XK3fr/QVAqsZO8QOBuESnfeM5HHtPNLSyfVcwiMM2zveSW5xRdLSG3MfV8QnLVkuyCL2ENg== + dependencies: + "@oclif/errors" "^1.3.6" + "@oclif/parser" "^3.8.17" + debug "^4.3.4" + globby "^11.1.0" + is-wsl "^2.1.1" + tslib "^2.6.1" + +"@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== + dependencies: + clean-stack "^3.0.0" + fs-extra "^8.1" + indent-string "^4.0.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +"@oclif/errors@1.3.6", "@oclif/errors@^1.2.2", "@oclif/errors@^1.3.3", "@oclif/errors@^1.3.4", "@oclif/errors@^1.3.5", "@oclif/errors@^1.3.6": + version "1.3.6" + resolved "https://registry.yarnpkg.com/@oclif/errors/-/errors-1.3.6.tgz#e8fe1fc12346cb77c4f274e26891964f5175f75d" + integrity sha512-fYaU4aDceETd89KXP+3cLyg9EHZsLD3RxF2IU9yxahhBpspWjkWi3Dy3bTgcwZ3V47BgxQaGapzJWDM33XIVDQ== + dependencies: + clean-stack "^3.0.0" + fs-extra "^8.1" + indent-string "^4.0.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +"@oclif/help@^1.0.1": + version "1.0.15" + resolved "https://registry.yarnpkg.com/@oclif/help/-/help-1.0.15.tgz#5e36e576b8132a4906d2662204ad9de7ece87e8f" + integrity sha512-Yt8UHoetk/XqohYX76DfdrUYLsPKMc5pgkzsZVHDyBSkLiGRzujVaGZdjr32ckVZU9q3a47IjhWxhip7Dz5W/g== + dependencies: + "@oclif/config" "1.18.16" + "@oclif/errors" "1.3.6" + chalk "^4.1.2" + indent-string "^4.0.0" + lodash "^4.17.21" + string-width "^4.2.0" + strip-ansi "^6.0.0" + widest-line "^3.1.0" + wrap-ansi "^6.2.0" + +"@oclif/linewrap@^1.0.0": + version "1.0.0" + 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.16", "@oclif/parser@^3.8.17", "@oclif/parser@^3.8.3": + version "3.8.17" + resolved "https://registry.yarnpkg.com/@oclif/parser/-/parser-3.8.17.tgz#e1ce0f29b22762d752d9da1c7abd57ad81c56188" + integrity sha512-l04iSd0xoh/16TGVpXb81Gg3z7tlQGrEup16BrVLsZBK6SEYpYHRJZnM32BwZrHI97ZSFfuSwVlzoo6HdsaK8A== + dependencies: + "@oclif/errors" "^1.3.6" + "@oclif/linewrap" "^1.0.0" + chalk "^4.1.0" + tslib "^2.6.2" + +"@oclif/plugin-autocomplete@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@oclif/plugin-autocomplete/-/plugin-autocomplete-0.3.0.tgz#eec788596a88a4ca5170a9103b6c2835119a8fbd" + integrity sha512-gCuIUCswvoU1BxDDvHSUGxW8rFagiacle8jHqE49+WnuniXD/N8NmJvnzmlNyc8qLE192CnKK+qYyAF+vaFQBg== + dependencies: + "@oclif/command" "^1.5.13" + "@oclif/config" "^1.13.0" + chalk "^4.1.0" + cli-ux "^5.2.1" + debug "^4.0.0" + fs-extra "^9.0.1" + moment "^2.22.1" + +"@oclif/plugin-help@^3.2.2": + 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== + dependencies: + "@oclif/command" "^1.8.15" + "@oclif/config" "1.18.2" + "@oclif/errors" "1.3.5" + "@oclif/help" "^1.0.1" + chalk "^4.1.2" + indent-string "^4.0.0" + lodash "^4.17.21" + string-width "^4.2.0" + strip-ansi "^6.0.0" + widest-line "^3.1.0" + wrap-ansi "^6.2.0" + +"@oclif/plugin-update@^1.3.10": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@oclif/plugin-update/-/plugin-update-1.5.0.tgz#a9e0092a9b7ae01e54708938e2a424903f5079ef" + integrity sha512-GsWK1CMeBBO8YknThoOZulj3xE+ZgZAXW1ouNJALXcs3mbROzszLDGjXV3RM6ffbJpnWLiMIqSFNOE8d+vGcgQ== + dependencies: + "@oclif/color" "^0.1.0" + "@oclif/command" "^1.7.0" + "@oclif/config" "^1.16.0" + "@oclif/errors" "^1.3.4" + "@types/semver" "^7.3.4" + cli-ux "^5.5.1" + cross-spawn "^7.0.3" + debug "^4.3.1" + filesize "^6.1.0" + fs-extra "^9.0.1" + http-call "^5.3.0" + lodash "^4.17.21" + log-chopper "^1.0.2" + semver "^7.3.5" + tar-fs "^2.1.1" + +"@oclif/plugin-warn-if-update-available@^1.7.0": + 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.8.6" + "@oclif/config" "^1.17.1" + "@oclif/errors" "^1.3.5" + chalk "^4.1.0" + debug "^4.1.0" + fs-extra "^9.0.1" + http-call "^5.2.2" + lodash "^4.17.21" + semver "^7.3.2" + +"@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== + +"@octokit/auth-token@^2.4.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.5.0.tgz#27c37ea26c205f28443402477ffd261311f21e36" + integrity sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g== + dependencies: + "@octokit/types" "^6.0.3" + +"@octokit/endpoint@^6.0.1": + version "6.0.12" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.12.tgz#3b4d47a4b0e79b1027fb8d75d4221928b2d05658" + integrity sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA== + dependencies: + "@octokit/types" "^6.0.3" + is-plain-object "^5.0.0" + universal-user-agent "^6.0.0" + +"@octokit/openapi-types@^12.11.0": + version "12.11.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-12.11.0.tgz#da5638d64f2b919bca89ce6602d059f1b52d3ef0" + integrity sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ== + +"@octokit/plugin-paginate-rest@^1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz#004170acf8c2be535aba26727867d692f7b488fc" + integrity sha512-jbsSoi5Q1pj63sC16XIUboklNw+8tL9VOnJsWycWYR78TKss5PVpIPb1TUUcMQ+bBh7cY579cVAWmf5qG+dw+Q== + dependencies: + "@octokit/types" "^2.0.1" + +"@octokit/plugin-request-log@^1.0.0": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" + integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== + +"@octokit/plugin-rest-endpoint-methods@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz#3288ecf5481f68c494dd0602fc15407a59faf61e" + integrity sha512-EZi/AWhtkdfAYi01obpX0DF7U6b1VRr30QNQ5xSFPITMdLSfhcBqjamE3F+sKcxPbD7eZuMHu3Qkk2V+JGxBDQ== + dependencies: + "@octokit/types" "^2.0.1" + deprecation "^2.3.1" + +"@octokit/request-error@^1.0.2": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-1.2.1.tgz#ede0714c773f32347576c25649dc013ae6b31801" + integrity sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA== + dependencies: + "@octokit/types" "^2.0.0" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request-error@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.1.0.tgz#9e150357831bfc788d13a4fd4b1913d60c74d677" + integrity sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg== + dependencies: + "@octokit/types" "^6.0.3" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^5.2.0": + version "5.6.3" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.3.tgz#19a022515a5bba965ac06c9d1334514eb50c48b0" + integrity sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A== + dependencies: + "@octokit/endpoint" "^6.0.1" + "@octokit/request-error" "^2.1.0" + "@octokit/types" "^6.16.1" + is-plain-object "^5.0.0" + node-fetch "^2.6.7" + universal-user-agent "^6.0.0" + +"@octokit/rest@^16.43.1": + version "16.43.2" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.43.2.tgz#c53426f1e1d1044dee967023e3279c50993dd91b" + integrity sha512-ngDBevLbBTFfrHZeiS7SAMAZ6ssuVmXuya+F/7RaVvlysgGa1JKJkKWY+jV6TCJYcW0OALfJ7nTIGXcBXzycfQ== + dependencies: + "@octokit/auth-token" "^2.4.0" + "@octokit/plugin-paginate-rest" "^1.1.1" + "@octokit/plugin-request-log" "^1.0.0" + "@octokit/plugin-rest-endpoint-methods" "2.4.0" + "@octokit/request" "^5.2.0" + "@octokit/request-error" "^1.0.2" + atob-lite "^2.0.0" + before-after-hook "^2.0.0" + btoa-lite "^1.0.0" + deprecation "^2.0.0" + lodash.get "^4.4.2" + lodash.set "^4.3.2" + lodash.uniq "^4.5.0" + octokit-pagination-methods "^1.1.0" + once "^1.4.0" + universal-user-agent "^4.0.0" + +"@octokit/types@^2.0.0", "@octokit/types@^2.0.1": + version "2.16.2" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-2.16.2.tgz#4c5f8da3c6fecf3da1811aef678fda03edac35d2" + integrity sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q== + dependencies: + "@types/node" ">= 8" + +"@octokit/types@^6.0.3", "@octokit/types@^6.16.1": + version "6.41.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.41.0.tgz#e58ef78d78596d2fb7df9c6259802464b5f84a04" + integrity sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg== + dependencies: + "@octokit/openapi-types" "^12.11.0" + +"@phenomnomnominal/tsquery@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@phenomnomnominal/tsquery/-/tsquery-3.0.0.tgz#6f2f4dbf6304ff52b12cc7a5b979f20c3794a22a" + integrity sha512-SW8lKitBHWJ9fAYkJ9kJivuctwNYCh3BUxLdH0+XiR1GPBiu+7qiZzh8p8jqlj1LgVC1TbvfNFroaEsmYlL8Iw== + dependencies: + esquery "^1.0.1" + +"@pmmmwh/react-refresh-webpack-plugin@0.5.11": + version "0.5.11" + resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz#7c2268cedaa0644d677e8c4f377bc8fb304f714a" + integrity sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ== + dependencies: + ansi-html-community "^0.0.8" + common-path-prefix "^3.0.0" + core-js-pure "^3.23.3" + error-stack-parser "^2.0.6" + find-up "^5.0.0" + html-entities "^2.1.0" + loader-utils "^2.0.4" + schema-utils "^3.0.0" + source-map "^0.7.3" + +"@popperjs/core@^2.11.8": + version "2.11.8" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" + integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== + +"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" + integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== + +"@protobufjs/base64@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" + integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== + +"@protobufjs/codegen@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" + integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== + +"@protobufjs/eventemitter@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" + integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== + +"@protobufjs/fetch@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" + integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== + dependencies: + "@protobufjs/aspromise" "^1.1.1" + "@protobufjs/inquire" "^1.1.0" + +"@protobufjs/float@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" + integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== + +"@protobufjs/inquire@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" + integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== + +"@protobufjs/path@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" + integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== + +"@protobufjs/pool@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" + integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== + +"@protobufjs/utf8@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" + integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== + +"@react-native-async-storage/async-storage@^1.19.3": + version "1.23.1" + resolved "https://registry.yarnpkg.com/@react-native-async-storage/async-storage/-/async-storage-1.23.1.tgz#cad3cd4fab7dacfe9838dce6ecb352f79150c883" + integrity sha512-Qd2kQ3yi6Y3+AcUlrHxSLlnBvpdCEMVGFlVBneVOjaFaPU61g1huc38g339ysXspwY1QZA2aNhrk/KlHGO+ewA== + dependencies: + merge-options "^3.0.4" + +"@scure/base@^1.1.1": + version "1.1.6" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.6.tgz#8ce5d304b436e4c84f896e0550c83e4d88cb917d" + integrity sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g== + +"@sentry/core@6.19.7": + version "6.19.7" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.19.7.tgz#156aaa56dd7fad8c89c145be6ad7a4f7209f9785" + integrity sha512-tOfZ/umqB2AcHPGbIrsFLcvApdTm9ggpi/kQZFkej7kMphjT+SGBiQfYtjyg9jcRW+ilAR4JXC9BGKsdEQ+8Vw== + dependencies: + "@sentry/hub" "6.19.7" + "@sentry/minimal" "6.19.7" + "@sentry/types" "6.19.7" + "@sentry/utils" "6.19.7" + tslib "^1.9.3" + +"@sentry/hub@6.19.7": + version "6.19.7" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.19.7.tgz#58ad7776bbd31e9596a8ec46365b45cd8b9cfd11" + integrity sha512-y3OtbYFAqKHCWezF0EGGr5lcyI2KbaXW2Ik7Xp8Mu9TxbSTuwTe4rTntwg8ngPjUQU3SUHzgjqVB8qjiGqFXCA== + dependencies: + "@sentry/types" "6.19.7" + "@sentry/utils" "6.19.7" + tslib "^1.9.3" + +"@sentry/minimal@6.19.7": + version "6.19.7" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.19.7.tgz#b3ee46d6abef9ef3dd4837ebcb6bdfd01b9aa7b4" + integrity sha512-wcYmSJOdvk6VAPx8IcmZgN08XTXRwRtB1aOLZm+MVHjIZIhHoBGZJYTVQS/BWjldsamj2cX3YGbGXNunaCfYJQ== + dependencies: + "@sentry/hub" "6.19.7" + "@sentry/types" "6.19.7" + tslib "^1.9.3" + +"@sentry/node@^6.2.5": + version "6.19.7" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.19.7.tgz#32963b36b48daebbd559e6f13b1deb2415448592" + integrity sha512-gtmRC4dAXKODMpHXKfrkfvyBL3cI8y64vEi3fDD046uqYcrWdgoQsffuBbxMAizc6Ez1ia+f0Flue6p15Qaltg== + dependencies: + "@sentry/core" "6.19.7" + "@sentry/hub" "6.19.7" + "@sentry/types" "6.19.7" + "@sentry/utils" "6.19.7" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/types@6.19.7", "@sentry/types@^6.2.5": + version "6.19.7" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.19.7.tgz#c6b337912e588083fc2896eb012526cf7cfec7c7" + integrity sha512-jH84pDYE+hHIbVnab3Hr+ZXr1v8QABfhx39KknxqKWr2l0oEItzepV0URvbEhB446lk/S/59230dlUUIBGsXbg== + +"@sentry/utils@6.19.7": + version "6.19.7" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.19.7.tgz#6edd739f8185fd71afe49cbe351c1bbf5e7b7c79" + integrity sha512-z95ECmE3i9pbWoXQrD/7PgkBAzJYR+iXtPuTkpBjDKs86O3mT+PXOT3BAn79w2wkn7/i3vOGD2xVr1uiMl26dA== + dependencies: + "@sentry/types" "6.19.7" + tslib "^1.9.3" + +"@servie/events@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@servie/events/-/events-1.0.0.tgz#8258684b52d418ab7b86533e861186638ecc5dc1" + integrity sha512-sBSO19KzdrJCM3gdx6eIxV8M9Gxfgg6iDQmH5TIAGaUu+X9VDdsINXJOnoiZ1Kx3TrHdH4bt5UVglkjsEGBcvw== + +"@sindresorhus/is@^2.0.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-2.1.1.tgz#ceff6a28a5b4867c2dd4a1ba513de278ccbe8bb1" + integrity sha512-/aPsuoj/1Dw/kzhkgz+ES6TxG0zfTMGLwuK2ZG00k/iJzYHTLCE8mVU8EPqEOp/lmxPoq1C1C9RYToRKb2KEfg== + +"@sinonjs/commons@^1.7.0": + version "1.8.6" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" + integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" + integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@svgr/babel-plugin-add-jsx-attribute@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906" + integrity sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg== + +"@svgr/babel-plugin-remove-jsx-attribute@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz#6b2c770c95c874654fd5e1d5ef475b78a0a962ef" + integrity sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg== + +"@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz#25621a8915ed7ad70da6cea3d0a6dbc2ea933efd" + integrity sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA== + +"@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz#0b221fc57f9fcd10e91fe219e2cd0dd03145a897" + integrity sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ== + +"@svgr/babel-plugin-svg-dynamic-title@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz#139b546dd0c3186b6e5db4fefc26cb0baea729d7" + integrity sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg== + +"@svgr/babel-plugin-svg-em-dimensions@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz#6543f69526632a133ce5cabab965deeaea2234a0" + integrity sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw== + +"@svgr/babel-plugin-transform-react-native-svg@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz#00bf9a7a73f1cad3948cdab1f8dfb774750f8c80" + integrity sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q== + +"@svgr/babel-plugin-transform-svg-component@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz#583a5e2a193e214da2f3afeb0b9e8d3250126b4a" + integrity sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ== + +"@svgr/babel-preset@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-5.5.0.tgz#8af54f3e0a8add7b1e2b0fcd5a882c55393df327" + integrity sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0" + "@svgr/babel-plugin-remove-jsx-attribute" "^5.4.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "^5.0.1" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^5.0.1" + "@svgr/babel-plugin-svg-dynamic-title" "^5.4.0" + "@svgr/babel-plugin-svg-em-dimensions" "^5.4.0" + "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0" + "@svgr/babel-plugin-transform-svg-component" "^5.5.0" + +"@svgr/core@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-5.5.0.tgz#82e826b8715d71083120fe8f2492ec7d7874a579" + integrity sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ== + dependencies: + "@svgr/plugin-jsx" "^5.5.0" + camelcase "^6.2.0" + cosmiconfig "^7.0.0" + +"@svgr/hast-util-to-babel-ast@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz#5ee52a9c2533f73e63f8f22b779f93cd432a5461" + integrity sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ== + dependencies: + "@babel/types" "^7.12.6" + +"@svgr/plugin-jsx@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz#1aa8cd798a1db7173ac043466d7b52236b369000" + integrity sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA== + dependencies: + "@babel/core" "^7.12.3" + "@svgr/babel-preset" "^5.5.0" + "@svgr/hast-util-to-babel-ast" "^5.5.0" + svg-parser "^2.0.2" + +"@svgr/plugin-svgo@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz#02da55d85320549324e201c7b2e53bf431fcc246" + integrity sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ== + dependencies: + cosmiconfig "^7.0.0" + deepmerge "^4.2.2" + svgo "^1.2.2" + +"@svgr/webpack@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.5.0.tgz#aae858ee579f5fa8ce6c3166ef56c6a1b381b640" + integrity sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g== + dependencies: + "@babel/core" "^7.12.3" + "@babel/plugin-transform-react-constant-elements" "^7.12.1" + "@babel/preset-env" "^7.12.1" + "@babel/preset-react" "^7.12.5" + "@svgr/core" "^5.5.0" + "@svgr/plugin-jsx" "^5.5.0" + "@svgr/plugin-svgo" "^5.5.0" + loader-utils "^2.0.0" + +"@szmarczak/http-timer@^4.0.0": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + +"@trezor/analytics@1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@trezor/analytics/-/analytics-1.0.5.tgz#a30d6b836cacd12b69848e4044733030507a00e5" + integrity sha512-XpgAsQDi8uZ+PmfCS6KUn+frUqR1ckOY9NdeC0PMGmkTzWm47oatvoyLSy2umd30T9M4h1LJECBqA80XpEV5MA== + dependencies: + "@trezor/env-utils" "1.0.4" + "@trezor/utils" "9.0.11" + +"@trezor/blockchain-link-types@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@trezor/blockchain-link-types/-/blockchain-link-types-1.0.4.tgz#9b76bf2a2c4b866f03906c5b2bb32df16c99df1f" + integrity sha512-EBX8Fi38mqIRStOQsUNbma1RwEP57B104N77p1CPHML3Kxu6M0DVcTulFKJKAJ6laQyfULzTeUYfEdn//dCcFA== + +"@trezor/blockchain-link-utils@1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@trezor/blockchain-link-utils/-/blockchain-link-utils-1.0.5.tgz#16b568e3ec5b7933b509111da321eb528a84f2d0" + integrity sha512-Kj8Zuy22ApV+FcLhMFdFVMAjbJwS4VaXndkz1OgjF7UHTb0jEJtIk5JSe5KNbvNUsyGcEAn9vZ+RogfZETOVGw== + dependencies: + "@trezor/utils" "9.0.11" + bignumber.js "^9.1.1" + +"@trezor/blockchain-link@2.1.15": + version "2.1.15" + resolved "https://registry.yarnpkg.com/@trezor/blockchain-link/-/blockchain-link-2.1.15.tgz#840f6c85d856230c51d60b201713ee48153c7470" + integrity sha512-Y7QsggFUGk84yKY06eSuS3oTNwH+chz0fuCWMs7aKr4TxXsxILNwzoYg7Erecf+WZuydAdmjZRDT4QbmMUc65g== + dependencies: + "@trezor/blockchain-link-types" "1.0.4" + "@trezor/blockchain-link-utils" "1.0.5" + "@trezor/utils" "9.0.11" + "@trezor/utxo-lib" "1.0.9" + "@types/web" "^0.0.100" + bignumber.js "^9.1.1" + events "^3.3.0" + ripple-lib "^1.10.1" + socks-proxy-agent "6.1.1" + ws "7.5.9" + +"@trezor/connect-analytics@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@trezor/connect-analytics/-/connect-analytics-1.0.4.tgz#15723402609921b9334e7b2883284d236b24d5d2" + integrity sha512-GLD5CCh6hcXsovxM2Fyns25GbGRCJ3lgFhWQ9WyqkFveI41cwMGCJZuXSyGSWCeMpazOYdvpgyXMqc22J2tatg== + dependencies: + "@trezor/analytics" "1.0.5" + +"@trezor/connect-common@0.0.18": + version "0.0.18" + resolved "https://registry.yarnpkg.com/@trezor/connect-common/-/connect-common-0.0.18.tgz#95c27d0da4f044f58cee2871b0b36a917e2c9597" + integrity sha512-tFian3z2ce/gQpjtFddr5NCKeJEEpV/t+Srb0Sa/STXqY/mTaADzti1aqp+/w4bL+1E2NNdAmCtsCl5AZc4a+A== + dependencies: + "@trezor/env-utils" "1.0.4" + +"@trezor/connect-web@9.1.1": + version "9.1.1" + resolved "https://registry.yarnpkg.com/@trezor/connect-web/-/connect-web-9.1.1.tgz#5317d2d3c570f583f551dd180ea00b3e6bccb401" + integrity sha512-FDwdARtUAITO80bahfU5gR4NS0q85rOvtyCCtwGgbH04JpOvmmoaNgYdXwfYfPaZCd2ZxZZ4omBermVPaE/wvA== + dependencies: + "@trezor/connect" "9.1.1" + "@trezor/utils" "9.0.11" + events "^3.3.0" + +"@trezor/connect@9.1.1": + version "9.1.1" + resolved "https://registry.yarnpkg.com/@trezor/connect/-/connect-9.1.1.tgz#950e0ef937ad80ce0b15b33a5fdc11da8adeb018" + integrity sha512-qIovN55BN5zciRiwIeEAHISjspy9jWkusBntk5z5SFmXw95KG6trms7GCodpbEuueboUS9Ts9xHorYwvqMmweg== + dependencies: + "@trezor/blockchain-link" "2.1.15" + "@trezor/blockchain-link-types" "1.0.4" + "@trezor/connect-analytics" "1.0.4" + "@trezor/connect-common" "0.0.18" + "@trezor/transport" "1.1.14" + "@trezor/utils" "9.0.11" + "@trezor/utxo-lib" "1.0.9" + bignumber.js "^9.1.1" + blakejs "^1.2.1" + bs58 "^5.0.0" + bs58check "^3.0.1" + cross-fetch "^3.1.6" + events "^3.3.0" + randombytes "2.1.0" + +"@trezor/env-utils@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@trezor/env-utils/-/env-utils-1.0.4.tgz#5e14da94478050cc1315df17694df53740979ddc" + integrity sha512-V9DdjpCH6hyN7AYPEIV1WR44fmgN6d3iF8DtHYNljnMFOaan167DDVq51ZpSPAnyppulIEhdK7kuLDW3KPcnpw== + dependencies: + ua-parser-js "^1.0.35" + +"@trezor/transport@1.1.14": + version "1.1.14" + resolved "https://registry.yarnpkg.com/@trezor/transport/-/transport-1.1.14.tgz#c3dc9a1fbb61e405970715d2a675410596632041" + integrity sha512-KRurYZonsPugKyCJFEEkDi82gjD1lwNDEaROCwQvIHcdXO2spHj1XDlIWa8dgBVrglukJmYutqCzE+RtaMeVVQ== + dependencies: + "@trezor/utils" "9.0.11" + bytebuffer "^5.0.1" + cross-fetch "^3.1.6" + json-stable-stringify "^1.0.2" + long "^4.0.0" + prettier "2.8.8" + protobufjs "7.2.4" + usb "^2.9.0" + +"@trezor/utils@9.0.11": + version "9.0.11" + resolved "https://registry.yarnpkg.com/@trezor/utils/-/utils-9.0.11.tgz#4baaae3c3aa6e4341351205e26ffdd8194e13253" + integrity sha512-HJBgR6/VYjJX8AP/fNIcYC+gDNjP2JLfgYBrT/naupEwDQJcxfn8KgUBrR1/akm61g8CPOot/YEj4o5nXuRt/g== + +"@trezor/utxo-lib@1.0.9": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@trezor/utxo-lib/-/utxo-lib-1.0.9.tgz#434dbfd5e96197dd2d25303d84bb384d6b79a8a9" + integrity sha512-ezLJzAslhW6HVTyZWpfBmrXY5/hz5XKT0FkYRS7lhnf56LwtVPUkLvLqGtDPuV8djF04meXxoRNO8jjtnQgYqA== + dependencies: + "@trezor/utils" "9.0.11" + bchaddrjs "^0.5.2" + bech32 "^2.0.0" + bip66 "^1.1.5" + bitcoin-ops "^1.4.1" + blake-hash "^2.0.0" + blakejs "^1.2.1" + bn.js "^5.2.1" + bs58 "^5.0.0" + bs58check "^3.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + int64-buffer "^1.0.1" + pushdata-bitcoin "^1.0.1" + tiny-secp256k1 "^1.1.6" + typeforce "^1.18.0" + varuint-bitcoin "^1.1.2" + wif "^2.0.6" + +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.3", "@types/babel__core@^7.1.7": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.8" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" + integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": + version "7.20.6" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" + integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== + dependencies: + "@babel/types" "^7.20.7" + +"@types/body-parser@*": + version "1.19.5" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" + integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/bonjour@^3.5.9": + version "3.5.13" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.13.tgz#adf90ce1a105e81dd1f9c61fdc5afda1bfb92956" + integrity sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ== + dependencies: + "@types/node" "*" + +"@types/cacheable-request@^6.0.1": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" + integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "^3.1.4" + "@types/node" "*" + "@types/responselike" "^1.0.0" + +"@types/connect-history-api-fallback@^1.3.5": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz#7de71645a103056b48ac3ce07b3520b819c1d5b3" + integrity sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.38" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== + dependencies: + "@types/node" "*" + +"@types/debug@^4.1.5": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== + dependencies: + "@types/ms" "*" + +"@types/eslint-scope@^3.7.0": + version "3.7.7" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" + integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "8.56.10" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.10.tgz#eb2370a73bf04a901eeba8f22595c7ee0f7eb58d" + integrity sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + +"@types/estree@^0.0.46": + version "0.0.46" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.46.tgz#0fb6bfbbeabd7a30880504993369c4bf1deab1fe" + integrity sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg== + +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": + version "4.19.3" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.3.tgz#e469a13e4186c9e1c0418fb17be8bc8ff1b19a7a" + integrity sha512-KOzM7MhcBFlmnlr/fzISFF5vGWVSvN6fTd4T+ExOt08bA/dA5kpSzY52nMsI1KDFmUREpJelPYyuslLRSjjgCg== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express@*", "@types/express@^4.17.13": + version "4.17.21" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" + integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/glob@^7.1.1": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/graceful-fs@^4.1.2": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== + dependencies: + "@types/node" "*" + +"@types/history@^4.7.11": + version "4.7.11" + resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.11.tgz#56588b17ae8f50c53983a524fc3cc47437969d64" + integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== + +"@types/hoist-non-react-statics@^3.3.0", "@types/hoist-non-react-statics@^3.3.1": + version "3.3.5" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz#dab7867ef789d87e2b4b0003c9d65c49cc44a494" + integrity sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + +"@types/html-minifier-terser@^5.0.0": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz#693b316ad323ea97eed6b38ed1a3cc02b1672b57" + integrity sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w== + +"@types/http-cache-semantics@*": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" + integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== + +"@types/http-errors@*": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" + integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== + +"@types/http-proxy@^1.17.8": + version "1.17.14" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.14.tgz#57f8ccaa1c1c3780644f8a94f9c6b5000b5e2eec" + integrity sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w== + dependencies: + "@types/node" "*" + +"@types/inquirer@^8.2.4": + version "8.2.10" + resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-8.2.10.tgz#9444dce2d764c35bc5bb4d742598aaa4acb6561b" + integrity sha512-IdD5NmHyVjWM8SHWo/kPBgtzXatwPkfwzyP3fN1jF2g9BWt5WO+8hL2F4o2GKIYsU40PpqeevuUWvkS/roXJkA== + dependencies: + "@types/through" "*" + rxjs "^7.2.0" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== + +"@types/istanbul-lib-report@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/keyv@^3.1.1", "@types/keyv@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + dependencies: + "@types/node" "*" + +"@types/ledgerhq__hw-transport@^4.21.3": + version "4.21.8" + resolved "https://registry.yarnpkg.com/@types/ledgerhq__hw-transport/-/ledgerhq__hw-transport-4.21.8.tgz#973fedb76ade14307fe85db336373a5a5da54f79" + integrity sha512-uO2AJYZUVCwgyqgyy2/KW+JsQaO0hcwDdubRaHgF2ehO0ngGAY41PbE8qnPnmUw1uerMXONvL68QFioA7Y6C5g== + dependencies: + "@types/node" "*" + +"@types/lodash@^4.14.136": + version "4.17.4" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.4.tgz#0303b64958ee070059e3a7184048a55159fe20b7" + integrity sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ== + +"@types/mdast@^3.0.0", "@types/mdast@^3.0.3": + version "3.0.15" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.15.tgz#49c524a263f30ffa28b71ae282f813ed000ab9f5" + integrity sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ== + dependencies: + "@types/unist" "^2" + +"@types/mime@^1": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" + integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== + +"@types/minimatch@*": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" + integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== + +"@types/minimist@^1.2.0": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e" + integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== + +"@types/mocha@^9.1.1": + version "9.1.1" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" + integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== + +"@types/ms@*": + version "0.7.34" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" + integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== + +"@types/node-forge@^1.3.0": + version "1.3.11" + resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.11.tgz#0972ea538ddb0f4d9c2fa0ec5db5724773a604da" + integrity sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ== + dependencies: + "@types/node" "*" + +"@types/node@*", "@types/node@>= 8", "@types/node@>=13.7.0": + version "20.14.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.2.tgz#a5f4d2bcb4b6a87bffcaa717718c5a0f208f4a18" + integrity sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q== + dependencies: + undici-types "~5.26.4" + +"@types/normalize-package-data@^2.4.0": + version "2.4.4" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" + integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== + +"@types/parse-json@^4.0.0": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" + integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== + +"@types/prettier@^2.0.0": + version "2.7.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" + integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== + +"@types/prop-types@*", "@types/prop-types@^15.7.11": + version "15.7.12" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" + integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== + +"@types/q@^1.5.1": + version "1.5.8" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.8.tgz#95f6c6a08f2ad868ba230ead1d2d7f7be3db3837" + integrity sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw== + +"@types/qs@*": + version "6.9.15" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.15.tgz#adde8a060ec9c305a82de1babc1056e73bd64dce" + integrity sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg== + +"@types/range-parser@*": + version "1.2.7" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" + integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== + +"@types/react-intl@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/react-intl/-/react-intl-3.0.0.tgz#a2cce0024b6cfe403be28ccf67f49d720fa810ec" + integrity sha512-k8F3d05XQGEqSWIfK97bBjZe4z9RruXU9Wa7OZ2iUC5pdeIpzuQDZe/9C2J3Xir5//ZtAkhcv08Wfx3n5TBTQg== + dependencies: + react-intl "*" + +"@types/react-redux@^7.1.20": + version "7.1.33" + resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.33.tgz#53c5564f03f1ded90904e3c90f77e4bd4dc20b15" + integrity sha512-NF8m5AjWCkert+fosDsN3hAlHzpjSiXlVy9EgQEmLoBhaNXbmyeGs/aj5dQzKuF+/q+S7JQagorGDW8pJ28Hmg== + dependencies: + "@types/hoist-non-react-statics" "^3.3.0" + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + redux "^4.0.0" + +"@types/react-router-dom@^5.3.3": + version "5.3.3" + resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83" + integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router" "*" + +"@types/react-router@*": + version "5.1.20" + resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.20.tgz#88eccaa122a82405ef3efbcaaa5dcdd9f021387c" + integrity sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + +"@types/react-transition-group@^4.4.10", "@types/react-transition-group@^4.4.5": + version "4.4.10" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.10.tgz#6ee71127bdab1f18f11ad8fb3322c6da27c327ac" + integrity sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q== + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@16 || 17 || 18": + version "18.3.3" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.3.tgz#9679020895318b0915d7a3ab004d92d33375c45f" + integrity sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw== + dependencies: + "@types/prop-types" "*" + csstype "^3.0.2" + +"@types/responselike@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50" + integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== + dependencies: + "@types/node" "*" + +"@types/retry@0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== + +"@types/schema-utils@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/schema-utils/-/schema-utils-1.0.0.tgz#295d36f01e2cb8bc3207ca1d9a68e210db6b40cb" + integrity sha512-YesPanU1+WCigC/Aj1Mga8UCOjHIfMNHZ3zzDsUY7lI8GlKnh/Kv2QwJOQ+jNQ36Ru7IfzSedlG14hppYaN13A== + +"@types/semver@^7.3.4": + version "7.5.8" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== + +"@types/send@*": + version "0.17.4" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" + integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/serve-index@^1.9.1": + version "1.9.4" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.4.tgz#e6ae13d5053cb06ed36392110b4f9a49ac4ec898" + integrity sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug== + dependencies: + "@types/express" "*" + +"@types/serve-static@*", "@types/serve-static@^1.13.10": + version "1.15.7" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" + integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== + dependencies: + "@types/http-errors" "*" + "@types/node" "*" + "@types/send" "*" + +"@types/sockjs@^0.3.33": + version "0.3.36" + resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535" + integrity sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q== + dependencies: + "@types/node" "*" + +"@types/stack-utils@^2.0.0": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== + +"@types/through@*": + version "0.0.33" + resolved "https://registry.yarnpkg.com/@types/through/-/through-0.0.33.tgz#14ebf599320e1c7851e7d598149af183c6b9ea56" + integrity sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ== + dependencies: + "@types/node" "*" + +"@types/tough-cookie@^4.0.2": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304" + integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== + +"@types/unist@^2", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": + version "2.0.10" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.10.tgz#04ffa7f406ab628f7f7e97ca23e290cd8ab15efc" + integrity sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA== + +"@types/w3c-web-usb@^1.0.6": + version "1.0.10" + resolved "https://registry.yarnpkg.com/@types/w3c-web-usb/-/w3c-web-usb-1.0.10.tgz#cf89cccd2d93b6245e784c19afe0a9f5038d4528" + integrity sha512-CHgUI5kTc/QLMP8hODUHhge0D4vx+9UiAwIGiT0sTy/B2XpdX1U5rJt6JSISgr6ikRT7vxV9EVAFeYZqUnl1gQ== + +"@types/web@^0.0.100": + version "0.0.100" + resolved "https://registry.yarnpkg.com/@types/web/-/web-0.0.100.tgz#174f5952c40ab0940b0aa04e76d2f2776005b8c6" + integrity sha512-8NDSrDsyF7qv93SQ7aNFk0NqpNb1QEC1meoEZW/+KGMHZWd0WOC2DiT9pVhS5+w5q+u9+2bkBCfUQpe9wbqiPA== + +"@types/ws@^7.2.0": + version "7.4.7" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" + integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== + dependencies: + "@types/node" "*" + +"@types/ws@^8.5.5": + version "8.5.10" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787" + integrity sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== + dependencies: + "@types/node" "*" + +"@types/yargs-parser@*": + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== + +"@types/yargs@^15.0.0": + version "15.0.19" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.19.tgz#328fb89e46109ecbdb70c295d96ff2f46dfd01b9" + integrity sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA== + dependencies: + "@types/yargs-parser" "*" + +"@vespaiach/axios-fetch-adapter@^0.3.0": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@vespaiach/axios-fetch-adapter/-/axios-fetch-adapter-0.3.1.tgz#b0c08167bec9cc558f578a1b9ccff52ead1cf1cb" + integrity sha512-+1F52VWXmQHSRFSv4/H0wtnxfvjRMPK5531e880MIjypPdUSX6QZuoDgEVeCE1vjhzDdxCVX7rOqkub7StEUwQ== + +"@webassemblyjs/ast@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.0.tgz#a5aa679efdc9e51707a4207139da57920555961f" + integrity sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + +"@webassemblyjs/floating-point-hex-parser@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz#34d62052f453cd43101d72eab4966a022587947c" + integrity sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA== + +"@webassemblyjs/helper-api-error@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz#aaea8fb3b923f4aaa9b512ff541b013ffb68d2d4" + integrity sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w== + +"@webassemblyjs/helper-buffer@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz#d026c25d175e388a7dbda9694e91e743cbe9b642" + integrity sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA== + +"@webassemblyjs/helper-numbers@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz#7ab04172d54e312cc6ea4286d7d9fa27c88cd4f9" + integrity sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.0" + "@webassemblyjs/helper-api-error" "1.11.0" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz#85fdcda4129902fe86f81abf7e7236953ec5a4e1" + integrity sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA== + +"@webassemblyjs/helper-wasm-section@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz#9ce2cc89300262509c801b4af113d1ca25c1a75b" + integrity sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew== + dependencies: + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-buffer" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/wasm-gen" "1.11.0" + +"@webassemblyjs/ieee754@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz#46975d583f9828f5d094ac210e219441c4e6f5cf" + integrity sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.0.tgz#f7353de1df38aa201cba9fb88b43f41f75ff403b" + integrity sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.0.tgz#86e48f959cf49e0e5091f069a709b862f5a2cadf" + integrity sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw== + +"@webassemblyjs/wasm-edit@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz#ee4a5c9f677046a210542ae63897094c2027cb78" + integrity sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ== + dependencies: + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-buffer" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/helper-wasm-section" "1.11.0" + "@webassemblyjs/wasm-gen" "1.11.0" + "@webassemblyjs/wasm-opt" "1.11.0" + "@webassemblyjs/wasm-parser" "1.11.0" + "@webassemblyjs/wast-printer" "1.11.0" + +"@webassemblyjs/wasm-gen@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz#3cdb35e70082d42a35166988dda64f24ceb97abe" + integrity sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ== + dependencies: + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/ieee754" "1.11.0" + "@webassemblyjs/leb128" "1.11.0" + "@webassemblyjs/utf8" "1.11.0" + +"@webassemblyjs/wasm-opt@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz#1638ae188137f4bb031f568a413cd24d32f92978" + integrity sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg== + dependencies: + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-buffer" "1.11.0" + "@webassemblyjs/wasm-gen" "1.11.0" + "@webassemblyjs/wasm-parser" "1.11.0" + +"@webassemblyjs/wasm-parser@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz#3e680b8830d5b13d1ec86cc42f38f3d4a7700754" + integrity sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw== + dependencies: + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-api-error" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/ieee754" "1.11.0" + "@webassemblyjs/leb128" "1.11.0" + "@webassemblyjs/utf8" "1.11.0" + +"@webassemblyjs/wast-printer@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz#680d1f6a5365d6d401974a8e949e05474e1fab7e" + integrity sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ== + dependencies: + "@webassemblyjs/ast" "1.11.0" + "@xtuc/long" "4.2.2" + +"@webpack-cli/configtest@^1.0.1": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.2.0.tgz#7b20ce1c12533912c3b217ea68262365fa29a6f5" + integrity sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg== + +"@webpack-cli/info@^1.2.2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.5.0.tgz#6c78c13c5874852d6e2dd17f08a41f3fe4c261b1" + integrity sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ== + dependencies: + envinfo "^7.7.3" + +"@webpack-cli/serve@^1.3.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.7.0.tgz#e1993689ac42d2b16e9194376cfb6753f6254db1" + integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q== + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +"@yoroi/api@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@yoroi/api/-/api-1.5.0.tgz#0f69ec1632b0fd91227c5a983b35e19ef386dec4" + integrity sha512-NDBooUvBn/1dk3wSF1elNhRxuxE5qSsqA6V6kcYPrb/vCWPQlom1T/zouPfT9Vfyc/eHDDZxz83/6dOIw3W4QA== + dependencies: + "@emurgo/cip14-js" "^3.0.1" + "@yoroi/common" "1.5.0" + axios "^1.5.0" + zod "^3.22.1" + +"@yoroi/api@1.5.1": + version "1.5.1" + resolved "https://registry.yarnpkg.com/@yoroi/api/-/api-1.5.1.tgz#079d2f0efa85ea1ce2a3e444a377fbf2e2d6f8d7" + integrity sha512-upwmeE1a9pdykkDMBRl1Ubwvb4YDWbK5M3OKHAA9b0iKivpblo+vhjOqyqfaaUqRR5GdCljkgvJuaJLYqd0PVA== + dependencies: + "@emurgo/cip14-js" "^3.0.1" + "@yoroi/common" "1.5.1" + axios "^1.5.0" + zod "^3.22.1" + +"@yoroi/common@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@yoroi/common/-/common-1.5.0.tgz#1c8714de630b1c1e2e6f8820bb29d155be511065" + integrity sha512-MSKqDSGQ8Iv18f2KCxkIl+I+nPHLww/2Y1jBiHvgaSEQ6MoN6rZsV+CIoPorSAhcc/mIiWX7gl3sdfU7trsiUQ== + dependencies: + axios "^1.5.0" + zod "^3.22.1" + +"@yoroi/common@1.5.1": + version "1.5.1" + resolved "https://registry.yarnpkg.com/@yoroi/common/-/common-1.5.1.tgz#0fca4c400e076e829acc44ef629eae1310b9e3b4" + integrity sha512-ifOdu0wOoXUqMAWfsK05UAQIBytUHK6W60P5gdcBDjg7s28IykxRP7h0MnbGocgV89p5Sdyd/10yb0eRh2o+Nw== + dependencies: + axios "^1.5.0" + zod "^3.22.1" + +"@yoroi/common@1.5.2": + version "1.5.2" + resolved "https://registry.yarnpkg.com/@yoroi/common/-/common-1.5.2.tgz#a768cf1e280697b41352eb92b5aff68c7ba76088" + integrity sha512-RBmWIqcZr7SrJTnbIhAlf4WzqGuaO6Lt+Bj/RkWlH0hFkETg7kqaXBmxrRN/ZrwngB+1XXXlRL2Zz21sqwLy/A== + dependencies: + "@yoroi/types" "1.5.4" + +"@yoroi/exchange@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@yoroi/exchange/-/exchange-2.0.1.tgz#f7b31c0662bcf7be89e6900e708a3c0e382c6677" + integrity sha512-NK2Z0ektfkiD73lRIQQDHmXg5L26rQ1K3YaLLElSCsnR2jFWxJNTCY/xpX9/y3pB+jtuIP6B0NxvHKM+6PK1GQ== + dependencies: + "@yoroi/common" "1.5.2" + "@yoroi/types" "1.5.4" + optionalDependencies: + "@react-native-async-storage/async-storage" "^1.19.3" + +"@yoroi/resolver@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@yoroi/resolver/-/resolver-2.0.2.tgz#dcf04f72cf1c7c00bd865fa1b5db928b53235425" + integrity sha512-Oc57u66flJOxJIkOWxLZQoiU9pfGPXfJLXGpsh8PCwMxhu18+EZM+CXTEbPHoX3cakGQbjnmjWcjNyBMh8gtig== + dependencies: + "@yoroi/api" "1.5.0" + "@yoroi/common" "1.5.0" + axios "^1.5.0" + zod "^3.22.2" + +"@yoroi/staking@^1.5.1": + version "1.5.1" + resolved "https://registry.yarnpkg.com/@yoroi/staking/-/staking-1.5.1.tgz#d77951f03d38ebb2b296af16ee7e541888c03169" + integrity sha512-CgJhPR7rf07QSstwdhPt5C+P8jNuZiqv3s4+ODlj8x60johIl6/5sz2vt+zGcx4R8pzFw1D/pDyFmdw0BDvzlg== + dependencies: + "@emurgo/cip14-js" "^3.0.1" + bech32 "^2.0.0" + bip39 "^3.1.0" + immer "^10.0.2" + optionalDependencies: + "@react-native-async-storage/async-storage" "^1.19.3" + +"@yoroi/swap@1.5.2": + version "1.5.2" + resolved "https://registry.yarnpkg.com/@yoroi/swap/-/swap-1.5.2.tgz#143435da53ac03e9fc7815e3c7cde1b5fe4f30c1" + integrity sha512-kC3ER0TfEd3fmxlAqQt/mzrFbd/JRyzHhXxPCkyQPzEX2sYMgZDJh+TJOwLpanSG71LwQHpY3YXDJJuzFJUnCQ== + dependencies: + "@emurgo/cip14-js" "^3.0.1" + "@yoroi/api" "1.5.1" + "@yoroi/common" "1.5.1" + immer "^10.0.2" + optionalDependencies: + "@react-native-async-storage/async-storage" "^1.19.3" + +"@yoroi/types@1.5.4": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@yoroi/types/-/types-1.5.4.tgz#6e2a1605785e828e5d5cf7f8bc7b8e344448aea5" + integrity sha512-Hk3YHG6glQcStNjkwgDI+pWfLNfFGk+N3Iz8Iv/t+8mVFU4tZy4ZQYwtx5IIRVTwrl62maGlH9/84rwXp2u3Yw== + +abab@^2.0.3, abab@^2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + +acorn-jsx@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn@^7.1.1, acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +acorn@^8.0.4, acorn@^8.2.4, acorn@^8.8.2: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +agent-base@6, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agentkeepalive@^4.1.3, agentkeepalive@^4.2.1: + version "4.5.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" + integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== + dependencies: + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv-keywords@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + +ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.0, ajv@^8.0.1, ajv@^8.9.0: + version "8.16.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.16.0.tgz#22e2a92b94f005f7e0f9c9d39652ef0b8f6f0cb4" + integrity sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw== + dependencies: + fast-deep-equal "^3.1.3" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.4.1" + +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0, ansi-escapes@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-html-community@0.0.8, ansi-html-community@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" + integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha512-JoAxEa1DfP9m2xfB/y2r/aKcwXNlltr4+0QSBC4TrLfcxyvepX2Pv0t/xpgGV5bGsDzCYV8SzjWgyCW0T9yYbA== + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== + +ansi-regex@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" + integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== + +ansi-regex@^5.0.0, ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0, ansi-styles@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansicolors@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" + integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg== + +antlr4ts@^0.5.0-alpha.4: + version "0.5.0-alpha.4" + resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" + integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@^3.0.3, anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +"aproba@^1.0.3 || ^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +archiver-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2" + integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw== + dependencies: + glob "^7.1.4" + graceful-fs "^4.2.0" + lazystream "^1.0.0" + lodash.defaults "^4.2.0" + lodash.difference "^4.5.0" + lodash.flatten "^4.4.0" + lodash.isplainobject "^4.0.6" + lodash.union "^4.6.0" + normalize-path "^3.0.0" + readable-stream "^2.0.0" + +archiver@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-3.1.1.tgz#9db7819d4daf60aec10fe86b16cb9258ced66ea0" + integrity sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg== + dependencies: + archiver-utils "^2.1.0" + async "^2.6.3" + buffer-crc32 "^0.2.1" + glob "^7.1.4" + readable-stream "^3.4.0" + tar-stream "^2.1.0" + zip-stream "^2.1.2" + +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +"argparse@~ 0.1.11": + version "0.1.16" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-0.1.16.tgz#cfd01e0fbba3d6caed049fbd758d40f65196f57c" + integrity sha512-LjmC2dNpdn2L4UzyoaIr11ELYoLn37ZFy9zObrQFHsSuOepeUEMKnM8w5KL4Tnrp2gy88rRuQt6Ky8Bjml+Baw== + dependencies: + underscore "~1.7.0" + underscore.string "~2.4.0" + +aria-query@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" + integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== + dependencies: + "@babel/runtime" "^7.10.2" + "@babel/runtime-corejs3" "^7.10.2" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== + +array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== + dependencies: + call-bind "^1.0.5" + is-array-buffer "^3.0.4" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-includes@^3.1.1, array-includes@^3.1.6: + version "3.1.8" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" + integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== + +array.prototype.flat@^1.2.3, array.prototype.flat@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.2.3: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.reduce@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz#6aadc2f995af29cb887eb866d981dc85ab6f7dc7" + integrity sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-array-method-boxes-properly "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + is-string "^1.0.7" + +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" + is-shared-array-buffer "^1.0.2" + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== + +asn1.js@^4.10.1: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +asn1@^0.2.4: + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert@2.1.0, assert@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-2.1.0.tgz#6d92a238d05dc02e7427c881fb8be81c8448b2dd" + integrity sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw== + dependencies: + call-bind "^1.0.2" + is-nan "^1.3.2" + object-is "^1.1.5" + object.assign "^4.1.4" + util "^0.12.5" + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== + +ast-types-flow@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async-foreach@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" + integrity sha512-VUeSMD8nEGBWaZK4lizI1sf3yEC7pnAQ/mrI7pC2fBz2s/tq5jWWEngTwaf0Gruu/OoXRGLGg1XFqpYBiGTYJA== + +async-mutex@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.5.0.tgz#353c69a0b9e75250971a64ac203b0ebfddd75482" + integrity sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA== + dependencies: + tslib "^2.4.0" + +async@^2.6.3: + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +atob-lite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696" + integrity sha512-LEeSAWeh2Gfa2FtlQE1shxQ8zi5F9GHarrGKz08TMdODD5T4eH6BMsvtnhbWZ+XQn+Gb6om/917ucvRu7l7ukw== + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +autoprefixer@10.2.4: + version "10.2.4" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.2.4.tgz#c0e7cf24fcc6a1ae5d6250c623f0cb8beef2f7e1" + integrity sha512-DCCdUQiMD+P/as8m3XkeTUkUKuuRqLGcwD0nll7wevhqoJfMRpJlkFd1+MQh1pvupjiQuip42lc/VFvfUTMSKw== + dependencies: + browserslist "^4.16.1" + caniuse-lite "^1.0.30001181" + colorette "^1.2.1" + fraction.js "^4.0.13" + normalize-range "^0.1.2" + postcss-value-parser "^4.1.0" + +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + +axe-core@^4.0.2: + version "4.9.1" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.9.1.tgz#fcd0f4496dad09e0c899b44f6c4bb7848da912ae" + integrity sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw== + +axios@0.21.1: + version "0.21.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" + integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== + dependencies: + follow-redirects "^1.10.0" + +axios@^0.24.0: + version "0.24.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.24.0.tgz#804e6fa1e4b9c5288501dd9dff56a7a0940d20d6" + integrity sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA== + dependencies: + follow-redirects "^1.14.4" + +axios@^0.27.2: + version "0.27.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" + integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== + dependencies: + follow-redirects "^1.14.9" + form-data "^4.0.0" + +axios@^1.5.0: + version "1.7.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.2.tgz#b625db8a7051fbea61c35a3cbb3a1daa7b9c7621" + integrity sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +axobject-query@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" + integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== + +b4a@^1.0.1: + version "1.6.6" + resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.6.tgz#a4cc349a3851987c3c4ac2d7785c18744f6da9ba" + integrity sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg== + +babel-eslint@11.0.0-beta.2: + version "11.0.0-beta.2" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-11.0.0-beta.2.tgz#de1f06795aa0d8cedcf6ac943e63056f5b4a7048" + integrity sha512-D2tunrOu04XloEdU2XVUminUu25FILlGruZmffqH5OSnLDhCheKNvUoM1ihrexdUvhizlix8bjqRnsss4V/UIQ== + dependencies: + eslint-scope "5.0.0" + eslint-visitor-keys "^1.1.0" + semver "^6.3.0" + +babel-helper-is-react-class@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/babel-helper-is-react-class/-/babel-helper-is-react-class-1.0.0.tgz#ef6f3678b05c76dbdeedadead7af98c2724d8431" + integrity sha512-9rulVgj7gg5/m33Z2zcYov042fe4WcNDGT52M0S5RjiNREg6Izreo/beEdAAiQTSnkb6/tzJ5c2cNaZN3fYHVw== + +babel-jest@26.6.3, babel-jest@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" + integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== + dependencies: + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/babel__core" "^7.1.7" + babel-plugin-istanbul "^6.0.0" + babel-preset-jest "^26.6.2" + chalk "^4.0.0" + graceful-fs "^4.2.4" + slash "^3.0.0" + +babel-loader@8.2.2: + version "8.2.2" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" + integrity sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g== + dependencies: + find-cache-dir "^3.3.1" + loader-utils "^1.4.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" + +babel-plugin-add-module-exports@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-1.0.4.tgz#6caa4ddbe1f578c6a5264d4d3e6c8a2720a7ca2b" + integrity sha512-g+8yxHUZ60RcyaUpfNzy56OtWW+x9cyEe9j+CranqLiqbju2yf/Cy6ZtYK40EZxtrdHllzlVZgLmcOUCTlJ7Jg== + +babel-plugin-dynamic-import-node@2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-istanbul@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" + integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" + "@types/babel__traverse" "^7.0.6" + +babel-plugin-macros@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" + integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== + dependencies: + "@babel/runtime" "^7.12.5" + cosmiconfig "^7.0.0" + resolve "^1.19.0" + +babel-plugin-module-resolver@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-4.1.0.tgz#22a4f32f7441727ec1fbf4967b863e1e3e9f33e2" + integrity sha512-MlX10UDheRr3lb3P0WcaIdtCSRlxdQsB1sBqL7W0raF070bGl1HQQq5K3T2vf2XAYie+ww+5AKC/WrkjRO2knA== + dependencies: + find-babel-config "^1.2.0" + glob "^7.1.6" + pkg-up "^3.1.0" + reselect "^4.0.0" + resolve "^1.13.1" + +babel-plugin-nameof-js@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/babel-plugin-nameof-js/-/babel-plugin-nameof-js-0.0.2.tgz#7c9aa8af0026bd9e355004235a337c132753fdf3" + integrity sha512-QEChcRcANBjM9PcFb8JvuD/OaYY326sxzEcmAVkdJjvRcTapv3JLfFA79fC5RCyVbHoVcBUjGycrZnvmb+8Icw== + +babel-plugin-polyfill-corejs2@^0.4.10: + version "0.4.11" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" + integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== + dependencies: + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.6.2" + semver "^6.3.1" + +babel-plugin-polyfill-corejs3@^0.10.4: + version "0.10.4" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz#789ac82405ad664c20476d0233b485281deb9c77" + integrity sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.1" + core-js-compat "^3.36.1" + +babel-plugin-polyfill-regenerator@^0.6.1: + version "0.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" + integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.2" + +babel-plugin-react-intl@5.1.18: + version "5.1.18" + resolved "https://registry.yarnpkg.com/babel-plugin-react-intl/-/babel-plugin-react-intl-5.1.18.tgz#7713c1fdf0055b606d67e2d1624a2e583a1fcdb7" + integrity sha512-tzzZoGDNQOiHmGFh+NPQJDpC10RbKlfw1CBVfALulqRa6UGkAv5eMs9sirxjhD3HryHPbYZ4x5FNdbzOyG2GJw== + dependencies: + "@babel/core" "^7.7.2" + "@babel/helper-plugin-utils" "^7.0.0" + "@types/babel__core" "^7.1.3" + "@types/schema-utils" "^1.0.0" + fs-extra "^8.1.0" + intl-messageformat-parser "^3.6.4" + schema-utils "^2.2.0" + +babel-plugin-transform-react-constant-elements@^6.5.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-constant-elements/-/babel-plugin-transform-react-constant-elements-6.23.0.tgz#2f119bf4d2cdd45eb9baaae574053c604f6147dd" + integrity sha512-22TG15ONh0FWXj98Y5KOpMmEfDIMJa66rg58LzxssT0LUEFN8utkM1NmBEBx1WKkJFa6spK9aR4yLbDQntPxhg== + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-react-inline-elements@^6.6.5: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-inline-elements/-/babel-plugin-transform-react-inline-elements-6.22.0.tgz#6687211a32b49a52f22c573a2b5504a25ef17c53" + integrity sha512-+MtsC5c6n97B7+Ai76yJK9IZR/BLuTT5nljbNEC3iQ9ukaNOKqJG42WnOtLkVs6n52Tazpe7hwK0Ngn/2NoOYQ== + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-react-pure-class-to-function@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-pure-class-to-function/-/babel-plugin-transform-react-pure-class-to-function-1.0.1.tgz#32a649c97d653250b419cfd1489331b0290d9ee4" + integrity sha512-gKq6ZjnblsWqlDazV8u3JU/gIovFa1XyCqwqJAfR+C/k1FiSYISKKI9L2bSYKOMX3Yn5QUKIVX23uE3kNTaQkg== + dependencies: + babel-helper-is-react-class "^1.0.0" + +babel-plugin-transform-react-remove-prop-types@^0.2.5: + version "0.2.12" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.2.12.tgz#3406696df0b8b456089f9d726d27e7e123d2f929" + integrity sha512-vvo7Bj6fAcs41BegHABNBe4fDArkjwXkoGIwb77+WwCBxArPgYNDnaD3d3HdcNrP2F75oigEBEkPpAb5EMuaQA== + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" + integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== + dependencies: + babel-plugin-jest-hoist "^26.6.2" + babel-preset-current-node-syntax "^1.0.0" + +babel-preset-react-optimize@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-react-optimize/-/babel-preset-react-optimize-1.0.1.tgz#c23509fba7cbc76d7de7050e7d26bcd22bc304e8" + integrity sha512-tmB6WqvJ137CQ5a4c4tYHutAc05EQi0zr1hj55Lmqiseg6gYWrE4J5r55eRJkJNVVkjxpvIDkVbAcdSbT8b5Sw== + dependencies: + babel-plugin-transform-react-constant-elements "^6.5.0" + babel-plugin-transform-react-inline-elements "^6.6.5" + babel-plugin-transform-react-pure-class-to-function "^1.0.1" + babel-plugin-transform-react-remove-prop-types "^0.2.5" + +babel-runtime@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g== + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +bail@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" + integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== + +balanced-match@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + integrity sha512-STw03mQKnGUYtoNjmowo4F2cRmIIxYEGiMsjjwla/u5P1lxadj/05WkNaFjNiKTgJkj8KiXbgAiRTmcQRwQNtg== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-x@^3.0.2, base-x@^3.0.5, base-x@^3.0.9: + version "3.0.9" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" + integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== + dependencies: + safe-buffer "^5.0.1" + +base-x@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-4.0.0.tgz#d0e3b7753450c73f8ad2389b5c018a4af7b2224a" + integrity sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== + +bchaddrjs@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/bchaddrjs/-/bchaddrjs-0.5.2.tgz#1f52b5077329774e7c82d4882964628106bb11a0" + integrity sha512-OO7gIn3m7ea4FVx4cT8gdlWQR2+++EquhdpWQJH9BQjK63tJJ6ngB3QMZDO6DiBoXiIGUsTPHjlrHVxPGcGxLQ== + dependencies: + bs58check "2.1.2" + buffer "^6.0.3" + cashaddrjs "0.4.4" + stream-browserify "^3.0.0" + +bech32@2.0.0, bech32@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-2.0.0.tgz#078d3686535075c8c79709f054b1b226a133b355" + integrity sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg== + +bech32@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + +before-after-hook@^2.0.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" + integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== + +big-integer@1.6.36: + version "1.6.36" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.36.tgz#78631076265d4ae3555c04f85e7d9d2f3a071a36" + integrity sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg== + +big-integer@^1.6.16, big-integer@^1.6.17, big-integer@^1.6.48: + version "1.6.52" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85" + integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg== + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +bignumber.js@9.1.2, bignumber.js@^9.0.0, bignumber.js@^9.0.1, bignumber.js@^9.1.0, bignumber.js@^9.1.1: + version "9.1.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" + integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== + +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + +binary@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" + integrity sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg== + dependencies: + buffers "~0.1.1" + chainsaw "~0.1.0" + +bindings@^1.2.1, bindings@^1.3.0, bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bip32@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/bip32/-/bip32-4.0.0.tgz#7fac3c05072188d2d355a4d6596b37188f06aa2f" + integrity sha512-aOGy88DDlVUhspIXJN+dVEtclhIsfAUppD43V0j40cPTld3pv/0X/MlrZSZ6jowIaQQzFwP8M6rFU2z2mVYjDQ== + dependencies: + "@noble/hashes" "^1.2.0" + "@scure/base" "^1.1.1" + typeforce "^1.11.5" + wif "^2.0.6" + +bip39@3.1.0, bip39@^3.0.4, bip39@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bip39/-/bip39-3.1.0.tgz#c55a418deaf48826a6ceb34ac55b3ee1577e18a3" + integrity sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A== + dependencies: + "@noble/hashes" "^1.2.0" + +bip66@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/bip66/-/bip66-1.1.5.tgz#01fa8748785ca70955d5011217d1b3139969ca22" + integrity sha512-nemMHz95EmS38a26XbbdxIYj5csHd3RMP3H5bwQknX0WYHF01qhpufP42mLOwVICuH2JmhIhXiWs89MfUGL7Xw== + dependencies: + safe-buffer "^5.0.1" + +bitcoin-ops@^1.3.0, bitcoin-ops@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/bitcoin-ops/-/bitcoin-ops-1.4.1.tgz#e45de620398e22fd4ca6023de43974ff42240278" + integrity sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow== + +bl@^4.0.3, bl@^4.1.0: + 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" + +blake-hash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/blake-hash/-/blake-hash-2.0.0.tgz#af184dce641951126d05b7d1c3de3224f538d66e" + integrity sha512-Igj8YowDu1PRkRsxZA7NVkdFNxH5rKv5cpLxQ0CVXSIA77pVYwCPRQJ2sMew/oneUpfuYRyjG6r8SmmmnbZb1w== + dependencies: + node-addon-api "^3.0.0" + node-gyp-build "^4.2.2" + readable-stream "^3.6.0" + +blake2@^4.0.2: + version "4.1.1" + resolved "https://registry.yarnpkg.com/blake2/-/blake2-4.1.1.tgz#0c23524776ebbf76b3ffecb6fa73422a33f20526" + integrity sha512-HUmkY0MUDUVgejJVNrpNKAva8C4IWD/Rd862sdexoSibu86b6iu0gO0/RjovO2lM5+w6JqjIEmkuAgGhfHlnJw== + dependencies: + nan "^2.15.0" + +blake2b-wasm@^1.1.0: + version "1.1.7" + resolved "https://registry.yarnpkg.com/blake2b-wasm/-/blake2b-wasm-1.1.7.tgz#e4d075da10068e5d4c3ec1fb9accc4d186c55d81" + integrity sha512-oFIHvXhlz/DUgF0kq5B1CqxIDjIJwh9iDeUUGQUcvgiGz7Wdw03McEO7CfLBy7QKGdsydcMCgO9jFNBAFCtFcA== + dependencies: + nanoassert "^1.0.0" + +blake2b-wasm@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/blake2b-wasm/-/blake2b-wasm-2.4.0.tgz#9115649111edbbd87eb24ce7c04b427e4e2be5be" + integrity sha512-S1kwmW2ZhZFFFOghcx73+ZajEfKBqhP82JMssxtLVMxlaPea1p9uoLiUZ5WYyHn0KddwbLc+0vh4wR0KBNoT5w== + dependencies: + b4a "^1.0.1" + nanoassert "^2.0.0" + +blake2b@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/blake2b/-/blake2b-2.1.3.tgz#f5388be424768e7c6327025dad0c3c6d83351bca" + integrity sha512-pkDss4xFVbMb4270aCyGD3qLv92314Et+FsKzilCLxDz5DuZ2/1g3w4nmBbu6nKApPspnjG7JcwTjGZnduB1yg== + dependencies: + blake2b-wasm "^1.1.0" + nanoassert "^1.0.0" + +blake2b@2.1.4, blake2b@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/blake2b/-/blake2b-2.1.4.tgz#817d278526ddb4cd673bfb1af16d1ad61e393ba3" + integrity sha512-AyBuuJNI64gIvwx13qiICz6H6hpmjvYS5DGkG6jbXMOT8Z3WUJ3V1X0FlhIoT1b/5JtHE3ki+xjtMvu1nn+t9A== + dependencies: + blake2b-wasm "^2.4.0" + nanoassert "^2.0.0" + +blakejs@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" + integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== + +bluebird@~3.4.1: + version "3.4.7" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" + integrity sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.8, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +body-parser@1.20.2: + version "1.20.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" + integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== + dependencies: + bytes "3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + +bonjour-service@^1.0.11: + version "1.2.1" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.2.1.tgz#eb41b3085183df3321da1264719fbada12478d02" + integrity sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw== + dependencies: + fast-deep-equal "^3.1.3" + multicast-dns "^7.2.5" + +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +broadcast-channel@^3.4.1: + version "3.7.0" + resolved "https://registry.yarnpkg.com/broadcast-channel/-/broadcast-channel-3.7.0.tgz#2dfa5c7b4289547ac3f6705f9c00af8723889937" + integrity sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg== + dependencies: + "@babel/runtime" "^7.7.2" + detect-node "^2.1.0" + js-sha3 "0.8.0" + microseconds "0.2.0" + nano-time "1.0.0" + oblivious-set "1.0.0" + rimraf "3.0.2" + unload "2.2.0" + +brorand@^1.0.1, brorand@^1.0.5, brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +browserify-aes@^1.0.4, browserify-aes@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== + dependencies: + bn.js "^5.0.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.3.tgz#7afe4c01ec7ee59a89a558a4b75bd85ae62d4208" + integrity sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw== + dependencies: + bn.js "^5.2.1" + browserify-rsa "^4.1.0" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.5" + hash-base "~3.0" + inherits "^2.0.4" + parse-asn1 "^5.1.7" + readable-stream "^2.3.8" + safe-buffer "^5.2.1" + +browserify-zlib@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@^4.14.5, browserslist@^4.16.1, browserslist@^4.22.2, browserslist@^4.23.0: + version "4.23.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== + dependencies: + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" + +bs58@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== + dependencies: + base-x "^3.0.2" + +bs58@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-5.0.0.tgz#865575b4d13c09ea2a84622df6c8cbeb54ffc279" + integrity sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ== + dependencies: + base-x "^4.0.0" + +bs58check@2.1.2, bs58check@<3.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" + +bs58check@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-3.0.1.tgz#2094d13720a28593de1cba1d8c4e48602fdd841c" + integrity sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ== + dependencies: + "@noble/hashes" "^1.2.0" + bs58 "^5.0.0" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +btoa-lite@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" + integrity sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA== + +buffer-crc32@0.2.13, buffer-crc32@^0.2.1, buffer-crc32@^0.2.13: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-indexof-polyfill@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz#d2732135c5999c64b277fcf9b1abe3498254729c" + integrity sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== + +buffer@6.0.3, buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +buffer@^5.0.8, buffer@^5.1.0, buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +buffers@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" + integrity sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ== + +byline@5.x: + version "5.0.0" + resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" + integrity sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q== + +byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/byte-length/-/byte-length-1.0.2.tgz#ba5a5909240b0121c079b7f7b15248d6f08223cc" + integrity sha512-ovBpjmsgd/teRmgcPh23d4gJvxDoXtAzEL9xTfMU8Yc2kqCDb7L9jAG0XHl1nzuGl+h3ebCIF1i62UFyA9V/2Q== + +bytebuffer@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/bytebuffer/-/bytebuffer-5.0.1.tgz#582eea4b1a873b6d020a48d58df85f0bba6cfddd" + integrity sha512-IuzSdmADppkZ6DlpycMkm8l9zeEq16fWtLvunEwFiYciR/BHo4E8/xs5piFquG+Za8OWmMqHF8zuRviz2LHvRQ== + dependencies: + long "~3" + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacache@^15.0.3, cacache@^15.2.0: + version "15.3.0" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" + integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== + dependencies: + "@npmcli/fs" "^1.0.0" + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.0.2" + unique-filename "^1.1.1" + +cacache@^16.1.0: + version "16.1.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" + integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== + dependencies: + "@npmcli/fs" "^2.1.0" + "@npmcli/move-file" "^2.0.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + glob "^8.0.1" + infer-owner "^1.0.4" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^9.0.0" + tar "^6.1.11" + unique-filename "^2.0.0" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +cacheable-lookup@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-2.0.1.tgz#87be64a18b925234875e10a9bb1ebca4adce6b38" + integrity sha512-EMMbsiOTcdngM/K6gV/OxF2x0t07+vMOWxZNSCRQMjO2MY2nhZQ6OYhOOpyQrbhqsgtvKGI7hcq6xjnA92USjg== + dependencies: + "@types/keyv" "^3.1.1" + keyv "^4.0.0" + +cacheable-request@^7.0.1: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" + integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.0.0, camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001181, caniuse-lite@^1.0.30001587: + version "1.0.30001629" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001629.tgz#907a36f4669031bd8a1a8dbc2fa08b29e0db297e" + integrity sha512-c3dl911slnQhmxUIT4HhYzT7wnBK/XYpGnYLOj4nJBaRiw52Ibe7YxlDaAeRECvA786zCuExhxIUJ2K7nHMrBw== + +canvas-renderer@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/canvas-renderer/-/canvas-renderer-2.2.1.tgz#c1d131f78a9799aca8af9679ad0a005052b65550" + integrity sha512-RrBgVL5qCEDIXpJ6NrzyRNoTnXxYarqm/cS/W6ERhUJts5UQtt/XPEosGN3rqUkZ4fjBArlnCbsISJ+KCFnIAg== + dependencies: + "@types/node" "*" + +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== + dependencies: + rsvp "^4.8.4" + +cardano-wallet-browser@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cardano-wallet-browser/-/cardano-wallet-browser-1.2.2.tgz#f3baf82abedb8b403fc2f79c8b71b2f3ab800fd0" + integrity sha512-KogurUQeo/jiaHkB+TJygawTHPMPVjLvj8c5OjnxS7jQL7mTAqwMnrWrsFYX0iBb6mqFy5DhwNR4Kco/RoLMaQ== + +cardano-wallet@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cardano-wallet/-/cardano-wallet-1.2.2.tgz#b04d8605ee272b86ee51ceee45cffe7fd2f2689b" + integrity sha512-G3nq0CDOQLph6cdeDj4Ienkjf0WTJOC5f8mnxgi8BGO68Qx9oCLjK6gIwJr2WXisCUTK+m21KvLQxHuw1zEmug== + +cardinal@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" + integrity sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw== + dependencies: + ansicolors "~0.3.2" + redeyed "~2.1.0" + +cashaddrjs@0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cashaddrjs/-/cashaddrjs-0.4.4.tgz#169f1ae620d325db77700273d972282adeeee331" + integrity sha512-xZkuWdNOh0uq/mxJIng6vYWfTowZLd9F4GMAlp2DwFHlcCqCm91NtuAc47RuV4L7r4PYcY5p6Cr2OKNb4hnkWA== + dependencies: + big-integer "1.6.36" + +cbor@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" + integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== + dependencies: + nofilter "^3.1.0" + +chacha-native@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/chacha-native/-/chacha-native-2.0.3.tgz#435259a015a46816d1bc11376bd4c09e35c4bf5f" + integrity sha512-93h+osfjhR2sMHAaapTLlL/COoBPEZ6upicPBQ4GfUyadoMb8t9/M0PKK8kC+F+DEA/Oy3Kg9w3HzY3J1foP3g== + dependencies: + bindings "^1.2.1" + inherits "^2.0.1" + nan "^2.4.0" + +chacha@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/chacha/-/chacha-2.1.0.tgz#f4d57c8768a1b4206e9967f858b48da7dd28eaa6" + integrity sha512-FhVtqaZOiHlOKUkAWfDlJ+oe/O8iPQbCC0pFXJqphr4YQBCZPXa8Mv3j35+W4eWFWCoTUcW2u5IWDDkknygvVA== + dependencies: + inherits "^2.0.1" + readable-stream "^1.0.33" + optionalDependencies: + chacha-native "^2.0.0" + +chai-as-promised@7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0" + integrity sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA== + dependencies: + check-error "^1.0.2" + +chai@4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.0.tgz#5523a5faf7f819c8a92480d70a8cccbadacfc25f" + integrity sha512-/BFd2J30EcOwmdOgXvVsmM48l0Br0nmZPlO0uOW4XKh6kpsUumRXBgPV+IlaqFaqr9cYbeoZAM1Npx0i4A+aiA== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^3.0.1" + get-func-name "^2.0.0" + pathval "^1.1.0" + type-detect "^4.0.5" + +chainsaw@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" + integrity sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ== + dependencies: + traverse ">=0.3.0 <0.4" + +chalk@^2.1.0, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +character-entities-legacy@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" + integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== + +character-entities@^1.0.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" + integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== + +character-reference-invalid@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" + integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +charenc@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== + +check-error@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" + integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== + dependencies: + get-func-name "^2.0.2" + +chokidar@3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chokidar@^3.5.3: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +chrome-trace-event@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" + integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +cjs-module-lexer@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" + integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +classnames@2.5.1, classnames@^2.2.5: + version "2.5.1" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" + integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== + +clean-css@^4.2.3: + version "4.2.4" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.4.tgz#733bf46eba4e607c6891ea57c24a989356831178" + integrity sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A== + dependencies: + source-map "~0.6.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +clean-stack@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-3.0.1.tgz#155bf0b2221bf5f4fba89528d24c5953f17fe3a8" + integrity sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg== + dependencies: + escape-string-regexp "4.0.0" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-progress@^3.4.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/cli-progress/-/cli-progress-3.12.0.tgz#807ee14b66bcc086258e444ad0f19e7d42577942" + integrity sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A== + dependencies: + string-width "^4.2.3" + +cli-spinners@^2.2.0, cli-spinners@^2.5.0: + version "2.9.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + +cli-ux@^5.2.1, cli-ux@^5.5.1: + version "5.6.7" + resolved "https://registry.yarnpkg.com/cli-ux/-/cli-ux-5.6.7.tgz#32ef9e6cb2b457be834280cc799028a11c8235a8" + integrity sha512-dsKAurMNyFDnO6X1TiiRNiVbL90XReLKcvIq4H777NMqXGBxBws23ag8ubCJE97vVZEgWG2eSUhsyLf63Jv8+g== + dependencies: + "@oclif/command" "^1.8.15" + "@oclif/errors" "^1.3.5" + "@oclif/linewrap" "^1.0.0" + "@oclif/screen" "^1.0.4" + ansi-escapes "^4.3.0" + ansi-styles "^4.2.0" + cardinal "^2.1.1" + chalk "^4.1.0" + clean-stack "^3.0.0" + cli-progress "^3.4.0" + extract-stack "^2.0.0" + fs-extra "^8.1" + hyperlinker "^1.0.0" + indent-string "^4.0.0" + is-wsl "^2.2.0" + js-yaml "^3.13.1" + lodash "^4.17.21" + natural-orderby "^2.0.1" + object-treeify "^1.1.4" + password-prompt "^1.1.2" + semver "^7.3.2" + string-width "^4.2.0" + strip-ansi "^6.0.0" + supports-color "^8.1.0" + supports-hyperlinks "^2.1.0" + tslib "^2.0.0" + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +client-oauth2@^4.3.3: + version "4.3.3" + resolved "https://registry.yarnpkg.com/client-oauth2/-/client-oauth2-4.3.3.tgz#7a700e6f4bf412c1f96da0d6b50e07676561e086" + integrity sha512-k8AvUYJon0vv75ufoVo4nALYb/qwFFicO3I0+39C6xEdflqVtr+f9cy+0ZxAduoVSTfhP5DX2tY2XICAd5hy6Q== + dependencies: + popsicle "^12.0.5" + safe-buffer "^5.2.0" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +clsx@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" + integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== + +clsx@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" + integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" + +collect-v8-coverage@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" + integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@^1.1.4, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +colorette@^1.2.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" + integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== + +colorette@^2.0.10: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + +colors@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^4.0.1, commander@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +commander@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" + integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== + +commander@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +common-path-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" + integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +component-emitter@^1.2.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.1.tgz#ef1d5796f7d93f135ee6fb684340b26403c97d17" + integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ== + +compress-commons@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-2.1.1.tgz#9410d9a534cf8435e3fbbb7c6ce48de2dc2f0610" + integrity sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q== + dependencies: + buffer-crc32 "^0.2.13" + crc32-stream "^3.0.1" + normalize-path "^3.0.0" + readable-stream "^2.3.6" + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +compute-scroll-into-view@^1.0.17: + version "1.0.20" + resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz#1768b5522d1172754f5d0c9b02de3af6be506a43" + integrity sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +concurrently@8.2.2: + version "8.2.2" + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-8.2.2.tgz#353141985c198cfa5e4a3ef90082c336b5851784" + integrity sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg== + dependencies: + chalk "^4.1.2" + date-fns "^2.30.0" + lodash "^4.17.21" + rxjs "^7.8.1" + shell-quote "^1.8.1" + spawn-command "0.0.2" + supports-color "^8.1.1" + tree-kill "^1.2.2" + yargs "^17.7.2" + +conf@^6.2.0: + version "6.2.4" + resolved "https://registry.yarnpkg.com/conf/-/conf-6.2.4.tgz#49d23c4e21ef2ac2860f7b5ed25b7b7e484f769f" + integrity sha512-GjgyPRLo1qK1LR9RWAdUagqo+DP18f5HWCFk4va7GS+wpxQTOzfuKTwKOvGW2c01/YXNicAyyoyuSddmdkBzZQ== + dependencies: + ajv "^6.10.2" + debounce-fn "^3.0.1" + dot-prop "^5.0.0" + env-paths "^2.2.0" + json-schema-typed "^7.0.1" + make-dir "^3.0.0" + onetime "^5.1.0" + pkg-up "^3.0.1" + semver "^6.2.0" + write-file-atomic "^3.0.0" + +config-webpack@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/config-webpack/-/config-webpack-1.0.4.tgz#4768875d7394c799a135f9b6673be17e5ec04a1f" + integrity sha512-7Eb3HfaS855sW01JUwldttWflh3UejJn/ZRfDPCSyv4p/ao8eHyGrfIR5Lyerbl5CHTEEKIRwArXPXJHIQ2X3g== + +config@1.31.0: + version "1.31.0" + resolved "https://registry.yarnpkg.com/config/-/config-1.31.0.tgz#ab08aeba6536015d220cd0afe14b3e0501082542" + integrity sha512-Ep/l9Rd1J9IPueztJfpbOqVzuKHQh4ZODMNt9xqTYdBBNRXbV4oTu34kCkkfdRVcDq0ohtpaeXGgb+c0LQxFRA== + dependencies: + json5 "^1.0.1" + +confusing-browser-globals@^1.0.10: + version "1.0.11" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" + integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== + +connect-history-api-fallback@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" + integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== + +console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha512-OKZnPGeMQy2RPaUIBPFFd71iNf4791H12MCRuVQDnzGRwCYNYmTDy5pdafo2SLAcEMKzTOQnLWG4QdcjeJUMEg== + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@^1.0.4, content-type@~1.0.4, content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" + integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== + +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== + +copy-to-clipboard@^3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0" + integrity sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA== + dependencies: + toggle-selection "^1.0.6" + +copy-webpack-plugin@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-6.0.0.tgz#98eeb1aa2e7189b6e73ec876404c5c05e51828b3" + integrity sha512-tM6DhoJm8jvkHLjH62r5NHKSxmtyHYWOwWTkLWEZYHbxEH0Aele2pGRZ2HSDJb8Rdb/BcYWYFiJXTzHt377fPg== + dependencies: + cacache "^15.0.3" + find-cache-dir "^3.3.1" + glob-parent "^5.1.1" + globby "^11.0.0" + loader-utils "^2.0.0" + normalize-path "^3.0.0" + p-limit "^2.3.0" + schema-utils "^2.6.6" + serialize-javascript "^3.0.0" + webpack-sources "^1.4.3" + +core-js-compat@^3.31.0, core-js-compat@^3.36.1, core-js-compat@^3.8.0: + version "3.37.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.37.1.tgz#c844310c7852f4bdf49b8d339730b97e17ff09ee" + integrity sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg== + dependencies: + browserslist "^4.23.0" + +core-js-pure@^3.0.0, core-js-pure@^3.23.3, core-js-pure@^3.30.2: + version "3.37.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.37.1.tgz#2b4b34281f54db06c9a9a5bd60105046900553bd" + integrity sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA== + +core-js@^2.4.0, core-js@^2.6.10: + version "2.6.12" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== + +core-js@^3.2.1: + version "3.37.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.37.1.tgz#d21751ddb756518ac5a00e4d66499df981a62db9" + integrity sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cosmiconfig@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +crc32-stream@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-3.0.1.tgz#cae6eeed003b0e44d739d279de5ae63b171b4e85" + integrity sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w== + dependencies: + crc "^3.4.4" + readable-stream "^3.4.0" + +crc@^3.4.4: + version "3.8.0" + resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" + integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== + dependencies: + buffer "^5.1.0" + +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-fetch@^3.0.6, cross-fetch@^3.1.6: + version "3.1.8" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" + integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== + dependencies: + node-fetch "^2.6.12" + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crx@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/crx/-/crx-5.0.1.tgz#33f7a81375acfab1aa3a8291424223434dc0978b" + integrity sha512-n/PzBx/fR1+xZCiJBats9y5zw/a+YBcoJ0ABnUaY56xb1RpXuFhsiCMpNY6WjVtylLzhUUXSWsbitesVg7v2vg== + dependencies: + archiver "^3.0.3" + commander "^2.20.0" + node-rsa "^1.0.5" + pbf "^3.2.0" + +crypt@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== + +crypto-browserify@3.12.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +crypto-random-string@3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-3.3.1.tgz#13cee94cac8001e4842501608ef779e0ed08f82d" + integrity sha512-5j88ECEn6h17UePrLi6pn1JcLtAiANa3KExyr9y9Z5vo2mv56Gh3I4Aja/B9P9uyMwyxNHAHWv+nE72f30T5Dg== + dependencies: + type-fest "^0.8.1" + +css-box-model@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/css-box-model/-/css-box-model-1.2.1.tgz#59951d3b81fd6b2074a62d49444415b0d2b4d7c1" + integrity sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw== + dependencies: + tiny-invariant "^1.0.6" + +css-loader@5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.0.2.tgz#24f758dae349bad0a440c50d7e2067742e0899cb" + integrity sha512-gbkBigdcHbmNvZ1Cg6aV6qh6k9N6XOr8YWzISLQGrwk2mgOH8LLrizhkxbDhQtaLtktyKHD4970S0xwz5btfTA== + dependencies: + camelcase "^6.2.0" + cssesc "^3.0.0" + icss-utils "^5.1.0" + loader-utils "^2.0.0" + postcss "^8.2.4" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.1.0" + schema-utils "^3.0.0" + semver "^7.3.4" + +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-select@^4.1.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== + dependencies: + boolbase "^1.0.0" + css-what "^6.0.1" + domhandler "^4.3.1" + domutils "^2.8.0" + nth-check "^2.0.1" + +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + +css-tree@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +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.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssfontparser@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/cssfontparser/-/cssfontparser-1.2.1.tgz#f4022fc8f9700c68029d542084afbaf425a3f3e3" + integrity sha512-6tun4LoZnj7VN6YeegOVb67KBX/7JJsqvj+pv3ZA7F878/eN33AbGa5b/S/wXxS/tcp8nc40xRUrsPlxIyNUPg== + +csso@^4.0.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== + dependencies: + css-tree "^1.1.2" + +cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + +csstype@^3.0.2, csstype@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + +d3-array@^1.2.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" + integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw== + +d3-collection@1: + version "1.0.7" + resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.7.tgz#349bd2aa9977db071091c13144d5e4f16b5b310e" + integrity sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A== + +d3-color@1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.4.1.tgz#c52002bf8846ada4424d55d97982fef26eb3bc8a" + integrity sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q== + +d3-format@1: + version "1.4.5" + resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.4.5.tgz#374f2ba1320e3717eb74a9356c67daee17a7edb4" + integrity sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ== + +d3-interpolate@1, d3-interpolate@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.4.0.tgz#526e79e2d80daa383f9e0c1c1c7dcc0f0583e987" + integrity sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA== + dependencies: + d3-color "1" + +d3-path@1: + version "1.0.9" + resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.9.tgz#48c050bb1fe8c262493a8caf5524e3e9591701cf" + integrity sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg== + +d3-scale@^2.1.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-2.2.2.tgz#4e880e0b2745acaaddd3ede26a9e908a9e17b81f" + integrity sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw== + dependencies: + d3-array "^1.2.0" + d3-collection "1" + d3-format "1" + d3-interpolate "1" + d3-time "1" + d3-time-format "2" + +d3-shape@^1.2.0: + version "1.3.7" + resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.3.7.tgz#df63801be07bc986bc54f63789b4fe502992b5d7" + integrity sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw== + dependencies: + d3-path "1" + +d3-time-format@2: + version "2.3.0" + resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.3.0.tgz#107bdc028667788a8924ba040faf1fbccd5a7850" + integrity sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ== + dependencies: + d3-time "1" + +d3-time@1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.1.0.tgz#b1e19d307dae9c900b7e5b25ffc5dcc249a8a0f1" + integrity sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA== + +damerau-levenshtein@^1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" + integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== + +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + +data-view-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" + integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" + integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" + integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +date-fns@^2.30.0: + version "2.30.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" + integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== + dependencies: + "@babel/runtime" "^7.21.0" + +debounce-fn@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/debounce-fn/-/debounce-fn-3.0.1.tgz#034afe8b904d985d1ec1aa589cd15f388741d680" + integrity sha512-aBoJh5AhpqlRoHZjHmOzZlRx+wz2xVwGL9rjs+Kj0EWUrL4/h4K7OD176thl2Tdoqui/AaA4xhHrNArGLAaI3Q== + dependencies: + mimic-fn "^2.1.0" + +debug-log@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f" + integrity sha512-gV/pe1YIaKNgLYnd1g9VNW80tcb7oV5qvNUxG7NM8rbDpnl6RGunzlAtlGSb0wEs3nesu2vHNiX9TSsZ+Y+RjA== + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3, debug@^4.3.4: + version "4.3.5" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" + integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== + dependencies: + ms "2.1.2" + +debug@4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +decamelize-keys@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" + integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0, decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +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.0, decimal.js@^10.2.1: + version "10.4.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== + +decode-uri-component@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== + +decompress-response@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-5.0.0.tgz#7849396e80e3d1eba8cb2f75ef4930f76461cb0f" + integrity sha512-TLZWWybuxWgoW7Lykv+gq9xvzOsUjQ9tF09Tj6NSTYGMTCHNXzrPnD6Hi+TgZq19PyTAGH4Ll/NIM/eTGglnMw== + dependencies: + mimic-response "^2.0.0" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +deep-eql@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" + integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== + dependencies: + type-detect "^4.0.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +default-gateway@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" + integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== + dependencies: + execa "^5.0.0" + +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + dependencies: + clone "^1.0.2" + +defer-to-connect@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +deglob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/deglob/-/deglob-3.1.0.tgz#1868193193d3432a5326e8fb2052b439a43a454e" + integrity sha512-al10l5QAYaM/PeuXkAr1Y9AQz0LCtWsnJG23pIgh44hDxHFOj36l6qvhfjnIWBYwZOqM1fXUFV9tkjL7JPdGvw== + dependencies: + find-root "^1.0.0" + glob "^7.0.5" + ignore "^5.0.0" + pkg-config "^1.1.0" + run-parallel "^1.1.2" + uniq "^1.0.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +deprecation@^2.0.0, deprecation@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + +des.js@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.1.0.tgz#1d37f5766f3bbff4ee9638e871a8768c173b81da" + integrity sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-libc@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" + integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +detect-node@^2.0.4, detect-node@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +diff-sequences@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" + integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== + +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dns-packet@^5.2.2: + version "5.6.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.1.tgz#ae888ad425a9d1478a0674256ab866de1012cf2f" + integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== + dependencies: + "@leichtgewicht/ip-codec" "^2.0.1" + +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha512-lsGyRuYr4/PIB0txi+Fy2xOMI2dGaTguCaotzFGkVZuKR5usKfcRWIFKNM3QNrU7hh/+w2bwTW+ZeXPK5l8uVg== + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-converter@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-helpers@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" + integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA== + dependencies: + "@babel/runtime" "^7.1.2" + +dom-helpers@^5.0.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" + integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== + dependencies: + "@babel/runtime" "^7.8.7" + csstype "^3.0.2" + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +dom-serializer@^1.0.1: + 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" + entities "^2.0.0" + +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: + 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" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + +domhandler@^5.0, domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +domutils@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" + integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dot-prop@^5.0.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +dotenv@^8.2.0: + version "8.6.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" + integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== + +downshift@^6.1.7: + version "6.1.12" + resolved "https://registry.yarnpkg.com/downshift/-/downshift-6.1.12.tgz#f14476b41a6f6fd080c340bad1ddf449f7143f6f" + integrity sha512-7XB/iaSJVS4T8wGFT3WRXmSF1UlBHAA40DshZtkrIscIN+VC+Lh363skLxFTvJwtNgHxAMDGEHT4xsyQFWL+UA== + dependencies: + "@babel/runtime" "^7.14.8" + compute-scroll-into-view "^1.0.17" + prop-types "^15.7.2" + react-is "^17.0.2" + tslib "^2.3.0" + +dropbox@4.0.30: + version "4.0.30" + resolved "https://registry.yarnpkg.com/dropbox/-/dropbox-4.0.30.tgz#747247b5088e26ab143db39afed8c66f0887d670" + integrity sha512-qmSeT8rhjARDHj3vxOTKQjc6IQ46AlRwJS8dqE26R323fikkjC4EXzocV12PsO7DOrjaqbOH3FjEdEEnrFraJw== + dependencies: + buffer "^5.0.8" + moment "^2.19.3" + +duplexer2@~0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA== + dependencies: + readable-stream "^2.0.2" + +duplexer3@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" + integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== + +easy-crc@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/easy-crc/-/easy-crc-1.1.0.tgz#fe59a33a9a33faf3ff54cf8f2ba7f13ab3730c1d" + integrity sha512-cvtERLTu8mYt1pOVVekJ4E0VdwyuKgL+VAfE3LY+Lw762i9M1bSEikm6fyGD2grxOdBfI0HgOmSi3HQneKr33A== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-to-chromium@^1.4.668: + version "1.4.794" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.794.tgz#cca7762998f6c42517770666e272f52a53c08605" + integrity sha512-6FApLtsYhDCY0Vglq3AptsdxQ+PJLc6AxlAM0HjEihUAiOPPbkASEsq9gtxUeZY9o0sJIEa3WnF0vVH4VT4iug== + +elliptic@^6.4.0, elliptic@^6.5.3, elliptic@^6.5.4, elliptic@^6.5.5: + version "6.5.5" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.5.tgz#c715e09f78b6923977610d4c2346d6ce22e6dded" + integrity sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emittery@^0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" + integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.0.0: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +encoding@^0.1.12, encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +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== + dependencies: + once "^1.4.0" + +enhanced-resolve@^5.7.0: + version "5.17.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz#d037603789dd9555b89aaec7eb78845c49089bc5" + integrity sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +enquirer@^2.3.5, enquirer@^2.3.6: + version "2.4.1" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== + dependencies: + ansi-colors "^4.1.1" + strip-ansi "^6.0.1" + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +entities@^4.2.0, entities@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +envinfo@^7.7.3: + version "7.13.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.13.0.tgz#81fbb81e5da35d74e814941aeab7c325a606fb31" + integrity sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +error-stack-parser@^2.0.6: + version "2.1.4" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" + integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== + dependencies: + stackframe "^1.3.4" + +es-abstract@^1.17.2, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2: + version "1.23.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" + integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.0.3" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + hasown "^2.0.2" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" + is-callable "^1.2.7" + is-data-view "^1.0.1" + is-negative-zero "^2.0.3" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.3" + is-string "^1.0.7" + is-typed-array "^1.1.13" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.2" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.6" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.15" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-module-lexer@^0.3.26: + version "0.3.26" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.3.26.tgz#7b507044e97d5b03b01d4392c74ffeb9c177a83b" + integrity sha512-Va0Q/xqtrss45hWzP8CZJwzGSZJjDM5/MJRE3IXXnUCcVLElR9BRaE9F62BopysASyc4nM3uwhSW7FFB9nlWAA== + +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== + dependencies: + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" + +es-shim-unscopables@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" + +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" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es6-error@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + +escalade@^3.1.1, escalade@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escodegen@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" + integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionalDependencies: + source-map "~0.6.1" + +eslint-config-airbnb-base@^14.2.1: + version "14.2.1" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz#8a2eb38455dc5a312550193b319cdaeef042cd1e" + integrity sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA== + dependencies: + confusing-browser-globals "^1.0.10" + object.assign "^4.1.2" + object.entries "^1.1.2" + +eslint-config-airbnb@18.2.1: + version "18.2.1" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-18.2.1.tgz#b7fe2b42f9f8173e825b73c8014b592e449c98d9" + integrity sha512-glZNDEZ36VdlZWoxn/bUR1r/sdFKPd1mHPbqUtkctgNG4yT2DLLtJ3D+yCV+jzZCc2V1nBVkmdknOJBZ5Hc0fg== + dependencies: + eslint-config-airbnb-base "^14.2.1" + object.assign "^4.1.2" + object.entries "^1.1.2" + +eslint-config-prettier@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz#f4a4bd2832e810e8cc7c1411ec85b3e85c0c53f9" + integrity sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg== + +eslint-import-resolver-node@^0.3.4: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-module-utils@^2.6.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz#52f2404300c3bd33deece9d7372fb337cc1d7c34" + integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q== + dependencies: + debug "^3.2.7" + +eslint-plugin-flowtype@5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.2.1.tgz#15abd9e3b0f3432abc030d71948802be8eac12c5" + integrity sha512-uXZbEzC7iGmJLoOQ4aQVLrmNGqz5il4lTblB9wmq8R53GnCkv4/Y4K0WiJ6v07rpHHI1kOm6NTp8V//P5xTqBA== + dependencies: + lodash "^4.17.15" + string-natural-compare "^3.0.1" + +eslint-plugin-import@2.22.1: + version "2.22.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702" + integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw== + dependencies: + array-includes "^3.1.1" + array.prototype.flat "^1.2.3" + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.4" + eslint-module-utils "^2.6.0" + has "^1.0.3" + minimatch "^3.0.4" + object.values "^1.1.1" + read-pkg-up "^2.0.0" + resolve "^1.17.0" + tsconfig-paths "^3.9.0" + +eslint-plugin-jsx-a11y@6.4.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz#a2d84caa49756942f42f1ffab9002436391718fd" + integrity sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg== + dependencies: + "@babel/runtime" "^7.11.2" + aria-query "^4.2.2" + array-includes "^3.1.1" + ast-types-flow "^0.0.7" + axe-core "^4.0.2" + axobject-query "^2.2.0" + damerau-levenshtein "^1.0.6" + emoji-regex "^9.0.0" + has "^1.0.3" + jsx-ast-utils "^3.1.0" + language-tags "^1.0.5" + +eslint-plugin-no-floating-promise@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-no-floating-promise/-/eslint-plugin-no-floating-promise-1.0.2.tgz#5176e89cc84682a2ee7e9a523019552a751de82c" + integrity sha512-ccbyIlvDuKJOrwypw9NWn6CIxTK+/CYARhsqMyP6cXYgIFcNFs01sGXOqq8XzOJFw02Umkj6hCnffaV6nSiqyw== + dependencies: + requireindex "1.2.0" + +eslint-plugin-prettier@3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz#7079cfa2497078905011e6f82e8dd8453d1371b7" + integrity sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-plugin-promise@4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz#61485df2a359e03149fdafc0a68b0e030ad2ac45" + integrity sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ== + +eslint-plugin-react@7.22.0: + version "7.22.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.22.0.tgz#3d1c542d1d3169c45421c1215d9470e341707269" + integrity sha512-p30tuX3VS+NWv9nQot9xIGAHBXR0+xJVaZriEsHoJrASGCJZDJ8JLNM0YqKqI0AKm6Uxaa1VUHoNEibxRCMQHA== + dependencies: + array-includes "^3.1.1" + array.prototype.flatmap "^1.2.3" + doctrine "^2.1.0" + has "^1.0.3" + jsx-ast-utils "^2.4.1 || ^3.0.0" + object.entries "^1.1.2" + object.fromentries "^2.0.2" + object.values "^1.1.1" + prop-types "^15.7.2" + resolve "^1.18.1" + string.prototype.matchall "^4.0.2" + +eslint-scope@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" + integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint@7.20.0: + version "7.20.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.20.0.tgz#db07c4ca4eda2e2316e7aa57ac7fc91ec550bdc7" + integrity sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw== + dependencies: + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.3.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" + esutils "^2.0.2" + file-entry-cache "^6.0.0" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash "^4.17.20" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.4" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + +esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +"esprima@~ 1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.0.4.tgz#9f557e08fc3b4d26ece9dd34f8fbf476b62585ad" + integrity sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA== + +esquery@^1.0.1, esquery@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.1.0, esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.2.0, events@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +exec-sh@^0.3.2: + version "0.3.6" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" + integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + +expect@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" + integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== + dependencies: + "@jest/types" "^26.6.2" + ansi-styles "^4.0.0" + jest-get-type "^26.3.0" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" + +express@^4.14.0, express@^4.17.3: + version "4.19.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" + integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.2" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.6.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extract-files@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-9.0.0.tgz#8a7744f2437f81f5ed3250ed9f1550de902fe54a" + integrity sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ== + +extract-stack@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/extract-stack/-/extract-stack-2.0.0.tgz#11367bc865bfcd9bc0db3123e5edb57786f11f9b" + integrity sha512-AEo4zm+TenK7zQorGK1f9mJ8L14hnTDi2ZQPR+Mub1NX8zimka1mXpV5LpH8x9HoUmFSHZCfLHqWvp0Y4FxxzQ== + +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-diff@^1.1.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== + +fast-glob@^3.0.3, fast-glob@^3.2.9: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastest-levenshtein@^1.0.12: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + +fastq@^1.6.0: + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + dependencies: + reusify "^1.0.4" + +faye-websocket@^0.11.3: + version "0.11.4" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== + dependencies: + websocket-driver ">=0.5.1" + +fb-watchman@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + dependencies: + bser "2.1.1" + +figures@^3.0.0, figures@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +file-loader@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" + integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +file-saver@2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/file-saver/-/file-saver-2.0.5.tgz#d61cfe2ce059f414d899e9dd6d4107ee25670c38" + integrity sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA== + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +filesize@^6.1.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.4.0.tgz#914f50471dd66fdca3cefe628bd0cde4ef769bcd" + integrity sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-babel-config@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.2.tgz#41199b5cb9154dcb2fdc351cbe70eaf9198d5111" + integrity sha512-oK59njMyw2y3yxto1BCfVK7MQp/OYf4FleHu0RgosH3riFJ1aOuo/7naLDLAObfrgn3ueFhw5sAT/cp0QuJI3Q== + dependencies: + json5 "^1.0.2" + path-exists "^3.0.0" + +find-cache-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-cache-dir@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-root@^1.0.0, find-root@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== + +find-up@5.0.0, find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +find-up@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +flatted@^3.2.9: + version "3.3.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== + +flow-bin@0.142.0: + version "0.142.0" + resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.142.0.tgz#b46b69de1123cf7c5a50917402968e07291df054" + integrity sha512-YgiapK/wrJjcgSgOWfoncbZ4vZrZWdHs+p7V9duI9zo4ehW2nM/VRrpSaWoZ+CWu3t+duGyAvupJvC6MM2l07w== + +flow-typed@3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/flow-typed/-/flow-typed-3.3.1.tgz#538bbcf13098916a09731f06ed6c0e5b8aee7303" + integrity sha512-svxMNRJNTeKfOwBt/bPZvOrgkjpYH1nXC2v7dgbq4sZgZu/Slna6kAPD45fnOJ4D0TCS2B4yp6Nhc32AV1sxpQ== + dependencies: + "@octokit/rest" "^16.43.1" + colors "^1.4.0" + flowgen "^1.10.0" + fs-extra "^8.1.0" + glob "^7.1.6" + got "^10.5.7" + md5 "^2.2.1" + mkdirp "^1.0.3" + prettier "^1.19.1" + rimraf "^3.0.2" + semver "7.3.2" + table "^5.4.6" + through "^2.3.8" + unzipper "^0.10.8" + which "^2.0.2" + yargs "^15.1.0" + +flowgen@^1.10.0: + version "1.21.0" + resolved "https://registry.yarnpkg.com/flowgen/-/flowgen-1.21.0.tgz#f7ecb693892c4bd069492dbf77db561bbb451aa9" + integrity sha512-pFNFFyMLRmW6njhOIm5TrbGUDTv64aujmys2KrkRE2NYD8sXwJUyicQRwU5SPRBRJnFSD/FNlnHo2NnHI5eJSw== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/highlight" "^7.16.7" + commander "^6.1.0" + lodash "^4.17.20" + prettier "^2.5.1" + shelljs "^0.8.4" + typescript "~4.4.4" + typescript-compiler "^1.4.1-2" + +fnv-plus@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/fnv-plus/-/fnv-plus-1.3.1.tgz#c34cb4572565434acb08ba257e4044ce2b006d67" + integrity sha512-Gz1EvfOneuFfk4yG458dJ3TLJ7gV19q3OM/vVvvHf7eT02Hm1DleB4edsia6ahbKgAYxO9gvyQ1ioWZR+a00Yw== + +follow-redirects@^1.0.0, follow-redirects@^1.10.0, follow-redirects@^1.14.4, follow-redirects@^1.14.9, follow-redirects@^1.15.6: + version "1.15.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== + +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fraction.js@^4.0.13: + version "4.3.7" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" + integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +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@^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" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^2.0.0, fs-minipass@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-monkey@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.6.tgz#8ead082953e88d992cf3ff844faa907b26756da2" + integrity sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.1.2, fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +fstream@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + +gaze@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" + integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g== + dependencies: + globule "^1.0.0" + +gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.1, get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-func-name@^2.0.0, get-func-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" + integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== + +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-port@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" + integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw== + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.0.0, get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== + dependencies: + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== + +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== + +glob-parent@^5.0.0, glob-parent@^5.1.1, glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@8.1.0, glob@^8.0.1: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@~7.1.1: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + dependencies: + type-fest "^0.8.1" + +globalthis@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== + dependencies: + define-properties "^1.2.1" + gopd "^1.0.1" + +globby@^10.0.1: + version "10.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" + integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== + dependencies: + "@types/glob" "^7.1.1" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.0.3" + glob "^7.1.3" + ignore "^5.1.1" + merge2 "^1.2.3" + slash "^3.0.0" + +globby@^11.0.0, globby@^11.0.1, globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globule@^1.0.0: + version "1.3.4" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.4.tgz#7c11c43056055a75a6e68294453c17f2796170fb" + integrity sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg== + dependencies: + glob "~7.1.1" + lodash "^4.17.21" + minimatch "~3.0.2" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +got@^10.5.7: + version "10.7.0" + resolved "https://registry.yarnpkg.com/got/-/got-10.7.0.tgz#62889dbcd6cca32cd6a154cc2d0c6895121d091f" + integrity sha512-aWTDeNw9g+XqEZNcTjMMZSy7B7yE9toWOFYip7ofFTLleJhvZwUxxTxkTpKvF+p1SAA4VHmuEy7PiHTHyq8tJg== + dependencies: + "@sindresorhus/is" "^2.0.0" + "@szmarczak/http-timer" "^4.0.0" + "@types/cacheable-request" "^6.0.1" + cacheable-lookup "^2.0.0" + cacheable-request "^7.0.1" + decompress-response "^5.0.0" + duplexer3 "^0.1.4" + get-stream "^5.0.0" + lowercase-keys "^2.0.0" + mimic-response "^2.1.0" + p-cancelable "^2.0.0" + p-event "^4.0.0" + responselike "^2.0.0" + to-readable-stream "^2.0.0" + type-fest "^0.10.0" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4, graceful-fs@^4.2.6: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphql-request@^3.3.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-3.7.0.tgz#c7406e537084f8b9788541e3e6704340ca13055b" + integrity sha512-dw5PxHCgBneN2DDNqpWu8QkbbJ07oOziy8z+bK/TAXufsOLaETuVO4GkXrbs0WjhdKhBMN3BkpN/RIvUHkmNUQ== + dependencies: + cross-fetch "^3.0.6" + extract-files "^9.0.0" + form-data "^3.0.0" + +graphql-tag@^2.11.0: + version "2.12.6" + resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1" + integrity sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg== + dependencies: + tslib "^2.1.0" + +graphql@^15.4.0: + version "15.8.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.8.0.tgz#33410e96b012fa3bdb1091cc99a94769db212b38" + integrity sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw== + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw== + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.0.1, has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + +has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6" + integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash-base@~3.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + integrity sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +hash-wasm@^4.9.0: + version "4.11.0" + resolved "https://registry.yarnpkg.com/hash-wasm/-/hash-wasm-4.11.0.tgz#7d1479b114c82e48498fdb1d2462a687d00386d5" + integrity sha512-HVusNXlVqHe0fzIzdQOGolnFN6mX/fqcrSAOcTBXdvzrXVHwTz11vXeKRmkR5gTuwVpvHZEIyKoePDvuAR+XwQ== + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +he@1.2.0, he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +history@^4.9.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" + integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== + dependencies: + "@babel/runtime" "^7.1.2" + loose-envify "^1.2.0" + resolve-pathname "^3.0.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + value-equal "^1.0.1" + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +hosted-git-info@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== + dependencies: + lru-cache "^6.0.0" + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + +html-entities@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" + integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== + +html-entities@^2.1.0, html-entities@^2.3.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.5.2.tgz#201a3cf95d3a15be7099521620d19dfb4f65359f" + integrity sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA== + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +html-loader@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-2.0.0.tgz#32e98b39cf7ce8be6851fa5466abe06015425a46" + integrity sha512-/8yd7xrPJM0ugzz4VDK/xLV39nPGpelwehonX/msg/N5ORvQj9G4VncX5coIWKkOSLBANseNaEcW+3Ga0twDWg== + dependencies: + html-minifier-terser "^5.1.1" + parse5-sax-parser "^6.0.1" + +html-minifier-terser@^5.0.1, html-minifier-terser@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" + integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== + dependencies: + camel-case "^4.1.1" + clean-css "^4.2.3" + commander "^4.1.1" + he "^1.2.0" + param-case "^3.0.3" + relateurl "^0.2.7" + terser "^4.6.3" + +html-to-react@^1.3.4: + version "1.7.0" + resolved "https://registry.yarnpkg.com/html-to-react/-/html-to-react-1.7.0.tgz#1664a0233a930ab1b12c442ddef0f1b72e7459f4" + integrity sha512-b5HTNaTGyOj5GGIMiWVr1k57egAZ/vGy0GGefnCQ1VW5hu9+eku8AXHtf2/DeD95cj/FKBKYa1J7SWBOX41yUQ== + dependencies: + domhandler "^5.0" + htmlparser2 "^9.0" + lodash.camelcase "^4.3.0" + +html-webpack-harddisk-plugin@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/html-webpack-harddisk-plugin/-/html-webpack-harddisk-plugin-2.0.0.tgz#2de78316554e7aa37d07066d3687901beca4d5ce" + integrity sha512-fWKH72FyaQ5K/j+kYy6LnQsQucSDnsEkghmB6g29TtpJ4sxHYFduEeUV1hfDqyDpCRW+bP7yacjQ+1ikeIDqeg== + +html-webpack-plugin@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.1.0.tgz#1c11bbe01ab9d1262c4b601edebcf394364b1f60" + integrity sha512-2axkp+2NHmvHUWrKe1dY4LyM3WatQEdFChr42OY7R/Ad7f0AQzaKscGCcqN/FtQBxo8rdfJP7M3RMFDttqok3g== + dependencies: + "@types/html-minifier-terser" "^5.0.0" + html-minifier-terser "^5.0.1" + loader-utils "^2.0.0" + lodash "^4.17.20" + pretty-error "^2.1.1" + tapable "^2.0.0" + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +htmlparser2@^9.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-9.1.0.tgz#cdb498d8a75a51f739b61d3f718136c369bc8c23" + integrity sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.1.0" + entities "^4.5.0" + +http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +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== + dependencies: + content-type "^1.0.4" + debug "^4.1.1" + is-retry-allowed "^1.1.0" + is-stream "^2.0.0" + parse-json "^4.0.0" + tunnel-agent "^0.6.0" + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-parser-js@>=0.5.1: + version "0.5.8" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" + integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== + +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + +http-proxy-middleware@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" + integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== + dependencies: + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" + +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +httpolyglot@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/httpolyglot/-/httpolyglot-0.1.2.tgz#e4d347fe8984a62f467d4060df527f1851f6997b" + integrity sha512-ouHI1AaQMLgn4L224527S5+vq6hgvqPteurVfbm7ChViM3He2Wa8KP1Ny7pTYd7QKnDSPKcN8JYfC8r/lmsE3A== + +https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + +hyperdyperid@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/hyperdyperid/-/hyperdyperid-1.2.0.tgz#59668d323ada92228d2a869d3e474d5a33b69e6b" + integrity sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A== + +hyperlinker@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e" + integrity sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ== + +iconv-lite@0.4.24, iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + +ieee754@^1.1.12, ieee754@^1.1.13, ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore-walk@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335" + integrity sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ== + dependencies: + minimatch "^3.0.4" + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.0.0, ignore@^5.1.1, ignore@^5.2.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== + +immer@^10.0.2, immer@^10.1.1: + version "10.1.1" + resolved "https://registry.yarnpkg.com/immer/-/immer-10.1.1.tgz#206f344ea372d8ea176891545ee53ccc062db7bc" + integrity sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== + +ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +inquirer-autocomplete-prompt@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-2.0.1.tgz#72868aada4d9d36814a6054cbd1ececc63aab0c6" + integrity sha512-jUHrH0btO7j5r8DTQgANf2CBkTZChoVySD8zF/wp5fZCOLIuUbleXhf4ZY5jNBOc1owA3gdfWtfZuppfYBhcUg== + dependencies: + ansi-escapes "^4.3.2" + figures "^3.2.0" + picocolors "^1.0.0" + run-async "^2.4.1" + rxjs "^7.5.4" + +inquirer@^8.2.4: + version "8.2.6" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.6.tgz#733b74888195d8d400a67ac332011b5fae5ea562" + integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^6.0.1" + +int64-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/int64-buffer/-/int64-buffer-1.0.1.tgz#c78d841b444cadf036cd04f8683696c740f15dca" + integrity sha512-+3azY4pXrjAupJHU1V9uGERWlhoqNswJNji6aD/02xac7oxol508AsMC5lxKhEqyZeDFy3enq5OGWXF4u75hiw== + +internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.0" + side-channel "^1.0.4" + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +interpret@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" + integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== + +intl-format-cache@^2.0.5: + version "2.2.9" + resolved "https://registry.yarnpkg.com/intl-format-cache/-/intl-format-cache-2.2.9.tgz#fb560de20c549cda20b569cf1ffb6dc62b5b93b4" + integrity sha512-Zv/u8wRpekckv0cLkwpVdABYST4hZNTDaX7reFetrYTJwxExR2VyTqQm+l0WmL0Qo8Mjb9Tf33qnfj0T7pjxdQ== + +intl-messageformat-parser@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/intl-messageformat-parser/-/intl-messageformat-parser-1.4.0.tgz#b43d45a97468cadbe44331d74bb1e8dea44fc075" + integrity sha512-/XkqFHKezO6UcF4Av2/Lzfrez18R0jyw7kRFhSeB/YRakdrgSc9QfFZUwNJI9swMwMoNPygK1ArC5wdFSjPw+A== + +intl-messageformat-parser@^3.6.4: + version "3.6.4" + resolved "https://registry.yarnpkg.com/intl-messageformat-parser/-/intl-messageformat-parser-3.6.4.tgz#5199d106d816c3dda26ee0694362a9cf823978fb" + integrity sha512-RgPGwue0mJtoX2Ax8EmMzJzttxjnva7gx0Q7mKJ4oALrTZvtmCeAw5Msz2PcjW4dtCh/h7vN/8GJCxZO1uv+OA== + dependencies: + "@formatjs/intl-unified-numberformat" "^3.2.0" + +intl-messageformat@10.5.14: + version "10.5.14" + resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.5.14.tgz#e5bb373f8a37b88fbe647d7b941f3ab2a37ed00a" + integrity sha512-IjC6sI0X7YRjjyVH9aUgdftcmZK7WXdHeil4KwbjDnRWjnVitKpAx3rr6t6di1joFp5188VqKcobOPA6mCLG/w== + dependencies: + "@formatjs/ecma402-abstract" "2.0.0" + "@formatjs/fast-memoize" "2.2.0" + "@formatjs/icu-messageformat-parser" "2.7.8" + tslib "^2.4.0" + +intl-messageformat@^2.0.0, intl-messageformat@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-2.2.0.tgz#345bcd46de630b7683330c2e52177ff5eab484fc" + integrity sha512-I+tSvHnXqJYjDfNmY95tpFMj30yoakC6OXAo+wu/wTMy6tA/4Fd4mvV7Uzs4cqK/Ap29sHhwjcY+78a8eifcXw== + dependencies: + intl-messageformat-parser "1.4.0" + +intl-relativeformat@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/intl-relativeformat/-/intl-relativeformat-2.2.0.tgz#6aca95d019ec8d30b6c5653b6629f9983ea5b6c5" + integrity sha512-4bV/7kSKaPEmu6ArxXf9xjv1ny74Zkwuey8Pm01NH4zggPP7JHwg2STk8Y3JdspCKRDriwIyLRfEXnj2ZLr4Bw== + dependencies: + intl-messageformat "^2.0.0" + +invariant@^2.1.1: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +ip-address@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" + integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== + dependencies: + jsbn "1.1.0" + sprintf-js "^1.1.3" + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +ipaddr.js@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8" + integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== + +is-accessor-descriptor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz#3223b10628354644b86260db29b3e693f5ceedd4" + integrity sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA== + dependencies: + hasown "^2.0.0" + +is-alphabetical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" + integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== + +is-alphanumerical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" + integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + +is-arguments@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-buffer@^1.1.5, is-buffer@~1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-buffer@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-core-module@^2.13.0, is-core-module@^2.5.0: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + +is-data-descriptor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz#2109164426166d32ea38c405c1e0945d9e6a4eeb" + integrity sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw== + dependencies: + hasown "^2.0.0" + +is-data-view@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" + integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== + dependencies: + is-typed-array "^1.1.13" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-decimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" + integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== + +is-descriptor@^0.1.0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.7.tgz#2727eb61fd789dcd5bdf0ed4569f551d2fe3be33" + integrity sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg== + dependencies: + is-accessor-descriptor "^1.0.1" + is-data-descriptor "^1.0.1" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.3.tgz#92d27cb3cd311c4977a4db47df457234a13cb306" + integrity sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw== + dependencies: + is-accessor-descriptor "^1.0.1" + is-data-descriptor "^1.0.1" + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-generator-function@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hexadecimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" + integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + +is-nan@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" + integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + +is-number-object@^1.0.4: + 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" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== + +is-plain-obj@^2.0.0, is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-retry-allowed@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== + dependencies: + call-bind "^1.0.7" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.13, is-typed-array@^1.1.3: + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== + dependencies: + which-typed-array "^1.1.14" + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^2.1.1, is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== + +istanbul-lib-instrument@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" + +istanbul-lib-instrument@^5.0.4: + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.0.2: + version "3.1.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jdenticon@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jdenticon/-/jdenticon-3.2.0.tgz#b5b9ef413cb66f70c600d6e69a764c977f248a46" + integrity sha512-z6Iq3fTODUMSOiR2nNYrqigS6Y0GvdXfyQWrUby7htDHvX7GNEwaWR4hcaL+FmhEgBe08Xkup/BKxXQhDJByPA== + dependencies: + canvas-renderer "~2.2.0" + +jest-canvas-mock@2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/jest-canvas-mock/-/jest-canvas-mock-2.3.1.tgz#9535d14bc18ccf1493be36ac37dd349928387826" + integrity sha512-5FnSZPrX3Q2ZfsbYNE3wqKR3+XorN8qFzDzB5o0golWgt6EOX1+emBnpOc9IAQ+NXFj8Nzm3h7ZdE/9H0ylBcg== + dependencies: + cssfontparser "^1.2.1" + moo-color "^1.0.2" + +jest-changed-files@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" + integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== + dependencies: + "@jest/types" "^26.6.2" + execa "^4.0.0" + throat "^5.0.0" + +jest-cli@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" + integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== + dependencies: + "@jest/core" "^26.6.3" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + import-local "^3.0.2" + is-ci "^2.0.0" + jest-config "^26.6.3" + jest-util "^26.6.2" + jest-validate "^26.6.2" + prompts "^2.0.1" + yargs "^15.4.1" + +jest-config@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" + integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^26.6.3" + "@jest/types" "^26.6.2" + babel-jest "^26.6.3" + chalk "^4.0.0" + deepmerge "^4.2.2" + glob "^7.1.1" + graceful-fs "^4.2.4" + jest-environment-jsdom "^26.6.2" + jest-environment-node "^26.6.2" + jest-get-type "^26.3.0" + jest-jasmine2 "^26.6.3" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + micromatch "^4.0.2" + pretty-format "^26.6.2" + +jest-diff@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" + integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== + dependencies: + chalk "^4.0.0" + diff-sequences "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-docblock@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" + integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== + dependencies: + detect-newline "^3.0.0" + +jest-each@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" + integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== + dependencies: + "@jest/types" "^26.6.2" + chalk "^4.0.0" + jest-get-type "^26.3.0" + jest-util "^26.6.2" + pretty-format "^26.6.2" + +jest-environment-jsdom@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" + integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" + jsdom "^16.4.0" + +jest-environment-node@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" + integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" + +jest-get-type@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" + integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== + +jest-haste-map@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" + integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== + dependencies: + "@jest/types" "^26.6.2" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.4" + jest-regex-util "^26.0.0" + jest-serializer "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" + micromatch "^4.0.2" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.1.2" + +jest-jasmine2@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" + integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + expect "^26.6.2" + is-generator-fn "^2.0.0" + jest-each "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + pretty-format "^26.6.2" + throat "^5.0.0" + +jest-leak-detector@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" + integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== + dependencies: + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-matcher-utils@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" + integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== + dependencies: + chalk "^4.0.0" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-message-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" + integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/types" "^26.6.2" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + micromatch "^4.0.2" + pretty-format "^26.6.2" + slash "^3.0.0" + stack-utils "^2.0.2" + +jest-mock@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" + integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + +jest-regex-util@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" + integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== + +jest-resolve-dependencies@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" + integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== + dependencies: + "@jest/types" "^26.6.2" + jest-regex-util "^26.0.0" + jest-snapshot "^26.6.2" + +jest-resolve@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" + integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== + dependencies: + "@jest/types" "^26.6.2" + chalk "^4.0.0" + graceful-fs "^4.2.4" + jest-pnp-resolver "^1.2.2" + jest-util "^26.6.2" + read-pkg-up "^7.0.1" + resolve "^1.18.1" + slash "^3.0.0" + +jest-runner@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" + integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== + dependencies: + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.7.1" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-config "^26.6.3" + jest-docblock "^26.0.0" + jest-haste-map "^26.6.2" + jest-leak-detector "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + jest-runtime "^26.6.3" + jest-util "^26.6.2" + jest-worker "^26.6.2" + source-map-support "^0.5.6" + throat "^5.0.0" + +jest-runtime@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" + integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== + dependencies: + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/globals" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + cjs-module-lexer "^0.6.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.4" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + slash "^3.0.0" + strip-bom "^4.0.0" + yargs "^15.4.1" + +jest-serializer@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" + integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.4" + +jest-snapshot@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" + integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== + dependencies: + "@babel/types" "^7.0.0" + "@jest/types" "^26.6.2" + "@types/babel__traverse" "^7.0.4" + "@types/prettier" "^2.0.0" + chalk "^4.0.0" + expect "^26.6.2" + graceful-fs "^4.2.4" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + jest-haste-map "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + natural-compare "^1.4.0" + pretty-format "^26.6.2" + semver "^7.3.2" + +jest-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" + integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + graceful-fs "^4.2.4" + is-ci "^2.0.0" + micromatch "^4.0.2" + +jest-validate@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" + integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== + dependencies: + "@jest/types" "^26.6.2" + camelcase "^6.0.0" + chalk "^4.0.0" + jest-get-type "^26.3.0" + leven "^3.1.0" + pretty-format "^26.6.2" + +jest-watcher@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" + integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== + dependencies: + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^26.6.2" + string-length "^4.0.1" + +jest-worker@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" + integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== + dependencies: + "@jest/core" "^26.6.3" + import-local "^3.0.2" + jest-cli "^26.6.3" + +js-base64@^2.4.9: + version "2.6.4" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" + integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== + +js-sha3@0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.1.0.tgz#36ba02e618c50748e772dd352428904cbbadcf44" + integrity sha512-AgPExLjC+sVh3GLVZdoTprN9oKoF911GFq0CMs8XVXPyfOfelpH9+NKGAn0NKqt9g38/5nPHqBOD8ObqhoSQ6Q== + dependencies: + argparse "~ 0.1.11" + esprima "~ 1.0.2" + +jsbn@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" + integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== + +jsdom@^16.4.0: + version "16.7.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" + integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== + dependencies: + abab "^2.0.5" + acorn "^8.2.4" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.3.0" + data-urls "^2.0.0" + decimal.js "^10.2.1" + domexception "^2.0.1" + escodegen "^2.0.0" + form-data "^3.0.0" + html-encoding-sniffer "^2.0.1" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.0" + parse5 "6.0.1" + saxes "^5.0.1" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.5.0" + ws "^7.4.6" + xml-name-validator "^3.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-schema-typed@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/json-schema-typed/-/json-schema-typed-7.0.3.tgz#23ff481b8b4eebcd2ca123b4fa0409e66469a2d9" + integrity sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json-stable-stringify@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + integrity sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg== + dependencies: + jsonify "~0.0.0" + +json-stable-stringify@^1.0.1, json-stable-stringify@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz#52d4361b47d49168bcc4e564189a42e5a7439454" + integrity sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg== + dependencies: + call-bind "^1.0.5" + isarray "^2.0.5" + jsonify "^0.0.1" + object-keys "^1.1.1" + +json5@^1.0.1, json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +json5@^2.1.1, json5@^2.1.2, json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@^0.0.1, jsonify@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" + integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== + +jsonschema@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.2.tgz#83ab9c63d65bf4d596f91d81195e78772f6452bc" + integrity sha512-iX5OFQ6yx9NgbHCwse51ohhKgLuLL7Z5cNOeZOPIlDUtAMrxlruHLzVZxbltdHE5mEDXN+75oFOwq6Gn0MZwsA== + +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.1.0: + version "3.3.5" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" + integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== + dependencies: + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + object.assign "^4.1.4" + object.values "^1.1.6" + +keyv@^4.0.0, keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== + dependencies: + is-buffer "^1.1.5" + +kind-of@^6.0.2, kind-of@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +klona@^2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" + integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== + +language-subtag-registry@^0.3.20: + version "0.3.23" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7" + integrity sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ== + +language-tags@^1.0.5: + version "1.0.9" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.9.tgz#1ffdcd0ec0fafb4b1be7f8b11f306ad0f9c08777" + integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA== + dependencies: + language-subtag-registry "^0.3.20" + +launch-editor@^2.6.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.1.tgz#f259c9ef95cbc9425620bbbd14b468fcdb4ffe3c" + integrity sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw== + dependencies: + picocolors "^1.0.0" + shell-quote "^1.8.1" + +lazystream@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638" + integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== + dependencies: + readable-stream "^2.0.5" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +listenercount@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" + integrity sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ== + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ== + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +loader-utils@^1.2.3, loader-utils@^1.4.0: + version "1.4.2" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.2.tgz#29a957f3a63973883eb684f10ffd3d151fec01a3" + integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +loader-utils@^2.0.0, loader-utils@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" + integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== + +lodash.difference@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" + integrity sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA== + +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== + +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + +lodash.omit@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.omit/-/lodash.omit-4.5.0.tgz#6eb19ae5a1ee1dd9df0b969e66ce0b7fa30b5e60" + integrity sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg== + +lodash.set@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" + integrity sha512-4hNPN5jlm/N/HLMCO43v8BXKq9Z7QdAGc/VGrRD61w8gN9g/6jF9A4L1pbUgBLCffi0w9VsXfTOij5x8iTyFvg== + +lodash.throttle@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" + integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ== + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== + +lodash.union@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" + integrity sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw== + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + +lodash@4.17.21, lodash@^4.17.11, 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.17.5, lodash@^4.7.0, lodash@~4.17.4: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-chopper@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-chopper/-/log-chopper-1.0.2.tgz#a88da7a47a9f0e511eda4d5e1dc840e0eaf4547a" + integrity sha512-tEWS6Fb+Xv0yLChJ6saA1DP3H1yPL0PfiIN7SDJ+U/CyP+fD4G/dhKfow+P5UuJWi6BdE4mUcPkJclGXCWxDrg== + dependencies: + byline "5.x" + +log-symbols@4.1.0, log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +log-symbols@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" + integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== + dependencies: + chalk "^2.4.2" + +long@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" + integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== + +long@^5.0.0: + version "5.2.3" + resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" + integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== + +long@~3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b" + integrity sha512-ZYvPPOMqUwPoDsbJaR10iQJYnMuZhRTvHYl62ErLIEX7RgFlziSBUUvrt3OVfc47QlHHpzPZYP17g3Fv7oeJkg== + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lottie-react@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/lottie-react/-/lottie-react-2.4.0.tgz#f7249eee2b1deee70457a2d142194fdf2456e4bd" + integrity sha512-pDJGj+AQlnlyHvOHFK7vLdsDcvbuqvwPZdMlJ360wrzGFurXeKPr8SiRCjLf3LrNYKANQtSsh5dz9UYQHuqx4w== + dependencies: + lottie-web "^5.10.2" + +lottie-web@^5.10.2: + version "5.12.2" + resolved "https://registry.yarnpkg.com/lottie-web/-/lottie-web-5.12.2.tgz#579ca9fe6d3fd9e352571edd3c0be162492f68e5" + integrity sha512-uvhvYPC8kGPjXT3MyKMrL3JitEAmDMp30lVkuq/590Mw9ok6pWcFCwXJveo0t5uqYw1UREQHofD+jVpdjBv8wg== + +lovefield@2.1.12: + version "2.1.12" + resolved "https://registry.yarnpkg.com/lovefield/-/lovefield-2.1.12.tgz#07fb9f1d7840578ec784706cad0fbe7de4c93f52" + integrity sha512-uOTF9enxl7bhyGtsWMkQTeWLpaNuJ0N0d5wH2/r6upQ3pvBEKEsiix+pwo8FHlli3SmDbrvuXo6a+HD7An99OQ== + dependencies: + js-yaml "~3.1.0" + nopt "~2.2.1" + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lru-cache@^7.7.1: + version "7.18.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== + +lru_map@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== + +macos-release@^2.2.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.5.1.tgz#bccac4a8f7b93163a8d163b8ebf385b3c5f55bf9" + integrity sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A== + +make-dir@^2.0.0, make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + +make-error-cause@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/make-error-cause/-/make-error-cause-2.3.0.tgz#ecd11875971e506d510e93d37796e5b83f46d6f9" + integrity sha512-etgt+n4LlOkGSJbBTV9VROHA5R7ekIPS4vfh+bCAoJgRrJWdqJCBbpS3osRJ/HrT7R68MzMiY3L3sDJ/Fd8aBg== + dependencies: + make-error "^1.3.5" + +make-error@^1.3.5: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +make-fetch-happen@^10.0.4: + version "10.2.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" + integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== + dependencies: + agentkeepalive "^4.2.1" + cacache "^16.1.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-fetch "^2.0.3" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^9.0.0" + +make-fetch-happen@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" + integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.2.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.2" + promise-retry "^2.0.1" + socks-proxy-agent "^6.0.0" + ssri "^8.0.0" + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +map-age-cleaner@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== + +map-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== + +map-obj@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" + integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== + dependencies: + object-visit "^1.0.0" + +markdown-loader@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/markdown-loader/-/markdown-loader-6.0.0.tgz#7f8d40ee98b32d3bb8c5387d58e679600d3edeaa" + integrity sha512-kUTEEpWRc5zcQbdjpK0QYdp/9Z5Oep440foKSXc7wWetcRxrWm4vbbXRW0Gqhht5CKJ4gm7el4HOPPyqs/ziTA== + dependencies: + loader-utils "^1.2.3" + marked "^0.7.0" + +marked@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/marked/-/marked-0.7.0.tgz#b64201f051d271b1edc10a04d1ae9b74bb8e5c0e" + integrity sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg== + +match-sorter@^6.0.2: + version "6.3.4" + resolved "https://registry.yarnpkg.com/match-sorter/-/match-sorter-6.3.4.tgz#afa779d8e922c81971fbcb4781c7003ace781be7" + integrity sha512-jfZW7cWS5y/1xswZo8VBOdudUiSd9nifYRWphc9M5D/ee4w4AoXLgBEdRbgVaxbMuagBPeUC5y2Hi8DO6o9aDg== + dependencies: + "@babel/runtime" "^7.23.8" + remove-accents "0.5.0" + +math-expression-evaluator@^1.2.14: + version "1.4.0" + resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.4.0.tgz#3d66031117fbb7b9715ea6c9c68c2cd2eebd37e2" + integrity sha512-4vRUvPyxdO8cWULGTh9dZWL2tZK6LDBvj+OGHBER7poH9Qdt7kXEoj20wiz4lQUbUXQZFjPbe5mVDo9nutizCw== + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +md5@^2.2.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" + integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== + dependencies: + charenc "0.0.2" + crypt "0.0.2" + is-buffer "~1.1.6" + +mdast-add-list-metadata@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdast-add-list-metadata/-/mdast-add-list-metadata-1.0.1.tgz#95e73640ce2fc1fa2dcb7ec443d09e2bfe7db4cf" + integrity sha512-fB/VP4MJ0LaRsog7hGPxgOrSL3gE/2uEdZyDuSEnKCv/8IkYHiDkIQSbChiJoHyxZZXZ9bzckyRk+vNxFzh8rA== + dependencies: + unist-util-visit-parents "1.1.2" + +mdast-util-from-markdown@^0.8.0: + version "0.8.5" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz#d1ef2ca42bc377ecb0463a987910dae89bd9a28c" + integrity sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ== + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-to-string "^2.0.0" + micromark "~2.11.0" + parse-entities "^2.0.0" + unist-util-stringify-position "^2.0.0" + +mdast-util-to-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" + integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== + +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" + integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +mem@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/mem/-/mem-8.1.1.tgz#cf118b357c65ab7b7e0817bdf00c8062297c0122" + integrity sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA== + dependencies: + map-age-cleaner "^0.1.3" + mimic-fn "^3.1.0" + +memfs@^3.2.0, memfs@^3.4.3: + version "3.6.0" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" + integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== + dependencies: + fs-monkey "^1.0.4" + +memfs@^4.6.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.9.2.tgz#42e7b48207268dad8c9c48ea5d4952c5d3840433" + integrity sha512-f16coDZlTG1jskq3mxarwB+fGRrd0uXWt+o1WIhRfOwbXQZqUDsTVxQBFK9JjRQHblg8eAG2JSbprDXKjc7ijQ== + dependencies: + "@jsonjoy.com/json-pack" "^1.0.3" + "@jsonjoy.com/util" "^1.1.2" + sonic-forest "^1.0.0" + tslib "^2.0.0" + +memoize-one@^5.1.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" + integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== + +meow@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-9.0.0.tgz#cd9510bc5cac9dee7d03c73ee1f9ad959f4ea364" + integrity sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize "^1.2.0" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge-options@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/merge-options/-/merge-options-3.0.4.tgz#84709c2aa2a4b24c1981f66c179fe5565cc6dbb7" + integrity sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ== + dependencies: + is-plain-obj "^2.1.0" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromark@~2.11.0: + version "2.11.4" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-2.11.4.tgz#d13436138eea826383e822449c9a5c50ee44665a" + integrity sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA== + dependencies: + debug "^4.0.0" + parse-entities "^2.0.0" + +micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.2, micromatch@^4.0.4: + version "4.0.7" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" + integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + +microseconds@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/microseconds/-/microseconds-0.2.0.tgz#233b25f50c62a65d861f978a4a4f8ec18797dc39" + integrity sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA== + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.28, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-fn@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-3.1.0.tgz#65755145bbf3e36954b949c16450427451d5ca74" + integrity sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ== + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^2.0.0, mimic-response@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" + integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +mini-create-react-context@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz#072171561bfdc922da08a60c2197a497cc2d1d5e" + integrity sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ== + dependencies: + "@babel/runtime" "^7.12.1" + tiny-warning "^1.0.3" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^3.0.4, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@~3.0.2: + version "3.0.8" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1" + integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q== + dependencies: + brace-expansion "^1.1.7" + +minimist-options@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + +minimist@1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^1.3.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" + integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== + dependencies: + minipass "^3.1.0" + minipass-sized "^1.0.3" + minizlib "^2.0.0" + optionalDependencies: + encoding "^0.1.12" + +minipass-fetch@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" + integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== + dependencies: + minipass "^3.1.6" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3, minipass@^3.1.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mixwith@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/mixwith/-/mixwith-0.1.1.tgz#c8995918c5b61fbfda9ad377a857cd47750541c0" + integrity sha512-DQsf/liljH/9e+94jR+xfK8vlKceeKdOM9H9UEXLwGuvEEpO6debNtJ9yt1ZKzPKPrwqGxzMdu0BR1fnQb6i4A== + +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + +"mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mobx-react-form@2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/mobx-react-form/-/mobx-react-form-2.0.8.tgz#ea98dd6c7d65625a25732a8a9c16ea7c71b21e3e" + integrity sha512-Z/JsXkN7B5xjG1tolHKytJiKmtLSdqkFKMco5AVagL8cQ0yJmE+iRZ212JKGHfkEKZrRWn7EDnX2STawIQFqxg== + dependencies: + lodash "^4.17.11" + +mobx-react-lite@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/mobx-react-lite/-/mobx-react-lite-2.2.2.tgz#87c217dc72b4e47b22493daf155daf3759f868a6" + integrity sha512-2SlXALHIkyUPDsV4VTKVR9DW7K3Ksh1aaIv3NrNJygTbhXe2A9GrcKHZ2ovIiOp/BXilOcTYemfHHZubP431dg== + +mobx-react-router@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/mobx-react-router/-/mobx-react-router-4.1.0.tgz#de014848207d8aa32f6a4e67ed861bd2cb6516e5" + integrity sha512-2knsbDqVorWLngZWbdO8tr7xcZXaLpVFsFlCaGaoyZ+EP9erVGRxnlWGqKyFObs3EH1JPLyTDOJ2LPTxb/lB6Q== + +mobx-react@6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/mobx-react/-/mobx-react-6.3.1.tgz#204f9756e42e19d91cb6598837063b7e7de87c52" + integrity sha512-IOxdJGnRSNSJrL2uGpWO5w9JH5q5HoxEqwOF4gye1gmZYdjoYkkMzSGMDnRCUpN/BNzZcFoMdHXrjvkwO7KgaQ== + dependencies: + mobx-react-lite "^2.2.0" + +mobx@5.15.7: + version "5.15.7" + resolved "https://registry.yarnpkg.com/mobx/-/mobx-5.15.7.tgz#b9a5f2b6251f5d96980d13c78e9b5d8d4ce22665" + integrity sha512-wyM3FghTkhmC+hQjyPGGFdpehrcX1KOXsDuERhfK2YbJemkUhEB+6wzEN639T21onxlfYBmriA1PFnvxTUhcKw== + +mocha@^10.0.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.4.0.tgz#ed03db96ee9cfc6d20c56f8e2af07b961dbae261" + integrity sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA== + dependencies: + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.3" + debug "4.3.4" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "8.1.0" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "5.0.1" + ms "2.1.3" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + workerpool "6.2.1" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + +moment@2.30.1, moment@^2.19.3, moment@^2.22.1: + version "2.30.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" + integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== + +moo-color@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/moo-color/-/moo-color-1.0.3.tgz#d56435f8359c8284d83ac58016df7427febece74" + integrity sha512-i/+ZKXMDf6aqYtBhuOcej71YSlbjT3wCO/4H1j8rPvxDJEifdwgg5MaFyu6iYAT8GBZJg2z0dkgK4YMzvURALQ== + dependencies: + color-name "^1.1.4" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.0.0, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multicast-dns@^7.2.5: + version "7.2.5" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" + integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== + dependencies: + dns-packet "^5.2.2" + thunky "^1.0.2" + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +nan@^2.13.2, nan@^2.15.0, nan@^2.17.0, nan@^2.4.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.19.0.tgz#bb58122ad55a6c5bc973303908d5b16cfdd5a8c0" + integrity sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw== + +nano-time@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/nano-time/-/nano-time-1.0.0.tgz#b0554f69ad89e22d0907f7a12b0993a5d96137ef" + integrity sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA== + dependencies: + big-integer "^1.6.16" + +nanoassert@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/nanoassert/-/nanoassert-1.1.0.tgz#4f3152e09540fde28c76f44b19bbcd1d5a42478d" + integrity sha512-C40jQ3NzfkP53NsO8kEOFd79p4b9kDXQMwgiY1z8ZwrDZgUyom0AHwGegF4Dm99L+YoYhuaB0ceerUcXmqr1rQ== + +nanoassert@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/nanoassert/-/nanoassert-2.0.0.tgz#a05f86de6c7a51618038a620f88878ed1e490c09" + integrity sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA== + +nanoid@^3.3.6, nanoid@^3.3.7: + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +napi-build-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +natural-orderby@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/natural-orderby/-/natural-orderby-2.0.3.tgz#8623bc518ba162f8ff1cdb8941d74deb0fdcc016" + integrity sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q== + +negotiator@0.6.3, negotiator@^0.6.2, negotiator@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-abi@^3.3.0: + version "3.63.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.63.0.tgz#9bfbe68b87357f8b508554608b323e9b1052d045" + integrity sha512-vAszCsOUrUxjGAmdnM/pq7gUgie0IRteCQMX6d4A534fQCR93EJU5qgzBvU6EkFfK27s0T3HEV3BOyJIr7OMYw== + dependencies: + semver "^7.3.5" + +node-addon-api@^3.0.0, node-addon-api@^3.0.2: + version "3.2.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" + integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== + +node-addon-api@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76" + integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA== + +node-addon-api@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-8.0.0.tgz#5453b7ad59dd040d12e0f1a97a6fa1c765c5c9d2" + integrity sha512-ipO7rsHEBqa9STO5C5T10fj732ml+5kLN1cAG8/jdHd56ldQeGj3Q7+scUS+VHK/qy1zLEwC4wMK5+yM0btPvw== + +node-environment-flags@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088" + integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw== + dependencies: + object.getownpropertydescriptors "^2.0.3" + semver "^5.7.0" + +node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.7: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-forge@^1: + 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.2.2, node-gyp-build@^4.5.0: + version "4.8.1" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.1.tgz#976d3ad905e71b76086f4f0b0d3637fe79b6cda5" + integrity sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw== + +node-gyp@^8.4.1: + version "8.4.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" + integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^9.1.0" + nopt "^5.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + +node-hid@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/node-hid/-/node-hid-2.2.0.tgz#33e039e7530a7bfe2b7a25f0a2f9496af8b02236" + integrity sha512-vj48zh9j555DZzUhMc8tk/qw6xPFrDyPBH1ST1Z/hWaA/juBJw7IuSxPeOgpzNFNU36mGYj+THioRMt1xOdm/g== + dependencies: + bindings "^1.5.0" + node-addon-api "^3.0.2" + prebuild-install "^7.1.1" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-notifier@^8.0.0: + version "8.0.2" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" + integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== + dependencies: + growly "^1.3.0" + is-wsl "^2.2.0" + semver "^7.3.2" + shellwords "^0.1.1" + uuid "^8.3.0" + which "^2.0.2" + +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== + +node-rsa@^1.0.5: + version "1.1.1" + resolved "https://registry.yarnpkg.com/node-rsa/-/node-rsa-1.1.1.tgz#efd9ad382097782f506153398496f79e4464434d" + integrity sha512-Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw== + dependencies: + asn1 "^0.2.4" + +node-sass@9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-9.0.0.tgz#c21cd17bd9379c2d09362b3baf2cbf089bce08ed" + integrity sha512-yltEuuLrfH6M7Pq2gAj5B6Zm7m+gdZoG66wTqG6mIZV/zijq3M2OO2HswtT6oBspPyFhHDcaxWpsBm0fRNDHPg== + dependencies: + async-foreach "^0.1.3" + chalk "^4.1.2" + cross-spawn "^7.0.3" + gaze "^1.0.0" + get-stdin "^4.0.1" + glob "^7.0.3" + lodash "^4.17.15" + make-fetch-happen "^10.0.4" + meow "^9.0.0" + nan "^2.17.0" + node-gyp "^8.4.1" + sass-graph "^4.0.1" + stdout-stream "^1.4.0" + "true-case-path" "^2.2.1" + +nofilter@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66" + integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== + +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + +nopt@~2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-2.2.1.tgz#2aa09b7d1768487b3b89a9c5aa52335bff0baea7" + integrity sha512-gIOTA/uJuhPwFqp+spY7VQ1satbnGlD+iQVZxI18K6hs8Evq4sX81Ml7BB5byP/LsbR2yBVtmvdEmhi7evJ6Aw== + dependencies: + abbrev "1" + +normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" + integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== + dependencies: + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +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" + integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.0, npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npmlog@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" + +nth-check@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +nwsapi@^2.2.0: + version "2.2.10" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.10.tgz#0b77a68e21a0b483db70b11fad055906e867cda8" + integrity sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ== + +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-hash@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" + integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== + +object-inspect@^1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + +object-is@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" + integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-treeify@^1.1.4: + version "1.1.33" + resolved "https://registry.yarnpkg.com/object-treeify/-/object-treeify-1.1.33.tgz#f06fece986830a3cba78ddd32d4c11d1f76cdf40" + integrity sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0, object.assign@^4.1.2, object.assign@^4.1.4, object.assign@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.entries@^1.1.2: + version "1.1.8" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" + integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +object.fromentries@^2.0.2: + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + +object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: + version "2.1.8" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz#2f1fe0606ec1a7658154ccd4f728504f69667923" + integrity sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A== + dependencies: + array.prototype.reduce "^1.0.6" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + gopd "^1.0.1" + safe-array-concat "^1.1.2" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== + dependencies: + isobject "^3.0.1" + +object.values@^1.1.0, object.values@^1.1.1, object.values@^1.1.6: + version "1.2.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" + integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +oblivious-set@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/oblivious-set/-/oblivious-set-1.0.0.tgz#c8316f2c2fb6ff7b11b6158db3234c49f733c566" + integrity sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw== + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +octokit-pagination-methods@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" + integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ== + +on-finished@2.4.1, on-finished@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^7.3.1: + version "7.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + +open@^8.0.9: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +optionator@^0.9.1: + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.5" + +ora@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-4.1.1.tgz#566cc0348a15c36f5f0e979612842e02ba9dddbc" + integrity sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A== + dependencies: + chalk "^3.0.0" + cli-cursor "^3.1.0" + cli-spinners "^2.2.0" + is-interactive "^1.0.0" + log-symbols "^3.0.0" + mute-stream "0.0.8" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +os-name@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" + integrity sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg== + dependencies: + macos-release "^2.2.0" + windows-release "^3.1.0" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== + +p-each-series@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" + integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== + +p-event@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/p-event/-/p-event-4.2.0.tgz#af4b049c8acd91ae81083ebd1e6f5cae2044c1b5" + integrity sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ== + dependencies: + p-timeout "^3.1.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-retry@^4.5.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" + integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== + dependencies: + "@types/retry" "0.12.0" + retry "^0.13.1" + +p-timeout@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== + dependencies: + p-finally "^1.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +param-case@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-asn1@^5.0.0, parse-asn1@^5.1.7: + version "5.1.7" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.7.tgz#73cdaaa822125f9647165625eb45f8a051d2df06" + integrity sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg== + dependencies: + asn1.js "^4.10.1" + browserify-aes "^1.2.0" + evp_bytestokey "^1.0.3" + hash-base "~3.0" + pbkdf2 "^3.1.2" + safe-buffer "^5.2.1" + +parse-entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" + integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ== + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== + +parse5-sax-parser@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz#98b4d366b5b266a7cd90b4b58906667af882daba" + integrity sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg== + dependencies: + parse5 "^6.0.1" + +parse5@6.0.1, parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parse5@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" + integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA== + dependencies: + "@types/node" "*" + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== + +password-prompt@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/password-prompt/-/password-prompt-1.1.3.tgz#05e539f4e7ca4d6c865d479313f10eb9db63ee5f" + integrity sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw== + dependencies: + ansi-escapes "^4.3.2" + cross-spawn "^7.0.3" + +path-browserify@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +path-to-regexp@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.0.tgz#f7b3803336104c346889adece614669230645f38" + integrity sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg== + +path-to-regexp@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + dependencies: + isarray "0.0.1" + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ== + dependencies: + pify "^2.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pathval@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +pbf@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/pbf/-/pbf-3.2.1.tgz#b4c1b9e72af966cd82c6531691115cc0409ffe2a" + integrity sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ== + dependencies: + ieee754 "^1.1.12" + resolve-protobuf-schema "^2.1.0" + +pbkdf2@3.1.2, pbkdf2@^3.0.3, pbkdf2@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +php-parser@^3.0.0-prerelease.8: + version "3.1.5" + resolved "https://registry.yarnpkg.com/php-parser/-/php-parser-3.1.5.tgz#84500e5b5c6a0907e32c38b931bb4e7d3f275026" + integrity sha512-jEY2DcbgCm5aclzBdfW86GM6VEIWcSlhTBSHN1qhJguVePlYe28GhwS0yoeLYXpM2K8y6wzLwrbq814n2PHSoQ== + +picocolors@^1.0.0, picocolors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pirates@^4.0.0, pirates@^4.0.1, pirates@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + +pkce-challenge@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/pkce-challenge/-/pkce-challenge-2.2.0.tgz#02622e0498b82aab248c8c7dbf6507e8bbe20abf" + integrity sha512-Ly0Y0OwhtG2N1ynk5ruqoyJxkrWhAPmvdRk0teiLh9Dp2+J4URKpv1JSKWD0j1Sd+QCeiwO9lTl0EjmrB2jWeA== + +pkg-config@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pkg-config/-/pkg-config-1.1.1.tgz#557ef22d73da3c8837107766c52eadabde298fe4" + integrity sha512-ft/WI9YK6FuTuw4Ql+QUaNXtm/ASQNqDUUsZEgFZKyFpW6amyP8Gx01xrRs8KdiNbbqXfYxkOXplpq1euWbOjw== + dependencies: + debug-log "^1.0.0" + find-root "^1.0.0" + xtend "^4.0.1" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.1.0, pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pkg-up@^3.0.1, pkg-up@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== + dependencies: + find-up "^3.0.0" + +popsicle-content-encoding@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/popsicle-content-encoding/-/popsicle-content-encoding-1.0.0.tgz#2ab419083fee0387bf6e64d21b1a9af560795adb" + integrity sha512-4Df+vTfM8wCCJVTzPujiI6eOl3SiWQkcZg0AMrOkD1enMXsF3glIkFUZGvour1Sj7jOWCsNSEhBxpbbhclHhzw== + +popsicle-cookie-jar@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/popsicle-cookie-jar/-/popsicle-cookie-jar-1.0.1.tgz#a33bdafac85fe499989c73805216b71db2ef328d" + integrity sha512-QVIZhADP8nDbXIQW6wq8GU9IOSE8INUACO/9KD9TFKQ7qq8r/y3qUDz59xIi6p6TH19lCJJyBAPSXP1liIoySw== + dependencies: + "@types/tough-cookie" "^4.0.2" + tough-cookie "^4.1.3" + +popsicle-redirects@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/popsicle-redirects/-/popsicle-redirects-1.1.1.tgz#da0936ed97f0ea22b16daa028bc624cb5b6ce05d" + integrity sha512-mC2HrKjdTAWDalOjGxlXw9j6Qxrz/Yd2ui6bPxpi2IQDYWpF4gUAMxbA8EpSWJhLi0PuWKDwTHHPrUPGutAoIA== + +popsicle-transport-http@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/popsicle-transport-http/-/popsicle-transport-http-1.2.1.tgz#35fdf4a59f429470b13b62f4223ec0249e3a163b" + integrity sha512-i5r3IGHkGiBDm1oPFvOfEeSGWR0lQJcsdTqwvvDjXqcTHYJJi4iSi3ecXIttDiTBoBtRAFAE9nF91fspQr63FQ== + dependencies: + make-error-cause "^2.2.0" + +popsicle-transport-xhr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/popsicle-transport-xhr/-/popsicle-transport-xhr-2.0.0.tgz#23d5fabb0e50e321d50219860825c27cd827ddd9" + integrity sha512-5Sbud4Widngf1dodJE5cjEYXkzEUIl8CzyYRYR57t6vpy9a9KPGQX6KBKdPjmBZlR5A06pOBXuJnVr23l27rtA== + +popsicle-user-agent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/popsicle-user-agent/-/popsicle-user-agent-1.0.0.tgz#976af355b605966168733c4e03ad1e4f783f5d48" + integrity sha512-epKaq3TTfTzXcxBxjpoKYMcTTcAX8Rykus6QZu77XNhJuRHSRxMd+JJrbX/3PFI0opFGSN0BabbAYCbGxbu0mA== + +popsicle@^12.0.5: + version "12.1.2" + resolved "https://registry.yarnpkg.com/popsicle/-/popsicle-12.1.2.tgz#75dc39873dabc12b17ecb3ee19d033cce976fb40" + integrity sha512-xE2vEUa15TiHvFhGmKTtdKk9aSLL5CHX8Vw5kHfVM3R0YHiaTon6Ybsamw0XYqMR+Ng2RijX88iYUKPBMpLBww== + dependencies: + popsicle-content-encoding "^1.0.0" + popsicle-cookie-jar "^1.0.1" + popsicle-redirects "^1.1.0" + popsicle-transport-http "^1.1.0" + popsicle-transport-xhr "^2.0.0" + popsicle-user-agent "^1.0.0" + servie "^4.3.3" + throwback "^4.1.0" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== + +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + +postcss-loader@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-5.0.0.tgz#bea95363dcb550d72ceb612ce44663356b7782d7" + integrity sha512-bOvyWP5VHCJbThbv7wrBwCBc3DsVpyCfd+k/wHOL3wTAMMHmSSfNts90EADf8bHa6I810ird1JBEKmBRgJu3cg== + dependencies: + cosmiconfig "^7.0.0" + klona "^2.0.4" + semver "^7.3.4" + +postcss-modules-extract-imports@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz#b4497cb85a9c0c4b5aabeb759bb25e8d89f15002" + integrity sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q== + +postcss-modules-local-by-default@^4.0.0: + version "4.0.5" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz#f1b9bd757a8edf4d8556e8d0f4f894260e3df78f" + integrity sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz#a43d28289a169ce2c15c00c4e64c0858e43457d5" + integrity sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ== + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== + dependencies: + icss-utils "^5.0.0" + +postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz#49694cb4e7c649299fea510a29fa6577104bcf53" + integrity sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-value-parser@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@8.4.31: + version "8.4.31" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" + integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +postcss@^8.2.4: + version "8.4.38" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" + integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.0" + source-map-js "^1.2.0" + +prebuild-install@^7.1.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.2.tgz#a5fd9986f5a6251fbc47e1e5c65de71e68c0a056" + integrity sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ== + dependencies: + detect-libc "^2.0.0" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^1.0.1" + node-abi "^3.3.0" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^4.0.0" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" + integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== + +prettier@2.8.8, prettier@^2.5.1: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + +prettier@^1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" + integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== + +pretty-error@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" + integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== + dependencies: + lodash "^4.17.20" + renderkid "^2.0.4" + +pretty-format@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" + integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== + dependencies: + "@jest/types" "^26.6.2" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^17.0.1" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0, 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== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +protobufjs@7.2.4: + version "7.2.4" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.2.4.tgz#3fc1ec0cdc89dd91aef9ba6037ba07408485c3ae" + integrity sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/node" ">=13.7.0" + long "^5.0.0" + +protocol-buffers-schema@^3.3.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz#77bc75a48b2ff142c1ad5b5b90c94cd0fa2efd03" + integrity sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw== + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +psl@^1.1.33: + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0, punycode@^2.1.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +pushdata-bitcoin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/pushdata-bitcoin/-/pushdata-bitcoin-1.0.1.tgz#15931d3cd967ade52206f523aa7331aef7d43af7" + integrity sha512-hw7rcYTJRAl4olM8Owe8x0fBuJJ+WGbMhQuLWOXEMN3PxPCKQHRkhfL+XG0+iXUmSHjkMmb3Ba55Mt21cZc9kQ== + dependencies: + bitcoin-ops "^1.3.0" + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== + +qrcode.react@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/qrcode.react/-/qrcode.react-3.1.0.tgz#5c91ddc0340f768316fbdb8fff2765134c2aecd8" + integrity sha512-oyF+Urr3oAMUG/OiOuONL3HXM+53wvuH3mtIWQrYmsXoAq0DkvZp2RYUWFSMFtbdOpuS++9v+WAkzNVkMlNW6Q== + +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +querystring@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd" + integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg== + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== + +raf-schd@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/raf-schd/-/raf-schd-4.0.3.tgz#5d6c34ef46f8b2a0e880a8fcdb743efc5bfdbc1a" + integrity sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ== + +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" + +randombytes@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.3.tgz#674c99760901c3c4112771a31e521dc349cc09ec" + integrity sha512-lDVjxQQFoCG1jcrP06LNo2lbWp4QTShEXnhActFBwYuHprllQV6VUpwreApsYqCgD+N1mHoqJ/BI/4eV4R2GYg== + +randombytes@2.1.0, randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +randomstring@^1.1.5: + version "1.3.0" + resolved "https://registry.yarnpkg.com/randomstring/-/randomstring-1.3.0.tgz#1bf9d730066899e70aee3285573f84708278683d" + integrity sha512-gY7aQ4i1BgwZ8I1Op4YseITAyiDiajeZOPQUbIq9TPGPhUm5FX59izIaOpmKbME1nmnEiABf28d9K2VSii6BBg== + dependencies: + randombytes "2.0.3" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +raw-loader@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.2.tgz#1aac6b7d1ad1501e66efdac1522c73e59a584eb6" + integrity sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-beautiful-dnd@13.1.1: + version "13.1.1" + resolved "https://registry.yarnpkg.com/react-beautiful-dnd/-/react-beautiful-dnd-13.1.1.tgz#b0f3087a5840920abf8bb2325f1ffa46d8c4d0a2" + integrity sha512-0Lvs4tq2VcrEjEgDXHjT98r+63drkKEgqyxdA7qD3mvKwga6a5SscbdLPO2IExotU1jW8L0Ksdl0Cj2AF67nPQ== + dependencies: + "@babel/runtime" "^7.9.2" + css-box-model "^1.2.0" + memoize-one "^5.1.1" + raf-schd "^4.0.2" + react-redux "^7.2.0" + redux "^4.0.4" + use-memo-one "^1.1.1" + +react-blockies@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/react-blockies/-/react-blockies-1.4.1.tgz#d4f0faf95ac197213a297a370a4d7f77ea3d0b08" + integrity sha512-4N015X5oPNnD3xQPsiqolOFzPZSSWyc5mJhJUZShUCHtiGUxVN+1qsWTcglkHMNySux9hUofaispqcw9QkWP5Q== + dependencies: + prop-types "^15.5.10" + +react-copy-to-clipboard@5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.3.tgz#2a0623b1115a1d8c84144e9434d3342b5af41ab4" + integrity sha512-9S3j+m+UxDZOM0Qb8mhnT/rMR0NGSrj9A/073yz2DSxPMYhmYFBMYIdI2X4o8AjOjyFsSNxDRnCX6s/gRxpriw== + dependencies: + copy-to-clipboard "^3" + prop-types "^15.5.8" + +react-dom@17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" + integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + scheduler "^0.20.2" + +react-intl-translations-manager@5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/react-intl-translations-manager/-/react-intl-translations-manager-5.0.3.tgz#aee010ecf35975673e033ca5d7d3f4147894324d" + integrity sha512-EfBeugnOGFcdUbQyY9TqBMbuauQ8wm73ZqFr0UqCljhbXl7YDHQcVzclWFRkVmlUffzxitLQFhAZEVVeRNQSwA== + dependencies: + chalk "^2.3.2" + glob "^7.1.2" + json-stable-stringify "^1.0.1" + mkdirp "^0.5.1" + +react-intl@*: + version "6.6.8" + resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-6.6.8.tgz#cb60c90502d0025caf9f86ec298cdc4348da17c2" + integrity sha512-M0pkhzcgV31h++2901BiRXWl69hp2zPyLxRrSwRjd1ErXbNoubz/f4M6DrRTd4OiSUrT4ajRQzrmtS5plG4FtA== + dependencies: + "@formatjs/ecma402-abstract" "2.0.0" + "@formatjs/icu-messageformat-parser" "2.7.8" + "@formatjs/intl" "2.10.4" + "@formatjs/intl-displaynames" "6.6.8" + "@formatjs/intl-listformat" "7.5.7" + "@types/hoist-non-react-statics" "^3.3.1" + "@types/react" "16 || 17 || 18" + hoist-non-react-statics "^3.3.2" + intl-messageformat "10.5.14" + tslib "^2.4.0" + +react-intl@2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-2.9.0.tgz#c97c5d17d4718f1575fdbd5a769f96018a3b1843" + integrity sha512-27jnDlb/d2A7mSJwrbOBnUgD+rPep+abmoJE511Tf8BnoONIAUehy/U1zZCHGO17mnOwMWxqN4qC0nW11cD6rA== + dependencies: + hoist-non-react-statics "^3.3.0" + intl-format-cache "^2.0.5" + intl-messageformat "^2.1.0" + intl-relativeformat "^2.1.0" + invariant "^2.1.1" + +react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.6: + 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@^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@^18.2.0: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== + +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-markdown@5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-5.0.3.tgz#41040ea7a9324b564b328fb81dd6c04f2a5373ac" + integrity sha512-jDWOc1AvWn0WahpjW6NK64mtx6cwjM4iSsLHJPNBqoAgGOVoIdJMqaKX4++plhOtdd4JksdqzlDibgPx6B/M2w== + dependencies: + "@types/mdast" "^3.0.3" + "@types/unist" "^2.0.3" + html-to-react "^1.3.4" + mdast-add-list-metadata "1.0.1" + prop-types "^15.7.2" + react-is "^16.8.6" + remark-parse "^9.0.0" + unified "^9.0.0" + unist-util-visit "^2.0.0" + xtend "^4.0.1" + +react-query@^3.39.3: + version "3.39.3" + resolved "https://registry.yarnpkg.com/react-query/-/react-query-3.39.3.tgz#4cea7127c6c26bdea2de5fb63e51044330b03f35" + integrity sha512-nLfLz7GiohKTJDuT4us4X3h/8unOh+00MLb2yJoGTPjxKs2bc1iDhkNx2bd5MKklXnOD3NrVZ+J2UXujA5In4g== + dependencies: + "@babel/runtime" "^7.5.5" + broadcast-channel "^3.4.1" + match-sorter "^6.0.2" + +react-redux@^7.2.0: + version "7.2.9" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.9.tgz#09488fbb9416a4efe3735b7235055442b042481d" + integrity sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ== + dependencies: + "@babel/runtime" "^7.15.4" + "@types/react-redux" "^7.1.20" + hoist-non-react-statics "^3.3.2" + loose-envify "^1.4.0" + prop-types "^15.7.2" + react-is "^17.0.2" + +react-refresh@0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.9.0.tgz#71863337adc3e5c2f8a6bfddd12ae3bfe32aafbf" + integrity sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ== + +react-resize-detector@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/react-resize-detector/-/react-resize-detector-2.3.0.tgz#57bad1ae26a28a62a2ddb678ba6ffdf8fa2b599c" + integrity sha512-oCAddEWWeFWYH5FAcHdBYcZjAw9fMzRUK9sWSx6WvSSOPVRxcHd5zTIGy/mOus+AhN/u6T4TMiWxvq79PywnJQ== + dependencies: + lodash.debounce "^4.0.8" + lodash.throttle "^4.1.1" + prop-types "^15.6.0" + resize-observer-polyfill "^1.5.0" + +react-router-dom@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.2.0.tgz#9e65a4d0c45e13289e66c7b17c7e175d0ea15662" + integrity sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA== + dependencies: + "@babel/runtime" "^7.1.2" + history "^4.9.0" + loose-envify "^1.3.1" + prop-types "^15.6.2" + react-router "5.2.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-router@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.2.0.tgz#424e75641ca8747fbf76e5ecca69781aa37ea293" + integrity sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw== + dependencies: + "@babel/runtime" "^7.1.2" + history "^4.9.0" + hoist-non-react-statics "^3.1.0" + loose-envify "^1.3.1" + mini-create-react-context "^0.4.0" + path-to-regexp "^1.7.0" + prop-types "^15.6.2" + react-is "^16.6.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-smooth@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/react-smooth/-/react-smooth-1.0.6.tgz#18b964f123f7bca099e078324338cd8739346d0a" + integrity sha512-B2vL4trGpNSMSOzFiAul9kFAsxTukL9Wyy9EXtkQy3GJr6sZqW9e1nShdVOJ3hRYamPZ94O17r3Q0bjSw3UYtg== + dependencies: + lodash "~4.17.4" + prop-types "^15.6.0" + raf "^3.4.0" + react-transition-group "^2.5.0" + +react-transition-group@^2.5.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-transition-group@^4.4.5: + version "4.4.5" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" + integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== + dependencies: + "@babel/runtime" "^7.5.5" + dom-helpers "^5.0.1" + loose-envify "^1.4.0" + prop-types "^15.6.2" + +react@17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" + integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha512-1orxQfbWGUiTn9XsPlChs6rLie/AV9jwZTGmu2NZw/CUDJQchXJFYE0Fq5j7+n558T1JhDWLdhyd1Zj+wLY//w== + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha512-eFIBOPW7FGjzBuk3hdXEuNSiTZS/xEMlH49HxMyzb0hyPfu4EhVjT2DH32K1hSSmVq4sebAWnZuuY5auISUTGA== + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +readable-stream@^1.0.33: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.3.6, readable-stream@^2.3.8, readable-stream@~2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +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.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +recharts-scale@^0.4.2: + 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@1.8.5: + version "1.8.5" + resolved "https://registry.yarnpkg.com/recharts/-/recharts-1.8.5.tgz#ca94a3395550946334a802e35004ceb2583fdb12" + integrity sha512-tM9mprJbXVEBxjM7zHsIy6Cc41oO/pVYqyAsOHLxlJrbNBuLs0PHB3iys2M+RqCF0//k8nJtZF6X6swSkWY3tg== + dependencies: + classnames "^2.2.5" + core-js "^2.6.10" + d3-interpolate "^1.3.0" + d3-scale "^2.1.0" + d3-shape "^1.2.0" + lodash "^4.17.5" + prop-types "^15.6.0" + react-resize-detector "^2.3.0" + react-smooth "^1.0.5" + recharts-scale "^0.4.2" + reduce-css-calc "^1.3.0" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== + dependencies: + resolve "^1.1.6" + +rechoir@^0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" + integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== + dependencies: + resolve "^1.9.0" + +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +redeyed@~2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-2.1.1.tgz#8984b5815d99cb220469c99eeeffe38913e6cc0b" + integrity sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ== + dependencies: + esprima "~4.0.0" + +reduce-css-calc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" + integrity sha512-0dVfwYVOlf/LBA2ec4OwQ6p3X9mYxn/wOl2xTcLwjnPYrkgEfPx3VI4eGCH3rQLlPISG5v9I9bkZosKsNRTRKA== + dependencies: + balanced-match "^0.4.2" + math-expression-evaluator "^1.2.14" + reduce-function-call "^1.0.1" + +reduce-function-call@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.3.tgz#60350f7fb252c0a67eb10fd4694d16909971300f" + integrity sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ== + dependencies: + balanced-match "^1.0.0" + +redux@^4.0.0, redux@^4.0.4: + version "4.2.1" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.1.tgz#c08f4306826c49b5e9dc901dee0452ea8fce6197" + integrity sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w== + dependencies: + "@babel/runtime" "^7.9.2" + +regenerate-unicode-properties@^10.1.0: + version "10.1.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" + integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regenerator-runtime@^0.13.4: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + +regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== + dependencies: + "@babel/runtime" "^7.8.4" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexp.prototype.flags@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" + integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== + dependencies: + call-bind "^1.0.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" + +regexpp@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +regexpu-core@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== + dependencies: + "@babel/regjsgen" "^0.8.0" + regenerate "^1.4.2" + regenerate-unicode-properties "^10.1.0" + regjsparser "^0.9.1" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== + dependencies: + jsesc "~0.5.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== + +remark-parse@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-9.0.0.tgz#4d20a299665880e4f4af5d90b7c7b8a935853640" + integrity sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw== + dependencies: + mdast-util-from-markdown "^0.8.0" + +remove-accents@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.5.0.tgz#77991f37ba212afba162e375b627631315bed687" + integrity sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A== + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== + +renderkid@^2.0.4: + version "2.0.7" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.7.tgz#464f276a6bdcee606f4a15993f9b29fc74ca8609" + integrity sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ== + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^3.0.1" + +repeat-element@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +requireindex@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.2.0.tgz#3463cdb22ee151902635aa6c9535d4de9c2ef1ef" + integrity sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +reselect@^4.0.0: + version "4.1.8" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.8.tgz#3f5dc671ea168dccdeb3e141236f69f02eaec524" + integrity sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ== + +resize-observer-polyfill@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-pathname@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" + integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== + +resolve-protobuf-schema@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz#9ca9a9e69cf192bbdaf1006ec1973948aa4a3758" + integrity sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ== + dependencies: + protocol-buffers-schema "^3.3.1" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== + +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.19.0, resolve@^1.22.4, resolve@^1.9.0: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== + dependencies: + lowercase-keys "^2.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rifm@^0.12.1: + version "0.12.1" + resolved "https://registry.yarnpkg.com/rifm/-/rifm-0.12.1.tgz#8fa77f45b7f1cda2a0068787ac821f0593967ac4" + integrity sha512-OGA1Bitg/dSJtI/c4dh90svzaUPt228kzFsUkJbtA2c964IqEAwWXeL9ZJi86xWv3j5SMqRvGULl7bA6cK0Bvg== + +rimraf@2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +ripple-address-codec@^4.1.1, ripple-address-codec@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ripple-address-codec/-/ripple-address-codec-4.3.1.tgz#68fbaf646bb8567f70743af7f1ce4479f73efbf6" + integrity sha512-Qa3+9wKVvpL/xYtT6+wANsn0A1QcC5CT6IMZbRJZ/1lGt7gmwIfsrCuz1X0+LCEO7zgb+3UT1I1dc0k/5dwKQQ== + dependencies: + base-x "^3.0.9" + create-hash "^1.1.2" + +ripple-binary-codec@^1.1.3: + version "1.11.0" + resolved "https://registry.yarnpkg.com/ripple-binary-codec/-/ripple-binary-codec-1.11.0.tgz#d99c848c51a19746b738785001fb7208704bfe30" + integrity sha512-g7+gs3T+NfoeW6vIq5dcN0CkIT4t/zwRzFxz8X2RzfbrWRnewPUKqQbmBgs05tXLX5NuWPaneiaAVpFpYBcdfw== + dependencies: + assert "^2.0.0" + big-integer "^1.6.48" + buffer "6.0.3" + create-hash "^1.2.0" + decimal.js "^10.2.0" + ripple-address-codec "^4.3.1" + +ripple-keypairs@^1.0.3: + version "1.3.1" + resolved "https://registry.yarnpkg.com/ripple-keypairs/-/ripple-keypairs-1.3.1.tgz#7fa531df36b138134afb53555a87d7f5eb465b2e" + integrity sha512-dmPlraWKJciFJxHcoubDahGnoIalG5e/BtV6HNDUs7wLXmtnLMHt6w4ed9R8MTL2zNrVPiIdI/HCtMMo0Tm7JQ== + dependencies: + bn.js "^5.1.1" + brorand "^1.0.5" + elliptic "^6.5.4" + hash.js "^1.0.3" + ripple-address-codec "^4.3.1" + +ripple-lib-transactionparser@0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/ripple-lib-transactionparser/-/ripple-lib-transactionparser-0.8.2.tgz#7aaad3ba1e1aeee1d5bcff32334a7a838f834dce" + integrity sha512-1teosQLjYHLyOQrKUQfYyMjDR3MAq/Ga+MJuLUfpBMypl4LZB4bEoMcmG99/+WVTEiZOezJmH9iCSvm/MyxD+g== + dependencies: + bignumber.js "^9.0.0" + lodash "^4.17.15" + +ripple-lib@^1.10.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/ripple-lib/-/ripple-lib-1.10.1.tgz#9c353702792b25465cdb269265d6f5bb27b1471b" + integrity sha512-OQk+Syl2JfxKxV2KuF/kBMtnh012I5tNnziP3G4WDGCGSIAgeqkOgkR59IQ0YDNrs1YW8GbApxrdMSRi/QClcA== + dependencies: + "@types/lodash" "^4.14.136" + "@types/ws" "^7.2.0" + bignumber.js "^9.0.0" + https-proxy-agent "^5.0.0" + jsonschema "1.2.2" + lodash "^4.17.4" + ripple-address-codec "^4.1.1" + ripple-binary-codec "^1.1.3" + ripple-keypairs "^1.0.3" + ripple-lib-transactionparser "0.8.2" + ws "^7.2.0" + +rsvp@^4.8.4: + version "4.8.5" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== + +run-async@^2.4.0, run-async@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-parallel@^1.1.2, run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rxjs@6: + version "6.6.7" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== + dependencies: + tslib "^1.9.0" + +rxjs@^7.2.0, rxjs@^7.5.4, rxjs@^7.5.5, rxjs@^7.8.1: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + +safe-array-concat@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" + integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + has-symbols "^1.0.3" + isarray "^2.0.5" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-regex "^1.1.4" + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sane@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== + dependencies: + "@cnakazawa/watch" "^1.0.3" + anymatch "^2.0.0" + capture-exit "^2.0.0" + exec-sh "^0.3.2" + execa "^1.0.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + +sass-graph@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-4.0.1.tgz#2ff8ca477224d694055bf4093f414cf6cfad1d2e" + integrity sha512-5YCfmGBmxoIRYHnKK2AKzrAkCoQ8ozO+iumT8K4tXJXRVCPf+7s1/9KxTSW3Rbvf+7Y7b4FR3mWyLnQr3PHocA== + dependencies: + glob "^7.0.0" + lodash "^4.17.11" + scss-tokenizer "^0.4.3" + yargs "^17.2.1" + +sass-loader@11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-11.0.1.tgz#8672f896593466573b904f47693e0695368e38c9" + integrity sha512-Vp1LcP4slTsTNLEiDkTcm8zGN/XYYrZz2BZybQbliWA8eXveqA/AxsEjllQTpJbg2MzCsx/qNO48sHdZtOaxTw== + dependencies: + klona "^2.0.4" + neo-async "^2.6.2" + +sax@~1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + +scheduler@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" + integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +schema-utils@^2.2.0, schema-utils@^2.6.5, schema-utils@^2.6.6: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.0.0, schema-utils@^3.1.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" + integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" + integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.9.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.1.0" + +scss-tokenizer@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.4.3.tgz#1058400ee7d814d71049c29923d2b25e61dc026c" + integrity sha512-raKLgf1LI5QMQnG+RxHz6oK0sL3x3I4FN2UDLqgLOGO8hodECNnNh5BXn7fAyBxrA8zVzdQizQ6XjNJQ+uBwMw== + dependencies: + js-base64 "^2.4.9" + source-map "^0.7.3" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== + +selfsigned@^2.1.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.4.1.tgz#560d90565442a3ed35b674034cec4e95dceb4ae0" + integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q== + dependencies: + "@types/node-forge" "^1.3.0" + node-forge "^1" + +"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +semver@7.6.0: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + +semver@^6.0.0, semver@^6.2.0, semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4: + version "7.6.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" + integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== + +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-javascript@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + +serialize-javascript@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea" + integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg== + dependencies: + randombytes "^2.1.0" + +serialize-javascript@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== + dependencies: + randombytes "^2.1.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +servie@^4.3.3: + version "4.3.3" + resolved "https://registry.yarnpkg.com/servie/-/servie-4.3.3.tgz#4a9ffed6842cd0523003ad0ae9c0c8079f37718f" + integrity sha512-b0IrY3b1gVMsWvJppCf19g1p3JSnS0hQi6xu4Hi40CIhf0Lx8pQHcvBL+xunShpmOiQzg1NOia812NAWdSaShw== + dependencies: + "@servie/events" "^1.0.0" + byte-length "^1.0.2" + ts-expect "^1.1.0" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.1, set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@~1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== + +shelljs@0.8.4: + version "0.8.4" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" + integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +shelljs@^0.8.4: + version "0.8.5" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" + integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== + +side-channel@^1.0.4, side-channel@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" + +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sockjs@^0.3.24: + version "0.3.24" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" + integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== + dependencies: + faye-websocket "^0.11.3" + uuid "^8.3.2" + websocket-driver "^0.7.4" + +socks-proxy-agent@6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz#e664e8f1aaf4e1fb3df945f09e3d94f911137f87" + integrity sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew== + dependencies: + agent-base "^6.0.2" + debug "^4.3.1" + socks "^2.6.1" + +socks-proxy-agent@^6.0.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" + integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" + integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks@^2.6.1, socks@^2.6.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5" + integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw== + dependencies: + ip-address "^9.0.5" + smart-buffer "^4.2.0" + +sonic-forest@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sonic-forest/-/sonic-forest-1.0.3.tgz#81363af60017daba39b794fce24627dc412563cb" + integrity sha512-dtwajos6IWMEWXdEbW1IkEkyL2gztCAgDplRIX+OT5aRKnEd5e7r7YCxRgXZdhRP1FBdOBf8axeTPhzDv8T4wQ== + dependencies: + tree-dump "^1.0.0" + +source-list-map@^2.0.0, source-list-map@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-js@^1.0.2, source-map-js@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" + integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.5.16, source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + +source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.3: + version "0.7.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + +spawn-command@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2.tgz#9544e1a43ca045f8531aac1a48cb29bdae62338e" + integrity sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ== + +spdx-correct@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.18" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz#22aa922dcf2f2885a6494a261f2d8b75345d0326" + integrity sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +ssri@^8.0.0, ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + dependencies: + minipass "^3.1.1" + +ssri@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" + integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== + dependencies: + minipass "^3.1.1" + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +stack-utils@^2.0.2: + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== + dependencies: + escape-string-regexp "^2.0.0" + +stackframe@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" + integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +stdout-stream@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de" + integrity sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA== + dependencies: + readable-stream "^2.0.1" + +stoppable@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/stoppable/-/stoppable-1.1.0.tgz#32da568e83ea488b08e4d7ea2c3bcc9d75015d5b" + integrity sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw== + +stream-browserify@3.0.0, stream-browserify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f" + integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA== + dependencies: + inherits "~2.0.4" + readable-stream "^3.5.0" + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-natural-compare@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" + integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string.prototype.matchall@^4.0.2: + version "4.0.11" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a" + integrity sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.7" + regexp.prototype.flags "^1.5.2" + set-function-name "^2.0.2" + side-channel "^1.0.6" + +string.prototype.trim@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" + integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" + +string.prototype.trimend@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" + integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +style-loader@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-2.0.0.tgz#9669602fd4690740eaaec137799a03addbbc393c" + integrity sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +stylis@4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" + integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== + +supports-color@8.1.1, supports-color@^8.0.0, supports-color@^8.1.0, supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.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== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0, supports-hyperlinks@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" + integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svg-parser@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" + integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== + +svgo@^1.2.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + dependencies: + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" + js-yaml "^3.13.1" + mkdirp "~0.5.1" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.0" + +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +table@^5.4.6: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +table@^6.0.4: + version "6.8.2" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.2.tgz#c5504ccf201213fa227248bdc8c5569716ac6c58" + integrity sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +tar-fs@^2.0.0, tar-fs@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.0, tar-stream@^2.1.4: + 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.0.2, tar@^6.1.11, tar@^6.1.2: + version "6.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" + integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +terser-webpack-plugin@^5.1.1: + version "5.3.10" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" + integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== + dependencies: + "@jridgewell/trace-mapping" "^0.3.20" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.1" + terser "^5.26.0" + +terser@^4.6.3: + version "4.8.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.1.tgz#a00e5634562de2239fd404c649051bf6fc21144f" + integrity sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +terser@^5.26.0: + version "5.31.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.1.tgz#735de3c987dd671e95190e6b98cfe2f07f3cf0d4" + integrity sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" + commander "^2.20.0" + source-map-support "~0.5.20" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +thingies@^1.20.0: + version "1.21.0" + resolved "https://registry.yarnpkg.com/thingies/-/thingies-1.21.0.tgz#e80fbe58fd6fdaaab8fad9b67bd0a5c943c445c1" + integrity sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g== + +throat@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" + integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== + +through@^2.3.6, through@^2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +throwback@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/throwback/-/throwback-4.1.0.tgz#421aac7ba9eff473105385ac4a2b0130d4b0a59c" + integrity sha512-dLFe8bU8SeH0xeqeKL7BNo8XoPC/o91nz9/ooeplZPiso+DZukhoyZcSz9TFnUNScm+cA9qjU1m1853M6sPOng== + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +tiny-invariant@^1.0.2, tiny-invariant@^1.0.6: + version "1.3.3" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" + integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== + +tiny-secp256k1@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/tiny-secp256k1/-/tiny-secp256k1-1.1.6.tgz#7e224d2bee8ab8283f284e40e6b4acb74ffe047c" + integrity sha512-FmqJZGduTyvsr2cF3375fqGHUovSwDi/QytexX1Se4BPuPZpTE5Ftp5fg+EFSuEf3lhZqgCRjEG3ydUQ/aNiwA== + dependencies: + bindings "^1.3.0" + bn.js "^4.11.8" + create-hmac "^1.1.7" + elliptic "^6.4.0" + nan "^2.13.2" + +tiny-warning@^1.0.0, tiny-warning@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + +tinycolor2@1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803" + integrity sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA== + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmp@^0.2.1: + version "0.2.3" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" + integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== + dependencies: + kind-of "^3.0.2" + +to-readable-stream@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-2.1.0.tgz#82880316121bea662cdc226adb30addb50cb06e8" + integrity sha512-o3Qa6DGg1CEXshSdvWNX2sN4QHqg03SPq7U6jPXRahlQdl5dK8oXjkU/2/sGrnOZKeGV1zLSO8qPwyKklPPE7w== + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toggle-selection@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" + integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tough-cookie@^4.0.0, tough-cookie@^4.1.3: + version "4.1.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" + integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.2.0" + url-parse "^1.5.3" + +tr46@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" + integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== + dependencies: + punycode "^2.1.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +"traverse@>=0.3.0 <0.4": + version "0.3.9" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" + integrity sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ== + +tree-dump@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tree-dump/-/tree-dump-1.0.1.tgz#b448758da7495580e6b7830d6b7834fca4c45b96" + integrity sha512-WCkcRBVPSlHHq1dc/px9iOfqklvzCbdRwvlNfxGZsrHqf6aZttfPrd7DJTt6oR10dwUfpFFQeVTkPbBIZxX/YA== + +tree-kill@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + +trezor-connect-flow@Emurgo/trezor-connect-flow#92d6d8c8faef25c0ea1d481aa1ecb4ba77ce539c: + version "1.0.0" + resolved "https://codeload.github.com/Emurgo/trezor-connect-flow/tar.gz/92d6d8c8faef25c0ea1d481aa1ecb4ba77ce539c" + dependencies: + "@trezor/connect-web" "9.1.1" + +trim-newlines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" + integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== + +trough@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" + integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== + +"true-case-path@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-2.2.1.tgz#c5bf04a5bbec3fd118be4084461b3a27c4d796bf" + integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q== + +ts-expect@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ts-expect/-/ts-expect-1.3.0.tgz#3f8d3966e0e22b5e2bb88337eb99db6816a4c1cf" + integrity sha512-e4g0EJtAjk64xgnFPD6kTBUtpnMVzDrMb12N1YZV0VvSlhnVT3SGxiYTLdGy8Q5cYHOIC/FAHmZ10eGrAguicQ== + +tsconfig-paths@^3.9.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1, tslib@^1.14.1, tslib@^1.9.0, tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.4.1, tslib@^2.6.1, tslib@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" + integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.10.0.tgz#7f06b2b9fbfc581068d1341ffabd0349ceafc642" + integrity sha512-EUV9jo4sffrwlg8s0zDhP0T2WD3pru5Xi0+HTE3zTUmBaZNhfkite9PdSJwdXLwPVW0jnAHT56pZHIOYckPEiw== + +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typed-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" + +typed-array-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-byte-offset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-length@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" + integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typeforce@^1.11.5, typeforce@^1.18.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/typeforce/-/typeforce-1.18.0.tgz#d7416a2c5845e085034d70fcc5b6cc4a90edbfdc" + integrity sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g== + +typescript-compiler@^1.4.1-2: + version "1.4.1-2" + resolved "https://registry.yarnpkg.com/typescript-compiler/-/typescript-compiler-1.4.1-2.tgz#ba4f7db22d91534a1929d90009dce161eb72fd3f" + integrity sha512-EMopKmoAEJqA4XXRFGOb7eSBhmQMbBahW6P1Koayeatp0b4AW2q/bBqYWkpG7QVQc9HGQUiS4trx2ZHcnAaZUg== + +typescript@^3.9.7: + version "3.9.10" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8" + integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== + +typescript@~4.4.4: + version "4.4.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.4.tgz#2cd01a1a1f160704d3101fd5a58ff0f9fcb8030c" + integrity sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA== + +u2f-api@0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/u2f-api/-/u2f-api-0.2.7.tgz#17bf196b242f6bf72353d9858e6a7566cc192720" + integrity sha512-fqLNg8vpvLOD5J/z4B6wpPg4Lvowz1nJ9xdHcCzdUPKcFE/qNCceV2gNZxSJd5vhAZemHr/K/hbzVA0zxB5mkg== + +ua-parser-js@1.0.37: + version "1.0.37" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.37.tgz#b5dc7b163a5c1f0c510b08446aed4da92c46373f" + integrity sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ== + +ua-parser-js@^1.0.35: + version "1.0.38" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.38.tgz#66bb0c4c0e322fe48edfe6d446df6042e62f25e2" + integrity sha512-Aq5ppTOfvrCMgAPneW1HfWj66Xi7XL+/mIy996R1/CLS/rcyJQm6QZdsKrUeivDFQ+Oc9Wyuwor8Ze8peEoUoQ== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +underscore.string@~2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.4.0.tgz#8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b" + integrity sha512-yxkabuCaIBnzfIvX3kBxQqCs0ar/bfJwDnFEHJUm/ZrRVhT3IItdRF5cZjARLzEnyQYtIUhsZ2LG2j3HidFOFQ== + +underscore@~1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" + integrity sha512-cp0oQQyZhUM1kpJDLdGO1jPZHgS/MpzoWYfe9+CM2h/QGDZlqwT2T3YGukuBdaNJ/CAPoeyAZRRHz8JFo176vA== + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== + +unified@^9.0.0: + version "9.2.2" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975" + integrity sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA== + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-filename@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" + integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== + dependencies: + unique-slug "^3.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +unique-slug@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" + integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== + dependencies: + imurmurhash "^0.1.4" + +unist-util-is@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797" + integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== + +unist-util-stringify-position@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" + integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== + dependencies: + "@types/unist" "^2.0.2" + +unist-util-visit-parents@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-1.1.2.tgz#f6e3afee8bdbf961c0e6f028ea3c0480028c3d06" + integrity sha512-yvo+MMLjEwdc3RhhPYSximset7rwjMrdt9E41Smmvg25UQIenzrN83cRnF1JMzoMi9zZOQeYXHSDf7p+IQkW3Q== + +unist-util-visit-parents@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6" + integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + +unist-util-visit@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" + integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + unist-util-visit-parents "^3.0.0" + +universal-user-agent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-4.0.1.tgz#fd8d6cb773a679a709e967ef8288a31fcc03e557" + integrity sha512-LnST3ebHwVL2aNe4mejI9IQh2HfZ1RLo8Io2HugSif8ekzD1TlWpHpColOB/eh8JHMLkGH3Akqf040I+4ylNxg== + dependencies: + os-name "^3.1.0" + +universal-user-agent@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.1.tgz#15f20f55da3c930c57bddbf1734c6654d5fd35aa" + integrity sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +unload@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/unload/-/unload-2.2.0.tgz#ccc88fdcad345faa06a92039ec0f80b488880ef7" + integrity sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA== + dependencies: + "@babel/runtime" "^7.6.2" + detect-node "^2.0.4" + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg== + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +unused-webpack-plugin@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/unused-webpack-plugin/-/unused-webpack-plugin-2.4.0.tgz#c81acf882822e0b6298c4d33e2b0225bc8fcac1a" + integrity sha512-v/9lL+ICYVJodolusinh7j+Lj51Quj6erA5YiBl5W0L19BAZ29H+88l9GCdWl3bZEb6BowGX2Ig8CMvxKzqhwQ== + dependencies: + chalk "^2.1.0" + deglob "^3.1.0" + +unzipper@^0.10.8: + version "0.10.14" + resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.10.14.tgz#d2b33c977714da0fbc0f82774ad35470a7c962b1" + integrity sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g== + dependencies: + big-integer "^1.6.17" + binary "~0.3.0" + bluebird "~3.4.1" + buffer-indexof-polyfill "~1.0.0" + duplexer2 "~0.1.4" + fstream "^1.0.12" + graceful-fs "^4.2.2" + listenercount "~1.0.1" + readable-stream "~2.3.6" + setimmediate "~1.0.4" + +update-browserslist-db@^1.0.13: + version "1.0.16" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz#f6d489ed90fb2f07d67784eb3f53d7891f736356" + integrity sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ== + dependencies: + escalade "^3.1.2" + picocolors "^1.0.1" + +uri-js@^4.2.2, uri-js@^4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== + +url-loader@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" + integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== + dependencies: + loader-utils "^2.0.0" + mime-types "^2.1.27" + schema-utils "^3.0.0" + +url-parse@^1.5.3: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +usb@2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/usb/-/usb-2.9.0.tgz#8ae3b175f93bee559400bff33491eee63406b6a2" + integrity sha512-G0I/fPgfHUzWH8xo2KkDxTTFruUWfppgSFJ+bQxz/kVY2x15EQ/XDB7dqD1G432G4gBG4jYQuF3U7j/orSs5nw== + dependencies: + "@types/w3c-web-usb" "^1.0.6" + node-addon-api "^6.0.0" + node-gyp-build "^4.5.0" + +usb@^2.9.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/usb/-/usb-2.13.0.tgz#521d11244cbe991a3f247c770821635abdcc9c7f" + integrity sha512-pTNKyxD1DfC1DYu8kFcIdpE8f33e0c2Sbmmi0HEs28HTVC555uocvYR1g5DDv4CBibacCh4BqRyYZJylN4mBbw== + dependencies: + "@types/w3c-web-usb" "^1.0.6" + node-addon-api "^8.0.0" + node-gyp-build "^4.5.0" + +use-memo-one@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/use-memo-one/-/use-memo-one-1.1.3.tgz#2fd2e43a2169eabc7496960ace8c79efef975e99" + integrity sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ== + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +util.promisify@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + +util@0.12.5, util@^0.12.5: + version "0.12.5" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + which-typed-array "^1.1.2" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^8.3.0, uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +uuid@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + +v8-compile-cache@^2.0.3, v8-compile-cache@^2.2.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz#cdada8bec61e15865f05d097c5f4fd30e94dc128" + integrity sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw== + +v8-to-istanbul@^7.0.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz#30898d1a7fa0c84d225a2c1434fb958f290883c1" + integrity sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + +v8flags@^3.1.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656" + integrity sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg== + dependencies: + homedir-polyfill "^1.0.1" + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +value-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" + integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== + +varuint-bitcoin@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/varuint-bitcoin/-/varuint-bitcoin-1.1.2.tgz#e76c138249d06138b480d4c5b40ef53693e24e92" + integrity sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw== + dependencies: + safe-buffer "^5.1.1" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +vfile-message@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" + integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position "^2.0.0" + +vfile@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624" + integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA== + dependencies: + "@types/unist" "^2.0.0" + is-buffer "^2.0.0" + unist-util-stringify-position "^2.0.0" + vfile-message "^2.0.0" + +vue-parser@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/vue-parser/-/vue-parser-1.1.6.tgz#3063c8431795664ebe429c23b5506899706e6355" + integrity sha512-v3/R7PLbaFVF/c8IIzWs1HgRpT2gN0dLRkaLIT5q+zJGVgmhN4VuZJF4Y9N4hFtFjS4B1EHxAOP6/tzqM4Ug2g== + dependencies: + parse5 "^3.0.3" + +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + +walker@^1.0.7, walker@~1.0.5: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +watchpack@^2.0.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.1.tgz#29308f2cac150fa8e4c92f90e0ec954a9fed7fff" + integrity sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + +webpack-cli@4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.5.0.tgz#b5213b84adf6e1f5de6391334c9fa53a48850466" + integrity sha512-wXg/ef6Ibstl2f50mnkcHblRPN/P9J4Nlod5Hg9HGFgSeF8rsqDGHJeVe4aR26q9l62TUJi6vmvC2Qz96YJw1Q== + dependencies: + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^1.0.1" + "@webpack-cli/info" "^1.2.2" + "@webpack-cli/serve" "^1.3.0" + colorette "^1.2.1" + commander "^7.0.0" + enquirer "^2.3.6" + execa "^5.0.0" + fastest-levenshtein "^1.0.12" + import-local "^3.0.2" + interpret "^2.2.0" + rechoir "^0.7.0" + v8-compile-cache "^2.2.0" + webpack-merge "^5.7.3" + +webpack-dev-middleware@*: + version "7.2.1" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-7.2.1.tgz#2af00538b6e4eda05f5afdd5d711dbebc05958f7" + integrity sha512-hRLz+jPQXo999Nx9fXVdKlg/aehsw1ajA9skAneGmT03xwmyuhvF93p6HUKKbWhXdcERtGTzUCtIQr+2IQegrA== + dependencies: + colorette "^2.0.10" + memfs "^4.6.0" + mime-types "^2.1.31" + on-finished "^2.4.1" + range-parser "^1.2.1" + schema-utils "^4.0.0" + +webpack-dev-middleware@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-4.1.0.tgz#f0c1f12ff4cd855b3b5eec89ee0f69bcc5336364" + integrity sha512-mpa/FY+DiBu5+r5JUIyTCYWRfkWgyA3/OOE9lwfzV9S70A4vJYLsVRKj5rMFEsezBroy2FmPyQ8oBRVW8QmK1A== + dependencies: + colorette "^1.2.1" + mem "^8.0.0" + memfs "^3.2.0" + mime-types "^2.1.28" + range-parser "^1.2.1" + schema-utils "^3.0.0" + +webpack-dev-middleware@^5.3.4: + version "5.3.4" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz#eb7b39281cbce10e104eb2b8bf2b63fce49a3517" + integrity sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q== + dependencies: + colorette "^2.0.10" + memfs "^3.4.3" + mime-types "^2.1.31" + range-parser "^1.2.1" + schema-utils "^4.0.0" + +webpack-dev-server@^4.9.3: + version "4.15.2" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz#9e0c70a42a012560860adb186986da1248333173" + integrity sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g== + 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/serve-static" "^1.13.10" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.5.5" + ansi-html-community "^0.0.8" + bonjour-service "^1.0.11" + chokidar "^3.5.3" + colorette "^2.0.10" + compression "^1.7.4" + connect-history-api-fallback "^2.0.0" + default-gateway "^6.0.3" + express "^4.17.3" + graceful-fs "^4.2.6" + html-entities "^2.3.2" + http-proxy-middleware "^2.0.3" + ipaddr.js "^2.0.1" + launch-editor "^2.6.0" + open "^8.0.9" + p-retry "^4.5.0" + rimraf "^3.0.2" + schema-utils "^4.0.0" + selfsigned "^2.1.1" + serve-index "^1.9.1" + sockjs "^0.3.24" + spdy "^4.0.2" + webpack-dev-middleware "^5.3.4" + ws "^8.13.0" + +webpack-hot-middleware@2.25.0: + version "2.25.0" + resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.25.0.tgz#4528a0a63ec37f8f8ef565cf9e534d57d09fe706" + integrity sha512-xs5dPOrGPCzuRXNi8F6rwhawWvQQkeli5Ro48PRuQh8pYPCPmNnltP9itiUPT4xI8oW+y0m59lyyeQk54s5VgA== + dependencies: + ansi-html "0.0.7" + html-entities "^1.2.0" + querystring "^0.2.0" + strip-ansi "^3.0.0" + +webpack-hot-middleware@^2.12.2: + version "2.26.1" + resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.26.1.tgz#87214f1e3f9f3acab9271fef9e6ed7b637d719c0" + integrity sha512-khZGfAeJx6I8K9zKohEWWYN6KDlVw2DHownoe+6Vtwj1LP9WFgegXnVMSkZ/dBEBtXFwrkkydsaPFlB7f8wU2A== + dependencies: + ansi-html-community "0.0.8" + html-entities "^2.1.0" + strip-ansi "^6.0.0" + +"webpack-httpolyglot-server@git+https://github.com/Emurgo/webpack-httpolyglot-server.git": + version "0.3.0" + resolved "git+https://github.com/Emurgo/webpack-httpolyglot-server.git#ce520ad87d48bb5ae0121ca97f6c93cbb18f0f27" + dependencies: + express "^4.14.0" + httpolyglot "^0.1.1" + lodash.omit "^4.5.0" + webpack-dev-middleware "*" + webpack-hot-middleware "^2.12.2" + +webpack-merge@^5.7.3: + version "5.10.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.10.0.tgz#a3ad5d773241e9c682803abf628d4cd62b8a4177" + integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA== + dependencies: + clone-deep "^4.0.1" + flat "^5.0.2" + wildcard "^2.0.0" + +webpack-sources@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack-sources@^2.1.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.1.tgz#570de0af163949fe272233c2cefe1b56f74511fd" + integrity sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA== + dependencies: + source-list-map "^2.0.1" + source-map "^0.6.1" + +webpack@5.23.0: + version "5.23.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.23.0.tgz#9ed57e9a54b267b3549899271ad780cddc6ee316" + integrity sha512-RC6dwDuRxiU75F8XC4H08NtzUrMfufw5LDnO8dTtaKU2+fszEdySCgZhNwSBBn516iNaJbQI7T7OPHIgCwcJmg== + dependencies: + "@types/eslint-scope" "^3.7.0" + "@types/estree" "^0.0.46" + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/wasm-edit" "1.11.0" + "@webassemblyjs/wasm-parser" "1.11.0" + acorn "^8.0.4" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.7.0" + es-module-lexer "^0.3.26" + eslint-scope "^5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.4" + json-parse-better-errors "^1.0.2" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.0.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.1" + watchpack "^2.0.0" + webpack-sources "^2.1.1" + +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +whatwg-url@^8.0.0, whatwg-url@^8.5.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" + integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== + dependencies: + lodash "^4.7.0" + tr46 "^2.1.0" + webidl-conversions "^6.1.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-module@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" + integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== + +which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.2: + version "1.1.15" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" + integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.2" + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + +wif@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/wif/-/wif-2.0.6.tgz#08d3f52056c66679299726fade0d432ae74b4704" + integrity sha512-HIanZn1zmduSF+BQhkE+YXIbEiH0xPr1012QbFEGB0xsKqJii0/SqJjyn8dFv6y36kOznMgMB+LGcbZTJ1xACQ== + dependencies: + bs58check "<3.0.0" + +wildcard@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" + integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== + +windows-release@^3.1.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.3.3.tgz#1c10027c7225743eec6b89df160d64c2e0293999" + integrity sha512-OSOGH1QYiW5yVor9TtmXKQvt2vjQqbYS+DqmsZw+r7xDwLXEeT3JGW0ZppFmHx4diyXmxt238KFR3N9jzevBRg== + dependencies: + execa "^1.0.0" + +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +workerpool@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" + integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== + +wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +ws@7.5.9, ws@^7.2.0, ws@^7.4.6: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +ws@^8.13.0: + version "8.17.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.0.tgz#d145d18eca2ed25aaf791a183903f7be5e295fea" + integrity sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow== + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +xtend@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.0: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^20.2.2, yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^15.1.0, yargs@^15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +yargs@^17.2.1, yargs@^17.7.2: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + 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.1.1" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zip-stream@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-2.1.3.tgz#26cc4bdb93641a8590dd07112e1f77af1758865b" + integrity sha512-EkXc2JGcKhO5N5aZ7TmuNo45budRaFGHOmz24wtJR7znbNqDPmdZtUauKX6et8KAVseAMBOyWJqEpXcHTBsh7Q== + dependencies: + archiver-utils "^2.1.0" + compress-commons "^2.1.1" + readable-stream "^3.4.0" + +zod@^3.22.1, zod@^3.22.2: + version "3.23.8" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d" + integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g== From aa001b8c4d0f275c97848a1d74c71b6b9195136a Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Fri, 7 Jun 2024 11:39:50 +0100 Subject: [PATCH 090/464] chore: ts updates --- .../app/UI/layout/GeneralPageLayout.js | 3 +- .../app/UI/pages/Governance/layout.js | 30 +++++++++++++++++++ packages/yoroi-extension/package.json | 3 ++ packages/yoroi-extension/tsconfig.json | 6 ++-- 4 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 packages/yoroi-extension/app/UI/pages/Governance/layout.js diff --git a/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js b/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js index ccb69e5d20..3fe91050a4 100644 --- a/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js +++ b/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js @@ -1,3 +1,4 @@ +import * as React from 'react'; import { observer } from 'mobx-react'; import { intlShape } from 'react-intl'; import TopBarLayout from '../../components/layout/TopBarLayout'; @@ -9,7 +10,7 @@ import { ModalManager } from '../components/modals/ModalManager'; import { IntlProvider } from '../context/IntlProvider'; @observer -class GeneralPageLayout extends ComponentType { +class GeneralPageLayout extends React.Component { static defaultProps = { children: undefined, }; diff --git a/packages/yoroi-extension/app/UI/pages/Governance/layout.js b/packages/yoroi-extension/app/UI/pages/Governance/layout.js new file mode 100644 index 0000000000..064267dfc7 --- /dev/null +++ b/packages/yoroi-extension/app/UI/pages/Governance/layout.js @@ -0,0 +1,30 @@ +import GeneralPageLayout from '../../layout/GeneralPageLayout'; +import { GovernanceStatusSelection } from '../../features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection'; +import NavBarContainerRevamp from '../../../containers/NavBarContainerRevamp'; +import NavBar from '../../../components/topbar/NavBar'; +import NavBarTitle from '../../../components/topbar/NavBarTitle'; +import { TransactionSubmitted } from '../../components/TransactionSubmitted/TransactionSubmitted'; +import { GovernanceProvider as GovernanceExternalPackageProvider } from '@yoroi/staking'; +import { useGovernance } from '../../features/governace/module/GovernanceContextProvider'; + +type Props = {| + stores: any, + actions: any, + children?: React$Node, +|}; + +const GovernanceLayout = ({ stores, actions, children }: Props): any => { + const { governanceManager } = useGovernance(); + + return ( + } />} + > + {children} + + ); +}; + +export default GovernanceLayout; diff --git a/packages/yoroi-extension/package.json b/packages/yoroi-extension/package.json index a0b2cae924..769578dd80 100644 --- a/packages/yoroi-extension/package.json +++ b/packages/yoroi-extension/package.json @@ -141,6 +141,7 @@ }, "dependencies": { "@amplitude/analytics-browser": "^2.1.3", + "@babel/preset-typescript": "^7.24.7", "@cardano-foundation/ledgerjs-hw-app-cardano": "6.0.0", "@emotion/react": "^11.4.1", "@emotion/styled": "^11.3.0", @@ -218,6 +219,8 @@ "stream-browserify": "3.0.0", "tinycolor2": "1.4.2", "trezor-connect-flow": "Emurgo/trezor-connect-flow#92d6d8c8faef25c0ea1d481aa1ecb4ba77ce539c", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", "ua-parser-js": "1.0.37", "util": "0.12.5" }, diff --git a/packages/yoroi-extension/tsconfig.json b/packages/yoroi-extension/tsconfig.json index 7233d61517..b69f944687 100644 --- a/packages/yoroi-extension/tsconfig.json +++ b/packages/yoroi-extension/tsconfig.json @@ -1,9 +1,11 @@ { "compilerOptions": { - "declaration": true, - "baseUrl": "./app", + "allowJs": true, "allowUnreachableCode": false, "allowUnusedLabels": false, + "baseUrl": "./app", + "checkJs": false, + "declaration": true, "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "jsx": "react", From 95727499a0698d2e7d038c2e18e60ce3cfa2bf9c Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Fri, 7 Jun 2024 17:15:27 +0300 Subject: [PATCH 091/464] refactor components and add typescript --- package-lock.json | 241 +++++++++++++++++- packages/yoroi-extension/.eslintrc.js | 30 +-- .../{PasswordInput.js => PasswordInput.tsx} | 28 +- .../Input/{TextInput.js => TextInput.tsx} | 24 +- .../TransactionFailed/TransactionFailed.tsx | 1 + .../TransactionSubmitted.tsx | 1 + ...CreateAndSendDrepDelegationTransaction.ts} | 10 +- ...ChooseDRepModal.js => ChooseDRepModal.tsx} | 17 +- ...teingCard.js => GovernanceVoteingCard.tsx} | 28 +- .../ilustrations/{Abstein.js => Abstein.tsx} | 30 +-- ...DRepIlustration.js => DRepIlustration.tsx} | 35 +-- .../{NoConfidance.js => NoConfidance.tsx} | 68 +---- .../common/useGovernanceManagerMaker.tsx | 6 +- .../module/GovernanceContextProvider.tsx | 23 +- .../app/UI/features/governace/module/state.ts | 2 +- .../DelagationForm/DelagationForm.tsx | 24 +- .../GovernanceStatusSelection.tsx | 19 +- .../app/UI/pages/Governance/layout.js | 30 --- .../app/UI/pages/Governance/layout.tsx | 21 +- .../app/UI/types/{index.js => index.ts} | 0 packages/yoroi-extension/jsconfig.json | 9 - packages/yoroi-extension/package.json | 1 + packages/yoroi-extension/tsconfig.json | 56 ++-- packages/yoroi-extension/yarn.lock | 55 +++- 24 files changed, 455 insertions(+), 304 deletions(-) rename packages/yoroi-extension/app/UI/components/Input/{PasswordInput.js => PasswordInput.tsx} (76%) rename packages/yoroi-extension/app/UI/components/Input/{TextInput.js => TextInput.tsx} (53%) rename packages/yoroi-extension/app/UI/features/governace/api/{useCreateAndSendDrepDelegationTransaction.js => useCreateAndSendDrepDelegationTransaction.ts} (61%) rename packages/yoroi-extension/app/UI/features/governace/common/{ChooseDRepModal.js => ChooseDRepModal.tsx} (88%) rename packages/yoroi-extension/app/UI/features/governace/common/{GovernanceVoteingCard.js => GovernanceVoteingCard.tsx} (76%) rename packages/yoroi-extension/app/UI/features/governace/common/ilustrations/{Abstein.js => Abstein.tsx} (95%) rename packages/yoroi-extension/app/UI/features/governace/common/ilustrations/{DRepIlustration.js => DRepIlustration.tsx} (96%) rename packages/yoroi-extension/app/UI/features/governace/common/ilustrations/{NoConfidance.js => NoConfidance.tsx} (93%) delete mode 100644 packages/yoroi-extension/app/UI/pages/Governance/layout.js rename packages/yoroi-extension/app/UI/types/{index.js => index.ts} (100%) delete mode 100644 packages/yoroi-extension/jsconfig.json diff --git a/package-lock.json b/package-lock.json index bbf9332713..edad5f7370 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,10 @@ "devDependencies": { "concurrently": "^7.0.0", "husky": "4.3.8", - "lerna": "^4.0.0" + "lerna": "^4.0.0", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", + "webpack-cli": "^5.1.4" } }, "node_modules/@babel/code-frame": { @@ -122,6 +125,15 @@ "node": ">=6.9.0" } }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", @@ -1531,6 +1543,50 @@ "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", "dev": true }, + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -2178,6 +2234,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, "node_modules/columnify": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", @@ -2203,6 +2265,15 @@ "node": ">= 0.8" } }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, "node_modules/compare-func": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", @@ -2802,6 +2873,19 @@ "node": ">=0.10.0" } }, + "node_modules/enhanced-resolve": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", + "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -3072,6 +3156,15 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", @@ -3148,6 +3241,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -4184,6 +4286,15 @@ "node": ">= 0.4" } }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/ip-address": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", @@ -6801,6 +6912,18 @@ "once": "^1.3.0" } }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -7591,6 +7714,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/tar": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", @@ -7733,6 +7865,35 @@ "node": ">=8" } }, + "node_modules/ts-loader": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", + "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/ts-loader/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", @@ -7857,6 +8018,19 @@ "is-typedarray": "^1.0.0" } }, + "node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/uglify-js": { "version": "3.17.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", @@ -8029,6 +8203,65 @@ "node": ">=10.4" } }, + "node_modules/webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/whatwg-url": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", @@ -8111,6 +8344,12 @@ "string-width": "^1.0.2 || 2 || 3 || 4" } }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", diff --git a/packages/yoroi-extension/.eslintrc.js b/packages/yoroi-extension/.eslintrc.js index 1f5ac1a54f..27dee28d5b 100644 --- a/packages/yoroi-extension/.eslintrc.js +++ b/packages/yoroi-extension/.eslintrc.js @@ -7,7 +7,7 @@ module.exports = { ecmaVersion: 6, sourceType: 'module', ecmaFeatures: { - legacyDecorators: true + legacyDecorators: true, }, }, extends: ['airbnb', 'prettier'], @@ -15,7 +15,7 @@ module.exports = { browser: true, mocha: true, node: true, - jest: true + jest: true, }, rules: { 'func-names': 'off', @@ -24,9 +24,12 @@ module.exports = { 'consistent-return': 'off', 'comma-dangle': 'off', 'generator-star-spacing': 'off', - 'import/no-unresolved': ['error', { - ignore: ['cardano-wallet-browser'] - }], + 'import/no-unresolved': [ + 'error', + { + ignore: ['cardano-wallet-browser'], + }, + ], 'import/no-extraneous-dependencies': 'off', 'import/no-dynamic-require': 'off', 'import/no-named-as-default': 'off', @@ -92,6 +95,8 @@ module.exports = { 'prefer-const': 1, 'object-curly-spacing': 1, 'spaced-comment': 0, + 'simple-import-sort/exports': 'error', + 'simple-import-sort/imports': 'error', quotes: ['error', 'single', { avoidEscape: true, allowTemplateLiterals: true }], 'import/imports-first': 1, 'react/jsx-indent': 1, @@ -110,20 +115,13 @@ module.exports = { 'react/jsx-first-prop-new-line': 0, 'no-restricted-properties': [ 2, - { object: 'TrezorConnect', message: 'Use TrezorWrapper instead to minimize Trezor iframe lifespan', }, + { object: 'TrezorConnect', message: 'Use TrezorWrapper instead to minimize Trezor iframe lifespan' }, ], 'import/no-unused-modules': [1, { unusedExports: true }], - 'camelcase': 0, + camelcase: 0, 'react/jsx-curly-brace-presence': 0, }, - plugins: [ - 'import', - 'promise', - 'react', - 'flowtype', - 'no-floating-promise', - 'prettier' - ], + plugins: ['import', 'promise', 'react', 'flowtype', 'no-floating-promise', 'prettier', 'eslint-plugin-simple-import-sort'], globals: { chrome: true, API: true, @@ -132,5 +130,5 @@ module.exports = { CONFIG: true, yoroi: true, nameof: true, - } + }, }; diff --git a/packages/yoroi-extension/app/UI/components/Input/PasswordInput.js b/packages/yoroi-extension/app/UI/components/Input/PasswordInput.tsx similarity index 76% rename from packages/yoroi-extension/app/UI/components/Input/PasswordInput.js rename to packages/yoroi-extension/app/UI/components/Input/PasswordInput.tsx index 3bdb2cbbe1..89630019d5 100644 --- a/packages/yoroi-extension/app/UI/components/Input/PasswordInput.js +++ b/packages/yoroi-extension/app/UI/components/Input/PasswordInput.tsx @@ -1,7 +1,6 @@ // @flow import React from 'react'; -import type { Node } from 'react'; import { styled } from '@mui/material/styles'; import OutlinedInput from '@mui/material/OutlinedInput'; @@ -11,20 +10,18 @@ import FormControl from '@mui/material/FormControl'; import IconButton from '@mui/material/IconButton'; import InputLabel from '@mui/material/InputLabel'; import { Icon } from '../icons/index'; -import { VisibilityOff } from '../icons/VisibilityOff'; -import { VisibilityOn } from '../icons/VisibilityOn'; -type StyledInputProps = {| - id: string, - label: string, - variant?: string, - onChange: (event: any) => void, - value?: string, - error?: boolean, - helperText?: string, -|}; +type StyledInputProps = { + id: string; + label: string; + variant?: string; + onChange: (event: any) => void; + value?: string; + error?: boolean; + helperText?: string; +}; -export const PasswordInput = ({ id, label, variant, onChange, value, error, helperText }: StyledInputProps): Node => { +export const PasswordInput = ({ id, label, onChange, value, error, helperText }: StyledInputProps) => { const [showPassword, setShowPassword] = React.useState(false); const handleClickShowPassword = () => setShowPassword(show => !show); @@ -42,7 +39,6 @@ export const PasswordInput = ({ id, label, variant, onChange, value, error, help fullWidth id={id} type={showPassword ? 'text' : 'password'} - variant="outlined" onChange={onChange} value={value} endAdornment={ @@ -69,7 +65,7 @@ export const PasswordInput = ({ id, label, variant, onChange, value, error, help ); }; -const SOutlinedInput = styled(OutlinedInput)(({ theme, error }) => ({ +const SOutlinedInput = styled(OutlinedInput)(({ theme, error }: any) => ({ '& .MuiFormHelperText-root': { marginLeft: '0px', }, @@ -78,7 +74,7 @@ const SOutlinedInput = styled(OutlinedInput)(({ theme, error }) => ({ color: error && theme.palette.ds.sys_magenta_c500, }, })); -const SFormControl = styled(FormControl)(({ theme, error }) => ({ +const SFormControl = styled(FormControl)(({ theme, error }: any) => ({ '& .MuiFormHelperText-root': { marginLeft: '0px', }, diff --git a/packages/yoroi-extension/app/UI/components/Input/TextInput.js b/packages/yoroi-extension/app/UI/components/Input/TextInput.tsx similarity index 53% rename from packages/yoroi-extension/app/UI/components/Input/TextInput.js rename to packages/yoroi-extension/app/UI/components/Input/TextInput.tsx index 71e17c3cbb..8efe68a00c 100644 --- a/packages/yoroi-extension/app/UI/components/Input/TextInput.js +++ b/packages/yoroi-extension/app/UI/components/Input/TextInput.tsx @@ -1,28 +1,26 @@ // @flow import React from 'react'; -import type { Node } from 'react'; import TextField from '@mui/material/TextField'; import { styled } from '@mui/material/styles'; -type StyledInputProps = {| - id: string, - label: string, - variant: string, - onChange: (event: any) => void, - value?: string, - error?: boolean, - helperText?: string, -|}; +type StyledInputProps = { + id: string; + label: string; + variant: string; + onChange: (event: any) => void; + value?: string; + error?: boolean; + helperText?: string; +}; -export const TextInput = ({ id, label, variant, onChange, value, error, helperText }: StyledInputProps): Node => { +export const TextInput = ({ id, label, onChange, value, error, helperText }: StyledInputProps) => { return ( ); }; -const SInput = styled(TextField)(({ theme, error }) => ({ - margin: '0px 0px', +const SInput = styled(TextField)(({ theme, error }: any) => ({ '& .MuiFormHelperText-root': { position: 'absolute', bottom: -22, diff --git a/packages/yoroi-extension/app/UI/components/TransactionFailed/TransactionFailed.tsx b/packages/yoroi-extension/app/UI/components/TransactionFailed/TransactionFailed.tsx index 339bf042e1..98d539f21c 100644 --- a/packages/yoroi-extension/app/UI/components/TransactionFailed/TransactionFailed.tsx +++ b/packages/yoroi-extension/app/UI/components/TransactionFailed/TransactionFailed.tsx @@ -14,6 +14,7 @@ export const TransactionFailed = () => { + {/* @ts-ignore */} diff --git a/packages/yoroi-extension/app/UI/components/TransactionSubmitted/TransactionSubmitted.tsx b/packages/yoroi-extension/app/UI/components/TransactionSubmitted/TransactionSubmitted.tsx index c71432c9fd..828c4d7aaa 100644 --- a/packages/yoroi-extension/app/UI/components/TransactionSubmitted/TransactionSubmitted.tsx +++ b/packages/yoroi-extension/app/UI/components/TransactionSubmitted/TransactionSubmitted.tsx @@ -20,6 +20,7 @@ export const TransactionSubmitted = () => { diff --git a/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.js b/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.tsx similarity index 76% rename from packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.js rename to packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.tsx index 4bf6b0d273..5c780d711f 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.js +++ b/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.tsx @@ -1,24 +1,22 @@ // @flow import * as React from 'react'; -import type { Node } from 'react'; import { styled } from '@mui/material/styles'; -import Card from '@mui/material/Card'; import CardContent from '@mui/material/CardContent'; import Typography from '@mui/material/Typography'; import Box from '@mui/material/Box'; import { Stack } from '@mui/material'; import LoadingSpinner from '../../../../components/widgets/LoadingSpinner'; -type Props = {| - title: string, - description: string, - icon: React.Node, - selected: boolean, - onClick: () => void, - pending: boolean, -|}; +type Props = { + title: string; + description: string; + icon: React.ReactNode; + selected: boolean; + onClick: () => void; + pending: boolean; +}; -const StyledCard = styled(Stack)(({ theme, selected, pending }) => ({ +const StyledCard: any = styled(Stack)(({ theme, selected, pending }: any) => ({ position: 'relative', display: 'flex', flexDirection: 'column', @@ -49,7 +47,7 @@ const StyledCard = styled(Stack)(({ theme, selected, pending }) => ({ }, })); -const IconContainer = styled(Box)(({ theme }) => ({ +const IconContainer = styled(Box)(() => ({ display: 'flex', justifyContent: 'center', })); @@ -58,14 +56,14 @@ const Description = styled(Typography)(({ theme }) => ({ marginTop: theme.spacing(1), })); -const SpinnerBox = styled(Box)(({ theme }) => ({ +const SpinnerBox = styled(Box)(() => ({ position: 'absolute', right: 15, top: 15, })); -export const GovernanceVoteingCard = ({ title, description, icon, selected, onClick, pending }: Props): Node => ( - +export const GovernanceVoteingCard = ({ title, description, icon, selected, onClick, pending }: Props) => ( + {pending && selected && ( diff --git a/packages/yoroi-extension/app/UI/features/governace/common/ilustrations/Abstein.js b/packages/yoroi-extension/app/UI/features/governace/common/ilustrations/Abstein.tsx similarity index 95% rename from packages/yoroi-extension/app/UI/features/governace/common/ilustrations/Abstein.js rename to packages/yoroi-extension/app/UI/features/governace/common/ilustrations/Abstein.tsx index 66761b0cfe..6c807e3994 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/ilustrations/Abstein.js +++ b/packages/yoroi-extension/app/UI/features/governace/common/ilustrations/Abstein.tsx @@ -20,23 +20,10 @@ export const Abstein = () => { d="M81.017 186.741L89.0735 180.635L194.422 243.604L186.366 249.722L81.017 186.741Z" fill="url(#paint2_linear_1598_4400)" /> - - - - + + + + { - + diff --git a/packages/yoroi-extension/app/UI/features/governace/common/ilustrations/DRepIlustration.js b/packages/yoroi-extension/app/UI/features/governace/common/ilustrations/DRepIlustration.tsx similarity index 96% rename from packages/yoroi-extension/app/UI/features/governace/common/ilustrations/DRepIlustration.js rename to packages/yoroi-extension/app/UI/features/governace/common/ilustrations/DRepIlustration.tsx index aa90d5a060..88f43ec347 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/ilustrations/DRepIlustration.js +++ b/packages/yoroi-extension/app/UI/features/governace/common/ilustrations/DRepIlustration.tsx @@ -20,23 +20,10 @@ export const DRepIlustration = () => { d="M81.017 186.741L89.0735 180.635L194.422 243.604L186.366 249.722L81.017 186.741Z" fill="url(#paint2_linear_1598_4399)" /> - - - - + + + + { d="M100.536 139.385C101.424 138.903 102.41 138.528 103.493 138.26C104.148 137.522 104.9 136.892 105.751 136.369L100.536 139.385Z" fill="url(#paint12_linear_1598_4399)" /> - + { - + diff --git a/packages/yoroi-extension/app/UI/features/governace/common/ilustrations/NoConfidance.js b/packages/yoroi-extension/app/UI/features/governace/common/ilustrations/NoConfidance.tsx similarity index 93% rename from packages/yoroi-extension/app/UI/features/governace/common/ilustrations/NoConfidance.js rename to packages/yoroi-extension/app/UI/features/governace/common/ilustrations/NoConfidance.tsx index 2e4801af4a..df1c61744c 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/ilustrations/NoConfidance.js +++ b/packages/yoroi-extension/app/UI/features/governace/common/ilustrations/NoConfidance.tsx @@ -2,13 +2,7 @@ import React from 'react'; export const NoConfidance = () => { return ( - + { d="M81.017 186.741L89.0735 180.635L194.422 243.604L186.366 249.722L81.017 186.741Z" fill="url(#paint2_linear_1598_4401)" /> - - - - + + + + { d="M152.49 126.834L135.277 106.612L134.664 106.61L151.19 126.068L152.49 126.834Z" fill="url(#paint17_linear_1598_4401)" /> - + - - - - - + + + + + { - + diff --git a/packages/yoroi-extension/app/UI/features/governace/common/useGovernanceManagerMaker.tsx b/packages/yoroi-extension/app/UI/features/governace/common/useGovernanceManagerMaker.tsx index 7bd0c7295d..5c3cb8e3c8 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/useGovernanceManagerMaker.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/common/useGovernanceManagerMaker.tsx @@ -1,4 +1,3 @@ -// @flow import React from 'react'; import { governanceApiMaker, governanceManagerMaker } from '@yoroi/staking'; // @ts-ignore @@ -12,9 +11,10 @@ export const useGovernanceManagerMaker = (walletId: string, networkId: string): () => governanceManagerMaker({ walletId, - networkId, - api: governanceApiMaker({ networkId }), + networkId: Number(networkId), + api: governanceApiMaker({ networkId: Number(networkId) }), cardano: RustModule.CrossCsl.init('any'), + // @ts-ignore storage: 'wallet/${walletId}/staking-governance/', }), [networkId, walletId] diff --git a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx index d9de4371af..a7f3a82ea6 100644 --- a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx @@ -1,25 +1,18 @@ import * as React from 'react'; -import { - GovernanceAction, - GovernanceActionType, - GovernanceReducer, - defaultGovernanceActions, - defaultGovernanceState, - GovernanceState, - GovernanceActions, -} from './state'; - +import { GovernanceActionType, GovernanceReducer, defaultGovernanceActions, defaultGovernanceState } from './state'; import { useGovernanceManagerMaker } from '../common/useGovernanceManagerMaker'; const initialGovernanceProvider = { ...defaultGovernanceState, ...defaultGovernanceActions, + walletId: '', + governanceManager: null, }; const GovernanceContext = React.createContext(initialGovernanceProvider); type GovernanceProviderProps = { - children: Node; + children: React.ReactNode; currentWallet: any; // TODO to be defined }; @@ -37,12 +30,12 @@ export const GovernanceContextProvider = ({ children, currentWallet }: Governanc governanceVote: vote, }); }, - dRepIdChanged: (drepID: string) => { - dispatch({ type: GovernanceActionType.DRepIdChanged, drepID }); + dRepIdChanged: (dRepId: any) => { + dispatch({ type: GovernanceActionType.DRepIdChanged, dRepId }); }, }).current; - const context = { + const context: any = { ...state, ...actions, governanceManager: governanceManager, @@ -54,4 +47,4 @@ export const GovernanceContextProvider = ({ children, currentWallet }: Governanc }; export const useGovernance = () => - React.useContext(GovernanceContext) ?? invalid('useGovernance: needs to be wrapped in a GovernanceManagerProvider'); + React.useContext(GovernanceContext) ?? console.log('useGovernance: needs to be wrapped in a GovernanceManagerProvider'); diff --git a/packages/yoroi-extension/app/UI/features/governace/module/state.ts b/packages/yoroi-extension/app/UI/features/governace/module/state.ts index d536b8a690..e9d36fd17b 100644 --- a/packages/yoroi-extension/app/UI/features/governace/module/state.ts +++ b/packages/yoroi-extension/app/UI/features/governace/module/state.ts @@ -3,7 +3,7 @@ import { invalid } from '@yoroi/common'; import { produce } from 'immer'; type VoteKind = 'none' | 'delegate' | 'abstain' | 'no-confidence'; -type Vote = { kind: VoteKind; drepID?: string }; +export type Vote = { kind: VoteKind; drepID?: string }; // Define types export type GovernanceActions = { diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx index 6ad2b92a28..4c6fbe66c6 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx @@ -3,16 +3,15 @@ import { styled } from '@mui/material/styles'; import Typography from '@mui/material/Typography'; import Box from '@mui/material/Box'; import Stack from '@mui/material/Stack'; -import type { Node } from 'react'; import { Button } from '@mui/material'; import { useNavigateTo } from '../../common/useNavigateTo'; -import { PasswordInput } from '../../../../components'; import { useGovernance } from '../../module/GovernanceContextProvider'; -import { useCreateAndSendDrepDelegationTransaction } from '../../api/useCreateAndSendDrepDelegationTransaction'; import { useStrings } from '../../common/useStrings'; -import { Collapsible } from '../../../../components'; +import { useCreateAndSendDrepDelegationTransaction } from '../../api/useCreateAndSendDrepDelegationTransaction'; +import { Collapsible } from '../../../../components/Collapsible/Collapsible'; +import { PasswordInput } from '../../../../components/Input/PasswordInput'; -const Container = styled(Box)(({ theme }) => ({ +const Container = styled(Box)(() => ({ paddingTop: '23px', maxWidth: '506px', margin: '0 auto', @@ -23,7 +22,7 @@ const Container = styled(Box)(({ theme }) => ({ alignItems: 'center', })); -const TotalBox = styled(Box)(({ theme }) => ({ +const TotalBox = styled(Box)(({ theme }: any) => ({ display: 'flex', justifyContent: 'space-between', background: theme.palette.ds.bg_gradient_3, @@ -32,21 +31,20 @@ const TotalBox = styled(Box)(({ theme }) => ({ marginBottom: '24px', })); -const TransactionDetails = styled(Stack)(({ theme }) => ({ +const TransactionDetails = styled(Stack)(() => ({ gap: '16px', })); -const Actions = styled(Stack)(({ theme }) => ({ +const Actions = styled(Stack)(() => ({ marginBottom: '24px', '& .MuiButton-root': { width: '128px', }, })); -export const DelagationForm = (): Node => { - const [showPassword, setShowPassword] = React.useState(false); +export const DelagationForm = () => { const [passwaord, setPassword] = React.useState(''); const navigateTo = useNavigateTo(); - const { dRepId, governanceVote, walletId } = useGovernance(); + const { governanceVote, walletId } = useGovernance(); const strings = useStrings(); const confirmDelegation = () => { @@ -59,7 +57,7 @@ export const DelagationForm = (): Node => { } }; const idPasswordInvalid = passwaord.match(/\d+/g); - console.log('sssdsdsds', strings.total); + return ( @@ -130,9 +128,11 @@ export const DelagationForm = (): Node => { /> + {/* @ts-ignore */} + {/* @ts-ignore */} diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx index 345b9bf1c8..0c9f035b4b 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx @@ -12,13 +12,14 @@ import Link from '@mui/material/Link'; import { useModal } from '../../../../components/modals/ModalContext'; import { ChooseDRepModal } from '../../common/ChooseDRepModal'; import { GovernanceVoteingCard } from '../../common/GovernanceVoteingCard'; -import { GovernanceProvider, useStakingKeyState, useDelegationCertificate, useVotingCertificate } from '@yoroi/staking'; +import { GovernanceProvider, useDelegationCertificate, useVotingCertificate } from '@yoroi/staking'; import { useNavigateTo } from '../../common/useNavigateTo'; import { useDrepDelegationState } from '../../api/useDrepDelegationState'; import { VotingSkeletonCard } from '../../common/VotingSkeletonCard'; import { BECOME_DREP_LINK, LEARN_MORE_LINK } from '../../common/constants'; +import { Vote } from '../../module/state'; -const Container = styled(Box)(({ theme }) => ({ +const Container = styled(Box)(() => ({ display: 'flex', flexDirection: 'column', alignItems: 'center', @@ -38,7 +39,7 @@ export const GovernanceStatusSelection = () => { const navigateTo = useNavigateTo(); const { openModal } = useModal(); - const { governanceVote, governanceManager, stakePoolKeyHash, dRepIdChanged, governanceVoteChanged, walletId } = useGovernance(); + const { governanceVote, governanceManager, governanceVoteChanged, walletId } = useGovernance(); const { data: governanceData } = useDrepDelegationState(walletId); const strings = useStrings(); @@ -47,9 +48,12 @@ export const GovernanceStatusSelection = () => { // const { data: stakingStatus } = useStakingKeyState(stakePoolKeyHash, { suspense: true }); // const action = stakingStatus ? mapStakingKeyStateToGovernanceAction(stakingStatus) : null + // @ts-ignore const { createCertificate, isLoading: isCreatingDelegationCertificate } = useDelegationCertificate({ useErrorBoundary: true, }); + + // @ts-ignore const { createCertificate: createVotingCertificate, isLoading: isCreatingVotingCertificate } = useVotingCertificate({ useErrorBoundary: true, }); @@ -59,6 +63,9 @@ export const GovernanceStatusSelection = () => { const pageSubtitle = governanceData?.kind === 'none' ? strings.reviewSelection : strings.statusSelected(statusRawText); const openDRepIdModal = (onSubmit: (drepID: string) => void) => { + if (!governanceManager) { + return; + } openModal({ title: String(strings.chooseDrep).toUpperCase(), content: ( @@ -73,7 +80,7 @@ export const GovernanceStatusSelection = () => { const handleDelegate = () => { openDRepIdModal(drepID => { - const vote = { kind: 'delegate', drepID }; + const vote: Vote = { kind: 'delegate', drepID }; governanceVoteChanged(vote); navigateTo.delegationForm(); // createCertificate( @@ -93,7 +100,7 @@ export const GovernanceStatusSelection = () => { }; const handleAbstain = () => { - const vote = { kind: 'abstain' }; + const vote: Vote = { kind: 'abstain' }; // setPendingVote(vote.kind); governanceVoteChanged(vote); navigateTo.delegationForm(); @@ -108,7 +115,7 @@ export const GovernanceStatusSelection = () => { }; const handleNoConfidence = () => { - const vote = { kind: 'no-confidence' }; + const vote: Vote = { kind: 'no-confidence' }; // setPendingVote(vote.kind); governanceVoteChanged(vote); navigateTo.delegationForm(); diff --git a/packages/yoroi-extension/app/UI/pages/Governance/layout.js b/packages/yoroi-extension/app/UI/pages/Governance/layout.js deleted file mode 100644 index 064267dfc7..0000000000 --- a/packages/yoroi-extension/app/UI/pages/Governance/layout.js +++ /dev/null @@ -1,30 +0,0 @@ -import GeneralPageLayout from '../../layout/GeneralPageLayout'; -import { GovernanceStatusSelection } from '../../features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection'; -import NavBarContainerRevamp from '../../../containers/NavBarContainerRevamp'; -import NavBar from '../../../components/topbar/NavBar'; -import NavBarTitle from '../../../components/topbar/NavBarTitle'; -import { TransactionSubmitted } from '../../components/TransactionSubmitted/TransactionSubmitted'; -import { GovernanceProvider as GovernanceExternalPackageProvider } from '@yoroi/staking'; -import { useGovernance } from '../../features/governace/module/GovernanceContextProvider'; - -type Props = {| - stores: any, - actions: any, - children?: React$Node, -|}; - -const GovernanceLayout = ({ stores, actions, children }: Props): any => { - const { governanceManager } = useGovernance(); - - return ( - } />} - > - {children} - - ); -}; - -export default GovernanceLayout; diff --git a/packages/yoroi-extension/app/UI/pages/Governance/layout.tsx b/packages/yoroi-extension/app/UI/pages/Governance/layout.tsx index 064267dfc7..22347b37be 100644 --- a/packages/yoroi-extension/app/UI/pages/Governance/layout.tsx +++ b/packages/yoroi-extension/app/UI/pages/Governance/layout.tsx @@ -1,20 +1,17 @@ +import React from 'react'; import GeneralPageLayout from '../../layout/GeneralPageLayout'; -import { GovernanceStatusSelection } from '../../features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection'; import NavBarContainerRevamp from '../../../containers/NavBarContainerRevamp'; -import NavBar from '../../../components/topbar/NavBar'; import NavBarTitle from '../../../components/topbar/NavBarTitle'; -import { TransactionSubmitted } from '../../components/TransactionSubmitted/TransactionSubmitted'; -import { GovernanceProvider as GovernanceExternalPackageProvider } from '@yoroi/staking'; -import { useGovernance } from '../../features/governace/module/GovernanceContextProvider'; +import { GovernanceProvider as GovernanceExternalPackageProvider, useGovernance } from '@yoroi/staking'; -type Props = {| - stores: any, - actions: any, - children?: React$Node, -|}; +type Props = { + stores: any; + actions: any; + children?: React.ReactNode; +}; const GovernanceLayout = ({ stores, actions, children }: Props): any => { - const { governanceManager } = useGovernance(); + const { manager } = useGovernance(); return ( { actions={actions} navbar={} />} > - {children} + {children} ); }; diff --git a/packages/yoroi-extension/app/UI/types/index.js b/packages/yoroi-extension/app/UI/types/index.ts similarity index 100% rename from packages/yoroi-extension/app/UI/types/index.js rename to packages/yoroi-extension/app/UI/types/index.ts diff --git a/packages/yoroi-extension/jsconfig.json b/packages/yoroi-extension/jsconfig.json deleted file mode 100644 index 93b6ecd1ea..0000000000 --- a/packages/yoroi-extension/jsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ - -{ - "compilerOptions": { - "module": "ES6", - "jsx": "preserve", - "checkJs": true - }, - "exclude": ["node_modules", "**/node_modules/*"] - } \ No newline at end of file diff --git a/packages/yoroi-extension/package.json b/packages/yoroi-extension/package.json index 769578dd80..538d528607 100644 --- a/packages/yoroi-extension/package.json +++ b/packages/yoroi-extension/package.json @@ -107,6 +107,7 @@ "eslint-plugin-prettier": "3.3.1", "eslint-plugin-promise": "4.3.1", "eslint-plugin-react": "7.22.0", + "eslint-plugin-simple-import-sort": "^12.1.0", "file-loader": "6.2.0", "flow-bin": "0.142.0", "flow-typed": "3.3.1", diff --git a/packages/yoroi-extension/tsconfig.json b/packages/yoroi-extension/tsconfig.json index b69f944687..f4530c1619 100644 --- a/packages/yoroi-extension/tsconfig.json +++ b/packages/yoroi-extension/tsconfig.json @@ -1,28 +1,30 @@ { - "compilerOptions": { - "allowJs": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "baseUrl": "./app", - "checkJs": false, - "declaration": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "jsx": "react", - "lib": ["es6"], - "module": "esnext", - "moduleResolution": "node", - "noFallthroughCasesInSwitch": true, - "noImplicitReturns": true, - "noImplicitUseStrict": false, - "noStrictGenericChecks": false, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "resolveJsonModule": true, - "skipLibCheck": true, - "strict": true, - "target": "esnext" - } - } - \ No newline at end of file + "compilerOptions": { + /* Language and Environment */ + "declaration": true, + "target": "es2016", + "allowUnreachableCode": false, + "allowUnusedLabels": false, + /* Modules */ + "esModuleInterop": true, + "module": "commonjs", + "forceConsistentCasingInFileNames": true, + "jsx": "react", + + /* Type Checking */ + "moduleResolution": "node", + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "noImplicitUseStrict": false, + "noStrictGenericChecks": false, + "noUncheckedIndexedAccess": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "strict": true, + "noImplicitAny": false + }, + "include": ["app/UI/**/*"], + +} diff --git a/packages/yoroi-extension/yarn.lock b/packages/yoroi-extension/yarn.lock index 1b9adfa210..7281da2543 100644 --- a/packages/yoroi-extension/yarn.lock +++ b/packages/yoroi-extension/yarn.lock @@ -794,6 +794,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-syntax-typescript@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz#58d458271b4d3b6bb27ee6ac9525acbb259bad1c" + integrity sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" @@ -1215,6 +1222,16 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.7" +"@babel/plugin-transform-typescript@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.7.tgz#b006b3e0094bf0813d505e0c5485679eeaf4a881" + integrity sha512-iLD3UNkgx2n/HrjBesVbYX6j0yqn/sJktvbtKKgcaLIQ4bTTQ8obAypc1VpyHPD2y4Phh9zHOaAt8e/L14wCpw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-typescript" "^7.24.7" + "@babel/plugin-transform-unicode-escapes@^7.12.13", "@babel/plugin-transform-unicode-escapes@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz#2023a82ced1fb4971630a2e079764502c4148e0e" @@ -1456,6 +1473,17 @@ "@babel/plugin-transform-react-jsx-development" "^7.24.7" "@babel/plugin-transform-react-pure-annotations" "^7.24.7" +"@babel/preset-typescript@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz#66cd86ea8f8c014855671d5ea9a737139cbbfef1" + integrity sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-validator-option" "^7.24.7" + "@babel/plugin-syntax-jsx" "^7.24.7" + "@babel/plugin-transform-modules-commonjs" "^7.24.7" + "@babel/plugin-transform-typescript" "^7.24.7" + "@babel/register@7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.12.13.tgz#e9cb57618264f2944634da941ba9755088ef9ec5" @@ -6851,7 +6879,7 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" -enhanced-resolve@^5.7.0: +enhanced-resolve@^5.0.0, enhanced-resolve@^5.7.0: version "5.17.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz#d037603789dd9555b89aaec7eb78845c49089bc5" integrity sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA== @@ -7172,6 +7200,11 @@ eslint-plugin-react@7.22.0: resolve "^1.18.1" string.prototype.matchall "^4.0.2" +eslint-plugin-simple-import-sort@^12.1.0: + version "12.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-12.1.0.tgz#8186ad55474d2f5c986a2f1bf70625a981e30d05" + integrity sha512-Y2fqAfC11TcG/WP3TrI1Gi3p3nc8XJyEOJYHyEPEGI/UAgNx6akxxlX74p7SbAQdLcgASKhj8M0GKvH3vq/+ig== + eslint-scope@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" @@ -10405,7 +10438,7 @@ micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.2, micromatch@^4.0.4: +micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4: version "4.0.7" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== @@ -13319,7 +13352,7 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: +source-map@^0.7.3, source-map@^0.7.4: version "0.7.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== @@ -13988,6 +14021,17 @@ ts-expect@^1.1.0: resolved "https://registry.yarnpkg.com/ts-expect/-/ts-expect-1.3.0.tgz#3f8d3966e0e22b5e2bb88337eb99db6816a4c1cf" integrity sha512-e4g0EJtAjk64xgnFPD6kTBUtpnMVzDrMb12N1YZV0VvSlhnVT3SGxiYTLdGy8Q5cYHOIC/FAHmZ10eGrAguicQ== +ts-loader@^9.5.1: + version "9.5.1" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.5.1.tgz#63d5912a86312f1fbe32cef0859fb8b2193d9b89" + integrity sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg== + dependencies: + chalk "^4.1.0" + enhanced-resolve "^5.0.0" + micromatch "^4.0.0" + semver "^7.3.4" + source-map "^0.7.4" + tsconfig-paths@^3.9.0: version "3.15.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" @@ -14126,6 +14170,11 @@ typescript@^3.9.7: resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8" integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== +typescript@^5.4.5: + version "5.4.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" + integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== + typescript@~4.4.4: version "4.4.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.4.tgz#2cd01a1a1f160704d3101fd5a58ff0f9fcb8030c" From 7d5074f6324d327941cbd660afebbfa3d5578278 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Fri, 7 Jun 2024 17:21:51 +0300 Subject: [PATCH 092/464] fix context --- .../app/UI/pages/Governance/layout.tsx | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/packages/yoroi-extension/app/UI/pages/Governance/layout.tsx b/packages/yoroi-extension/app/UI/pages/Governance/layout.tsx index 22347b37be..d9d02b6c77 100644 --- a/packages/yoroi-extension/app/UI/pages/Governance/layout.tsx +++ b/packages/yoroi-extension/app/UI/pages/Governance/layout.tsx @@ -2,7 +2,8 @@ import React from 'react'; import GeneralPageLayout from '../../layout/GeneralPageLayout'; import NavBarContainerRevamp from '../../../containers/NavBarContainerRevamp'; import NavBarTitle from '../../../components/topbar/NavBarTitle'; -import { GovernanceProvider as GovernanceExternalPackageProvider, useGovernance } from '@yoroi/staking'; +import { GovernanceProvider as GovernanceExternalPackageProvider } from '@yoroi/staking'; +import { useGovernance } from '../../features/governace/module/GovernanceContextProvider'; type Props = { stores: any; @@ -11,17 +12,18 @@ type Props = { }; const GovernanceLayout = ({ stores, actions, children }: Props): any => { - const { manager } = useGovernance(); + const { governanceManager } = useGovernance(); - return ( - } />} - > - {children} - - ); + if (governanceManager) + return ( + } />} + > + {children} + + ); }; export default GovernanceLayout; From dcaf37c3da383715451584c31108ca5ffaf83e96 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Fri, 7 Jun 2024 17:25:23 +0300 Subject: [PATCH 093/464] test commit --- packages/yoroi-extension/app/UI/pages/Governance/layout.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/UI/pages/Governance/layout.tsx b/packages/yoroi-extension/app/UI/pages/Governance/layout.tsx index d9d02b6c77..169a735c7a 100644 --- a/packages/yoroi-extension/app/UI/pages/Governance/layout.tsx +++ b/packages/yoroi-extension/app/UI/pages/Governance/layout.tsx @@ -8,7 +8,7 @@ import { useGovernance } from '../../features/governace/module/GovernanceContext type Props = { stores: any; actions: any; - children?: React.ReactNode; + children: React.ReactNode; }; const GovernanceLayout = ({ stores, actions, children }: Props): any => { From 2e1c8b492a679d9714770229f16f0067e1e2ff66 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Fri, 7 Jun 2024 17:32:55 +0300 Subject: [PATCH 094/464] fix input styles --- .../yoroi-extension/app/UI/components/Input/TextInput.tsx | 5 ++--- .../app/UI/features/governace/common/ChooseDRepModal.tsx | 8 ++++---- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/yoroi-extension/app/UI/components/Input/TextInput.tsx b/packages/yoroi-extension/app/UI/components/Input/TextInput.tsx index 8efe68a00c..2438750037 100644 --- a/packages/yoroi-extension/app/UI/components/Input/TextInput.tsx +++ b/packages/yoroi-extension/app/UI/components/Input/TextInput.tsx @@ -1,5 +1,3 @@ -// @flow - import React from 'react'; import TextField from '@mui/material/TextField'; import { styled } from '@mui/material/styles'; @@ -21,9 +19,10 @@ export const TextInput = ({ id, label, onChange, value, error, helperText }: Sty }; const SInput = styled(TextField)(({ theme, error }: any) => ({ + margin: '0px 0px', '& .MuiFormHelperText-root': { position: 'absolute', - bottom: -22, + bottom: -2, left: -10, }, '& .MuiInputLabel-root': { diff --git a/packages/yoroi-extension/app/UI/features/governace/common/ChooseDRepModal.tsx b/packages/yoroi-extension/app/UI/features/governace/common/ChooseDRepModal.tsx index 0f3d294264..366415d26b 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/ChooseDRepModal.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/common/ChooseDRepModal.tsx @@ -4,11 +4,11 @@ import * as React from 'react'; import Button from '@mui/material/Button'; import Typography from '@mui/material/Typography'; import Stack from '@mui/material/Stack'; -import { TextInput } from '../../../components/index'; import { parseDrepId } from '@yoroi/staking'; import { RustModule } from '../../../../api/ada/lib/cardanoCrypto/rustLoader'; import { useGovernance } from '../module/GovernanceContextProvider'; import { useStrings } from './useStrings'; +import { TextInput } from '../../../components/Input/TextInput'; type ChooseDRepModallProps = { onSubmit?: (drepId: string) => void; @@ -43,8 +43,8 @@ export const ChooseDRepModal = ({ onSubmit }: ChooseDRepModallProps) => { return ( - - + + {strings.identifyDrep} { value={drepId} error={error} helperText={error ? strings.incorectFormat : ' '} - defaultValue="drep1wn0dklu87w8d9pkuyr7jalulgvl9w2he0hn0fne9k5a6y4d55mt" + // defaultValue="drep1wn0dklu87w8d9pkuyr7jalulgvl9w2he0hn0fne9k5a6y4d55mt" /> {/* @ts-ignore */} From b84197c0c89937eca1c73b090f02b73e43591feb Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Fri, 7 Jun 2024 18:06:15 +0300 Subject: [PATCH 095/464] wip --- .../{useDrepDelegationState.ts => useDrepDelegationState.js} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename packages/yoroi-extension/app/UI/features/governace/api/{useDrepDelegationState.ts => useDrepDelegationState.js} (98%) diff --git a/packages/yoroi-extension/app/UI/features/governace/api/useDrepDelegationState.ts b/packages/yoroi-extension/app/UI/features/governace/api/useDrepDelegationState.js similarity index 98% rename from packages/yoroi-extension/app/UI/features/governace/api/useDrepDelegationState.ts rename to packages/yoroi-extension/app/UI/features/governace/api/useDrepDelegationState.js index f006e48204..0328f3dd5b 100644 --- a/packages/yoroi-extension/app/UI/features/governace/api/useDrepDelegationState.ts +++ b/packages/yoroi-extension/app/UI/features/governace/api/useDrepDelegationState.js @@ -1,8 +1,8 @@ import { useQuery } from 'react-query'; type PoolTransition = { - kind: null | 'none' | 'delegate' | 'abstain' | 'no-confidence'; - drepID: 'drep1c93a2zvs3aw8e4naez0ynpmc48jbc7yaa3n2k8ljhwfdt70yscts' | null; + kind: null | 'none' | 'delegate' | 'abstain' | 'no-confidence', + drepID: 'drep1c93a2zvs3aw8e4naez0ynpmc48jbc7yaa3n2k8ljhwfdt70yscts' | null, }; // TODO mock impementation - add real endpoint From c0e4819d88922afd92823279b80d6fe4082ed458 Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Mon, 10 Jun 2024 09:29:54 +0700 Subject: [PATCH 096/464] migrated common components to tsx --- .../app/UI/components/{card.js => Card.tsx} | 31 +++--- .../app/UI/components/{chip.js => Chip.tsx} | 68 ++++++------ .../Input/{SearchInput.js => SearchInput.tsx} | 101 +++++++++--------- .../components/{skeleton.js => Skeleton.tsx} | 53 ++++----- .../UI/components/{tooltip.js => Tooltip.tsx} | 49 +++++---- .../buttons/{CopyButton.js => CopyButton.tsx} | 68 ++++++------ .../app/UI/components/icons/Search.js | 27 +++++ .../app/UI/components/icons/index.js | 2 + 8 files changed, 218 insertions(+), 181 deletions(-) rename packages/yoroi-extension/app/UI/components/{card.js => Card.tsx} (75%) rename packages/yoroi-extension/app/UI/components/{chip.js => Chip.tsx} (77%) rename packages/yoroi-extension/app/UI/components/Input/{SearchInput.js => SearchInput.tsx} (69%) rename packages/yoroi-extension/app/UI/components/{skeleton.js => Skeleton.tsx} (78%) rename packages/yoroi-extension/app/UI/components/{tooltip.js => Tooltip.tsx} (61%) rename packages/yoroi-extension/app/UI/components/buttons/{CopyButton.js => CopyButton.tsx} (96%) create mode 100644 packages/yoroi-extension/app/UI/components/icons/Search.js diff --git a/packages/yoroi-extension/app/UI/components/card.js b/packages/yoroi-extension/app/UI/components/Card.tsx similarity index 75% rename from packages/yoroi-extension/app/UI/components/card.js rename to packages/yoroi-extension/app/UI/components/Card.tsx index b416e5b8ec..d0e7c5631d 100644 --- a/packages/yoroi-extension/app/UI/components/card.js +++ b/packages/yoroi-extension/app/UI/components/Card.tsx @@ -1,15 +1,16 @@ -// @flow -import { Box, styled } from '@mui/material'; - -const StyledCard = styled(Box)(({ theme }) => ({ - borderRadius: '8px', - flex: '1 1 100%', - display: 'flex', - flexDirection: 'column', - border: '1px solid', - borderColor: theme.palette.ds.gray_c200, -})); - -export const Card = props => { - return ; -}; +// @flow +import React from 'react'; +import { Box, styled } from '@mui/material'; + +const StyledCard = styled(Box)(({ theme }: { theme: any }) => ({ + borderRadius: '8px', + flex: '1 1 100%', + display: 'flex', + flexDirection: 'column', + border: '1px solid', + borderColor: theme.palette.ds.gray_c200, +})); + +export const Card = props => { + return ; +}; diff --git a/packages/yoroi-extension/app/UI/components/chip.js b/packages/yoroi-extension/app/UI/components/Chip.tsx similarity index 77% rename from packages/yoroi-extension/app/UI/components/chip.js rename to packages/yoroi-extension/app/UI/components/Chip.tsx index fb4018e211..322c7697b5 100644 --- a/packages/yoroi-extension/app/UI/components/chip.js +++ b/packages/yoroi-extension/app/UI/components/Chip.tsx @@ -1,34 +1,34 @@ -// @flow -import React from 'react'; -import { Chip as MuiChip, Stack, Typography } from '@mui/material'; -import { useTheme } from '@mui/material/styles'; -import type { SxProps } from '@mui/material'; - -interface Props { - label: string; - active: boolean; - sx: SxProps; -} - -export const Chip = ({ label, active, sx, ...props }: Props): Node => { - const theme = useTheme(); - - return ( - - ); -}; +// @flow +import React from 'react'; +import { Chip as MuiChip } from '@mui/material'; +import { useTheme } from '@mui/material/styles'; +import type { SxProps } from '@mui/material'; + +interface Props { + label: string; + active: boolean; + sx: SxProps; +} + +export const Chip = ({ label, active, sx, ...props }: Props): JSX.Element => { + const theme: any = useTheme(); + + return ( + + ); +}; diff --git a/packages/yoroi-extension/app/UI/components/Input/SearchInput.js b/packages/yoroi-extension/app/UI/components/Input/SearchInput.tsx similarity index 69% rename from packages/yoroi-extension/app/UI/components/Input/SearchInput.js rename to packages/yoroi-extension/app/UI/components/Input/SearchInput.tsx index 59a20d2baf..22397455ad 100644 --- a/packages/yoroi-extension/app/UI/components/Input/SearchInput.js +++ b/packages/yoroi-extension/app/UI/components/Input/SearchInput.tsx @@ -1,49 +1,52 @@ -// @flow -import { Input, InputAdornment, styled } from '@mui/material'; -import { ReactComponent as SearchIcon } from '../../../assets/images/assets-page/search.inline.svg'; -import { useRef } from 'react'; - -const StyledInput = styled(Input)(({ theme }) => ({ - borderRadius: `${theme.shape.borderRadius}px`, - width: '320px', - height: '40px', - padding: `${theme.spacing(1)} ${theme.spacing(2)} ${theme.spacing(1)} ${theme.spacing(1)}`, - border: '1px solid', - borderColor: theme.palette.ds.gray_c400, - 'input::placeholder': { - color: theme.palette.ds.gray_c600, - }, -})); - -const StyledInputAdornment = styled(InputAdornment)(({ theme }) => ({ - '&:hover': { - cursor: 'pointer', - }, - - '& > svg > use': { - fill: theme.palette.ds.gray_c900, - }, -})); - -export const SearchInput = props => { - const ref = useRef(); - - const focusInput = () => { - if (ref.current) { - ref.current.focus(); - } - }; - - return ( - - - - } - {...props} - /> - ); -}; +// @flow +import React from 'react'; +import { Input, InputAdornment, styled } from '@mui/material'; +import { useRef } from 'react'; +import { useTheme } from '@mui/material/styles'; +import { Icon } from './../icons/index'; + +const StyledInput = styled(Input)(({ theme }: { theme: any }) => ({ + borderRadius: `${theme.shape.borderRadius}px`, + width: '320px', + height: '40px', + padding: `${theme.spacing(1)} ${theme.spacing(2)} ${theme.spacing(1)} ${theme.spacing(1)}`, + border: '1px solid', + borderColor: theme.palette.ds.gray_c400, + 'input::placeholder': { + color: theme.palette.ds.gray_c600, + }, +})); + +const StyledInputAdornment = styled(InputAdornment)(({ theme }: { theme: any }) => ({ + '&:hover': { + cursor: 'pointer', + }, + + '& > svg > use': { + fill: theme.palette.ds.gray_c900, + }, +})); + +export const SearchInput = props => { + const theme = useTheme(); + const ref = useRef(null); + + const focusInput = () => { + if (ref.current) { + ref.current.focus(); + } + }; + + return ( + + + + } + {...props} + /> + ); +}; diff --git a/packages/yoroi-extension/app/UI/components/skeleton.js b/packages/yoroi-extension/app/UI/components/Skeleton.tsx similarity index 78% rename from packages/yoroi-extension/app/UI/components/skeleton.js rename to packages/yoroi-extension/app/UI/components/Skeleton.tsx index 33247be2fc..d0d454649c 100644 --- a/packages/yoroi-extension/app/UI/components/skeleton.js +++ b/packages/yoroi-extension/app/UI/components/Skeleton.tsx @@ -1,26 +1,27 @@ -// @flow -import { Skeleton as MuiSkeleton } from '@mui/material'; -import type { SxProps } from '@mui/material'; -import { useTheme } from '@mui/material/styles'; - -interface Props { - sx: SxProps; -} - -export const Skeleton = ({ sx, ...props }: Props): Node => { - const theme = useTheme(); - - return ( - - ); -}; +// @flow +import React from 'react'; +import { Skeleton as MuiSkeleton } from '@mui/material'; +import type { SxProps } from '@mui/material'; +import { useTheme } from '@mui/material/styles'; + +interface Props { + sx: SxProps; +} + +export const Skeleton = ({ sx, ...props }: Props): JSX.Element => { + const theme: any = useTheme(); + + return ( + + ); +}; diff --git a/packages/yoroi-extension/app/UI/components/tooltip.js b/packages/yoroi-extension/app/UI/components/Tooltip.tsx similarity index 61% rename from packages/yoroi-extension/app/UI/components/tooltip.js rename to packages/yoroi-extension/app/UI/components/Tooltip.tsx index 91811b6066..603397603b 100644 --- a/packages/yoroi-extension/app/UI/components/tooltip.js +++ b/packages/yoroi-extension/app/UI/components/Tooltip.tsx @@ -1,23 +1,26 @@ -// @flow -import { styled } from '@mui/material'; -import { default as MuiTooltip, TooltipProps, tooltipClasses } from '@mui/material/Tooltip'; - -const StyledTooltip = styled(({ className, ...props }: TooltipProps) => ( - -))(({ theme }) => ({ - color: theme.palette.ds.text_primary_on, - [`& .${tooltipClasses.arrow}`]: { - color: theme.palette.ds.gray_c900, - }, - [`& .${tooltipClasses.tooltip}`]: { - backgroundColor: theme.palette.ds.gray_c900, - }, -})); - -interface Props { - children: Node; -} - -export const Tooltip = ({ children, ...props }: Props): Node => { - return {children}; -}; +// @flow +import React from 'react'; +import { styled } from '@mui/material'; +import { default as MuiTooltip, TooltipProps, tooltipClasses } from '@mui/material/Tooltip'; +import { useTheme } from '@mui/material/styles'; + +const StyledTooltip = styled(({ className, ...props }: TooltipProps) => ( + +))(({ theme }: { theme: any }) => ({ + color: theme.palette.ds.text_primary_on, + [`& .${tooltipClasses.arrow}`]: { + color: theme.palette.ds.gray_c900, + }, + [`& .${tooltipClasses.tooltip}`]: { + backgroundColor: theme.palette.ds.gray_c900, + }, +})); + +export const Tooltip = ({ children, ...props }: TooltipProps): JSX.Element => { + const theme = useTheme(); + return ( + + {children} + + ); +}; diff --git a/packages/yoroi-extension/app/UI/components/buttons/CopyButton.js b/packages/yoroi-extension/app/UI/components/buttons/CopyButton.tsx similarity index 96% rename from packages/yoroi-extension/app/UI/components/buttons/CopyButton.js rename to packages/yoroi-extension/app/UI/components/buttons/CopyButton.tsx index e933640764..2fe88af9d6 100644 --- a/packages/yoroi-extension/app/UI/components/buttons/CopyButton.js +++ b/packages/yoroi-extension/app/UI/components/buttons/CopyButton.tsx @@ -1,34 +1,34 @@ -// @flow -import React, { useState } from 'react'; -import { IconButton } from '@mui/material'; -import { CopyToClipboard } from 'react-copy-to-clipboard'; -import { Tooltip } from '../Tooltip'; -import { useStrings } from '../../features/portfolio/common/hooks/useStrings'; -import { Icon } from '../icons/index'; - -interface Props { - textToCopy: string; - disabled: boolean; -} - -export const CopyButton = ({ textToCopy, disabled, ...props }: Props) => { - const [copied, setCopied] = useState(false); - const strings = useStrings(); - - const handleCopy = () => { - setCopied(true); - setTimeout(() => { - setCopied(false); - }, 2000); - }; - - return ( - - - - {copied ? : } - - - - ); -}; +// @flow +import React, { useState } from 'react'; +import { IconButton } from '@mui/material'; +import { CopyToClipboard } from 'react-copy-to-clipboard'; +import { Tooltip } from '../Tooltip'; +import { useStrings } from '../../features/portfolio/common/hooks/useStrings'; +import { Icon } from '../icons/index'; + +interface Props { + textToCopy: string; + disabled: boolean; +} + +export const CopyButton = ({ textToCopy, disabled, ...props }: Props) => { + const [copied, setCopied] = useState(false); + const strings = useStrings(); + + const handleCopy = () => { + setCopied(true); + setTimeout(() => { + setCopied(false); + }, 2000); + }; + + return ( + + + + {copied ? : } + + + + ); +}; diff --git a/packages/yoroi-extension/app/UI/components/icons/Search.js b/packages/yoroi-extension/app/UI/components/icons/Search.js new file mode 100644 index 0000000000..f53124a87a --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/icons/Search.js @@ -0,0 +1,27 @@ +import React from 'react'; + +export const Search = props => ( + + icon/search + + + + + + + + + + +); diff --git a/packages/yoroi-extension/app/UI/components/icons/index.js b/packages/yoroi-extension/app/UI/components/icons/index.js index 5b9445c52e..22eaae95e4 100644 --- a/packages/yoroi-extension/app/UI/components/icons/index.js +++ b/packages/yoroi-extension/app/UI/components/icons/index.js @@ -12,6 +12,7 @@ import { Staking } from './Staking'; import { Expand } from './Expand'; import { ChevronUp } from './ChevronUp'; import { ChevronDown } from './ChevronDown'; +import { Search } from './Search'; export const Icon = { CloseIcon, @@ -28,4 +29,5 @@ export const Icon = { Expand, ChevronDown, ChevronUp, + Search, }; From 5fc5aefb909f29f6bd0833eb091144191e28c957 Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Mon, 10 Jun 2024 10:27:50 +0700 Subject: [PATCH 097/464] migrated pages --- ...PortfolioWallet.js => PortfolioWallet.tsx} | 149 +++--- .../Wallet/{StatsTable.js => StatsTable.tsx} | 459 +++++++++--------- ...lioDappsPage.js => PortfolioDappsPage.tsx} | 40 +- ...oDetailPage.js => PortfolioDetailPage.tsx} | 58 +-- .../{PortfolioPage.js => PortfolioPage.tsx} | 40 +- .../pages/portfolio/{layout.js => layout.tsx} | 92 ++-- 6 files changed, 422 insertions(+), 416 deletions(-) rename packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/{PortfolioWallet.js => PortfolioWallet.tsx} (87%) rename packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/{StatsTable.js => StatsTable.tsx} (91%) rename packages/yoroi-extension/app/UI/pages/portfolio/{PortfolioDappsPage.js => PortfolioDappsPage.tsx} (85%) rename packages/yoroi-extension/app/UI/pages/portfolio/{PortfolioDetailPage.js => PortfolioDetailPage.tsx} (88%) rename packages/yoroi-extension/app/UI/pages/portfolio/{PortfolioPage.js => PortfolioPage.tsx} (86%) rename packages/yoroi-extension/app/UI/pages/portfolio/{layout.js => layout.tsx} (74%) diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.tsx similarity index 87% rename from packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js rename to packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.tsx index f47720cef3..6b8b9cb5ab 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.tsx @@ -1,75 +1,74 @@ -// @flow -import { Typography, Stack, Box, Input, styled } from '@mui/material'; -import React, { ReactNode, useEffect, useState } from 'react'; -import { Tooltip, SearchInput } from '../../../../components'; -import { useTheme } from '@mui/material/styles'; -import StatsTable from './StatsTable'; -import mockData from '../../common/mockData'; -import PortfolioHeader from '../../common/components/PortfolioHeader'; -import { useStrings } from '../../common/hooks/useStrings'; -import { TokenType } from '../../common/types/index'; - -interface Props { - data: TokenType[]; -} - -const PortfolioWallet = ({ data }: Props): ReactNode => { - const theme = useTheme(); - const strings = useStrings(); - const [keyword, setKeyword] = useState(); - const [isLoading, setIsLoading] = useState(); - const [tokenList, setTokenList] = useState(data); - - useEffect(() => { - // FAKE FETCHING DATA TO SEE SKELETON - setIsLoading(true); - - const timer = setTimeout(() => { - setIsLoading(false); - }, 2000); - - return () => clearTimeout(timer); - }, []); - - useEffect(() => { - if (!keyword) { - setTokenList(data); - return; - } - - const lowercaseKeyword = keyword.toLowerCase(); - - const temp = data.filter(item => { - return ( - item.name.toLowerCase().includes(lowercaseKeyword) || - item.id.toLowerCase().includes(lowercaseKeyword) || - item.overview.fingerprint.toLowerCase().includes(lowercaseKeyword) - ); - }); - if (temp && temp.length > 0) { - setTokenList(temp); - } else { - setTokenList([]); - } - }, [keyword]); - - return ( - - - % {strings.balancePerformance} - +/- {strings.balanceChange} - {strings.in24hours} - - } - /> - - - ); -}; - -export default PortfolioWallet; +// @flow +import { Typography, Stack } from '@mui/material'; +import React, { ReactNode, useEffect, useState } from 'react'; +import { useTheme } from '@mui/material/styles'; +import StatsTable from './StatsTable'; +import mockData from '../../common/mockData'; +import PortfolioHeader from '../../common/components/PortfolioHeader'; +import { useStrings } from '../../common/hooks/useStrings'; +import { TokenType } from '../../common/types/index'; + +interface Props { + data: TokenType[]; +} + +const PortfolioWallet = ({ data }: Props): ReactNode => { + const theme = useTheme(); + const strings = useStrings(); + const [keyword, setKeyword] = useState(); + const [isLoading, setIsLoading] = useState(false); + const [tokenList, setTokenList] = useState(data); + + useEffect(() => { + // FAKE FETCHING DATA TO SEE SKELETON + setIsLoading(true); + + const timer = setTimeout(() => { + setIsLoading(false); + }, 2000); + + return () => clearTimeout(timer); + }, []); + + useEffect(() => { + if (!keyword) { + setTokenList(data); + return; + } + + const lowercaseKeyword = keyword.toLowerCase(); + + const temp = data.filter(item => { + return ( + item.name.toLowerCase().includes(lowercaseKeyword) || + item.id.toLowerCase().includes(lowercaseKeyword) || + item.overview.fingerprint.toLowerCase().includes(lowercaseKeyword) + ); + }); + if (temp && temp.length > 0) { + setTokenList(temp); + } else { + setTokenList([]); + } + }, [keyword]); + + return ( + + + % {strings.balancePerformance} + +/- {strings.balanceChange} + {strings.in24hours} + + } + /> + + + ); +}; + +export default PortfolioWallet; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.tsx similarity index 91% rename from packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js rename to packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.tsx index 0f8bd9d426..1ff4ff7070 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.tsx @@ -1,226 +1,233 @@ -// @flow -import { useMemo, useState } from 'react'; -import { TableCell, TableRow, Typography, Stack, Box } from '@mui/material'; -import { useTheme } from '@mui/material/styles'; -import tokenPng from '../../common/assets/images/token.png'; -import { usePortfolio } from '../../module/PortfolioContextProvider'; -import { Chip, Skeleton } from '../../../../components'; -import { Icon } from '../../../../components/icons'; -import { useNavigateTo } from '../../common/hooks/useNavigateTo'; -import { useStrings } from '../../common/hooks/useStrings'; -import useTableSort from '../../common/hooks/useTableSort'; -import Table from '../../common/components/Table'; -import { IHeadCell } from '../../common/types/table'; - -const TableRowSkeleton = ({ theme, ...props }) => ( - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -); - -const StatsTable = ({ data, isLoading }) => { - const theme = useTheme(); - const navigateTo = useNavigateTo(); - const strings = useStrings(); - const { unitOfAccount } = usePortfolio(); - const [{ order, orderBy }, setSortState] = useState({ - order: null, - orderBy: null, - }); - const list = useMemo(() => [...data], [data]); - - const headCells: IHeadCell[] = [ - { id: 'name', label: strings.name, align: 'left', sortType: 'character' }, - { id: 'price', label: strings.price, align: 'left', sortType: 'numeric' }, - { id: '24h', label: strings['24H'], align: 'left', sortType: 'numeric' }, - { id: '1W', label: strings['1W'], align: 'left', sortType: 'numeric' }, - { id: '1M', label: strings['1M'], align: 'left', sortType: 'numeric' }, - { - id: 'portfolioPercents', - label: `${strings.portfolio} %`, - align: 'left', - sortType: 'numeric', - }, - { - id: 'totalAmount', - label: strings.totalAmount, - align: 'right', - sortType: 'numeric', - }, - ]; - const { getSortedData, handleRequestSort } = useTableSort({ order, orderBy, setSortState, headCells, data }); - - return ( - } - > - {getSortedData(list).map(row => ( - navigateTo.portfolioDetail(row.id)} - sx={{ - cursor: 'pointer', - transition: 'all 0.3s ease-in-out', - borderRadius: `${theme.shape.borderRadius}px`, - '& td': { border: 0 }, - '&:hover': { - backgroundColor: theme.palette.ds.gray_c50, - }, - }} - > - - - - - - {row.name} - - - {row.id} - - - - - - - - {row.price} USD - - - - - = 0} - label={ - - {row['24h'] >= 0 ? ( - - ) : ( - - )} - - {row['24h'] >= 0 ? row['24h'] : -1 * row['24h']}% - - } - sx={{ cursor: 'pointer' }} - /> - - - - = 0} - label={ - - {row['1W'] >= 0 ? ( - - ) : ( - - )} - {row['1W'] >= 0 ? row['1W'] : -1 * row['1W']}% - - } - sx={{ cursor: 'pointer' }} - /> - - - - = 0} - label={ - - {row['1M'] >= 0 ? ( - - ) : ( - - )} - {row['1M'] >= 0 ? row['1M'] : -1 * row['1M']}% - - } - sx={{ cursor: 'pointer' }} - /> - - - - - {row.portfolioPercents.toFixed(2)} % - - - - - - - - {row.totalAmount} {row.name} - - {row.name === 'ADA' && unitOfAccount === 'ADA' ? null : ( - - {row.totalAmountUsd} {unitOfAccount} - - )} - - - - - ))} -
- ); -}; - -export default StatsTable; +// @flow +import React, { ReactNode } from 'react'; +import { useMemo, useState } from 'react'; +import { TableCell, TableRow, Typography, Stack, Box } from '@mui/material'; +import { useTheme } from '@mui/material/styles'; +import tokenPng from '../../common/assets/images/token.png'; +import { usePortfolio } from '../../module/PortfolioContextProvider'; +import { Chip, Skeleton } from '../../../../components'; +import { Icon } from '../../../../components/icons'; +import { useNavigateTo } from '../../common/hooks/useNavigateTo'; +import { useStrings } from '../../common/hooks/useStrings'; +import useTableSort from '../../common/hooks/useTableSort'; +import Table from '../../common/components/Table'; +import { IHeadCell } from '../../common/types/table'; +import { TokenType } from '../../common/types/index'; + +const TableRowSkeleton = ({ theme, ...props }) => ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +); + +interface Props { + data: TokenType[]; + isLoading: boolean; +} + +const StatsTable = ({ data, isLoading }: Props): ReactNode => { + const theme: any = useTheme(); + const navigateTo = useNavigateTo(); + const strings = useStrings(); + const { unitOfAccount } = usePortfolio(); + const [{ order, orderBy }, setSortState] = useState({ + order: null, + orderBy: null, + }); + const list = useMemo(() => [...data], [data]); + + const headCells: IHeadCell[] = [ + { id: 'name', label: strings.name, align: 'left', sortType: 'character' }, + { id: 'price', label: strings.price, align: 'left', sortType: 'numeric' }, + { id: '24h', label: strings['24H'], align: 'left', sortType: 'numeric' }, + { id: '1W', label: strings['1W'], align: 'left', sortType: 'numeric' }, + { id: '1M', label: strings['1M'], align: 'left', sortType: 'numeric' }, + { + id: 'portfolioPercents', + label: `${strings.portfolio} %`, + align: 'left', + sortType: 'numeric', + }, + { + id: 'totalAmount', + label: strings.totalAmount, + align: 'right', + sortType: 'numeric', + }, + ]; + const { getSortedData, handleRequestSort } = useTableSort({ order, orderBy, setSortState, headCells, data }); + + return ( + } + > + {getSortedData(list).map(row => ( + navigateTo.portfolioDetail(row.id)} + sx={{ + cursor: 'pointer', + transition: 'all 0.3s ease-in-out', + borderRadius: `${theme.shape.borderRadius}px`, + '& td': { border: 0 }, + '&:hover': { + backgroundColor: theme.palette.ds.gray_c50, + }, + }} + > + + + + + + {row.name} + + + {row.id} + + + + + + + + {row.price} USD + + + + + = 0} + label={ + + {row['24h'] >= 0 ? ( + + ) : ( + + )} + + {row['24h'] >= 0 ? row['24h'] : -1 * row['24h']}% + + } + sx={{ cursor: 'pointer' }} + /> + + + + = 0} + label={ + + {row['1W'] >= 0 ? ( + + ) : ( + + )} + {row['1W'] >= 0 ? row['1W'] : -1 * row['1W']}% + + } + sx={{ cursor: 'pointer' }} + /> + + + + = 0} + label={ + + {row['1M'] >= 0 ? ( + + ) : ( + + )} + {row['1M'] >= 0 ? row['1M'] : -1 * row['1M']}% + + } + sx={{ cursor: 'pointer' }} + /> + + + + + {row.portfolioPercents.toFixed(2)} % + + + + + + + + {row.totalAmount} {row.name} + + {row.name === 'ADA' && unitOfAccount === 'ADA' ? null : ( + + {row.totalAmountUsd} {unitOfAccount} + + )} + + + + + ))} +
+ ); +}; + +export default StatsTable; diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDappsPage.js b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDappsPage.tsx similarity index 85% rename from packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDappsPage.js rename to packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDappsPage.tsx index b79627b312..db85aa6250 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDappsPage.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDappsPage.tsx @@ -1,20 +1,20 @@ -// @flow -import React from 'react'; -import PortfolioDapps from '../../features/portfolio/useCases/Dapps/PortfolioDapps'; -import mockData from '../../features/portfolio/common/mockData'; -import PortfolioLayout from './layout'; - -type Props = {| - stores: any, - actions: any, -|}; - -const PortfolioDappsPage = (props: Props) => { - return ( - - - - ); -}; - -export default PortfolioDappsPage; +// @flow +import React from 'react'; +import PortfolioDapps from '../../features/portfolio/useCases/Dapps/PortfolioDapps'; +import mockData from '../../features/portfolio/common/mockData'; +import PortfolioLayout from './layout'; + +type Props = { + stores: any; + actions: any; +}; + +const PortfolioDappsPage = (props: Props) => { + return ( + + + + ); +}; + +export default PortfolioDappsPage; diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.tsx similarity index 88% rename from packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js rename to packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.tsx index e51127f230..8e794ad0d9 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.tsx @@ -1,29 +1,29 @@ -// @flow -import React from 'react'; -import TokenDetails from '../../features/portfolio/useCases/TokenDetails/TokenDetails'; -import mockData from '../../features/portfolio/common/mockData'; -import PortfolioLayout from './layout'; - -type Props = {| - stores: any, - actions: any, - match: any, -|}; - -const PortfolioDetailPage = ({ match, ...props }: Props) => { - const tokenId = match.params.tokenId; - - const tokenInfo = React.useMemo(() => { - const tmp = mockData.wallet.tokenList.find(item => item.id === tokenId); - if (tmp) return tmp; - return {}; - }, [tokenId]); - - return ( - - - - ); -}; - -export default PortfolioDetailPage; +// @flow +import React from 'react'; +import TokenDetails from '../../features/portfolio/useCases/TokenDetails/TokenDetails'; +import mockData from '../../features/portfolio/common/mockData'; +import PortfolioLayout from './layout'; + +type Props = { + stores: any; + actions: any; + match: any; +}; + +const PortfolioDetailPage = ({ match, ...props }: Props) => { + const tokenId = match.params.tokenId; + + const tokenInfo = React.useMemo(() => { + const tmp = mockData.wallet.tokenList.find(item => item.id === tokenId); + if (tmp) return tmp; + return {}; + }, [tokenId]); + + return ( + + + + ); +}; + +export default PortfolioDetailPage; diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.tsx similarity index 86% rename from packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js rename to packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.tsx index a55ea30c6f..14ec968fc9 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.tsx @@ -1,20 +1,20 @@ -// @flow -import React from 'react'; -import PortfolioWallet from '../../features/portfolio/useCases/Wallet/PortfolioWallet'; -import mockData from '../../features/portfolio/common/mockData'; -import PortfolioLayout from './layout'; - -type Props = {| - stores: any, - actions: any, -|}; - -const PortfolioPage = (props: Props) => { - return ( - - - - ); -}; - -export default PortfolioPage; +// @flow +import React from 'react'; +import PortfolioWallet from '../../features/portfolio/useCases/Wallet/PortfolioWallet'; +import mockData from '../../features/portfolio/common/mockData'; +import PortfolioLayout from './layout'; + +type Props = { + stores: any; + actions: any; +}; + +const PortfolioPage = (props: Props) => { + return ( + + + + ); +}; + +export default PortfolioPage; diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/layout.js b/packages/yoroi-extension/app/UI/pages/portfolio/layout.tsx similarity index 74% rename from packages/yoroi-extension/app/UI/pages/portfolio/layout.js rename to packages/yoroi-extension/app/UI/pages/portfolio/layout.tsx index 5f10f4e21b..859fbd1d20 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/layout.js +++ b/packages/yoroi-extension/app/UI/pages/portfolio/layout.tsx @@ -1,46 +1,46 @@ -// @flow -import NavBarTitle from '../../../components/topbar/NavBarTitle'; -import NavBarContainerRevamp from '../../../containers/NavBarContainerRevamp'; -import { ROUTES } from '../../../routes-config'; -import { buildRoute } from '../../../utils/routing'; -import PortfolioMenu from '../../features/portfolio/common/components/PortfolioMenu'; -import GeneralPageLayout from '../../layout/GeneralPageLayout'; - -type Props = {| - stores: any, - actions: any, - children?: React$Node, -|}; - -const PortfolioLayout = ({ stores, actions, children }: Props) => { - const isActivePage: string => boolean = route => { - const { location } = stores.router; - if (route && location) { - return location.pathname === buildRoute(route); - } - return false; - }; - const isDetailPage = stores.router.location.pathname.startsWith(`${ROUTES.PORTFOLIO.ROOT}/details`); - const menu = isDetailPage ? null : ( - actions.router.goToRoute.trigger({ route })} isActiveItem={isActivePage} /> - ); - - return ( - } - menu={menu} - /> - } - > - {children} - - ); -}; - -export default PortfolioLayout; +import { ROUTES } from '../../../routes-config'; +import { buildRoute } from '../../../utils/routing'; +import PortfolioMenu from '../../features/portfolio/common/components/PortfolioMenu'; +import React, { ReactNode } from 'react'; +import GeneralPageLayout from '../../layout/GeneralPageLayout'; +import NavBarContainerRevamp from '../../../containers/NavBarContainerRevamp'; +import NavBarTitle from '../../../components/topbar/NavBarTitle'; + +type Props = { + stores: any; + actions: any; + children: ReactNode; +}; + +const PortfolioLayout = ({ stores, actions, children }: Props): ReactNode => { + const isActivePage = (route: string) => { + const { location } = stores.router; + if (route && location) { + return location.pathname === buildRoute(route); + } + return false; + }; + const isDetailPage = stores.router.location.pathname.startsWith(`${ROUTES.PORTFOLIO.ROOT}/details`); + const menu = isDetailPage ? null : ( + actions.router.goToRoute.trigger({ route })} isActiveItem={isActivePage} /> + ); + + return ( + } + menu={menu} + /> + } + > + {children} + + ); +}; + +export default PortfolioLayout; From 6fde6cc26a7733a59135b4c9448ae9a29eeef460 Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Mon, 10 Jun 2024 10:31:09 +0700 Subject: [PATCH 098/464] update module and tsconfig --- packages/yoroi-extension/.d.ts | 7 +++++++ packages/yoroi-extension/tsconfig.json | 9 ++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/yoroi-extension/.d.ts b/packages/yoroi-extension/.d.ts index 39b095f7db..3e8b423a8e 100644 --- a/packages/yoroi-extension/.d.ts +++ b/packages/yoroi-extension/.d.ts @@ -1,3 +1,10 @@ declare module 'react-intl' { export const value: any; + export const defineMessages: any; + export const FormattedMessage: any; } + +declare module '*.png'; +declare module '*.svg'; +declare module '*.jpeg'; +declare module '*.jpg'; diff --git a/packages/yoroi-extension/tsconfig.json b/packages/yoroi-extension/tsconfig.json index f4530c1619..7360ef96d7 100644 --- a/packages/yoroi-extension/tsconfig.json +++ b/packages/yoroi-extension/tsconfig.json @@ -2,13 +2,13 @@ "compilerOptions": { /* Language and Environment */ "declaration": true, - "target": "es2016", + "target": "es2016", "allowUnreachableCode": false, "allowUnusedLabels": false, /* Modules */ "esModuleInterop": true, - "module": "commonjs", - "forceConsistentCasingInFileNames": true, + "module": "commonjs", + "forceConsistentCasingInFileNames": true, "jsx": "react", /* Type Checking */ @@ -25,6 +25,5 @@ "strict": true, "noImplicitAny": false }, - "include": ["app/UI/**/*"], - + "include": ["app/UI/**/*", ".d.ts"] } From 311b27df2d60d3e99210c729e23415dd3f22ef5b Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Mon, 10 Jun 2024 11:36:02 +0700 Subject: [PATCH 099/464] imported chrome types and applied to tsconfig --- packages/yoroi-extension/package-lock.json | 698 +++++++++++++++------ packages/yoroi-extension/package.json | 1 + packages/yoroi-extension/tsconfig.json | 3 +- 3 files changed, 526 insertions(+), 176 deletions(-) diff --git a/packages/yoroi-extension/package-lock.json b/packages/yoroi-extension/package-lock.json index 0130011b4b..251db653b5 100644 --- a/packages/yoroi-extension/package-lock.json +++ b/packages/yoroi-extension/package-lock.json @@ -10,6 +10,7 @@ "license": "MIT", "dependencies": { "@amplitude/analytics-browser": "^2.1.3", + "@babel/preset-typescript": "^7.24.7", "@cardano-foundation/ledgerjs-hw-app-cardano": "6.0.0", "@emotion/react": "^11.4.1", "@emotion/styled": "^11.3.0", @@ -30,6 +31,7 @@ "@svgr/webpack": "5.5.0", "@yoroi/exchange": "2.0.1", "@yoroi/resolver": "2.0.2", + "@yoroi/staking": "^1.5.1", "@yoroi/swap": "1.5.2", "@yoroi/types": "1.5.4", "assert": "2.1.0", @@ -54,7 +56,7 @@ "dropbox": "4.0.30", "es6-error": "4.1.1", "file-saver": "2.0.5", - "immer": "10.1.1", + "immer": "^10.1.1", "jdenticon": "3.2.0", "lodash": "4.17.21", "lottie-react": "2.4.0", @@ -85,6 +87,8 @@ "stream-browserify": "3.0.0", "tinycolor2": "1.4.2", "trezor-connect-flow": "Emurgo/trezor-connect-flow#92d6d8c8faef25c0ea1d481aa1ecb4ba77ce539c", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", "ua-parser-js": "1.0.37", "util": "0.12.5" }, @@ -110,6 +114,9 @@ "@emurgo/cardano-serialization-lib-nodejs": "12.0.0-alpha.26", "@emurgo/cross-csl-nodejs": "4.4.0", "@pmmmwh/react-refresh-webpack-plugin": "0.5.11", + "@types/chrome": "^0.0.268", + "@types/react-intl": "^3.0.0", + "@types/react-router-dom": "^5.3.3", "@yoroi/common": "1.5.0", "autoprefixer": "10.2.4", "babel-eslint": "11.0.0-beta.2", @@ -139,6 +146,7 @@ "eslint-plugin-prettier": "3.3.1", "eslint-plugin-promise": "4.3.1", "eslint-plugin-react": "7.22.0", + "eslint-plugin-simple-import-sort": "^12.1.0", "file-loader": "6.2.0", "flow-bin": "0.142.0", "flow-typed": "3.3.1", @@ -507,11 +515,12 @@ "dev": true }, "node_modules/@babel/code-frame": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dependencies": { - "@babel/highlight": "^7.16.0" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -565,24 +574,25 @@ } }, "node_modules/@babel/generator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", - "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", + "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", "dependencies": { - "@babel/types": "^7.16.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/types": "^7.24.7", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", - "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", "dependencies": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -626,16 +636,19 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz", - "integrity": "sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz", + "integrity": "sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.7", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -644,6 +657,14 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz", @@ -685,107 +706,108 @@ "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz", - "integrity": "sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ==", + "node_modules/@babel/helper-environment-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", "dependencies": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-function-name": { + "node_modules/@babel/helper-explode-assignable-expression": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", - "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz", + "integrity": "sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ==", "dependencies": { - "@babel/helper-get-function-arity": "^7.16.0", - "@babel/template": "^7.16.0", "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", - "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", + "node_modules/@babel/helper-function-name": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", "dependencies": { - "@babel/types": "^7.16.0" + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", - "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", "dependencies": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", - "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.7.tgz", + "integrity": "sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==", "dependencies": { - "@babel/types": "^7.16.0" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", - "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", "dependencies": { - "@babel/types": "^7.16.0" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", - "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", + "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", "dependencies": { - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-simple-access": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/helper-validator-identifier": "^7.15.7", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", - "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", + "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", "dependencies": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", + "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==", "engines": { "node": ">=6.9.0" } @@ -804,64 +826,76 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", - "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz", + "integrity": "sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.7", + "@babel/helper-optimise-call-expression": "^7.24.7" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", - "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", "dependencies": { - "@babel/types": "^7.16.0" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", + "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", "dependencies": { - "@babel/types": "^7.16.0" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", - "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", "dependencies": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", + "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", + "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", "engines": { "node": ">=6.9.0" } @@ -894,13 +928,14 @@ } }, "node_modules/@babel/highlight": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", - "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dependencies": { - "@babel/helper-validator-identifier": "^7.15.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -940,9 +975,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.0.tgz", - "integrity": "sha512-TEHWXf0xxpi9wKVyBCmRcSSDjbJ/cl6LUdlbYUHEaNQUJGhreJbZrXT6sR4+fZLxVUJqNRB4KyOvjuy/D9009A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", + "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1403,11 +1438,11 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.0.tgz", - "integrity": "sha512-8zv2+xiPHwly31RK4RmnEYY5zziuF3O7W2kIDW+07ewWDh6Oi0dRq8kwvulRkFgt6DB97RlKs5c1y068iPlCUg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1510,6 +1545,20 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", + "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz", @@ -1750,14 +1799,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz", - "integrity": "sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.7.tgz", + "integrity": "sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ==", "dependencies": { - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-simple-access": "^7.16.0", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2067,6 +2115,23 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.7.tgz", + "integrity": "sha512-iLD3UNkgx2n/HrjBesVbYX6j0yqn/sJktvbtKKgcaLIQ4bTTQ8obAypc1VpyHPD2y4Phh9zHOaAt8e/L14wCpw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-typescript": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-unicode-escapes": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.0.tgz", @@ -2226,6 +2291,24 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-typescript": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz", + "integrity": "sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "@babel/plugin-syntax-jsx": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.7", + "@babel/plugin-transform-typescript": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/register": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.12.13.tgz", @@ -2261,31 +2344,32 @@ } }, "node_modules/@babel/template": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", - "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.0.tgz", - "integrity": "sha512-qQ84jIs1aRQxaGaxSysII9TuDaguZ5yVrEuC0BN2vcPlalwfLovVmCjbFDPECPXcYM/wLvNFfp8uDOliLxIoUQ==", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-hoist-variables": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0", - "debug": "^4.1.0", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", + "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { @@ -2293,11 +2377,12 @@ } }, "node_modules/@babel/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", - "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", + "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", "dependencies": { - "@babel/helper-validator-identifier": "^7.15.7", + "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -3684,6 +3769,49 @@ "node": ">=8" } }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "node_modules/@ledgerhq/devices": { "version": "5.51.1", "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-5.51.1.tgz", @@ -6970,6 +7098,16 @@ "@types/responselike": "*" } }, + "node_modules/@types/chrome": { + "version": "0.0.268", + "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.0.268.tgz", + "integrity": "sha512-7N1QH9buudSJ7sI8Pe4mBHJr5oZ48s0hcanI9w3wgijAlv1OZNUZve9JR4x42dn5lJ5Sm87V1JNfnoh10EnQlA==", + "dev": true, + "dependencies": { + "@types/filesystem": "*", + "@types/har-format": "*" + } + }, "node_modules/@types/connect": { "version": "3.4.35", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", @@ -7047,6 +7185,21 @@ "@types/range-parser": "*" } }, + "node_modules/@types/filesystem": { + "version": "0.0.36", + "resolved": "https://registry.npmjs.org/@types/filesystem/-/filesystem-0.0.36.tgz", + "integrity": "sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA==", + "dev": true, + "dependencies": { + "@types/filewriter": "*" + } + }, + "node_modules/@types/filewriter": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/filewriter/-/filewriter-0.0.33.tgz", + "integrity": "sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==", + "dev": true + }, "node_modules/@types/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", @@ -7066,6 +7219,18 @@ "@types/node": "*" } }, + "node_modules/@types/har-format": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@types/har-format/-/har-format-1.2.15.tgz", + "integrity": "sha512-RpQH4rXLuvTXKR0zqHq3go0RVXYv/YVqv4TnPH95VbwUxZdQlK1EtcMvQvMpDngHbt13Csh9Z4qT9AbkiQH5BA==", + "dev": true + }, + "node_modules/@types/history": { + "version": "4.7.11", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", + "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==", + "dev": true + }, "node_modules/@types/hoist-non-react-statics": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", @@ -7270,6 +7435,16 @@ "csstype": "^3.0.2" } }, + "node_modules/@types/react-intl": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/react-intl/-/react-intl-3.0.0.tgz", + "integrity": "sha512-k8F3d05XQGEqSWIfK97bBjZe4z9RruXU9Wa7OZ2iUC5pdeIpzuQDZe/9C2J3Xir5//ZtAkhcv08Wfx3n5TBTQg==", + "deprecated": "This is a stub types definition. react-intl provides its own type definitions, so you do not need this installed.", + "dev": true, + "dependencies": { + "react-intl": "*" + } + }, "node_modules/@types/react-is": { "version": "17.0.3", "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-17.0.3.tgz", @@ -7289,6 +7464,27 @@ "redux": "^4.0.0" } }, + "node_modules/@types/react-router": { + "version": "5.1.20", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", + "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", + "dev": true, + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*" + } + }, + "node_modules/@types/react-router-dom": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", + "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", + "dev": true, + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "*" + } + }, "node_modules/@types/react-transition-group": { "version": "4.4.4", "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.4.tgz", @@ -7749,6 +7945,59 @@ "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-1.1.0.tgz", "integrity": "sha512-C40jQ3NzfkP53NsO8kEOFd79p4b9kDXQMwgiY1z8ZwrDZgUyom0AHwGegF4Dm99L+YoYhuaB0ceerUcXmqr1rQ==" }, + "node_modules/@yoroi/staking": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@yoroi/staking/-/staking-1.5.1.tgz", + "integrity": "sha512-CgJhPR7rf07QSstwdhPt5C+P8jNuZiqv3s4+ODlj8x60johIl6/5sz2vt+zGcx4R8pzFw1D/pDyFmdw0BDvzlg==", + "dependencies": { + "@emurgo/cip14-js": "^3.0.1", + "bech32": "^2.0.0", + "bip39": "^3.1.0", + "immer": "^10.0.2" + }, + "engines": { + "node": ">= 16.19.0" + }, + "optionalDependencies": { + "@react-native-async-storage/async-storage": "^1.19.3" + }, + "peerDependencies": { + "@react-native-async-storage/async-storage": ">= 1.19.3 <= 1.20.0", + "react": ">= 16.8.0 <= 19.0.0", + "react-query": "^3.39.3" + } + }, + "node_modules/@yoroi/staking/node_modules/@emurgo/cip14-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@emurgo/cip14-js/-/cip14-js-3.0.1.tgz", + "integrity": "sha512-u0XobeajNSlmeGBmY3ntA+NE/Vns7hKP0xrFzWyAO7YubETOifTjUddJN4gpvXE4S08DPUcNBVe3sx1m5GPIOg==", + "dependencies": { + "bech32": "2.0.0", + "blake2b": "2.1.3" + } + }, + "node_modules/@yoroi/staking/node_modules/blake2b": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/blake2b/-/blake2b-2.1.3.tgz", + "integrity": "sha512-pkDss4xFVbMb4270aCyGD3qLv92314Et+FsKzilCLxDz5DuZ2/1g3w4nmBbu6nKApPspnjG7JcwTjGZnduB1yg==", + "dependencies": { + "blake2b-wasm": "^1.1.0", + "nanoassert": "^1.0.0" + } + }, + "node_modules/@yoroi/staking/node_modules/blake2b-wasm": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/blake2b-wasm/-/blake2b-wasm-1.1.7.tgz", + "integrity": "sha512-oFIHvXhlz/DUgF0kq5B1CqxIDjIJwh9iDeUUGQUcvgiGz7Wdw03McEO7CfLBy7QKGdsydcMCgO9jFNBAFCtFcA==", + "dependencies": { + "nanoassert": "^1.0.0" + } + }, + "node_modules/@yoroi/staking/node_modules/nanoassert": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-1.1.0.tgz", + "integrity": "sha512-C40jQ3NzfkP53NsO8kEOFd79p4b9kDXQMwgiY1z8ZwrDZgUyom0AHwGegF4Dm99L+YoYhuaB0ceerUcXmqr1rQ==" + }, "node_modules/@yoroi/swap": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/@yoroi/swap/-/swap-1.5.2.tgz", @@ -12882,6 +13131,18 @@ "once": "^1.4.0" } }, + "node_modules/enhanced-resolve": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", + "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", @@ -13541,6 +13802,15 @@ "node": ">=0.10.0" } }, + "node_modules/eslint-plugin-simple-import-sort": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-12.1.0.tgz", + "integrity": "sha512-Y2fqAfC11TcG/WP3TrI1Gi3p3nc8XJyEOJYHyEPEGI/UAgNx6akxxlX74p7SbAQdLcgASKhj8M0GKvH3vq/+ig==", + "dev": true, + "peerDependencies": { + "eslint": ">=5.0.0" + } + }, "node_modules/eslint-utils": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", @@ -15134,6 +15404,19 @@ "node": ">= 6" } }, + "node_modules/flowgen/node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, "node_modules/fnv-plus": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/fnv-plus/-/fnv-plus-1.3.1.tgz", @@ -15617,8 +15900,7 @@ "node_modules/graceful-fs": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "dev": true + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" }, "node_modules/graphql": { "version": "15.8.0", @@ -16128,15 +16410,6 @@ "webpack": "^5.20.0" } }, - "node_modules/html-webpack-plugin/node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/htmlparser2": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.1.2.tgz", @@ -21087,7 +21360,6 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, "dependencies": { "braces": "^3.0.1", "picomatch": "^2.2.3" @@ -27039,6 +27311,14 @@ "node": ">=8" } }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" + } + }, "node_modules/tar": { "version": "6.1.11", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", @@ -27492,6 +27772,97 @@ "integrity": "sha512-e4g0EJtAjk64xgnFPD6kTBUtpnMVzDrMb12N1YZV0VvSlhnVT3SGxiYTLdGy8Q5cYHOIC/FAHmZ10eGrAguicQ==", "dev": true }, + "node_modules/ts-loader": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", + "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/ts-loader/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ts-loader/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ts-loader/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ts-loader/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/ts-loader/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-loader/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/ts-loader/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/tsconfig-paths": { "version": "3.11.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz", @@ -27589,16 +27960,15 @@ "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==" }, "node_modules/typescript": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", - "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", - "dev": true, + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/typescript-compiler": { @@ -29257,19 +29627,6 @@ "node": ">=0.4.0" } }, - "node_modules/webpack/node_modules/enhanced-resolve": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", - "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/webpack/node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -29319,15 +29676,6 @@ "node": ">=0.10.0" } }, - "node_modules/webpack/node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/webpack/node_modules/watchpack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", diff --git a/packages/yoroi-extension/package.json b/packages/yoroi-extension/package.json index fcdb39b5d9..c4108f02e5 100644 --- a/packages/yoroi-extension/package.json +++ b/packages/yoroi-extension/package.json @@ -76,6 +76,7 @@ "@emurgo/cardano-serialization-lib-nodejs": "12.0.0-alpha.26", "@emurgo/cross-csl-nodejs": "4.4.0", "@pmmmwh/react-refresh-webpack-plugin": "0.5.11", + "@types/chrome": "^0.0.268", "@types/react-intl": "^3.0.0", "@types/react-router-dom": "^5.3.3", "@yoroi/common": "1.5.0", diff --git a/packages/yoroi-extension/tsconfig.json b/packages/yoroi-extension/tsconfig.json index 7360ef96d7..8f64b72412 100644 --- a/packages/yoroi-extension/tsconfig.json +++ b/packages/yoroi-extension/tsconfig.json @@ -23,7 +23,8 @@ "resolveJsonModule": true, "skipLibCheck": true, "strict": true, - "noImplicitAny": false + "noImplicitAny": false, + "types": ["chrome"] }, "include": ["app/UI/**/*", ".d.ts"] } From e1994321cd6793cec5938de335a0e14d0046a6e9 Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Mon, 10 Jun 2024 14:43:08 +0700 Subject: [PATCH 100/464] fix types and errors --- .../app/UI/components/Chip.tsx | 10 +- .../app/UI/components/Skeleton.tsx | 16 +- .../{LiquidityTable.js => LiquidityTable.tsx} | 459 +++++++++--------- .../useCases/Wallet/PortfolioWallet.tsx | 4 +- .../portfolio/useCases/Wallet/StatsTable.tsx | 4 +- .../app/UI/pages/portfolio/layout.tsx | 2 +- 6 files changed, 245 insertions(+), 250 deletions(-) rename packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/{LiquidityTable.js => LiquidityTable.tsx} (92%) diff --git a/packages/yoroi-extension/app/UI/components/Chip.tsx b/packages/yoroi-extension/app/UI/components/Chip.tsx index 322c7697b5..38c0294137 100644 --- a/packages/yoroi-extension/app/UI/components/Chip.tsx +++ b/packages/yoroi-extension/app/UI/components/Chip.tsx @@ -1,23 +1,19 @@ // @flow import React from 'react'; import { Chip as MuiChip } from '@mui/material'; -import { useTheme } from '@mui/material/styles'; -import type { SxProps } from '@mui/material'; interface Props { label: string; active: boolean; - sx: SxProps; + sx: any; } export const Chip = ({ label, active, sx, ...props }: Props): JSX.Element => { - const theme: any = useTheme(); - return ( ({ maxWidth: 'fit-content', padding: '2px 6px !important', borderRadius: '20px', @@ -28,7 +24,7 @@ export const Chip = ({ label, active, sx, ...props }: Props): JSX.Element => { '& .MuiChip-label': { padding: 0, }, - }} + })} > ); }; diff --git a/packages/yoroi-extension/app/UI/components/Skeleton.tsx b/packages/yoroi-extension/app/UI/components/Skeleton.tsx index d0d454649c..328efb54fd 100644 --- a/packages/yoroi-extension/app/UI/components/Skeleton.tsx +++ b/packages/yoroi-extension/app/UI/components/Skeleton.tsx @@ -1,27 +1,27 @@ // @flow import React from 'react'; import { Skeleton as MuiSkeleton } from '@mui/material'; -import type { SxProps } from '@mui/material'; -import { useTheme } from '@mui/material/styles'; interface Props { - sx: SxProps; + width: string; + height: string; + sx?: any; } -export const Skeleton = ({ sx, ...props }: Props): JSX.Element => { - const theme: any = useTheme(); - +export const Skeleton = ({ width, height, sx, ...props }: Props): JSX.Element => { return ( ({ borderRadius: `${theme.shape.borderRadius}px`, backgroundColor: theme.palette.ds.gray_c100, opacity: 0.8, ...sx, - }} + })} /> ); }; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.tsx similarity index 92% rename from packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js rename to packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.tsx index 44101aedf2..dd844d4396 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.tsx @@ -1,230 +1,229 @@ -// @flow -import { ReactNode, useMemo, useState } from 'react'; -import { TableCell, TableRow, Typography, Stack, Box } from '@mui/material'; -import { useTheme } from '@mui/material/styles'; -import { useNavigateTo } from '../../common/hooks/useNavigateTo'; -import { usePortfolio } from '../../module/PortfolioContextProvider'; -import adaPng from '../../../../../assets/images/ada.png'; -import hoskyPng from '../../common/assets/images/hosky-token.png'; -import minswapPng from '../../common/assets/images/minswap-dex.png'; -import { Chip, Skeleton } from '../../../../components'; -import { useStrings } from '../../common/hooks/useStrings'; -import { Icon } from '../../../../components/icons/'; -import useTableSort from '../../common/hooks/useTableSort'; -import Table from '../../common/components/Table'; -import { IHeadCell } from '../../common/types/table'; - -const TableRowSkeleton = ({ theme, ...props }) => ( - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -); - -interface Props { - data: LiquidityItemType[]; - isLoading: boolean; -} - -const LiquidityTable = ({ data, isLoading }: Props): ReactNode => { - const theme = useTheme(); - const navigateTo = useNavigateTo(); - const strings = useStrings(); - const { unitOfAccount } = usePortfolio(); - const [{ order, orderBy }, setSortState] = useState({ - order: '', - orderBy: '', - }); - const list = useMemo(() => [...data], [data]); - - const headCells: IHeadCell[] = [ - { id: 'tokenPair', label: strings.tokenPair, align: 'left', sortType: 'character' }, - { id: 'DEX', label: strings.dex, align: 'left', sortType: 'character', isPadding: true }, - { id: 'firstTokenValue', label: strings.firstTokenValue, align: 'left', sortType: 'numeric', isPadding: true }, - { id: 'secondTokenValue', label: strings.secondTokenValue, align: 'left', sortType: 'numeric', isPadding: true }, - { - id: 'lpTokens', - label: strings.lpTokens, - align: 'left', - sortType: 'numeric', - isPadding: true, - }, - { - id: 'totalValue', - label: strings.totalValue, - align: 'right', - sortType: 'numeric', - }, - ]; - const { getSortedData, handleRequestSort } = useTableSort({ order, orderBy, setSortState, headCells, data }); - - return ( - } - > - {getSortedData(list).map(row => ( - - - - - - - - - {row.firstToken.name} - {row.secondToken.name} - - - - - - - chrome.tabs.create({ - url: row.DEXLink, - }) - } - sx={{ width: 'fit-content', cursor: 'pointer' }} - > - - - {row.DEX} - - - - - - - - {row.firstTokenValue} {row.firstToken.name} - - {row.firstToken.name === 'ADA' && unitOfAccount === 'ADA' ? null : ( - - {row.firstTokenValueUsd} {unitOfAccount} - - )} - - - - - - - {row.secondTokenValue} {row.secondToken.name} - - {row.secondToken.name === 'ADA' && unitOfAccount === 'ADA' ? null : ( - - {row.secondTokenValueUsd} {unitOfAccount} - - )} - - - - - {row.lpTokens} - - - - - - {row.totalValue} {row.firstToken.name} - - {unitOfAccount === 'ADA' && row.firstToken.name === 'ADA' ? null : ( - - {row.totalValueUsd} {unitOfAccount} - - )} - - - - ))} -
- ); -}; - -export default LiquidityTable; +// @flow +import React from 'react'; +import { useMemo, useState } from 'react'; +import { TableCell, TableRow, Typography, Stack, Box } from '@mui/material'; +import { useTheme } from '@mui/material/styles'; +import { usePortfolio } from '../../module/PortfolioContextProvider'; +import adaPng from '../../../../../assets/images/ada.png'; +import hoskyPng from '../../common/assets/images/hosky-token.png'; +import minswapPng from '../../common/assets/images/minswap-dex.png'; +import { Skeleton } from '../../../../components'; +import { useStrings } from '../../common/hooks/useStrings'; +import useTableSort from '../../common/hooks/useTableSort'; +import Table from '../../common/components/Table'; +import { IHeadCell } from '../../common/types/table'; +import { LiquidityItemType } from '../../common/types/index'; + +const TableRowSkeleton = ({ theme, ...props }) => ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +); + +interface Props { + data: LiquidityItemType[]; + isLoading: boolean; +} + +const LiquidityTable = ({ data, isLoading }: Props): JSX.Element => { + const theme: any = useTheme(); + const strings = useStrings(); + const { unitOfAccount } = usePortfolio(); + const [{ order, orderBy }, setSortState] = useState({ + order: '', + orderBy: '', + }); + const list = useMemo(() => [...data], [data]); + + const headCells: IHeadCell[] = [ + { id: 'tokenPair', label: strings.tokenPair, align: 'left', sortType: 'character' }, + { id: 'DEX', label: strings.dex, align: 'left', sortType: 'character', isPadding: true }, + { id: 'firstTokenValue', label: strings.firstTokenValue, align: 'left', sortType: 'numeric', isPadding: true }, + { id: 'secondTokenValue', label: strings.secondTokenValue, align: 'left', sortType: 'numeric', isPadding: true }, + { + id: 'lpTokens', + label: strings.lpTokens, + align: 'left', + sortType: 'numeric', + isPadding: true, + }, + { + id: 'totalValue', + label: strings.totalValue, + align: 'right', + sortType: 'numeric', + }, + ]; + const { getSortedData, handleRequestSort } = useTableSort({ order, orderBy, setSortState, headCells, data }); + + return ( + } + > + {getSortedData(list).map(row => ( + + + + + + + + + {row.firstToken.name} - {row.secondToken.name} + + + + + + + chrome.tabs.create({ + url: row.DEXLink, + }) + } + sx={{ width: 'fit-content', cursor: 'pointer' }} + > + + + {row.DEX} + + + + + + + + {row.firstTokenValue} {row.firstToken.name} + + {row.firstToken.name === 'ADA' && unitOfAccount === 'ADA' ? null : ( + + {row.firstTokenValueUsd} {unitOfAccount} + + )} + + + + + + + {row.secondTokenValue} {row.secondToken.name} + + {row.secondToken.name === 'ADA' && unitOfAccount === 'ADA' ? null : ( + + {row.secondTokenValueUsd} {unitOfAccount} + + )} + + + + + {row.lpTokens} + + + + + + {row.totalValue} {row.firstToken.name} + + {unitOfAccount === 'ADA' && row.firstToken.name === 'ADA' ? null : ( + + {row.totalValueUsd} {unitOfAccount} + + )} + + + + ))} +
+ ); +}; + +export default LiquidityTable; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.tsx b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.tsx index 6b8b9cb5ab..8d9f901c56 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.tsx @@ -1,6 +1,6 @@ // @flow import { Typography, Stack } from '@mui/material'; -import React, { ReactNode, useEffect, useState } from 'react'; +import React, { useEffect, useState } from 'react'; import { useTheme } from '@mui/material/styles'; import StatsTable from './StatsTable'; import mockData from '../../common/mockData'; @@ -12,7 +12,7 @@ interface Props { data: TokenType[]; } -const PortfolioWallet = ({ data }: Props): ReactNode => { +const PortfolioWallet = ({ data }: Props): JSX.Element => { const theme = useTheme(); const strings = useStrings(); const [keyword, setKeyword] = useState(); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.tsx b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.tsx index 1ff4ff7070..b7f6636cab 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.tsx @@ -1,5 +1,5 @@ // @flow -import React, { ReactNode } from 'react'; +import React from 'react'; import { useMemo, useState } from 'react'; import { TableCell, TableRow, Typography, Stack, Box } from '@mui/material'; import { useTheme } from '@mui/material/styles'; @@ -67,7 +67,7 @@ interface Props { isLoading: boolean; } -const StatsTable = ({ data, isLoading }: Props): ReactNode => { +const StatsTable = ({ data, isLoading }: Props): JSX.Element => { const theme: any = useTheme(); const navigateTo = useNavigateTo(); const strings = useStrings(); diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/layout.tsx b/packages/yoroi-extension/app/UI/pages/portfolio/layout.tsx index 859fbd1d20..a2157432d7 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/layout.tsx +++ b/packages/yoroi-extension/app/UI/pages/portfolio/layout.tsx @@ -12,7 +12,7 @@ type Props = { children: ReactNode; }; -const PortfolioLayout = ({ stores, actions, children }: Props): ReactNode => { +const PortfolioLayout = ({ stores, actions, children }: Props): JSX.Element => { const isActivePage = (route: string) => { const { location } = stores.router; if (route && location) { From 5586938d42314fac834abcd6a81390694c0f1b66 Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Mon, 10 Jun 2024 17:20:31 +0700 Subject: [PATCH 101/464] migrated all to typescrypt and applied clean type safe --- .../app/UI/components/icons/Search.js | 2 +- .../common/components/NavigationButton.tsx | 31 + ...PortfolioHeader.js => PortfolioHeader.tsx} | 233 +-- .../{PortfolioMenu.js => PortfolioMenu.tsx} | 71 +- ...ableTableHead.js => SortableTableHead.tsx} | 115 +- .../common/components/{Table.js => Table.tsx} | 114 +- .../common/components/TextPrimitives.tsx | 7 + .../helpers/{mockHelper.js => mockHelper.ts} | 200 +- ...nsactionHelper.js => transactionHelper.ts} | 98 +- .../hooks/{useChart.js => useChart.tsx} | 366 ++-- .../{useNavigateTo.js => useNavigateTo.ts} | 34 +- .../hooks/{useStrings.js => useStrings.ts} | 790 ++++---- .../{useTableSort.js => useTableSort.ts} | 140 +- .../common/{mockData.js => mockData.ts} | 1688 ++++++++--------- .../common/types/{chart.js => chart.ts} | 42 +- .../common/types/{index.js => index.ts} | 164 +- .../features/portfolio/common/types/table.js | 9 - .../features/portfolio/common/types/table.ts | 12 + .../types/{transaction.js => transaction.ts} | 50 +- ...ovider.js => PortfolioContextProvider.tsx} | 124 +- .../portfolio/module/{state.js => state.ts} | 101 +- .../{LendAndBorrow.js => LendAndBorrow.tsx} | 48 +- .../useCases/Dapps/LiquidityTable.tsx | 8 +- .../Dapps/{OrderTable.js => OrderTable.tsx} | 429 +++-- .../{PortfolioDapps.js => PortfolioDapps.tsx} | 303 +-- ...kenDetailChart.js => TokenDetailChart.tsx} | 389 ++-- ...ailOverview.js => TokenDetailOverview.tsx} | 328 ++-- ...formance.js => TokenDetailPerformance.tsx} | 152 +- .../{TokenDetails.js => TokenDetails.tsx} | 395 ++-- ...ansactionTable.js => TransactionTable.tsx} | 481 +++-- .../portfolio/useCases/Wallet/StatsTable.tsx | 4 +- .../pages/portfolio/PortfolioDetailPage.tsx | 6 +- 32 files changed, 3479 insertions(+), 3455 deletions(-) create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/components/NavigationButton.tsx rename packages/yoroi-extension/app/UI/features/portfolio/common/components/{PortfolioHeader.js => PortfolioHeader.tsx} (92%) rename packages/yoroi-extension/app/UI/features/portfolio/common/components/{PortfolioMenu.js => PortfolioMenu.tsx} (75%) rename packages/yoroi-extension/app/UI/features/portfolio/common/components/{SortableTableHead.js => SortableTableHead.tsx} (91%) rename packages/yoroi-extension/app/UI/features/portfolio/common/components/{Table.js => Table.tsx} (82%) create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/components/TextPrimitives.tsx rename packages/yoroi-extension/app/UI/features/portfolio/common/helpers/{mockHelper.js => mockHelper.ts} (88%) rename packages/yoroi-extension/app/UI/features/portfolio/common/helpers/{transactionHelper.js => transactionHelper.ts} (82%) rename packages/yoroi-extension/app/UI/features/portfolio/common/hooks/{useChart.js => useChart.tsx} (75%) rename packages/yoroi-extension/app/UI/features/portfolio/common/hooks/{useNavigateTo.js => useNavigateTo.ts} (91%) rename packages/yoroi-extension/app/UI/features/portfolio/common/hooks/{useStrings.js => useStrings.ts} (97%) rename packages/yoroi-extension/app/UI/features/portfolio/common/hooks/{useTableSort.js => useTableSort.ts} (82%) rename packages/yoroi-extension/app/UI/features/portfolio/common/{mockData.js => mockData.ts} (96%) rename packages/yoroi-extension/app/UI/features/portfolio/common/types/{chart.js => chart.ts} (95%) rename packages/yoroi-extension/app/UI/features/portfolio/common/types/{index.js => index.ts} (93%) delete mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/types/table.js create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/types/table.ts rename packages/yoroi-extension/app/UI/features/portfolio/common/types/{transaction.js => transaction.ts} (95%) rename packages/yoroi-extension/app/UI/features/portfolio/module/{PortfolioContextProvider.js => PortfolioContextProvider.tsx} (65%) rename packages/yoroi-extension/app/UI/features/portfolio/module/{state.js => state.ts} (51%) rename packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/{LendAndBorrow.js => LendAndBorrow.tsx} (97%) rename packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/{OrderTable.js => OrderTable.tsx} (89%) rename packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/{PortfolioDapps.js => PortfolioDapps.tsx} (81%) rename packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/{TokenDetailChart.js => TokenDetailChart.tsx} (88%) rename packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/{TokenDetailOverview.js => TokenDetailOverview.tsx} (83%) rename packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/{TokenDetailPerformance.js => TokenDetailPerformance.tsx} (86%) rename packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/{TokenDetails.js => TokenDetails.tsx} (68%) rename packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/{TransactionTable.js => TransactionTable.tsx} (92%) diff --git a/packages/yoroi-extension/app/UI/components/icons/Search.js b/packages/yoroi-extension/app/UI/components/icons/Search.js index f53124a87a..0ba8c220a6 100644 --- a/packages/yoroi-extension/app/UI/components/icons/Search.js +++ b/packages/yoroi-extension/app/UI/components/icons/Search.js @@ -17,7 +17,7 @@ export const Search = props => ( id="path-1" >
- + diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/components/NavigationButton.tsx b/packages/yoroi-extension/app/UI/features/portfolio/common/components/NavigationButton.tsx new file mode 100644 index 0000000000..ca2375ba4b --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/components/NavigationButton.tsx @@ -0,0 +1,31 @@ +// @ts-nocheck +import React from 'react'; +import { Button, Typography, styled } from '@mui/material'; + +const StyledButton = styled(Button)(({ theme }: any) => ({ + maxHeight: '40px', + minWidth: '140.25px', + + '&.MuiButton-contained': { + backgroundColor: theme.palette.ds.el_primary_medium, + color: theme.palette.ds.el_static_white, + + '&:hover': { + backgroundColor: theme.palette.ds.el_primary_high, + }, + }, + + '&.MuiButton-secondary': { + color: theme.palette.ds.text_primary_medium, + }, +})); + +const NavigationButton = ({ label, ...props }) => { + return ( + + {label} + + ); +}; + +export default NavigationButton; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioHeader.js b/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioHeader.tsx similarity index 92% rename from packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioHeader.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioHeader.tsx index ab35579e58..388795a11e 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioHeader.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioHeader.tsx @@ -1,116 +1,117 @@ -// @flow -import { ReactNode, useState } from 'react'; -import { Stack, Typography } from '@mui/material'; -import { useTheme } from '@mui/material/styles'; -import { useStrings } from '../hooks/useStrings'; -import { usePortfolio } from '../../module/PortfolioContextProvider'; -import { Icon } from '../../../../components/icons'; -import { SearchInput, Tooltip, Chip, Skeleton } from '../../../../components'; -import { BalanceType } from '../types/index'; - -interface Props { - balance: BalanceType; - setKeyword: (keyword: string) => void; - isLoading: boolean; - tooltipTitle: ReactNode; -} - -const PortfolioHeader = ({ balance, setKeyword, isLoading, tooltipTitle }: Props): ReactNode => { - const strings = useStrings(); - const theme = useTheme(); - const { unitOfAccount, settingFiatPairUnit, changeUnitOfAccount } = usePortfolio(); - const [isAdaMainUnit, setIsAdaMainUnit] = useState(unitOfAccount === 'ADA'); - - const handleCurrencyChange = () => { - if (isAdaMainUnit) { - changeUnitOfAccount(settingFiatPairUnit.currency || 'USD'); - setIsAdaMainUnit(false); - } else { - changeUnitOfAccount('ADA'); - setIsAdaMainUnit(true); - } - }; - - return ( - - - - {isLoading ? ( - - ) : ( - - {isAdaMainUnit ? balance.ada : balance.usd} - - )} - - {isAdaMainUnit ? settingFiatPairUnit.currency || 'USD' : 'ADA'} - - {isAdaMainUnit ? '/ADA' : `/${unitOfAccount}`} - - - - - - {isLoading ? ( - - ) : ( - - {isAdaMainUnit ? balance.usd : balance.ada} {isAdaMainUnit ? 'ADA' : unitOfAccount} - - )} - {isLoading ? ( - - - - - ) : ( - - - = 0} - label={ - - {balance.percents >= 0 ? ( - - ) : ( - - )} - - - {balance.percents >= 0 ? balance.percents : -1 * balance.percents}% - - - } - /> - = 0} - label={ - - {balance.amount >= 0 && '+'} - {balance.amount} USD - - } - /> - - - )} - - - - setKeyword(e.target.value)} placeholder={strings.search} /> - - ); -}; - -export default PortfolioHeader; +// @flow +import React, { useState } from 'react'; +import { Stack } from '@mui/material'; +import { useTheme } from '@mui/material/styles'; +import { useStrings } from '../hooks/useStrings'; +import { usePortfolio } from '../../module/PortfolioContextProvider'; +import { Icon } from '../../../../components/icons'; +import { SearchInput, Tooltip, Chip, Skeleton } from '../../../../components'; +import { BalanceType } from '../types/index'; +import Typography from './TextPrimitives'; + +interface Props { + balance: BalanceType; + setKeyword: (string) => void; + isLoading: boolean; + tooltipTitle: JSX.Element; +} + +const PortfolioHeader = ({ balance, setKeyword, isLoading, tooltipTitle }: Props): JSX.Element => { + const strings = useStrings(); + const theme: any = useTheme(); + const { unitOfAccount, settingFiatPairUnit, changeUnitOfAccount } = usePortfolio(); + const [isAdaMainUnit, setIsAdaMainUnit] = useState(unitOfAccount === 'ADA'); + + const handleCurrencyChange = () => { + if (isAdaMainUnit) { + changeUnitOfAccount(settingFiatPairUnit.currency || 'USD'); + setIsAdaMainUnit(false); + } else { + changeUnitOfAccount('ADA'); + setIsAdaMainUnit(true); + } + }; + + return ( + + + + {isLoading ? ( + + ) : ( + + {isAdaMainUnit ? balance.ada : balance.usd} + + )} + + {isAdaMainUnit ? settingFiatPairUnit.currency || 'USD' : 'ADA'} + + {isAdaMainUnit ? '/ADA' : `/${unitOfAccount}`} + + + + + + {isLoading ? ( + + ) : ( + + {isAdaMainUnit ? balance.usd : balance.ada} {isAdaMainUnit ? 'ADA' : unitOfAccount} + + )} + {isLoading ? ( + + + + + ) : ( + + + = 0} + label={ + + {balance.percents >= 0 ? ( + + ) : ( + + )} + + + {balance.percents >= 0 ? balance.percents : -1 * balance.percents}% + + + } + /> + = 0} + label={ + + {balance.amount >= 0 && '+'} + {balance.amount} USD + + } + /> + + + )} + + + + setKeyword(e.target.value)} placeholder={strings.search} /> + + ); +}; + +export default PortfolioHeader; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.js b/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.tsx similarity index 75% rename from packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.tsx index 71e7fcdbe7..8b38370c6b 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.tsx @@ -1,33 +1,38 @@ -// @flow -import { ReactNode } from 'react'; -import SubMenu from '../../../../../components/topbar/SubMenu'; -import type { SubMenuOption } from '../topbar/SubMenu'; -import { ROUTES } from '../../../../../routes-config'; -import { useStrings } from '../hooks/useStrings'; -import mockData from '../mockData'; - -interface Props { - onItemClick: string => void; - isActiveItem: string => boolean; -} - -const PortfolioMenu = ({ onItemClick, isActiveItem }: Props): ReactNode => { - const strings = useStrings(); - - const portfolioOptions: SubMenuOption[] = [ - { - label: `${strings.menuWallet} (${mockData.wallet.tokenList.length})`, - route: ROUTES.PORTFOLIO.ROOT, - className: 'wallet', - }, - { - label: `${strings.menuDapps} (${mockData.dapps.liquidityList.length + mockData.dapps.orderList.length})`, - route: ROUTES.PORTFOLIO.DAPPS, - className: 'dapps', - }, - ]; - - return ; -}; - -export default PortfolioMenu; +// @flow +import React from 'react'; +import SubMenu from '../../../../../components/topbar/SubMenu'; +import { ROUTES } from '../../../../../routes-config'; +import { useStrings } from '../hooks/useStrings'; +import mockData from '../mockData'; + +interface SubMenuOption { + label: string; + route: string; + className: string; +} + +interface Props { + onItemClick: (string) => void; + isActiveItem: (string) => boolean; +} + +const PortfolioMenu = ({ onItemClick, isActiveItem }: Props): JSX.Element => { + const strings = useStrings(); + + const portfolioOptions: SubMenuOption[] = [ + { + label: `${strings.menuWallet} (${mockData.wallet.tokenList.length})`, + route: ROUTES.PORTFOLIO.ROOT, + className: 'wallet', + }, + { + label: `${strings.menuDapps} (${mockData.dapps.liquidityList.length + mockData.dapps.orderList.length})`, + route: ROUTES.PORTFOLIO.DAPPS, + className: 'dapps', + }, + ]; + + return ; +}; + +export default PortfolioMenu; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/components/SortableTableHead.js b/packages/yoroi-extension/app/UI/features/portfolio/common/components/SortableTableHead.tsx similarity index 91% rename from packages/yoroi-extension/app/UI/features/portfolio/common/components/SortableTableHead.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/components/SortableTableHead.tsx index b2adc87636..a0d95b8639 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/components/SortableTableHead.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/components/SortableTableHead.tsx @@ -1,57 +1,58 @@ -// @flow -import { ReactNode } from 'react'; -import { TableHead, TableRow, TableCell, Stack, Typography } from '@mui/material'; -import { Icon } from '../../../../components/icons'; -import { useTheme } from '@mui/material/styles'; -import { IHeadCell } from '../types/table'; - -interface Props { - headCells: IHeadCell[]; - order: string; - orderBy: string; - onRequestSort: (id: string) => void; -} - -const SortableTableHead = ({ headCells, order, orderBy, onRequestSort }: Props): ReactNode => { - const theme = useTheme(); - - return ( - - - {headCells.map(({ label, align, id, isPadding, disabledSort }) => { - return ( - - (isPadding ? null : disabledSort ? null : onRequestSort(id))} - sx={{ - float: align, - cursor: isPadding || disabledSort ? 'normal' : 'pointer', - justifyContent: isPadding ? 'space-between' : 'flex-start', - width: isPadding ? '100%' : 'fit-content', - }} - > - - {label} - - {disabledSort ? null : ( - (isPadding ? onRequestSort(id) : null)} - /> - )} - - - ); - })} - - - ); -}; - -export default SortableTableHead; +// @flow +// @ts-nocheck +import React from 'react'; +import { TableHead, TableRow, TableCell, Stack, Typography } from '@mui/material'; +import { Icon } from '../../../../components/icons'; +import { useTheme } from '@mui/material/styles'; +import { IHeadCell } from '../types/table'; + +interface Props { + headCells: IHeadCell[]; + order: string | null; + orderBy: string | null; + onRequestSort: (id: string) => void; +} + +const SortableTableHead = ({ headCells, order, orderBy, onRequestSort }: Props): JSX.Element => { + const theme = useTheme(); + + return ( + + + {headCells.map(({ label, align, id, isPadding, disabledSort }) => { + return ( + + (isPadding ? null : disabledSort ? null : onRequestSort(id))} + sx={{ + float: align, + cursor: isPadding || disabledSort ? 'normal' : 'pointer', + justifyContent: isPadding ? 'space-between' : 'flex-start', + width: isPadding ? '100%' : 'fit-content', + }} + > + + {label} + + {disabledSort ? null : ( + (isPadding ? onRequestSort(id) : null)} + /> + )} + + + ); + })} + + + ); +}; + +export default SortableTableHead; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/components/Table.js b/packages/yoroi-extension/app/UI/features/portfolio/common/components/Table.tsx similarity index 82% rename from packages/yoroi-extension/app/UI/features/portfolio/common/components/Table.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/components/Table.tsx index c8840e38e8..4dd53aa914 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/components/Table.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/components/Table.tsx @@ -1,57 +1,57 @@ -// @flow -import { ReactNode, cloneElement } from 'react'; -import { Table as MuiTable, TableBody, Stack, Box, Typography } from '@mui/material'; -import { useTheme } from '@mui/material/styles'; -import { useStrings } from '../hooks/useStrings'; -import illustrationPng from '../assets/images/illustration.png'; -import SortableTableHead from './SortableTableHead'; -import { IHeadCell } from '../types/table'; - -interface Props { - name: string; - headCells: IHeadCell[]; - data: any[]; - order: string; - orderBy: string; - handleRequestSort: (id: string) => void; - isLoading: boolean; - TableRowSkeleton: ReactNode; - children: ReactNode; -} - -const Table = ({ - name, - headCells, - data, - order, - orderBy, - handleRequestSort, - isLoading, - TableRowSkeleton, - children, -}: Props): ReactNode => { - const theme = useTheme(); - const strings = useStrings(); - - return data.length > 0 ? ( - - - - {isLoading - ? Array.from({ length: 6 }).map((item, index) => cloneElement(TableRowSkeleton, { key: index, theme })) - : children} - - - ) : ( - - - - - {strings.noResultsForThisSearch} - - - - ); -}; - -export default Table; +// @flow +import React, { ReactElement, ReactNode, cloneElement } from 'react'; +import { Table as MuiTable, TableBody, Stack, Box, Typography } from '@mui/material'; +import { useTheme } from '@mui/material/styles'; +import { useStrings } from '../hooks/useStrings'; +import illustrationPng from '../assets/images/illustration.png'; +import SortableTableHead from './SortableTableHead'; +import { IHeadCell } from '../types/table'; + +interface Props { + name: string; + headCells: IHeadCell[]; + data: any[]; + order: string | null; + orderBy: string | null; + handleRequestSort: (id: string) => void; + isLoading: boolean; + TableRowSkeleton: ReactElement; + children: ReactNode; +} + +const Table = ({ + name, + headCells, + data, + order, + orderBy, + handleRequestSort, + isLoading, + TableRowSkeleton, + children, +}: Props): JSX.Element => { + const theme = useTheme(); + const strings = useStrings(); + + return data.length > 0 ? ( + + + + {isLoading + ? Array.from({ length: 6 }).map((_, index) => cloneElement(TableRowSkeleton, { key: index, theme })) + : children} + + + ) : ( + + + + + {strings.noResultsForThisSearch} + + + + ); +}; + +export default Table; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/components/TextPrimitives.tsx b/packages/yoroi-extension/app/UI/features/portfolio/common/components/TextPrimitives.tsx new file mode 100644 index 0000000000..5c3fae45e3 --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/components/TextPrimitives.tsx @@ -0,0 +1,7 @@ +// @ts-nocheck +import React from 'react'; +import { Typography as MuiTypography } from '@mui/material'; + +const Typography = ({ children, ...props }) => {children}; + +export default Typography; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/helpers/mockHelper.js b/packages/yoroi-extension/app/UI/features/portfolio/common/helpers/mockHelper.ts similarity index 88% rename from packages/yoroi-extension/app/UI/features/portfolio/common/helpers/mockHelper.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/helpers/mockHelper.ts index 25580c772c..3b92fb45c6 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/helpers/mockHelper.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/helpers/mockHelper.ts @@ -1,100 +1,100 @@ -// @flow - -// CONSTANTS -export const now = new Date(); -export const start24HoursAgo: number = new Date(now.getTime() - 24 * 60 * 60 * 1000).getTime(); -export const start1WeekAgo: number = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000).getTime(); -export const start1MonthAgo: number = new Date(now.getFullYear(), now.getMonth() - 1, now.getDate()).getTime(); -export const start6MonthAgo: number = new Date(now.getFullYear(), now.getMonth() - 6, now.getDate()).getTime(); -export const start1YearAgo: number = new Date(now.getFullYear() - 1, now.getMonth(), now.getDate()).getTime(); - -// TYPES -type TimePeriodType = '24H' | '1W' | '1M' | '6M' | '1Y'; - -// UTILS -const pad = (number: number, length: number) => { - return String(number).padStart(length, '0'); -}; -const getQuantityBasedOnTimePeriod = (timePeriod: TimePeriodType) => { - switch (timePeriod) { - case '24H': - return 96; // 4 data points per hour (every 15 minutes) - case '1W': - return 168; // Hourly data for a week - case '1M': - return 120; // Approximately 4 data point per day - case '6M': - return 180; // Approximately 1 data point per day - case '1Y': - return 90; // Approximately 1 data point every 4 days - default: - throw new Error('Invalid time period'); - } -}; -const getFromTime = (timePeriod: TimePeriodType, now: number) => { - switch (timePeriod) { - case '24H': - return start24HoursAgo; - case '1W': - return start1WeekAgo; - case '1M': - return start1MonthAgo; - case '6M': - return start6MonthAgo; - case '1Y': - return start1YearAgo; - default: - throw new Error('Invalid time period'); - } -}; -const getInterval = (timePeriod: TimePeriodType) => { - switch (timePeriod) { - case '24H': - return 15 * 60 * 1000; // 15 minutes in milliseconds - case '1W': - return 60 * 60 * 1000; // 1 hour in milliseconds - case '1M': - return 6 * 60 * 60 * 1000; // 6 hours in milliseconds - case '6M': - return 24 * 60 * 60 * 1000; // 24 hours in milliseconds - case '1Y': - return 4 * 24 * 60 * 60 * 1000; // 4 days in milliseconds - default: - throw new Error('Invalid time period'); - } -}; -export const getRandomTime = (startDate: number, endDate: number) => { - const date = new Date(startDate + Math.random() * (endDate - startDate)); - return date.toISOString(); -}; -const getRandomNumber = (min: number, max: number, toFixed: number) => { - return (Math.random() * (max - min) + min).toFixed(toFixed); -}; -export const createChartData = (timePeriod: TimePeriodType) => { - const quantity = getQuantityBasedOnTimePeriod(timePeriod); - const fromTime = getFromTime(timePeriod, now); - const interval = getInterval(timePeriod); - - const tmp = Array.from({ length: quantity }).map((_, index) => { - const time = new Date(fromTime + index * interval); - const utcString = `${time.getUTCFullYear()}-${pad(time.getUTCMonth() + 1, 2)}-${pad(time.getUTCDate(), 2)}T${pad( - time.getUTCHours(), - 2 - )}:${pad(time.getUTCMinutes(), 2)}:${pad(time.getUTCSeconds(), 2)}Z`; - - const volatility = 0.005; - const baseValue = - index >= quantity / 5 - ? 2 * Math.exp(volatility * Math.abs(getRandomNumber(1, 80, 2))) * index - : -20 * Math.exp(volatility * Math.abs(getRandomNumber(1, 100, 2))) * index; - const randomChange = getRandomNumber(-5, 5, 2); - let value = baseValue * Math.exp(volatility * Math.abs(randomChange)) * index; - - return { - time: utcString, - value: Number((value / 110).toFixed(2)), - fiatValue: Number((value / 100).toFixed(2)), - }; - }); - return tmp; -}; +// @flow + +// CONSTANTS +export const now = new Date(); +export const start24HoursAgo: number = new Date(now.getTime() - 24 * 60 * 60 * 1000).getTime(); +export const start1WeekAgo: number = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000).getTime(); +export const start1MonthAgo: number = new Date(now.getFullYear(), now.getMonth() - 1, now.getDate()).getTime(); +export const start6MonthAgo: number = new Date(now.getFullYear(), now.getMonth() - 6, now.getDate()).getTime(); +export const start1YearAgo: number = new Date(now.getFullYear() - 1, now.getMonth(), now.getDate()).getTime(); + +// TYPES +type TimePeriodType = '24H' | '1W' | '1M' | '6M' | '1Y'; + +// UTILS +const pad = (number: number, length: number) => { + return String(number).padStart(length, '0'); +}; +const getQuantityBasedOnTimePeriod = (timePeriod: TimePeriodType) => { + switch (timePeriod) { + case '24H': + return 96; // 4 data points per hour (every 15 minutes) + case '1W': + return 168; // Hourly data for a week + case '1M': + return 120; // Approximately 4 data point per day + case '6M': + return 180; // Approximately 1 data point per day + case '1Y': + return 90; // Approximately 1 data point every 4 days + default: + throw new Error('Invalid time period'); + } +}; +const getFromTime = (timePeriod: TimePeriodType) => { + switch (timePeriod) { + case '24H': + return start24HoursAgo; + case '1W': + return start1WeekAgo; + case '1M': + return start1MonthAgo; + case '6M': + return start6MonthAgo; + case '1Y': + return start1YearAgo; + default: + throw new Error('Invalid time period'); + } +}; +const getInterval = (timePeriod: TimePeriodType) => { + switch (timePeriod) { + case '24H': + return 15 * 60 * 1000; // 15 minutes in milliseconds + case '1W': + return 60 * 60 * 1000; // 1 hour in milliseconds + case '1M': + return 6 * 60 * 60 * 1000; // 6 hours in milliseconds + case '6M': + return 24 * 60 * 60 * 1000; // 24 hours in milliseconds + case '1Y': + return 4 * 24 * 60 * 60 * 1000; // 4 days in milliseconds + default: + throw new Error('Invalid time period'); + } +}; +export const getRandomTime = (startDate: number) => { + const date = new Date(startDate + Math.random() * (new Date().getTime() - startDate)); + return date.toISOString(); +}; +const getRandomNumber = (min: number, max: number, toFixed: number) => { + return Number((Math.random() * (max - min) + min).toFixed(toFixed)); +}; +export const createChartData = (timePeriod: TimePeriodType) => { + const quantity = getQuantityBasedOnTimePeriod(timePeriod); + const fromTime = getFromTime(timePeriod); + const interval = getInterval(timePeriod); + + const tmp = Array.from({ length: quantity }).map((_, index) => { + const time = new Date(fromTime + index * interval); + const utcString = `${time.getUTCFullYear()}-${pad(time.getUTCMonth() + 1, 2)}-${pad(time.getUTCDate(), 2)}T${pad( + time.getUTCHours(), + 2 + )}:${pad(time.getUTCMinutes(), 2)}:${pad(time.getUTCSeconds(), 2)}Z`; + + const volatility = 0.005; + const baseValue = + index >= quantity / 5 + ? 2 * Math.exp(volatility * Math.abs(getRandomNumber(1, 80, 2))) * index + : -20 * Math.exp(volatility * Math.abs(getRandomNumber(1, 100, 2))) * index; + const randomChange = getRandomNumber(-5, 5, 2); + let value = baseValue * Math.exp(volatility * Math.abs(randomChange)) * index; + + return { + time: utcString, + value: Number((value / 110).toFixed(2)), + fiatValue: Number((value / 100).toFixed(2)), + }; + }); + return tmp; +}; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/helpers/transactionHelper.js b/packages/yoroi-extension/app/UI/features/portfolio/common/helpers/transactionHelper.ts similarity index 82% rename from packages/yoroi-extension/app/UI/features/portfolio/common/helpers/transactionHelper.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/helpers/transactionHelper.ts index 1411e6cec2..a4250872bc 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/helpers/transactionHelper.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/helpers/transactionHelper.ts @@ -1,49 +1,49 @@ -// @flow -import { HistoryItemStatus, HistoryItemType, TransactionItemType } from '../types/transaction'; - -export const mapStrings = (arr: TransactionItemType[], strings: any) => - arr.map(item => { - let labelTemp = ''; - let statusTemp = ''; - - switch (item.type) { - case HistoryItemType.SENT: - labelTemp = strings.sent; - break; - case HistoryItemType.RECEIVED: - labelTemp = strings.received; - break; - case HistoryItemType.ERROR: - labelTemp = strings.transactionError; - break; - case HistoryItemType.WITHDRAW: - labelTemp = strings.rewardWithdraw; - break; - case HistoryItemType.DELEGATE: - labelTemp = strings.stakeDelegate; - break; - - default: - break; - } - - switch (item.status) { - case HistoryItemStatus.LOW: - statusTemp = strings.low; - break; - case HistoryItemStatus.HIGH: - statusTemp = strings.high; - break; - case HistoryItemStatus.FAILED: - statusTemp = strings.failed; - break; - default: - break; - } - - return { - ...item, - label: labelTemp, - status: statusTemp, - }; - }); +// @flow +import { HistoryItemStatus, HistoryItemType } from '../types/transaction'; + +export const mapStrings = (arr: any[], strings: any) => + arr.map(item => { + let labelTemp = ''; + let statusTemp = ''; + + switch (item.type) { + case HistoryItemType.SENT: + labelTemp = strings.sent; + break; + case HistoryItemType.RECEIVED: + labelTemp = strings.received; + break; + case HistoryItemType.ERROR: + labelTemp = strings.transactionError; + break; + case HistoryItemType.WITHDRAW: + labelTemp = strings.rewardWithdraw; + break; + case HistoryItemType.DELEGATE: + labelTemp = strings.stakeDelegate; + break; + + default: + break; + } + + switch (item.status) { + case HistoryItemStatus.LOW: + statusTemp = strings.low; + break; + case HistoryItemStatus.HIGH: + statusTemp = strings.high; + break; + case HistoryItemStatus.FAILED: + statusTemp = strings.failed; + break; + default: + break; + } + + return { + ...item, + label: labelTemp, + status: statusTemp, + }; + }); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useChart.js b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useChart.tsx similarity index 75% rename from packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useChart.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useChart.tsx index fe3bf9a15c..c72e3506c9 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useChart.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useChart.tsx @@ -1,183 +1,183 @@ -// @flow -import React, { useState } from 'react'; -import { useStrings } from './useStrings'; -import { useTheme } from '@mui/material/styles'; -import { Box } from '@mui/material'; -import moment from 'moment'; -import { IPeriodButtonProps, IChartData } from '../types/chart'; -import { LineChartProps } from 'recharts'; - -const useChart = (data: IChartData) => { - const strings = useStrings(); - const theme = useTheme(); - - const [periodButtonProps, setPeriodButtonProps] = useState([ - { id: 'start24HoursAgo', label: strings['24H'], active: true }, - { id: 'start1WeekAgo', label: strings['1W'], active: false }, - { id: 'start1MonthAgo', label: strings['1M'], active: false }, - { id: 'start6MonthAgo', label: strings['6M'], active: false }, - { id: 'start1YearAgo', label: strings['1Y'], active: false }, - { id: 'ALL', label: strings['ALL'], active: false }, - ]); - const [detailInfo, setDetailInfo] = useState({ - value: data[periodButtonProps[0].id][data[periodButtonProps[0].id].length - 1].value, - fiatValue: data[periodButtonProps[0].id][data[periodButtonProps[0].id].length - 1].fiatValue, - }); - const [isDragging, setIsDragging] = useState(false); - - const CustomYAxisTick = ({ - x, - y, - payload, - }: { - x: number, - y: number, - payload: { value: number }, - }): React.SVGProps => { - return ( - - {payload.value.toFixed(1)} - - ); - }; - - const CustomActiveDot = ({ - cx, - cy, - payload, - index, - dataLength, - chartBottom, - rectWidth, - rectHeight, - }: { - cx: number, - cy: number, - payload: { time: string }, - index: number, - dataLength: number, - chartBottom: number, - rectWidth: number, - rectHeight: number, - }): React.SVGProps => { - let rectX = cx - rectWidth / 2; - if (index === 0) { - rectX = cx; - } else if (index === dataLength - 1) { - rectX = cx - rectWidth; - } else { - rectX = cx - (index * rectWidth) / dataLength; - } - - const rectY = chartBottom - rectHeight; - - return ( - isDragging && ( - - - - - - - - - {moment(payload.time).format('MM/DD/YY H:mm')} - - - - ) - ); - }; - - const handleChoosePeriod = (id: string) => { - const tmp = periodButtonProps.map(item => { - if (item.id === id) return { ...item, active: true }; - return { - ...item, - active: false, - }; - }); - setPeriodButtonProps(tmp); - }; - - const handleMouseMove = (props: LineChartProps) => { - if (!isDragging) return; - - if (!props.isTooltipActive) { - handleMouseUp(); - return; - } - - const value = props.activePayload && props.activePayload.length > 0 ? props.activePayload[0].payload.value : null; - const fiatValue = props.activePayload && props.activePayload.length > 0 ? props.activePayload[0].payload.fiatValue : null; - - if (!value || !fiatValue) return; - setDetailInfo({ - value, - fiatValue, - }); - }; - - const handleMouseDown = (props: LineChartProps) => { - if (!props || !props.activePayload || props.activePayload.length <= 0) return; - - const value = props.activePayload[0].payload.value; - const fiatValue = props.activePayload[0].payload.fiatValue; - - if (!value || !fiatValue) return; - setDetailInfo({ - value, - fiatValue, - }); - setIsDragging(true); - }; - - const handleMouseUp = () => { - const currentPeriod = periodButtonProps.find(item => item.active).id; - setDetailInfo({ - value: data[currentPeriod][data[currentPeriod].length - 1].value, - fiatValue: data[currentPeriod][data[currentPeriod].length - 1].fiatValue, - }); - setIsDragging(false); - }; - - const minValue = Math.min(...data[periodButtonProps.find(item => item.active).id].map(item => item.value)); - - const maxValue = Math.max(...data[periodButtonProps.find(item => item.active).id].map(item => item.value)); - - return { - CustomYAxisTick, - CustomActiveDot, - handleChoosePeriod, - handleMouseMove, - handleMouseDown, - handleMouseUp, - periodButtonProps, - detailInfo, - minValue, - maxValue, - }; -}; - -export default useChart; +// @flow +import React, { useState } from 'react'; +import { useStrings } from './useStrings'; +import { useTheme } from '@mui/material/styles'; +import { Box } from '@mui/material'; +import moment from 'moment'; +import { IPeriodButtonProps, IChartData } from '../types/chart'; +import { LineChartProps } from 'recharts'; + +const useChart = (data: IChartData | undefined) => { + const strings = useStrings(); + const theme: any = useTheme(); + + const [periodButtonProps, setPeriodButtonProps] = useState([ + { id: 'start24HoursAgo', label: strings['24H'], active: true }, + { id: 'start1WeekAgo', label: strings['1W'], active: false }, + { id: 'start1MonthAgo', label: strings['1M'], active: false }, + { id: 'start6MonthAgo', label: strings['6M'], active: false }, + { id: 'start1YearAgo', label: strings['1Y'], active: false }, + { id: 'ALL', label: strings['ALL'], active: false }, + ]); + const [detailInfo, setDetailInfo] = useState<{ value: number; fiatValue: number }>({ + value: data ? data[periodButtonProps[0]?.id || 0][data[periodButtonProps[0]?.id || 0].length - 1].value : 0, + fiatValue: data ? data[periodButtonProps[0]?.id || 0][data[periodButtonProps[0]?.id || 0].length - 1].fiatValue : 0, + }); + const [isDragging, setIsDragging] = useState(false); + + const CustomYAxisTick = ({ + x, + y, + payload, + }: { + x: number; + y: number; + payload: { value: number }; + }): React.SVGProps => { + return ( + + {payload.value.toFixed(1)} + + ); + }; + + const CustomActiveDot = ({ + cx, + cy, + payload, + index, + dataLength, + chartBottom, + rectWidth, + rectHeight, + }: { + cx: number; + cy: number; + payload: { time: string }; + index: number; + dataLength: number; + chartBottom: number; + rectWidth: number; + rectHeight: number; + }): JSX.Element | React.ReactElement => { + let rectX = cx - rectWidth / 2; + if (index === 0) { + rectX = cx; + } else if (index === dataLength - 1) { + rectX = cx - rectWidth; + } else { + rectX = cx - (index * rectWidth) / dataLength; + } + + const rectY = chartBottom - rectHeight; + + return ( + + {isDragging && ( + + + + + + + + {moment(payload.time).format('MM/DD/YY H:mm')} + + + )} + + ); + }; + + const handleChoosePeriod = (id: string) => { + const tmp = periodButtonProps.map(item => { + if (item.id === id) return { ...item, active: true }; + return { + ...item, + active: false, + }; + }); + setPeriodButtonProps(tmp); + }; + + const handleMouseMove = (props: LineChartProps) => { + if (!isDragging) return; + + if (!props.isTooltipActive) { + handleMouseUp(); + return; + } + + const value = props.activePayload && props.activePayload.length > 0 ? props.activePayload[0].payload.value : null; + const fiatValue = props.activePayload && props.activePayload.length > 0 ? props.activePayload[0].payload.fiatValue : null; + + if (!value || !fiatValue) return; + setDetailInfo({ + value, + fiatValue, + }); + }; + + const handleMouseDown = (props: LineChartProps) => { + if (!props || !props.activePayload || props.activePayload.length <= 0) return; + + const value = props.activePayload[0].payload.value; + const fiatValue = props.activePayload[0].payload.fiatValue; + + if (!value || !fiatValue) return; + setDetailInfo({ + value, + fiatValue, + }); + setIsDragging(true); + }; + + const handleMouseUp = () => { + const currentPeriod = periodButtonProps.find(item => item.active)?.id || 0; + setDetailInfo({ + value: data ? data[currentPeriod][data[currentPeriod].length - 1].value : 0, + fiatValue: data ? data[currentPeriod][data[currentPeriod].length - 1].fiatValue : 0, + }); + setIsDragging(false); + }; + + const minValue = data ? Math.min(...data[periodButtonProps.find(item => item.active)?.id || 0].map(item => item.value)) : 0; + + const maxValue = data ? Math.max(...data[periodButtonProps.find(item => item.active)?.id || 0].map(item => item.value)) : 0; + + return { + CustomYAxisTick, + CustomActiveDot, + handleChoosePeriod, + handleMouseMove, + handleMouseDown, + handleMouseUp, + periodButtonProps, + detailInfo, + minValue, + maxValue, + }; +}; + +export default useChart; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useNavigateTo.js b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useNavigateTo.ts similarity index 91% rename from packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useNavigateTo.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useNavigateTo.ts index 6627ad6fe8..077b059c98 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useNavigateTo.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useNavigateTo.ts @@ -1,17 +1,17 @@ -// @flow -import { useHistory } from 'react-router-dom'; -import React, { useRef } from 'react'; -import { ROUTES } from '../../../../../routes-config'; - -export const useNavigateTo = () => { - const history = useHistory(); - - return React.useRef({ - portfolio: () => history.push(ROUTES.PORTFOLIO.ROOT), - portfolioDapps: () => history.push(ROUTES.PORTFOLIO.DAPPS), - portfolioDetail: tokenId => history.push(`${ROUTES.PORTFOLIO.ROOT}/details/${tokenId}`), - swapPage: () => history.push(ROUTES.SWAP.ROOT), - sendPage: () => history.push(ROUTES.WALLETS.SEND), - receivePage: () => history.push(ROUTES.WALLETS.RECEIVE.ROOT), - }).current; -}; +// @flow +import { useHistory } from 'react-router-dom'; +import React from 'react'; +import { ROUTES } from '../../../../../routes-config'; + +export const useNavigateTo = () => { + const history = useHistory(); + + return React.useRef({ + portfolio: () => history.push(ROUTES.PORTFOLIO.ROOT), + portfolioDapps: () => history.push(ROUTES.PORTFOLIO.DAPPS), + portfolioDetail: tokenId => history.push(`${ROUTES.PORTFOLIO.ROOT}/details/${tokenId}`), + swapPage: () => history.push(ROUTES.SWAP.ROOT), + sendPage: () => history.push(ROUTES.WALLETS.SEND), + receivePage: () => history.push(ROUTES.WALLETS.RECEIVE.ROOT), + }).current; +}; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.ts similarity index 97% rename from packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.ts index d96aea69b3..b6805a4e18 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.ts @@ -1,395 +1,395 @@ -// @flow -import React from 'react'; -import { defineMessages } from 'react-intl'; -import { useIntl } from '../../../../context/IntlProvider'; - -export const messages = Object.freeze( - defineMessages({ - mainHeaderText: { - id: 'portfolio.main.header.text', - defaultMessage: '!!!Tokens', - }, - detailHeaderText: { - id: 'portfolio.detail.header.text', - defaultMessage: '!!!Token details', - }, - menuWallet: { - id: 'portfolio.menu.wallet.link.label', - defaultMessage: '!!!Wallet', - }, - menuDapps: { - id: 'portfolio.menu.dapps.link.label', - defaultMessage: '!!!Dapps', - }, - dapps: { - id: 'portfolio.tooltip.dapps', - defaultMessage: '!!!DApps', - }, - copyToClipboard: { - id: 'widgets.copyableaddress.addressCopyTooltipMessage', - defaultMessage: '!!!Copy to clipboard', - }, - copied: { - id: 'widgets.copyableaddress.copied', - defaultMessage: '!!!Copied', - }, - soonAvailable: { - id: 'portfolio.common.soonAvailable', - defaultMessage: '!!!Soon available', - }, - dex: { - id: 'portfolio.common.dex', - defaultMessage: '!!!DEX', - }, - totalValue: { - id: 'portfolio.common.totalValue', - defaultMessage: '!!!Total value', - }, - noResultsForThisSearch: { - id: 'portfolio.common.noResultsForThisSearch', - defaultMessage: '!!!No results for this search', - }, - search: { - id: 'portfolio.main.search.text', - defaultMessage: '!!!Search by asset name or ID', - }, - balancePerformance: { - id: 'portfolio.tooltip.balancePerformance', - defaultMessage: '!!!Balance performance', - }, - balanceChange: { - id: 'portfolio.tooltip.balanceChange', - defaultMessage: '!!!Balance change', - }, - tokenPriceChange: { - id: 'portfolio.tooltip.tokenPriceChange', - defaultMessage: '!!!Token price change', - }, - in24hours: { - id: 'portfolio.tooltip.in24hours', - defaultMessage: '!!!in 24 hours', - }, - backToPortfolio: { - id: 'portfolio.button.backToPortfolio', - defaultMessage: '!!!Back to portfolio', - }, - swap: { - id: 'portfolio.button.swap', - defaultMessage: '!!!Swap', - }, - send: { - id: 'portfolio.button.send', - defaultMessage: '!!!Send', - }, - receive: { - id: 'portfolio.button.receive', - defaultMessage: '!!!Receive', - }, - liquidityPool: { - id: 'portfolio.button.liquidityPool', - defaultMessage: '!!!Liquidity pool', - }, - openOrders: { - id: 'portfolio.button.openOrders', - defaultMessage: '!!!Open orders', - }, - lendAndBorrow: { - id: 'portfolio.button.lendAndBorrow', - defaultMessage: '!!!Lend & Borrow', - }, - balance: { - id: 'portfolio.tokenInfo.balance', - defaultMessage: '!!!balance', - }, - marketPrice: { - id: 'portfolio.tokenInfo.marketPrice', - defaultMessage: '!!!Market price', - }, - description: { - id: 'portfolio.tokenInfo.overview.description', - defaultMessage: '!!!Description', - }, - website: { - id: 'portfolio.tokenInfo.overview.website', - defaultMessage: '!!!Website', - }, - policyId: { - id: 'portfolio.tokenInfo.overview.policyId', - defaultMessage: '!!!Policy ID', - }, - fingerprint: { - id: 'portfolio.tokenInfo.overview.fingerprint', - defaultMessage: '!!!Fingerprint', - }, - detailsOn: { - id: 'portfolio.tokenInfo.overview.detailsOn', - defaultMessage: '!!!Details on', - }, - overview: { - id: 'portfolio.tokenInfo.menuLabel.overview', - defaultMessage: '!!!Overview', - }, - performance: { - id: 'portfolio.tokenInfo.menuLabel.performance', - defaultMessage: '!!!Performance', - }, - marketData: { - id: 'portfolio.tokenInfo.performance.marketData', - defaultMessage: '!!!Market data', - }, - tokenPrice: { - id: 'portfolio.tokenInfo.performance.tokenPrice', - defaultMessage: '!!!Token price', - }, - marketCap: { - id: 'portfolio.tokenInfo.performance.marketCap', - defaultMessage: '!!!Market cap', - }, - '24hVolumn': { - id: 'portfolio.tokenInfo.performance.24hVolumn', - defaultMessage: '!!!24h volumn', - }, - rank: { - id: 'portfolio.tokenInfo.performance.rank', - defaultMessage: '!!!Rank', - }, - circulating: { - id: 'portfolio.tokenInfo.performance.circulating', - defaultMessage: '!!!Circulating', - }, - totalSupply: { - id: 'portfolio.tokenInfo.performance.totalSupply', - defaultMessage: '!!!Total supply', - }, - maxSupply: { - id: 'portfolio.tokenInfo.performance.maxSupply', - defaultMessage: '!!!Max supply', - }, - allTimeHigh: { - id: 'portfolio.tokenInfo.performance.allTimeHigh', - defaultMessage: '!!!All time high', - }, - allTimeLow: { - id: 'portfolio.tokenInfo.performance.allTimeLow', - defaultMessage: '!!!All time low', - }, - name: { - id: 'portfolio.statsTable.header.name', - defaultMessage: '!!!Name', - }, - price: { - id: 'portfolio.statsTable.header.price', - defaultMessage: '!!!Price', - }, - '24H': { - id: 'portfolio.chart.button.24H', - defaultMessage: '!!!24H', - }, - '1W': { - id: 'portfolio.chart.button.1W', - defaultMessage: '!!!1W', - }, - '1M': { - id: 'portfolio.chart.button.1M', - defaultMessage: '!!!1M', - }, - '6M': { - id: 'portfolio.chart.button.6M', - defaultMessage: '!!!6M', - }, - '1Y': { - id: 'portfolio.chart.button.1Y', - defaultMessage: '!!!1W', - }, - ALL: { - id: 'portfolio.chart.button.ALL', - defaultMessage: '!!!ALL', - }, - portfolio: { - id: 'portfolio.statsTable.header.portfolio', - defaultMessage: '!!!Portfolio', - }, - totalAmount: { - id: 'portfolio.statsTable.header.totalAmount', - defaultMessage: '!!!Total amount', - }, - transactionHistory: { - id: 'portfolio.transactionTable.title', - defaultMessage: '!!!Transaction history', - }, - transactionType: { - id: 'portfolio.transactionTable.header.transactionType', - defaultMessage: '!!!Transaction type', - }, - status: { - id: 'portfolio.transactionTable.header.status', - defaultMessage: '!!!Status', - }, - fee: { - id: 'portfolio.transactionTable.header.fee', - defaultMessage: '!!!Fee', - }, - amount: { - id: 'portfolio.transactionTable.header.amount', - defaultMessage: '!!!Amount', - }, - today: { - id: 'portfolio.transactionTable.timestamp.today', - defaultMessage: '!!!Today', - }, - yesterday: { - id: 'portfolio.transactionTable.timestamp.yesterday', - defaultMessage: '!!!Amount', - }, - sent: { - id: 'portfolio.transactionTable.label.sent', - defaultMessage: '!!!Sent', - }, - received: { - id: 'portfolio.transactionTable.label.received', - defaultMessage: '!!!Received', - }, - transactionError: { - id: 'portfolio.transactionTable.label.transactionError', - defaultMessage: '!!!Transaction error', - }, - rewardWithdraw: { - id: 'portfolio.transactionTable.label.rewardWithdraw', - defaultMessage: '!!!Reward withdrawn', - }, - stakeDelegate: { - id: 'portfolio.transactionTable.label.stakeDelegate', - defaultMessage: '!!!Stake delegated', - }, - low: { - id: 'portfolio.transactionTable.status.low', - defaultMessage: '!!!Low', - }, - high: { - id: 'portfolio.transactionTable.status.high', - defaultMessage: '!!!High', - }, - failed: { - id: 'portfolio.transactionTable.status.failed', - defaultMessage: '!!!Failed', - }, - assets: { - id: 'portfolio.transactionTable.amount.assets', - defaultMessage: '!!!assets', - }, - tokenPair: { - id: 'portfolio.liquidityTable.header.tokenPair', - defaultMessage: '!!!Token pair', - }, - firstTokenValue: { - id: 'portfolio.liquidityTable.header.firstTokenValue', - defaultMessage: '!!!Token value 1', - }, - secondTokenValue: { - id: 'portfolio.liquidityTable.header.secondTokenValue', - defaultMessage: '!!!Token value 2', - }, - lpTokens: { - id: 'portfolio.liquidityTable.header.lpTokens', - defaultMessage: '!!!LP tokens', - }, - pair: { - id: 'portfolio.orderTable.header.pair', - defaultMessage: '!!!Pair (From / To)', - }, - assetPrice: { - id: 'portfolio.orderTable.header.assetPrice', - defaultMessage: '!!!Asset price', - }, - assetAmount: { - id: 'portfolio.orderTable.header.assetAmount', - defaultMessage: '!!!Asset amount', - }, - transactionId: { - id: 'portfolio.orderTable.header.transactionId', - defaultMessage: '!!!Transaction ID', - }, - }) -); - -export const useStrings = () => { - const { intl } = useIntl(); - return React.useRef({ - mainHeaderText: intl.formatMessage(messages.mainHeaderText), - detailHeaderText: intl.formatMessage(messages.detailHeaderText), - menuWallet: intl.formatMessage(messages.menuWallet), - menuDapps: intl.formatMessage(messages.menuDapps), - dapps: intl.formatMessage(messages.dapps), - copyToClipboard: intl.formatMessage(messages.copyToClipboard), - copied: intl.formatMessage(messages.copied), - soonAvailable: intl.formatMessage(messages.soonAvailable), - noResultsForThisSearch: intl.formatMessage(messages.noResultsForThisSearch), - search: intl.formatMessage(messages.search), - balancePerformance: intl.formatMessage(messages.balancePerformance), - balanceChange: intl.formatMessage(messages.balanceChange), - tokenPriceChange: intl.formatMessage(messages.tokenPriceChange), - in24hours: intl.formatMessage(messages.in24hours), - backToPortfolio: intl.formatMessage(messages.backToPortfolio), - swap: intl.formatMessage(messages.swap), - send: intl.formatMessage(messages.send), - receive: intl.formatMessage(messages.receive), - liquidityPool: intl.formatMessage(messages.liquidityPool), - openOrders: intl.formatMessage(messages.openOrders), - lendAndBorrow: intl.formatMessage(messages.lendAndBorrow), - balance: intl.formatMessage(messages.balance), - marketPrice: intl.formatMessage(messages.marketPrice), - description: intl.formatMessage(messages.description), - website: intl.formatMessage(messages.website), - policyId: intl.formatMessage(messages.policyId), - fingerprint: intl.formatMessage(messages.fingerprint), - detailsOn: intl.formatMessage(messages.detailsOn), - overview: intl.formatMessage(messages.overview), - performance: intl.formatMessage(messages.performance), - marketData: intl.formatMessage(messages.marketData), - tokenPrice: intl.formatMessage(messages.tokenPrice), - marketCap: intl.formatMessage(messages.marketCap), - '24hVolumn': intl.formatMessage(messages['24hVolumn']), - rank: intl.formatMessage(messages.rank), - circulating: intl.formatMessage(messages.circulating), - totalSupply: intl.formatMessage(messages.totalSupply), - maxSupply: intl.formatMessage(messages.maxSupply), - allTimeHigh: intl.formatMessage(messages.allTimeHigh), - allTimeLow: intl.formatMessage(messages.allTimeLow), - name: intl.formatMessage(messages.name), - price: intl.formatMessage(messages.price), - '24H': intl.formatMessage(messages['24H']), - '1W': intl.formatMessage(messages['1W']), - '1M': intl.formatMessage(messages['1M']), - '6M': intl.formatMessage(messages['6M']), - '1Y': intl.formatMessage(messages['1Y']), - ALL: intl.formatMessage(messages['ALL']), - portfolio: intl.formatMessage(messages.portfolio), - totalAmount: intl.formatMessage(messages.totalAmount), - transactionHistory: intl.formatMessage(messages.transactionHistory), - transactionType: intl.formatMessage(messages.transactionType), - status: intl.formatMessage(messages.status), - fee: intl.formatMessage(messages.fee), - amount: intl.formatMessage(messages.amount), - today: intl.formatMessage(messages.today), - yesterday: intl.formatMessage(messages.yesterday), - sent: intl.formatMessage(messages.sent), - received: intl.formatMessage(messages.received), - transactionError: intl.formatMessage(messages.transactionError), - rewardWithdraw: intl.formatMessage(messages.rewardWithdraw), - stakeDelegate: intl.formatMessage(messages.stakeDelegate), - low: intl.formatMessage(messages.low), - high: intl.formatMessage(messages.high), - failed: intl.formatMessage(messages.failed), - assets: intl.formatMessage(messages.assets), - tokenPair: intl.formatMessage(messages.tokenPair), - dex: intl.formatMessage(messages.dex), - firstTokenValue: intl.formatMessage(messages.firstTokenValue), - secondTokenValue: intl.formatMessage(messages.secondTokenValue), - lpTokens: intl.formatMessage(messages.lpTokens), - totalValue: intl.formatMessage(messages.totalValue), - pair: intl.formatMessage(messages.pair), - assetPrice: intl.formatMessage(messages.assetPrice), - assetAmount: intl.formatMessage(messages.assetAmount), - transactionId: intl.formatMessage(messages.transactionId), - }).current; -}; +// @flow +import React from 'react'; +import { defineMessages } from 'react-intl'; +import { useIntl } from '../../../../context/IntlProvider'; + +export const messages = Object.freeze( + defineMessages({ + mainHeaderText: { + id: 'portfolio.main.header.text', + defaultMessage: '!!!Tokens', + }, + detailHeaderText: { + id: 'portfolio.detail.header.text', + defaultMessage: '!!!Token details', + }, + menuWallet: { + id: 'portfolio.menu.wallet.link.label', + defaultMessage: '!!!Wallet', + }, + menuDapps: { + id: 'portfolio.menu.dapps.link.label', + defaultMessage: '!!!Dapps', + }, + dapps: { + id: 'portfolio.tooltip.dapps', + defaultMessage: '!!!DApps', + }, + copyToClipboard: { + id: 'widgets.copyableaddress.addressCopyTooltipMessage', + defaultMessage: '!!!Copy to clipboard', + }, + copied: { + id: 'widgets.copyableaddress.copied', + defaultMessage: '!!!Copied', + }, + soonAvailable: { + id: 'portfolio.common.soonAvailable', + defaultMessage: '!!!Soon available', + }, + dex: { + id: 'portfolio.common.dex', + defaultMessage: '!!!DEX', + }, + totalValue: { + id: 'portfolio.common.totalValue', + defaultMessage: '!!!Total value', + }, + noResultsForThisSearch: { + id: 'portfolio.common.noResultsForThisSearch', + defaultMessage: '!!!No results for this search', + }, + search: { + id: 'portfolio.main.search.text', + defaultMessage: '!!!Search by asset name or ID', + }, + balancePerformance: { + id: 'portfolio.tooltip.balancePerformance', + defaultMessage: '!!!Balance performance', + }, + balanceChange: { + id: 'portfolio.tooltip.balanceChange', + defaultMessage: '!!!Balance change', + }, + tokenPriceChange: { + id: 'portfolio.tooltip.tokenPriceChange', + defaultMessage: '!!!Token price change', + }, + in24hours: { + id: 'portfolio.tooltip.in24hours', + defaultMessage: '!!!in 24 hours', + }, + backToPortfolio: { + id: 'portfolio.button.backToPortfolio', + defaultMessage: '!!!Back to portfolio', + }, + swap: { + id: 'portfolio.button.swap', + defaultMessage: '!!!Swap', + }, + send: { + id: 'portfolio.button.send', + defaultMessage: '!!!Send', + }, + receive: { + id: 'portfolio.button.receive', + defaultMessage: '!!!Receive', + }, + liquidityPool: { + id: 'portfolio.button.liquidityPool', + defaultMessage: '!!!Liquidity pool', + }, + openOrders: { + id: 'portfolio.button.openOrders', + defaultMessage: '!!!Open orders', + }, + lendAndBorrow: { + id: 'portfolio.button.lendAndBorrow', + defaultMessage: '!!!Lend & Borrow', + }, + balance: { + id: 'portfolio.tokenInfo.balance', + defaultMessage: '!!!balance', + }, + marketPrice: { + id: 'portfolio.tokenInfo.marketPrice', + defaultMessage: '!!!Market price', + }, + description: { + id: 'portfolio.tokenInfo.overview.description', + defaultMessage: '!!!Description', + }, + website: { + id: 'portfolio.tokenInfo.overview.website', + defaultMessage: '!!!Website', + }, + policyId: { + id: 'portfolio.tokenInfo.overview.policyId', + defaultMessage: '!!!Policy ID', + }, + fingerprint: { + id: 'portfolio.tokenInfo.overview.fingerprint', + defaultMessage: '!!!Fingerprint', + }, + detailsOn: { + id: 'portfolio.tokenInfo.overview.detailsOn', + defaultMessage: '!!!Details on', + }, + overview: { + id: 'portfolio.tokenInfo.menuLabel.overview', + defaultMessage: '!!!Overview', + }, + performance: { + id: 'portfolio.tokenInfo.menuLabel.performance', + defaultMessage: '!!!Performance', + }, + marketData: { + id: 'portfolio.tokenInfo.performance.marketData', + defaultMessage: '!!!Market data', + }, + tokenPrice: { + id: 'portfolio.tokenInfo.performance.tokenPrice', + defaultMessage: '!!!Token price', + }, + marketCap: { + id: 'portfolio.tokenInfo.performance.marketCap', + defaultMessage: '!!!Market cap', + }, + '24hVolumn': { + id: 'portfolio.tokenInfo.performance.24hVolumn', + defaultMessage: '!!!24h volumn', + }, + rank: { + id: 'portfolio.tokenInfo.performance.rank', + defaultMessage: '!!!Rank', + }, + circulating: { + id: 'portfolio.tokenInfo.performance.circulating', + defaultMessage: '!!!Circulating', + }, + totalSupply: { + id: 'portfolio.tokenInfo.performance.totalSupply', + defaultMessage: '!!!Total supply', + }, + maxSupply: { + id: 'portfolio.tokenInfo.performance.maxSupply', + defaultMessage: '!!!Max supply', + }, + allTimeHigh: { + id: 'portfolio.tokenInfo.performance.allTimeHigh', + defaultMessage: '!!!All time high', + }, + allTimeLow: { + id: 'portfolio.tokenInfo.performance.allTimeLow', + defaultMessage: '!!!All time low', + }, + name: { + id: 'portfolio.statsTable.header.name', + defaultMessage: '!!!Name', + }, + price: { + id: 'portfolio.statsTable.header.price', + defaultMessage: '!!!Price', + }, + '24H': { + id: 'portfolio.chart.button.24H', + defaultMessage: '!!!24H', + }, + '1W': { + id: 'portfolio.chart.button.1W', + defaultMessage: '!!!1W', + }, + '1M': { + id: 'portfolio.chart.button.1M', + defaultMessage: '!!!1M', + }, + '6M': { + id: 'portfolio.chart.button.6M', + defaultMessage: '!!!6M', + }, + '1Y': { + id: 'portfolio.chart.button.1Y', + defaultMessage: '!!!1W', + }, + ALL: { + id: 'portfolio.chart.button.ALL', + defaultMessage: '!!!ALL', + }, + portfolio: { + id: 'portfolio.statsTable.header.portfolio', + defaultMessage: '!!!Portfolio', + }, + totalAmount: { + id: 'portfolio.statsTable.header.totalAmount', + defaultMessage: '!!!Total amount', + }, + transactionHistory: { + id: 'portfolio.transactionTable.title', + defaultMessage: '!!!Transaction history', + }, + transactionType: { + id: 'portfolio.transactionTable.header.transactionType', + defaultMessage: '!!!Transaction type', + }, + status: { + id: 'portfolio.transactionTable.header.status', + defaultMessage: '!!!Status', + }, + fee: { + id: 'portfolio.transactionTable.header.fee', + defaultMessage: '!!!Fee', + }, + amount: { + id: 'portfolio.transactionTable.header.amount', + defaultMessage: '!!!Amount', + }, + today: { + id: 'portfolio.transactionTable.timestamp.today', + defaultMessage: '!!!Today', + }, + yesterday: { + id: 'portfolio.transactionTable.timestamp.yesterday', + defaultMessage: '!!!Amount', + }, + sent: { + id: 'portfolio.transactionTable.label.sent', + defaultMessage: '!!!Sent', + }, + received: { + id: 'portfolio.transactionTable.label.received', + defaultMessage: '!!!Received', + }, + transactionError: { + id: 'portfolio.transactionTable.label.transactionError', + defaultMessage: '!!!Transaction error', + }, + rewardWithdraw: { + id: 'portfolio.transactionTable.label.rewardWithdraw', + defaultMessage: '!!!Reward withdrawn', + }, + stakeDelegate: { + id: 'portfolio.transactionTable.label.stakeDelegate', + defaultMessage: '!!!Stake delegated', + }, + low: { + id: 'portfolio.transactionTable.status.low', + defaultMessage: '!!!Low', + }, + high: { + id: 'portfolio.transactionTable.status.high', + defaultMessage: '!!!High', + }, + failed: { + id: 'portfolio.transactionTable.status.failed', + defaultMessage: '!!!Failed', + }, + assets: { + id: 'portfolio.transactionTable.amount.assets', + defaultMessage: '!!!assets', + }, + tokenPair: { + id: 'portfolio.liquidityTable.header.tokenPair', + defaultMessage: '!!!Token pair', + }, + firstTokenValue: { + id: 'portfolio.liquidityTable.header.firstTokenValue', + defaultMessage: '!!!Token value 1', + }, + secondTokenValue: { + id: 'portfolio.liquidityTable.header.secondTokenValue', + defaultMessage: '!!!Token value 2', + }, + lpTokens: { + id: 'portfolio.liquidityTable.header.lpTokens', + defaultMessage: '!!!LP tokens', + }, + pair: { + id: 'portfolio.orderTable.header.pair', + defaultMessage: '!!!Pair (From / To)', + }, + assetPrice: { + id: 'portfolio.orderTable.header.assetPrice', + defaultMessage: '!!!Asset price', + }, + assetAmount: { + id: 'portfolio.orderTable.header.assetAmount', + defaultMessage: '!!!Asset amount', + }, + transactionId: { + id: 'portfolio.orderTable.header.transactionId', + defaultMessage: '!!!Transaction ID', + }, + }) +); + +export const useStrings = () => { + const { intl } = useIntl(); + return React.useRef({ + mainHeaderText: intl.formatMessage(messages.mainHeaderText), + detailHeaderText: intl.formatMessage(messages.detailHeaderText), + menuWallet: intl.formatMessage(messages.menuWallet), + menuDapps: intl.formatMessage(messages.menuDapps), + dapps: intl.formatMessage(messages.dapps), + copyToClipboard: intl.formatMessage(messages.copyToClipboard), + copied: intl.formatMessage(messages.copied), + soonAvailable: intl.formatMessage(messages.soonAvailable), + noResultsForThisSearch: intl.formatMessage(messages.noResultsForThisSearch), + search: intl.formatMessage(messages.search), + balancePerformance: intl.formatMessage(messages.balancePerformance), + balanceChange: intl.formatMessage(messages.balanceChange), + tokenPriceChange: intl.formatMessage(messages.tokenPriceChange), + in24hours: intl.formatMessage(messages.in24hours), + backToPortfolio: intl.formatMessage(messages.backToPortfolio), + swap: intl.formatMessage(messages.swap), + send: intl.formatMessage(messages.send), + receive: intl.formatMessage(messages.receive), + liquidityPool: intl.formatMessage(messages.liquidityPool), + openOrders: intl.formatMessage(messages.openOrders), + lendAndBorrow: intl.formatMessage(messages.lendAndBorrow), + balance: intl.formatMessage(messages.balance), + marketPrice: intl.formatMessage(messages.marketPrice), + description: intl.formatMessage(messages.description), + website: intl.formatMessage(messages.website), + policyId: intl.formatMessage(messages.policyId), + fingerprint: intl.formatMessage(messages.fingerprint), + detailsOn: intl.formatMessage(messages.detailsOn), + overview: intl.formatMessage(messages.overview), + performance: intl.formatMessage(messages.performance), + marketData: intl.formatMessage(messages.marketData), + tokenPrice: intl.formatMessage(messages.tokenPrice), + marketCap: intl.formatMessage(messages.marketCap), + '24hVolumn': intl.formatMessage(messages['24hVolumn']), + rank: intl.formatMessage(messages.rank), + circulating: intl.formatMessage(messages.circulating), + totalSupply: intl.formatMessage(messages.totalSupply), + maxSupply: intl.formatMessage(messages.maxSupply), + allTimeHigh: intl.formatMessage(messages.allTimeHigh), + allTimeLow: intl.formatMessage(messages.allTimeLow), + name: intl.formatMessage(messages.name), + price: intl.formatMessage(messages.price), + '24H': intl.formatMessage(messages['24H']), + '1W': intl.formatMessage(messages['1W']), + '1M': intl.formatMessage(messages['1M']), + '6M': intl.formatMessage(messages['6M']), + '1Y': intl.formatMessage(messages['1Y']), + ALL: intl.formatMessage(messages['ALL']), + portfolio: intl.formatMessage(messages.portfolio), + totalAmount: intl.formatMessage(messages.totalAmount), + transactionHistory: intl.formatMessage(messages.transactionHistory), + transactionType: intl.formatMessage(messages.transactionType), + status: intl.formatMessage(messages.status), + fee: intl.formatMessage(messages.fee), + amount: intl.formatMessage(messages.amount), + today: intl.formatMessage(messages.today), + yesterday: intl.formatMessage(messages.yesterday), + sent: intl.formatMessage(messages.sent), + received: intl.formatMessage(messages.received), + transactionError: intl.formatMessage(messages.transactionError), + rewardWithdraw: intl.formatMessage(messages.rewardWithdraw), + stakeDelegate: intl.formatMessage(messages.stakeDelegate), + low: intl.formatMessage(messages.low), + high: intl.formatMessage(messages.high), + failed: intl.formatMessage(messages.failed), + assets: intl.formatMessage(messages.assets), + tokenPair: intl.formatMessage(messages.tokenPair), + dex: intl.formatMessage(messages.dex), + firstTokenValue: intl.formatMessage(messages.firstTokenValue), + secondTokenValue: intl.formatMessage(messages.secondTokenValue), + lpTokens: intl.formatMessage(messages.lpTokens), + totalValue: intl.formatMessage(messages.totalValue), + pair: intl.formatMessage(messages.pair), + assetPrice: intl.formatMessage(messages.assetPrice), + assetAmount: intl.formatMessage(messages.assetAmount), + transactionId: intl.formatMessage(messages.transactionId), + }).current; +}; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useTableSort.js b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useTableSort.ts similarity index 82% rename from packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useTableSort.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useTableSort.ts index d36ca66e45..4853662f45 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useTableSort.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useTableSort.ts @@ -1,67 +1,73 @@ -// @flow -import { useCallback } from 'react'; -import { TokenType, IHeadCell } from '../types/index'; - -export type TableSortType = 'character' | 'numeric'; - -interface Props { - order: string; - orderBy: string; - setSortState: (sortState: { order: string, orderBy: string }) => void; - headCells: IHeadCell[]; - data: TokenType[]; -} - -const useTableSort = ({ order, orderBy, setSortState, headCells, data }: Props) => { - const handleRequestSort = (property: string) => { - let direction = 'asc'; - if (order === 'asc') { - if (property === orderBy) { - direction = 'desc'; - } - } else if (order === 'desc') { - if (property === orderBy) { - direction = null; - } - } - setSortState({ - order: direction, - orderBy: property, - }); - }; - - const descendingComparator = (a: any, b: any, sortType: TableSortType) => { - switch (sortType) { - case 'numeric': - if (parseFloat(b[orderBy]) < parseFloat(a[orderBy])) { - return -1; - } else { - return 1; - } - case 'character': - return String(a[orderBy]).localeCompare(b[orderBy]); - default: - if (b[orderBy] < a[orderBy]) { - return -1; - } else { - return 1; - } - } - }; - - const getSortedData = useCallback( - (arr: any[]) => { - if (!orderBy || !order) return data; - const sortColumn = headCells.find(cell => cell.id === orderBy); - const sortType = sortColumn?.sortType ?? 'character'; - return arr.sort((a, b) => { - return order === 'desc' ? descendingComparator(a, b, sortType) : -descendingComparator(a, b, sortType); - }); - }, - [order, orderBy, headCells] - ); - - return { getSortedData, handleRequestSort }; -}; - -export default useTableSort; +// @flow +import { useCallback } from 'react'; +import { IHeadCell } from '../types/index'; + +export type TableSortType = 'character' | 'numeric'; + +export interface ISortState { + order: string | null; + orderBy: string | null; +} + +interface Props { + order: string | null; + orderBy: string | null; + setSortState: React.Dispatch>; + headCells: IHeadCell[]; + data: any[]; +} + +const useTableSort = ({ order, orderBy, setSortState, headCells, data }: Props) => { + const handleRequestSort = (property: string) => { + let direction: string | null = 'asc'; + if (order === 'asc') { + if (property === orderBy) { + direction = 'desc'; + } + } else if (order === 'desc') { + if (property === orderBy) { + direction = null; + } + } + setSortState({ + order: direction, + orderBy: property, + }); + }; + + const descendingComparator = (a: any, b: any, sortType: TableSortType) => { + if (!orderBy || !order) return 0; + switch (sortType) { + case 'numeric': + if (parseFloat(b[orderBy]) < parseFloat(a[orderBy])) { + return -1; + } else { + return 1; + } + case 'character': + return String(a[orderBy]).localeCompare(b[orderBy]); + default: + if (b[orderBy] < a[orderBy]) { + return -1; + } else { + return 1; + } + } + }; + + const getSortedData = useCallback( + (arr: any[]) => { + if (!orderBy || !order) return data; + const sortColumn = headCells.find(cell => cell.id === orderBy); + const sortType = sortColumn?.sortType ?? 'character'; + return arr.sort((a, b) => { + return order === 'desc' ? descendingComparator(a, b, sortType) : -descendingComparator(a, b, sortType); + }); + }, + [order, orderBy, headCells] + ); + + return { getSortedData, handleRequestSort }; +}; + +export default useTableSort; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js b/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.ts similarity index 96% rename from packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/mockData.ts index cdd6fdcc1b..d19d7c6e3d 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.ts @@ -1,844 +1,844 @@ -// @flow -import { createChartData, getRandomTime, now, start1WeekAgo, start24HoursAgo } from './helpers/mockHelper'; -import { HistoryItemStatus, HistoryItemType } from './types/transaction'; - -// ALL THE MOCK DATA FOR RENDERING UI NEW -const mockData = { - common: { - walletBalance: { - ada: Number((100000 * Math.random()).toFixed(2)), - usd: Number((1000 * Math.random()).toFixed(2)), - percents: Number(Math.random().toFixed(2)), - amount: Number(Math.random().toFixed(2)), - }, - dappsBalance: { - ada: Number((100000 * Math.random()).toFixed(2)), - usd: Number((1000 * Math.random()).toFixed(2)), - percents: Number(Math.random().toFixed(2)), - amount: Number(Math.random().toFixed(2)), - }, - }, - - wallet: { - tokenList: [ - { - name: 'AGIX', - id: 'Agix', - price: Number((10 * Math.random()).toFixed(2)), - portfolioPercents: Math.round(100 * Math.random()), - '24h': -Number((10 * Math.random()).toFixed(2)), - '1W': Number((10 * Math.random()).toFixed(2)), - '1M': Number((10 * Math.random()).toFixed(2)), - totalAmount: Number((100000 * Math.random()).toFixed(3)), - totalAmountUsd: Number((100000 * Math.random()).toFixed(3)), - overview: { - description: - "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", - website: 'https://www.cardano.org', - detailOn: 'https://www.yoroiwallet.com', - policyId: '2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664', - fingerprint: - 'asset311q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj6789', - }, - performance: [ - { value: Number(Math.random().toFixed(3)) }, - { value: Number(Math.random().toFixed(2)) }, - { value: `${Math.round(1000 * Math.random())}M` }, - { value: `${Math.round(100 * Math.random())}M` }, - { value: `${Math.round(100 * Math.random())}` }, - { value: (1000 * Math.random()).toFixed(2) }, - { value: (1000 * Math.random()).toFixed(2) }, - { value: null }, - { value: Number((10 * Math.random()).toFixed(2)) }, - { value: (Math.random() / 100).toFixed(5) }, - ], - chartData: { - start24HoursAgo: createChartData('24H'), - start1WeekAgo: createChartData('1W'), - start1MonthAgo: createChartData('1M'), - start6MonthAgo: createChartData('6M'), - start1YearAgo: createChartData('1Y'), - ALL: createChartData('1Y'), - }, - }, - { - name: 'DOGE', - id: 'Doge', - price: Number((10 * Math.random()).toFixed(2)), - portfolioPercents: Math.round(100 * Math.random()), - '24h': -Number((10 * Math.random()).toFixed(2)), - '1W': Number((10 * Math.random()).toFixed(2)), - '1M': -Number((10 * Math.random()).toFixed(2)), - totalAmount: Number(Math.round(100000 * Math.random()).toFixed(2)), - totalAmountUsd: Number(Math.round(100000 * Math.random()).toFixed(2)), - overview: { - description: - "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", - website: 'https://www.cardano.org', - detailOn: 'https://www.yoroiwallet.com', - policyId: '2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664', - fingerprint: - 'asset322q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', - }, - performance: [ - { value: Number(Math.random().toFixed(3)) }, - { value: Number(Math.random().toFixed(2)) }, - { value: `${Math.round(1000 * Math.random())}M` }, - { value: null }, - { value: `${Math.round(100 * Math.random())}` }, - { value: (100 * Math.random()).toFixed(2) }, - { value: (1000 * Math.random()).toFixed(2) }, - { value: null }, - { value: Number((10 * Math.random()).toFixed(2)) }, - { value: (Math.random() / 100).toFixed(5) }, - ], - chartData: { - start24HoursAgo: createChartData('24H'), - start1WeekAgo: createChartData('1W'), - start1MonthAgo: createChartData('1M'), - start6MonthAgo: createChartData('6M'), - start1YearAgo: createChartData('1Y'), - ALL: createChartData('1Y'), - }, - }, - { - name: 'ADA', - id: 'Cardano', - price: Number((10 * Math.random()).toFixed(2)), - portfolioPercents: Math.round(100 * Math.random()), - '24h': Number((10 * Math.random()).toFixed(2)), - '1W': -Number((10 * Math.random()).toFixed(2)), - '1M': Number((10 * Math.random()).toFixed(2)), - totalAmount: Number(Math.round(100000 * Math.random()).toFixed(2)), - totalAmountUsd: Number(Math.round(100000 * Math.random()).toFixed(2)), - overview: { - description: - "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", - website: 'https://www.cardano.org', - detailOn: 'https://www.yoroiwallet.com', - policyId: '2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664', - fingerprint: - 'asset333q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', - }, - performance: [ - { value: Number(Math.random().toFixed(3)) }, - { value: Number(Math.random().toFixed(2)) }, - { value: `${Math.round(1000 * Math.random())}M` }, - { value: `${Math.round(100 * Math.random())}M` }, - { value: `${Math.round(100 * Math.random())}` }, - { value: (100 * Math.random()).toFixed(2) }, - { value: (1000 * Math.random()).toFixed(2) }, - { value: '45B' }, - { value: Number((10 * Math.random()).toFixed(2)) }, - { value: (Math.random() / 100).toFixed(5) }, - ], - chartData: { - start24HoursAgo: createChartData('24H'), - start1WeekAgo: createChartData('1W'), - start1MonthAgo: createChartData('1M'), - start6MonthAgo: createChartData('6M'), - start1YearAgo: createChartData('1Y'), - ALL: createChartData('1Y'), - }, - }, - { - name: 'Shiba', - id: 'shiba', - price: Number((10 * Math.random()).toFixed(2)), - portfolioPercents: Math.round(100 * Math.random()), - '24h': -Number((10 * Math.random()).toFixed(2)), - '1W': -Number((10 * Math.random()).toFixed(2)), - '1M': Number((10 * Math.random()).toFixed(2)), - totalAmount: Number(Math.round(100000 * Math.random()).toFixed(2)), - totalAmountUsd: Number(Math.round(100000 * Math.random()).toFixed(2)), - overview: { - description: - "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", - website: 'https://www.cardano.org', - detailOn: 'https://www.yoroiwallet.com', - policyId: '2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664', - fingerprint: - 'asset344q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', - }, - performance: [ - { value: Number(Math.random().toFixed(3)) }, - { value: Number(Math.random().toFixed(2)) }, - { value: `${Math.round(1000 * Math.random())}M` }, - { value: `${Math.round(100 * Math.random())}M` }, - { value: `${Math.round(100 * Math.random())}` }, - { value: (100 * Math.random()).toFixed(2) }, - { value: (1000 * Math.random()).toFixed(2) }, - { value: (1000 * Math.random()).toFixed(2) }, - { value: Number((10 * Math.random()).toFixed(2)) }, - { value: (Math.random() / 100).toFixed(5) }, - ], - chartData: { - start24HoursAgo: createChartData('24H'), - start1WeekAgo: createChartData('1W'), - start1MonthAgo: createChartData('1M'), - start6MonthAgo: createChartData('6M'), - start1YearAgo: createChartData('1Y'), - ALL: createChartData('1Y'), - }, - }, - { - name: 'ALT', - id: 'alt', - price: Number((10 * Math.random()).toFixed(2)), - portfolioPercents: Math.round(100 * Math.random()), - '24h': -Number((10 * Math.random()).toFixed(2)), - '1W': Number((10 * Math.random()).toFixed(2)), - '1M': -Number((10 * Math.random()).toFixed(2)), - totalAmount: Number(Math.round(100000 * Math.random()).toFixed(2)), - totalAmountUsd: Number(Math.round(100000 * Math.random()).toFixed(2)), - overview: { - description: - "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", - website: 'https://www.cardano.org', - detailOn: 'https://www.yoroiwallet.com', - policyId: '2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664', - fingerprint: - 'asset355q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', - }, - performance: [ - { value: Number(Math.random().toFixed(3)) }, - { value: Number(Math.random().toFixed(2)) }, - { value: `${Math.round(1000 * Math.random())}M` }, - { value: `${Math.round(100 * Math.random())}M` }, - { value: `${Math.round(100 * Math.random())}` }, - { value: (100 * Math.random()).toFixed(2) }, - { value: (1000 * Math.random()).toFixed(2) }, - { value: (1000 * Math.random()).toFixed(2) }, - { value: Number((10 * Math.random()).toFixed(2)) }, - { value: (Math.random() / 100).toFixed(5) }, - ], - chartData: { - start24HoursAgo: createChartData('24H'), - start1WeekAgo: createChartData('1W'), - start1MonthAgo: createChartData('1M'), - start6MonthAgo: createChartData('6M'), - start1YearAgo: createChartData('1Y'), - ALL: createChartData('1Y'), - }, - }, - { - name: 'TKN1', - id: 'Tkn1', - price: Number((10 * Math.random()).toFixed(2)), - portfolioPercents: Math.round(100 * Math.random()), - '24h': Number((10 * Math.random()).toFixed(2)), - '1W': Number((10 * Math.random()).toFixed(2)), - '1M': Number((10 * Math.random()).toFixed(2)), - totalAmount: Number(Math.round(100000 * Math.random()).toFixed(2)), - totalAmountUsd: Number(Math.round(100000 * Math.random()).toFixed(2)), - overview: { - description: - "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", - website: 'https://www.cardano.org', - detailOn: 'https://www.yoroiwallet.com', - policyId: '2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664', - fingerprint: - 'asset366q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', - }, - performance: [ - { value: Number(Math.random().toFixed(3)) }, - { value: Number(Math.random().toFixed(2)) }, - { value: `${Math.round(1000 * Math.random())}M` }, - { value: `${Math.round(100 * Math.random())}M` }, - { value: `${Math.round(100 * Math.random())}` }, - { value: (100 * Math.random()).toFixed(2) }, - { value: (1000 * Math.random()).toFixed(2) }, - { value: (1000 * Math.random()).toFixed(2) }, - { value: Number((10 * Math.random()).toFixed(2)) }, - { value: (Math.random() / 100).toFixed(5) }, - ], - chartData: { - start24HoursAgo: createChartData('24H'), - start1WeekAgo: createChartData('1W'), - start1MonthAgo: createChartData('1M'), - start6MonthAgo: createChartData('6M'), - start1YearAgo: createChartData('1Y'), - ALL: createChartData('1Y'), - }, - }, - { - name: 'TKN2', - id: 'Tkn2', - price: Number((10 * Math.random()).toFixed(2)), - portfolioPercents: Math.round(100 * Math.random()), - '24h': -Number((10 * Math.random()).toFixed(2)), - '1W': -Number((10 * Math.random()).toFixed(2)), - '1M': -Number((10 * Math.random()).toFixed(2)), - totalAmount: Number(Math.round(100000 * Math.random()).toFixed(2)), - totalAmountUsd: Number(Math.round(100000 * Math.random()).toFixed(2)), - overview: { - description: - "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", - website: 'https://www.cardano.org', - detailOn: 'https://www.yoroiwallet.com', - policyId: '2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664', - fingerprint: - 'asset377q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', - }, - performance: [ - { value: Number(Math.random().toFixed(3)) }, - { value: Number(Math.random().toFixed(2)) }, - { value: `${Math.round(1000 * Math.random())}M` }, - { value: `${Math.round(100 * Math.random())}M` }, - { value: `${Math.round(100 * Math.random())}` }, - { value: (100 * Math.random()).toFixed(2) }, - { value: (1000 * Math.random()).toFixed(2) }, - { value: (1000 * Math.random()).toFixed(2) }, - { value: Number((10 * Math.random()).toFixed(2)) }, - { value: (Math.random() / 100).toFixed(5) }, - ], - chartData: { - start24HoursAgo: createChartData('24H'), - start1WeekAgo: createChartData('1W'), - start1MonthAgo: createChartData('1M'), - start6MonthAgo: createChartData('6M'), - start1YearAgo: createChartData('1Y'), - ALL: createChartData('1Y'), - }, - }, - { - name: 'TKN3', - id: 'Tkn3', - price: Number((10 * Math.random()).toFixed(2)), - portfolioPercents: Math.round(100 * Math.random()), - '24h': -Number((10 * Math.random()).toFixed(2)), - '1W': Number((10 * Math.random()).toFixed(2)), - '1M': -Number((10 * Math.random()).toFixed(2)), - totalAmount: Number(Math.round(100000 * Math.random()).toFixed(2)), - totalAmountUsd: Number(Math.round(100000 * Math.random()).toFixed(2)), - overview: { - description: - "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", - website: 'https://www.cardano.org', - detailOn: 'https://www.yoroiwallet.com', - policyId: '2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664', - fingerprint: - 'asset388q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', - }, - performance: [ - { value: Number(Math.random().toFixed(3)) }, - { value: Number(Math.random().toFixed(2)) }, - { value: `${Math.round(1000 * Math.random())}M` }, - { value: `${Math.round(100 * Math.random())}M` }, - { value: `${Math.round(100 * Math.random())}` }, - { value: (100 * Math.random()).toFixed(2) }, - { value: (1000 * Math.random()).toFixed(2) }, - { value: (1000 * Math.random()).toFixed(2) }, - { value: Number((10 * Math.random()).toFixed(2)) }, - { value: (Math.random() / 100).toFixed(5) }, - ], - chartData: { - start24HoursAgo: createChartData('24H'), - start1WeekAgo: createChartData('1W'), - start1MonthAgo: createChartData('1M'), - start6MonthAgo: createChartData('6M'), - start1YearAgo: createChartData('1Y'), - ALL: createChartData('1Y'), - }, - }, - { - name: 'TKN6', - id: 'Tkn6', - price: Number((10 * Math.random()).toFixed(2)), - portfolioPercents: Math.round(100 * Math.random()), - '24h': Number((10 * Math.random()).toFixed(2)), - '1W': Number((10 * Math.random()).toFixed(2)), - '1M': Number((10 * Math.random()).toFixed(2)), - totalAmount: Number(Math.round(100000 * Math.random()).toFixed(2)), - totalAmountUsd: Number(Math.round(100000 * Math.random()).toFixed(2)), - overview: { - description: - "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", - website: 'https://www.cardano.org', - detailOn: 'https://www.yoroiwallet.com', - policyId: '2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664', - fingerprint: - 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', - }, - performance: [ - { value: Number(Math.random().toFixed(3)) }, - { value: Number(Math.random().toFixed(2)) }, - { value: `${Math.round(1000 * Math.random())}M` }, - { value: `${Math.round(100 * Math.random())}M` }, - { value: `${Math.round(100 * Math.random())}` }, - { value: (100 * Math.random()).toFixed(2) }, - { value: (1000 * Math.random()).toFixed(2) }, - { value: (1000 * Math.random()).toFixed(2) }, - { value: Number((10 * Math.random()).toFixed(2)) }, - { value: (Math.random() / 100).toFixed(5) }, - ], - chartData: { - start24HoursAgo: createChartData('24H'), - start1WeekAgo: createChartData('1W'), - start1MonthAgo: createChartData('1M'), - start6MonthAgo: createChartData('6M'), - start1YearAgo: createChartData('1Y'), - ALL: createChartData('1Y'), - }, - }, - { - name: 'TKN8', - id: 'Tkn8', - price: Number((10 * Math.random()).toFixed(2)), - portfolioPercents: Math.round(100 * Math.random()), - '24h': Number((10 * Math.random()).toFixed(2)), - '1W': Number((10 * Math.random()).toFixed(2)), - '1M': -Number((10 * Math.random()).toFixed(2)), - totalAmount: Number(Math.round(100000 * Math.random()).toFixed(2)), - totalAmountUsd: Number(Math.round(100000 * Math.random()).toFixed(2)), - overview: { - description: - "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", - website: 'https://www.cardano.org', - detailOn: 'https://www.yoroiwallet.com', - policyId: '2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664', - fingerprint: - 'asset400q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', - }, - performance: [ - { value: Number(Math.random().toFixed(3)) }, - { value: Number(Math.random().toFixed(2)) }, - { value: `${Math.round(1000 * Math.random())}M` }, - { value: `${Math.round(100 * Math.random())}M` }, - { value: `${Math.round(100 * Math.random())}` }, - { value: (100 * Math.random()).toFixed(2) }, - { value: (1000 * Math.random()).toFixed(2) }, - { value: (1000 * Math.random()).toFixed(2) }, - { value: Number((10 * Math.random()).toFixed(2)) }, - { value: (Math.random() / 100).toFixed(5) }, - ], - chartData: { - start24HoursAgo: createChartData('24H'), - start1WeekAgo: createChartData('1W'), - start1MonthAgo: createChartData('1M'), - start6MonthAgo: createChartData('6M'), - start1YearAgo: createChartData('1Y'), - ALL: createChartData('1Y'), - }, - }, - ], - }, - - dapps: { - liquidityList: [ - { - id: Math.random(), - tokenPair: 'ADA/HOSKY', - DEX: 'Minswap', - DEXLink: 'https://app.minswap.org/', - firstToken: { - name: 'ADA', - id: 'ada', - }, - secondToken: { - name: 'HOSKY', - id: 'hosky', - }, - lpTokens: (Math.random() * 1000000).toFixed(2), - totalValue: (Math.random() * 1000).toFixed(2), - totalValueUsd: (Math.random() * 100).toFixed(2), - firstTokenValue: (Math.random() * 100).toFixed(2), - firstTokenValueUsd: (Math.random() * 100).toFixed(2), - secondTokenValue: (Math.random() * 10000).toFixed(2), - secondTokenValueUsd: (Math.random() * 10).toFixed(2), - }, - { - id: Math.random(), - tokenPair: 'DOGE/Shiba', - DEX: 'Sundaeswap', - DEXLink: 'https://v2.sundaeswap.finance/', - firstToken: { - name: 'DOGE', - id: 'doge', - }, - secondToken: { - name: 'Shiba', - id: 'shiba', - }, - lpTokens: (Math.random() * 1000000).toFixed(2), - totalValue: (Math.random() * 1000).toFixed(2), - totalValueUsd: (Math.random() * 100).toFixed(2), - firstTokenValue: (Math.random() * 100).toFixed(2), - firstTokenValueUsd: (Math.random() * 100).toFixed(2), - secondTokenValue: (Math.random() * 10000).toFixed(2), - secondTokenValueUsd: (Math.random() * 10).toFixed(2), - }, - { - id: Math.random(), - tokenPair: 'DBZ/ADA', - DEX: 'Sundaeswap', - DEXLink: 'https://v2.sundaeswap.finance/', - firstToken: { - name: 'DBZ', - id: 'dbz', - }, - secondToken: { - name: 'ADA', - id: 'ada', - }, - lpTokens: (Math.random() * 1000000).toFixed(2), - totalValue: (Math.random() * 1000).toFixed(2), - totalValueUsd: (Math.random() * 100).toFixed(2), - firstTokenValue: (Math.random() * 100).toFixed(2), - firstTokenValueUsd: (Math.random() * 100).toFixed(2), - secondTokenValue: (Math.random() * 10000).toFixed(2), - secondTokenValueUsd: (Math.random() * 10).toFixed(2), - }, - { - id: Math.random(), - tokenPair: 'ADA/BRICKS', - DEX: 'Minswap', - DEXLink: 'https://app.minswap.org/', - firstToken: { - name: 'ADA', - id: 'ada', - }, - secondToken: { - name: 'BRICKS', - id: 'bricks', - }, - lpTokens: (Math.random() * 1000000).toFixed(2), - totalValue: (Math.random() * 1000).toFixed(2), - totalValueUsd: (Math.random() * 100).toFixed(2), - firstTokenValue: (Math.random() * 100).toFixed(2), - firstTokenValueUsd: (Math.random() * 100).toFixed(2), - secondTokenValue: (Math.random() * 10000).toFixed(2), - secondTokenValueUsd: (Math.random() * 10).toFixed(2), - }, - { - id: Math.random(), - tokenPair: 'ADA/POPPA', - DEX: 'Sundaeswap', - DEXLink: 'https://v2.sundaeswap.finance/', - firstToken: { - name: 'ADA', - id: 'ada', - }, - secondToken: { - name: 'POPPA', - id: 'poppa', - }, - lpTokens: (Math.random() * 1000000).toFixed(2), - totalValue: (Math.random() * 1000).toFixed(2), - totalValueUsd: (Math.random() * 100).toFixed(2), - firstTokenValue: (Math.random() * 100).toFixed(2), - firstTokenValueUsd: (Math.random() * 100).toFixed(2), - secondTokenValue: (Math.random() * 10000).toFixed(2), - secondTokenValueUsd: (Math.random() * 10).toFixed(2), - }, - { - id: Math.random(), - tokenPair: 'CUBY/VALDO', - DEX: 'Sundaeswap', - DEXLink: 'https://v2.sundaeswap.finance/', - firstToken: { - name: 'CUBY', - id: 'cuby', - }, - secondToken: { - name: 'VALDO', - id: 'valdo', - }, - lpTokens: (Math.random() * 1000000).toFixed(2), - totalValue: (Math.random() * 1000).toFixed(2), - totalValueUsd: (Math.random() * 100).toFixed(2), - firstTokenValue: (Math.random() * 100).toFixed(2), - firstTokenValueUsd: (Math.random() * 100).toFixed(2), - secondTokenValue: (Math.random() * 10000).toFixed(2), - secondTokenValueUsd: (Math.random() * 10).toFixed(2), - }, - { - id: Math.random(), - tokenPair: 'SNEK/USDTST', - DEX: 'Minswap', - DEXLink: 'https://app.minswap.org/', - firstToken: { - name: 'SNEK', - id: 'snek', - }, - secondToken: { - name: 'USDTST', - id: 'usdtst', - }, - lpTokens: (Math.random() * 1000000).toFixed(2), - totalValue: (Math.random() * 1000).toFixed(2), - totalValueUsd: (Math.random() * 100).toFixed(2), - firstTokenValue: (Math.random() * 100).toFixed(2), - firstTokenValueUsd: (Math.random() * 100).toFixed(2), - secondTokenValue: (Math.random() * 10000).toFixed(2), - secondTokenValueUsd: (Math.random() * 10).toFixed(2), - }, - { - id: Math.random(), - tokenPair: 'GERO/NMKR', - DEX: 'Minswap', - DEXLink: 'https://app.minswap.org/', - firstToken: { - name: 'GERO', - id: 'gero', - }, - secondToken: { - name: 'NMKR', - id: 'nmkr', - }, - lpTokens: (Math.random() * 1000000).toFixed(2), - totalValue: (Math.random() * 1000).toFixed(2), - totalValueUsd: (Math.random() * 100).toFixed(2), - firstTokenValue: (Math.random() * 100).toFixed(2), - firstTokenValueUsd: (Math.random() * 100).toFixed(2), - secondTokenValue: (Math.random() * 10000).toFixed(2), - secondTokenValueUsd: (Math.random() * 10).toFixed(2), - }, - { - id: Math.random(), - tokenPair: 'SMOKES/CPASS', - DEX: 'Minswap', - DEXLink: 'https://app.minswap.org/', - firstToken: { - name: 'SMOKES', - id: 'smokes', - }, - secondToken: { - name: 'CPASS', - id: 'cpass', - }, - lpTokens: (Math.random() * 1000000).toFixed(2), - totalValue: (Math.random() * 1000).toFixed(2), - totalValueUsd: (Math.random() * 100).toFixed(2), - firstTokenValue: (Math.random() * 100).toFixed(2), - firstTokenValueUsd: (Math.random() * 100).toFixed(2), - secondTokenValue: (Math.random() * 10000).toFixed(2), - secondTokenValueUsd: (Math.random() * 10).toFixed(2), - }, - ], - orderList: [ - { - id: Math.random(), - pair: 'ADA/LVLC', - firstToken: { - name: 'ADA', - id: 'ada', - }, - secondToken: { - name: 'LVLC', - id: 'lvlc', - }, - DEX: 'Minswap', - DEXLink: 'https://app.minswap.org/', - assetPrice: Math.round(Math.random() * 10), - assetAmount: Math.round(Math.random() * 10), - transactionId: '043a2bfbb1d66d9883a068059a4e35bb53b7bdc6f5637d7b934150c453ffb116', - totalValue: (Math.random() * 10).toFixed(2), - totalValueUsd: (Math.random() * 10).toFixed(2), - }, - { - id: Math.random(), - pair: 'MILK/LVLC', - firstToken: { - name: 'MILK', - id: 'milk', - }, - secondToken: { - name: 'LVLC', - id: 'lvlc', - }, - DEX: 'Sundaeswap', - DEXLink: 'https://v2.sundaeswap.finance/', - assetPrice: Math.round(Math.random() * 10), - assetAmount: Math.round(Math.random() * 10), - transactionId: 'a0a863e8eb398c04caebdbd3a3e50733bcb6c06e118c36eadb7f7b53424668a5', - totalValue: (Math.random() * 10).toFixed(2), - totalValueUsd: (Math.random() * 10).toFixed(2), - }, - { - id: Math.random(), - pair: 'DICE/WTAB', - firstToken: { - name: 'DICE', - id: 'dice', - }, - secondToken: { - name: 'WTAB', - id: 'wtab', - }, - DEX: 'Minswap', - DEXLink: 'https://app.minswap.org/', - assetPrice: Math.round(Math.random() * 10), - assetAmount: Math.round(Math.random() * 10), - transactionId: '043a2bfbb1d66d9883a068059a4e35bb53b7bdc6f5637d7b934150c453ffb116', - totalValue: (Math.random() * 10).toFixed(2), - totalValueUsd: (Math.random() * 10).toFixed(2), - }, - { - id: Math.random(), - pair: 'FREN/SMOKES', - firstToken: { - name: 'FREN', - id: 'fren', - }, - secondToken: { - name: 'SMOKES', - id: 'smokes', - }, - DEX: 'Sundaeswap', - DEXLink: 'https://v2.sundaeswap.finance/', - assetPrice: Math.round(Math.random() * 10), - assetAmount: Math.round(Math.random() * 10), - transactionId: 'a0a863e8eb398c04caebdbd3a3e50733bcb6c06e118c36eadb7f7b53424668a5', - totalValue: (Math.random() * 10).toFixed(2), - totalValueUsd: (Math.random() * 10).toFixed(2), - }, - { - id: Math.random(), - pair: 'CCCC/HOSKY', - firstToken: { - name: 'CCCC', - id: 'cccc', - }, - secondToken: { - name: 'HOSKY', - id: 'hosky', - }, - DEX: 'Minswap', - DEXLink: 'https://app.minswap.org/', - assetPrice: Math.round(Math.random() * 10), - assetAmount: Math.round(Math.random() * 10), - transactionId: '043a2bfbb1d66d9883a068059a4e35bb53b7bdc6f5637d7b934150c453ffb116', - totalValue: (Math.random() * 10).toFixed(2), - totalValueUsd: (Math.random() * 10).toFixed(2), - }, - { - id: Math.random(), - pair: 'CCCC/DRIP', - firstToken: { - name: 'CCCC', - id: 'cccc', - }, - secondToken: { - name: 'DRIP', - id: 'drip', - }, - DEX: 'Sundaeswap', - DEXLink: 'https://v2.sundaeswap.finance/', - assetPrice: Math.round(Math.random() * 10), - assetAmount: Math.round(Math.random() * 10), - transactionId: 'a0a863e8eb398c04caebdbd3a3e50733bcb6c06e118c36eadb7f7b53424668a5', - totalValue: (Math.random() * 10).toFixed(2), - totalValueUsd: (Math.random() * 10).toFixed(2), - }, - { - id: Math.random(), - pair: 'ATH/CATSKY', - firstToken: { - name: 'ATH', - id: 'ath', - }, - secondToken: { - name: 'CATSKY', - id: 'catsky', - }, - DEX: 'Minswap', - DEXLink: 'https://app.minswap.org/', - assetPrice: Math.round(Math.random() * 10), - assetAmount: Math.round(Math.random() * 10), - transactionId: '043a2bfbb1d66d9883a068059a4e35bb53b7bdc6f5637d7b934150c453ffb116', - totalValue: (Math.random() * 10).toFixed(2), - totalValueUsd: (Math.random() * 10).toFixed(2), - }, - { - id: Math.random(), - pair: 'ADA/USDC', - firstToken: { - name: 'ADA', - id: 'ada', - }, - secondToken: { - name: 'USDC', - id: 'usdc', - }, - DEX: 'Minswap', - DEXLink: 'https://app.minswap.org/', - assetPrice: Math.round(Math.random() * 10), - assetAmount: Math.round(Math.random() * 10), - transactionId: 'a0a863e8eb398c04caebdbd3a3e50733bcb6c06e118c36eadb7f7b53424668a5', - totalValue: (Math.random() * 10).toFixed(2), - totalValueUsd: (Math.random() * 10).toFixed(2), - }, - { - id: Math.random(), - pair: 'AVAX/COPI', - firstToken: { - name: 'AVAX', - id: 'avax', - }, - secondToken: { - name: 'COPI', - id: 'copi', - }, - DEX: 'Sundaeswap', - DEXLink: 'https://v2.sundaeswap.finance/', - assetPrice: Math.round(Math.random() * 10), - assetAmount: Math.round(Math.random() * 10), - transactionId: 'a0a863e8eb398c04caebdbd3a3e50733bcb6c06e118c36eadb7f7b53424668a5', - totalValue: (Math.random() * 10).toFixed(2), - totalValueUsd: (Math.random() * 10).toFixed(2), - }, - ], - }, - - transactionHistory: [ - { - type: HistoryItemType.SENT, - status: HistoryItemStatus.LOW, - time: getRandomTime(start24HoursAgo, now), - feeValue: Math.random().toFixed(2), - feeValueUsd: Math.random().toFixed(2), - amountTotal: (1000000 * Math.random()).toFixed(5), - amountTotalUsd: (100000 * Math.random()).toFixed(2), - amountAsset: `${Math.round(100 * Math.random())} MILK`, - }, - { - type: HistoryItemType.RECEIVED, - status: HistoryItemStatus.LOW, - time: getRandomTime(start24HoursAgo, now), - amountTotal: (1000000 * Math.random()).toFixed(5), - amountTotalUsd: (100000 * Math.random()).toFixed(2), - amountAsset: Math.round(10 * Math.random()), - }, - { - type: HistoryItemType.ERROR, - status: HistoryItemStatus.FAILED, - time: getRandomTime(start24HoursAgo, now), - amountTotal: (1000000 * Math.random()).toFixed(5), - amountTotalUsd: (100000 * Math.random()).toFixed(2), - amountAsset: Math.round(10 * Math.random()), - }, - { - type: HistoryItemType.WITHDRAW, - status: HistoryItemStatus.HIGH, - time: getRandomTime(start1WeekAgo, now), - feeValue: Math.random().toFixed(2), - feeValueUsd: Math.random().toFixed(2), - amountTotal: (1000000 * Math.random()).toFixed(5), - amountTotalUsd: (100000 * Math.random()).toFixed(2), - amountAsset: `${Math.round(100 * Math.random())} MILK`, - }, - { - type: HistoryItemType.DELEGATE, - status: HistoryItemStatus.HIGH, - time: getRandomTime(start24HoursAgo, now), - feeValue: Math.random().toFixed(2), - feeValueUsd: Math.random().toFixed(2), - amountTotal: (1000000 * Math.random()).toFixed(5), - amountTotalUsd: (100000 * Math.random()).toFixed(2), - amountAsset: `${Math.round(100 * Math.random())} MILK`, - }, - ], -}; - -export default mockData; +// @flow +import { createChartData, getRandomTime, start1WeekAgo, start24HoursAgo } from './helpers/mockHelper'; +import { HistoryItemStatus, HistoryItemType } from './types/transaction'; + +// ALL THE MOCK DATA FOR RENDERING UI NEW +const mockData = { + common: { + walletBalance: { + ada: Number((100000 * Math.random()).toFixed(2)), + usd: Number((1000 * Math.random()).toFixed(2)), + percents: Number(Math.random().toFixed(2)), + amount: Number(Math.random().toFixed(2)), + }, + dappsBalance: { + ada: Number((100000 * Math.random()).toFixed(2)), + usd: Number((1000 * Math.random()).toFixed(2)), + percents: Number(Math.random().toFixed(2)), + amount: Number(Math.random().toFixed(2)), + }, + }, + + wallet: { + tokenList: [ + { + name: 'AGIX', + id: 'Agix', + price: Number((10 * Math.random()).toFixed(2)), + portfolioPercents: Math.round(100 * Math.random()), + '24h': -Number((10 * Math.random()).toFixed(2)), + '1W': Number((10 * Math.random()).toFixed(2)), + '1M': Number((10 * Math.random()).toFixed(2)), + totalAmount: Number((100000 * Math.random()).toFixed(3)), + totalAmountUsd: Number((100000 * Math.random()).toFixed(3)), + overview: { + description: + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", + website: 'https://www.cardano.org', + detailOn: 'https://www.yoroiwallet.com', + policyId: '2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664', + fingerprint: + 'asset311q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj6789', + }, + performance: [ + { value: Number(Math.random().toFixed(3)) }, + { value: Number(Math.random().toFixed(2)) }, + { value: `${Math.round(1000 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}` }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: null }, + { value: Number((10 * Math.random()).toFixed(2)) }, + { value: (Math.random() / 100).toFixed(5) }, + ], + chartData: { + start24HoursAgo: createChartData('24H'), + start1WeekAgo: createChartData('1W'), + start1MonthAgo: createChartData('1M'), + start6MonthAgo: createChartData('6M'), + start1YearAgo: createChartData('1Y'), + ALL: createChartData('1Y'), + }, + }, + { + name: 'DOGE', + id: 'Doge', + price: Number((10 * Math.random()).toFixed(2)), + portfolioPercents: Math.round(100 * Math.random()), + '24h': -Number((10 * Math.random()).toFixed(2)), + '1W': Number((10 * Math.random()).toFixed(2)), + '1M': -Number((10 * Math.random()).toFixed(2)), + totalAmount: Number(Math.round(100000 * Math.random()).toFixed(2)), + totalAmountUsd: Number(Math.round(100000 * Math.random()).toFixed(2)), + overview: { + description: + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", + website: 'https://www.cardano.org', + detailOn: 'https://www.yoroiwallet.com', + policyId: '2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664', + fingerprint: + 'asset322q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', + }, + performance: [ + { value: Number(Math.random().toFixed(3)) }, + { value: Number(Math.random().toFixed(2)) }, + { value: `${Math.round(1000 * Math.random())}M` }, + { value: null }, + { value: `${Math.round(100 * Math.random())}` }, + { value: (100 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: null }, + { value: Number((10 * Math.random()).toFixed(2)) }, + { value: (Math.random() / 100).toFixed(5) }, + ], + chartData: { + start24HoursAgo: createChartData('24H'), + start1WeekAgo: createChartData('1W'), + start1MonthAgo: createChartData('1M'), + start6MonthAgo: createChartData('6M'), + start1YearAgo: createChartData('1Y'), + ALL: createChartData('1Y'), + }, + }, + { + name: 'ADA', + id: 'Cardano', + price: Number((10 * Math.random()).toFixed(2)), + portfolioPercents: Math.round(100 * Math.random()), + '24h': Number((10 * Math.random()).toFixed(2)), + '1W': -Number((10 * Math.random()).toFixed(2)), + '1M': Number((10 * Math.random()).toFixed(2)), + totalAmount: Number(Math.round(100000 * Math.random()).toFixed(2)), + totalAmountUsd: Number(Math.round(100000 * Math.random()).toFixed(2)), + overview: { + description: + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", + website: 'https://www.cardano.org', + detailOn: 'https://www.yoroiwallet.com', + policyId: '2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664', + fingerprint: + 'asset333q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj1234', + }, + performance: [ + { value: Number(Math.random().toFixed(3)) }, + { value: Number(Math.random().toFixed(2)) }, + { value: `${Math.round(1000 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}` }, + { value: (100 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: '45B' }, + { value: Number((10 * Math.random()).toFixed(2)) }, + { value: (Math.random() / 100).toFixed(5) }, + ], + chartData: { + start24HoursAgo: createChartData('24H'), + start1WeekAgo: createChartData('1W'), + start1MonthAgo: createChartData('1M'), + start6MonthAgo: createChartData('6M'), + start1YearAgo: createChartData('1Y'), + ALL: createChartData('1Y'), + }, + }, + { + name: 'Shiba', + id: 'shiba', + price: Number((10 * Math.random()).toFixed(2)), + portfolioPercents: Math.round(100 * Math.random()), + '24h': -Number((10 * Math.random()).toFixed(2)), + '1W': -Number((10 * Math.random()).toFixed(2)), + '1M': Number((10 * Math.random()).toFixed(2)), + totalAmount: Number(Math.round(100000 * Math.random()).toFixed(2)), + totalAmountUsd: Number(Math.round(100000 * Math.random()).toFixed(2)), + overview: { + description: + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", + website: 'https://www.cardano.org', + detailOn: 'https://www.yoroiwallet.com', + policyId: '2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664', + fingerprint: + 'asset344q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', + }, + performance: [ + { value: Number(Math.random().toFixed(3)) }, + { value: Number(Math.random().toFixed(2)) }, + { value: `${Math.round(1000 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}` }, + { value: (100 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: Number((10 * Math.random()).toFixed(2)) }, + { value: (Math.random() / 100).toFixed(5) }, + ], + chartData: { + start24HoursAgo: createChartData('24H'), + start1WeekAgo: createChartData('1W'), + start1MonthAgo: createChartData('1M'), + start6MonthAgo: createChartData('6M'), + start1YearAgo: createChartData('1Y'), + ALL: createChartData('1Y'), + }, + }, + { + name: 'ALT', + id: 'alt', + price: Number((10 * Math.random()).toFixed(2)), + portfolioPercents: Math.round(100 * Math.random()), + '24h': -Number((10 * Math.random()).toFixed(2)), + '1W': Number((10 * Math.random()).toFixed(2)), + '1M': -Number((10 * Math.random()).toFixed(2)), + totalAmount: Number(Math.round(100000 * Math.random()).toFixed(2)), + totalAmountUsd: Number(Math.round(100000 * Math.random()).toFixed(2)), + overview: { + description: + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", + website: 'https://www.cardano.org', + detailOn: 'https://www.yoroiwallet.com', + policyId: '2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664', + fingerprint: + 'asset355q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', + }, + performance: [ + { value: Number(Math.random().toFixed(3)) }, + { value: Number(Math.random().toFixed(2)) }, + { value: `${Math.round(1000 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}` }, + { value: (100 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: Number((10 * Math.random()).toFixed(2)) }, + { value: (Math.random() / 100).toFixed(5) }, + ], + chartData: { + start24HoursAgo: createChartData('24H'), + start1WeekAgo: createChartData('1W'), + start1MonthAgo: createChartData('1M'), + start6MonthAgo: createChartData('6M'), + start1YearAgo: createChartData('1Y'), + ALL: createChartData('1Y'), + }, + }, + { + name: 'TKN1', + id: 'Tkn1', + price: Number((10 * Math.random()).toFixed(2)), + portfolioPercents: Math.round(100 * Math.random()), + '24h': Number((10 * Math.random()).toFixed(2)), + '1W': Number((10 * Math.random()).toFixed(2)), + '1M': Number((10 * Math.random()).toFixed(2)), + totalAmount: Number(Math.round(100000 * Math.random()).toFixed(2)), + totalAmountUsd: Number(Math.round(100000 * Math.random()).toFixed(2)), + overview: { + description: + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", + website: 'https://www.cardano.org', + detailOn: 'https://www.yoroiwallet.com', + policyId: '2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664', + fingerprint: + 'asset366q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', + }, + performance: [ + { value: Number(Math.random().toFixed(3)) }, + { value: Number(Math.random().toFixed(2)) }, + { value: `${Math.round(1000 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}` }, + { value: (100 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: Number((10 * Math.random()).toFixed(2)) }, + { value: (Math.random() / 100).toFixed(5) }, + ], + chartData: { + start24HoursAgo: createChartData('24H'), + start1WeekAgo: createChartData('1W'), + start1MonthAgo: createChartData('1M'), + start6MonthAgo: createChartData('6M'), + start1YearAgo: createChartData('1Y'), + ALL: createChartData('1Y'), + }, + }, + { + name: 'TKN2', + id: 'Tkn2', + price: Number((10 * Math.random()).toFixed(2)), + portfolioPercents: Math.round(100 * Math.random()), + '24h': -Number((10 * Math.random()).toFixed(2)), + '1W': -Number((10 * Math.random()).toFixed(2)), + '1M': -Number((10 * Math.random()).toFixed(2)), + totalAmount: Number(Math.round(100000 * Math.random()).toFixed(2)), + totalAmountUsd: Number(Math.round(100000 * Math.random()).toFixed(2)), + overview: { + description: + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", + website: 'https://www.cardano.org', + detailOn: 'https://www.yoroiwallet.com', + policyId: '2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664', + fingerprint: + 'asset377q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', + }, + performance: [ + { value: Number(Math.random().toFixed(3)) }, + { value: Number(Math.random().toFixed(2)) }, + { value: `${Math.round(1000 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}` }, + { value: (100 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: Number((10 * Math.random()).toFixed(2)) }, + { value: (Math.random() / 100).toFixed(5) }, + ], + chartData: { + start24HoursAgo: createChartData('24H'), + start1WeekAgo: createChartData('1W'), + start1MonthAgo: createChartData('1M'), + start6MonthAgo: createChartData('6M'), + start1YearAgo: createChartData('1Y'), + ALL: createChartData('1Y'), + }, + }, + { + name: 'TKN3', + id: 'Tkn3', + price: Number((10 * Math.random()).toFixed(2)), + portfolioPercents: Math.round(100 * Math.random()), + '24h': -Number((10 * Math.random()).toFixed(2)), + '1W': Number((10 * Math.random()).toFixed(2)), + '1M': -Number((10 * Math.random()).toFixed(2)), + totalAmount: Number(Math.round(100000 * Math.random()).toFixed(2)), + totalAmountUsd: Number(Math.round(100000 * Math.random()).toFixed(2)), + overview: { + description: + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", + website: 'https://www.cardano.org', + detailOn: 'https://www.yoroiwallet.com', + policyId: '2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664', + fingerprint: + 'asset388q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', + }, + performance: [ + { value: Number(Math.random().toFixed(3)) }, + { value: Number(Math.random().toFixed(2)) }, + { value: `${Math.round(1000 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}` }, + { value: (100 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: Number((10 * Math.random()).toFixed(2)) }, + { value: (Math.random() / 100).toFixed(5) }, + ], + chartData: { + start24HoursAgo: createChartData('24H'), + start1WeekAgo: createChartData('1W'), + start1MonthAgo: createChartData('1M'), + start6MonthAgo: createChartData('6M'), + start1YearAgo: createChartData('1Y'), + ALL: createChartData('1Y'), + }, + }, + { + name: 'TKN6', + id: 'Tkn6', + price: Number((10 * Math.random()).toFixed(2)), + portfolioPercents: Math.round(100 * Math.random()), + '24h': Number((10 * Math.random()).toFixed(2)), + '1W': Number((10 * Math.random()).toFixed(2)), + '1M': Number((10 * Math.random()).toFixed(2)), + totalAmount: Number(Math.round(100000 * Math.random()).toFixed(2)), + totalAmountUsd: Number(Math.round(100000 * Math.random()).toFixed(2)), + overview: { + description: + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", + website: 'https://www.cardano.org', + detailOn: 'https://www.yoroiwallet.com', + policyId: '2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664', + fingerprint: + 'asset399q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', + }, + performance: [ + { value: Number(Math.random().toFixed(3)) }, + { value: Number(Math.random().toFixed(2)) }, + { value: `${Math.round(1000 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}` }, + { value: (100 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: Number((10 * Math.random()).toFixed(2)) }, + { value: (Math.random() / 100).toFixed(5) }, + ], + chartData: { + start24HoursAgo: createChartData('24H'), + start1WeekAgo: createChartData('1W'), + start1MonthAgo: createChartData('1M'), + start6MonthAgo: createChartData('6M'), + start1YearAgo: createChartData('1Y'), + ALL: createChartData('1Y'), + }, + }, + { + name: 'TKN8', + id: 'Tkn8', + price: Number((10 * Math.random()).toFixed(2)), + portfolioPercents: Math.round(100 * Math.random()), + '24h': Number((10 * Math.random()).toFixed(2)), + '1W': Number((10 * Math.random()).toFixed(2)), + '1M': -Number((10 * Math.random()).toFixed(2)), + totalAmount: Number(Math.round(100000 * Math.random()).toFixed(2)), + totalAmountUsd: Number(Math.round(100000 * Math.random()).toFixed(2)), + overview: { + description: + "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, ", + website: 'https://www.cardano.org', + detailOn: 'https://www.yoroiwallet.com', + policyId: '2aa9c1557fcf8e7caa049fa0911a8724a1cdaf8037fe0b431c6ac664', + fingerprint: + 'asset400q8dhlxmgagkx0ldt4xc7wzdv2wza8gu2utxw294sr23zuc8dhlxmgagkx0ldt4xc7wzk8213yjnad98h1n1j99naskajsj3456', + }, + performance: [ + { value: Number(Math.random().toFixed(3)) }, + { value: Number(Math.random().toFixed(2)) }, + { value: `${Math.round(1000 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}M` }, + { value: `${Math.round(100 * Math.random())}` }, + { value: (100 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: (1000 * Math.random()).toFixed(2) }, + { value: Number((10 * Math.random()).toFixed(2)) }, + { value: (Math.random() / 100).toFixed(5) }, + ], + chartData: { + start24HoursAgo: createChartData('24H'), + start1WeekAgo: createChartData('1W'), + start1MonthAgo: createChartData('1M'), + start6MonthAgo: createChartData('6M'), + start1YearAgo: createChartData('1Y'), + ALL: createChartData('1Y'), + }, + }, + ], + }, + + dapps: { + liquidityList: [ + { + id: Math.random(), + tokenPair: 'ADA/HOSKY', + DEX: 'Minswap', + DEXLink: 'https://app.minswap.org/', + firstToken: { + name: 'ADA', + id: 'ada', + }, + secondToken: { + name: 'HOSKY', + id: 'hosky', + }, + lpTokens: (Math.random() * 1000000).toFixed(2), + totalValue: (Math.random() * 1000).toFixed(2), + totalValueUsd: (Math.random() * 100).toFixed(2), + firstTokenValue: (Math.random() * 100).toFixed(2), + firstTokenValueUsd: (Math.random() * 100).toFixed(2), + secondTokenValue: (Math.random() * 10000).toFixed(2), + secondTokenValueUsd: (Math.random() * 10).toFixed(2), + }, + { + id: Math.random(), + tokenPair: 'DOGE/Shiba', + DEX: 'Sundaeswap', + DEXLink: 'https://v2.sundaeswap.finance/', + firstToken: { + name: 'DOGE', + id: 'doge', + }, + secondToken: { + name: 'Shiba', + id: 'shiba', + }, + lpTokens: (Math.random() * 1000000).toFixed(2), + totalValue: (Math.random() * 1000).toFixed(2), + totalValueUsd: (Math.random() * 100).toFixed(2), + firstTokenValue: (Math.random() * 100).toFixed(2), + firstTokenValueUsd: (Math.random() * 100).toFixed(2), + secondTokenValue: (Math.random() * 10000).toFixed(2), + secondTokenValueUsd: (Math.random() * 10).toFixed(2), + }, + { + id: Math.random(), + tokenPair: 'DBZ/ADA', + DEX: 'Sundaeswap', + DEXLink: 'https://v2.sundaeswap.finance/', + firstToken: { + name: 'DBZ', + id: 'dbz', + }, + secondToken: { + name: 'ADA', + id: 'ada', + }, + lpTokens: (Math.random() * 1000000).toFixed(2), + totalValue: (Math.random() * 1000).toFixed(2), + totalValueUsd: (Math.random() * 100).toFixed(2), + firstTokenValue: (Math.random() * 100).toFixed(2), + firstTokenValueUsd: (Math.random() * 100).toFixed(2), + secondTokenValue: (Math.random() * 10000).toFixed(2), + secondTokenValueUsd: (Math.random() * 10).toFixed(2), + }, + { + id: Math.random(), + tokenPair: 'ADA/BRICKS', + DEX: 'Minswap', + DEXLink: 'https://app.minswap.org/', + firstToken: { + name: 'ADA', + id: 'ada', + }, + secondToken: { + name: 'BRICKS', + id: 'bricks', + }, + lpTokens: (Math.random() * 1000000).toFixed(2), + totalValue: (Math.random() * 1000).toFixed(2), + totalValueUsd: (Math.random() * 100).toFixed(2), + firstTokenValue: (Math.random() * 100).toFixed(2), + firstTokenValueUsd: (Math.random() * 100).toFixed(2), + secondTokenValue: (Math.random() * 10000).toFixed(2), + secondTokenValueUsd: (Math.random() * 10).toFixed(2), + }, + { + id: Math.random(), + tokenPair: 'ADA/POPPA', + DEX: 'Sundaeswap', + DEXLink: 'https://v2.sundaeswap.finance/', + firstToken: { + name: 'ADA', + id: 'ada', + }, + secondToken: { + name: 'POPPA', + id: 'poppa', + }, + lpTokens: (Math.random() * 1000000).toFixed(2), + totalValue: (Math.random() * 1000).toFixed(2), + totalValueUsd: (Math.random() * 100).toFixed(2), + firstTokenValue: (Math.random() * 100).toFixed(2), + firstTokenValueUsd: (Math.random() * 100).toFixed(2), + secondTokenValue: (Math.random() * 10000).toFixed(2), + secondTokenValueUsd: (Math.random() * 10).toFixed(2), + }, + { + id: Math.random(), + tokenPair: 'CUBY/VALDO', + DEX: 'Sundaeswap', + DEXLink: 'https://v2.sundaeswap.finance/', + firstToken: { + name: 'CUBY', + id: 'cuby', + }, + secondToken: { + name: 'VALDO', + id: 'valdo', + }, + lpTokens: (Math.random() * 1000000).toFixed(2), + totalValue: (Math.random() * 1000).toFixed(2), + totalValueUsd: (Math.random() * 100).toFixed(2), + firstTokenValue: (Math.random() * 100).toFixed(2), + firstTokenValueUsd: (Math.random() * 100).toFixed(2), + secondTokenValue: (Math.random() * 10000).toFixed(2), + secondTokenValueUsd: (Math.random() * 10).toFixed(2), + }, + { + id: Math.random(), + tokenPair: 'SNEK/USDTST', + DEX: 'Minswap', + DEXLink: 'https://app.minswap.org/', + firstToken: { + name: 'SNEK', + id: 'snek', + }, + secondToken: { + name: 'USDTST', + id: 'usdtst', + }, + lpTokens: (Math.random() * 1000000).toFixed(2), + totalValue: (Math.random() * 1000).toFixed(2), + totalValueUsd: (Math.random() * 100).toFixed(2), + firstTokenValue: (Math.random() * 100).toFixed(2), + firstTokenValueUsd: (Math.random() * 100).toFixed(2), + secondTokenValue: (Math.random() * 10000).toFixed(2), + secondTokenValueUsd: (Math.random() * 10).toFixed(2), + }, + { + id: Math.random(), + tokenPair: 'GERO/NMKR', + DEX: 'Minswap', + DEXLink: 'https://app.minswap.org/', + firstToken: { + name: 'GERO', + id: 'gero', + }, + secondToken: { + name: 'NMKR', + id: 'nmkr', + }, + lpTokens: (Math.random() * 1000000).toFixed(2), + totalValue: (Math.random() * 1000).toFixed(2), + totalValueUsd: (Math.random() * 100).toFixed(2), + firstTokenValue: (Math.random() * 100).toFixed(2), + firstTokenValueUsd: (Math.random() * 100).toFixed(2), + secondTokenValue: (Math.random() * 10000).toFixed(2), + secondTokenValueUsd: (Math.random() * 10).toFixed(2), + }, + { + id: Math.random(), + tokenPair: 'SMOKES/CPASS', + DEX: 'Minswap', + DEXLink: 'https://app.minswap.org/', + firstToken: { + name: 'SMOKES', + id: 'smokes', + }, + secondToken: { + name: 'CPASS', + id: 'cpass', + }, + lpTokens: (Math.random() * 1000000).toFixed(2), + totalValue: (Math.random() * 1000).toFixed(2), + totalValueUsd: (Math.random() * 100).toFixed(2), + firstTokenValue: (Math.random() * 100).toFixed(2), + firstTokenValueUsd: (Math.random() * 100).toFixed(2), + secondTokenValue: (Math.random() * 10000).toFixed(2), + secondTokenValueUsd: (Math.random() * 10).toFixed(2), + }, + ], + orderList: [ + { + id: Math.random(), + pair: 'ADA/LVLC', + firstToken: { + name: 'ADA', + id: 'ada', + }, + secondToken: { + name: 'LVLC', + id: 'lvlc', + }, + DEX: 'Minswap', + DEXLink: 'https://app.minswap.org/', + assetPrice: Math.round(Math.random() * 10), + assetAmount: Math.round(Math.random() * 10), + transactionId: '043a2bfbb1d66d9883a068059a4e35bb53b7bdc6f5637d7b934150c453ffb116', + totalValue: (Math.random() * 10).toFixed(2), + totalValueUsd: (Math.random() * 10).toFixed(2), + }, + { + id: Math.random(), + pair: 'MILK/LVLC', + firstToken: { + name: 'MILK', + id: 'milk', + }, + secondToken: { + name: 'LVLC', + id: 'lvlc', + }, + DEX: 'Sundaeswap', + DEXLink: 'https://v2.sundaeswap.finance/', + assetPrice: Math.round(Math.random() * 10), + assetAmount: Math.round(Math.random() * 10), + transactionId: 'a0a863e8eb398c04caebdbd3a3e50733bcb6c06e118c36eadb7f7b53424668a5', + totalValue: (Math.random() * 10).toFixed(2), + totalValueUsd: (Math.random() * 10).toFixed(2), + }, + { + id: Math.random(), + pair: 'DICE/WTAB', + firstToken: { + name: 'DICE', + id: 'dice', + }, + secondToken: { + name: 'WTAB', + id: 'wtab', + }, + DEX: 'Minswap', + DEXLink: 'https://app.minswap.org/', + assetPrice: Math.round(Math.random() * 10), + assetAmount: Math.round(Math.random() * 10), + transactionId: '043a2bfbb1d66d9883a068059a4e35bb53b7bdc6f5637d7b934150c453ffb116', + totalValue: (Math.random() * 10).toFixed(2), + totalValueUsd: (Math.random() * 10).toFixed(2), + }, + { + id: Math.random(), + pair: 'FREN/SMOKES', + firstToken: { + name: 'FREN', + id: 'fren', + }, + secondToken: { + name: 'SMOKES', + id: 'smokes', + }, + DEX: 'Sundaeswap', + DEXLink: 'https://v2.sundaeswap.finance/', + assetPrice: Math.round(Math.random() * 10), + assetAmount: Math.round(Math.random() * 10), + transactionId: 'a0a863e8eb398c04caebdbd3a3e50733bcb6c06e118c36eadb7f7b53424668a5', + totalValue: (Math.random() * 10).toFixed(2), + totalValueUsd: (Math.random() * 10).toFixed(2), + }, + { + id: Math.random(), + pair: 'CCCC/HOSKY', + firstToken: { + name: 'CCCC', + id: 'cccc', + }, + secondToken: { + name: 'HOSKY', + id: 'hosky', + }, + DEX: 'Minswap', + DEXLink: 'https://app.minswap.org/', + assetPrice: Math.round(Math.random() * 10), + assetAmount: Math.round(Math.random() * 10), + transactionId: '043a2bfbb1d66d9883a068059a4e35bb53b7bdc6f5637d7b934150c453ffb116', + totalValue: (Math.random() * 10).toFixed(2), + totalValueUsd: (Math.random() * 10).toFixed(2), + }, + { + id: Math.random(), + pair: 'CCCC/DRIP', + firstToken: { + name: 'CCCC', + id: 'cccc', + }, + secondToken: { + name: 'DRIP', + id: 'drip', + }, + DEX: 'Sundaeswap', + DEXLink: 'https://v2.sundaeswap.finance/', + assetPrice: Math.round(Math.random() * 10), + assetAmount: Math.round(Math.random() * 10), + transactionId: 'a0a863e8eb398c04caebdbd3a3e50733bcb6c06e118c36eadb7f7b53424668a5', + totalValue: (Math.random() * 10).toFixed(2), + totalValueUsd: (Math.random() * 10).toFixed(2), + }, + { + id: Math.random(), + pair: 'ATH/CATSKY', + firstToken: { + name: 'ATH', + id: 'ath', + }, + secondToken: { + name: 'CATSKY', + id: 'catsky', + }, + DEX: 'Minswap', + DEXLink: 'https://app.minswap.org/', + assetPrice: Math.round(Math.random() * 10), + assetAmount: Math.round(Math.random() * 10), + transactionId: '043a2bfbb1d66d9883a068059a4e35bb53b7bdc6f5637d7b934150c453ffb116', + totalValue: (Math.random() * 10).toFixed(2), + totalValueUsd: (Math.random() * 10).toFixed(2), + }, + { + id: Math.random(), + pair: 'ADA/USDC', + firstToken: { + name: 'ADA', + id: 'ada', + }, + secondToken: { + name: 'USDC', + id: 'usdc', + }, + DEX: 'Minswap', + DEXLink: 'https://app.minswap.org/', + assetPrice: Math.round(Math.random() * 10), + assetAmount: Math.round(Math.random() * 10), + transactionId: 'a0a863e8eb398c04caebdbd3a3e50733bcb6c06e118c36eadb7f7b53424668a5', + totalValue: (Math.random() * 10).toFixed(2), + totalValueUsd: (Math.random() * 10).toFixed(2), + }, + { + id: Math.random(), + pair: 'AVAX/COPI', + firstToken: { + name: 'AVAX', + id: 'avax', + }, + secondToken: { + name: 'COPI', + id: 'copi', + }, + DEX: 'Sundaeswap', + DEXLink: 'https://v2.sundaeswap.finance/', + assetPrice: Math.round(Math.random() * 10), + assetAmount: Math.round(Math.random() * 10), + transactionId: 'a0a863e8eb398c04caebdbd3a3e50733bcb6c06e118c36eadb7f7b53424668a5', + totalValue: (Math.random() * 10).toFixed(2), + totalValueUsd: (Math.random() * 10).toFixed(2), + }, + ], + }, + + transactionHistory: [ + { + type: HistoryItemType.SENT, + status: HistoryItemStatus.LOW, + time: getRandomTime(start24HoursAgo), + feeValue: Math.random().toFixed(2), + feeValueUsd: Math.random().toFixed(2), + amountTotal: (1000000 * Math.random()).toFixed(5), + amountTotalUsd: (100000 * Math.random()).toFixed(2), + amountAsset: `${Math.round(100 * Math.random())} MILK`, + }, + { + type: HistoryItemType.RECEIVED, + status: HistoryItemStatus.LOW, + time: getRandomTime(start24HoursAgo), + amountTotal: (1000000 * Math.random()).toFixed(5), + amountTotalUsd: (100000 * Math.random()).toFixed(2), + amountAsset: Math.round(10 * Math.random()), + }, + { + type: HistoryItemType.ERROR, + status: HistoryItemStatus.FAILED, + time: getRandomTime(start24HoursAgo), + amountTotal: (1000000 * Math.random()).toFixed(5), + amountTotalUsd: (100000 * Math.random()).toFixed(2), + amountAsset: Math.round(10 * Math.random()), + }, + { + type: HistoryItemType.WITHDRAW, + status: HistoryItemStatus.HIGH, + time: getRandomTime(start1WeekAgo), + feeValue: Math.random().toFixed(2), + feeValueUsd: Math.random().toFixed(2), + amountTotal: (1000000 * Math.random()).toFixed(5), + amountTotalUsd: (100000 * Math.random()).toFixed(2), + amountAsset: `${Math.round(100 * Math.random())} MILK`, + }, + { + type: HistoryItemType.DELEGATE, + status: HistoryItemStatus.HIGH, + time: getRandomTime(start24HoursAgo), + feeValue: Math.random().toFixed(2), + feeValueUsd: Math.random().toFixed(2), + amountTotal: (1000000 * Math.random()).toFixed(5), + amountTotalUsd: (100000 * Math.random()).toFixed(2), + amountAsset: `${Math.round(100 * Math.random())} MILK`, + }, + ], +}; + +export default mockData; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/types/chart.js b/packages/yoroi-extension/app/UI/features/portfolio/common/types/chart.ts similarity index 95% rename from packages/yoroi-extension/app/UI/features/portfolio/common/types/chart.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/types/chart.ts index e58f768abf..4c62583617 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/types/chart.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/types/chart.ts @@ -1,21 +1,21 @@ -// @flow -export interface IPeriodButtonProps { - id: string; - label: string; - active: boolean; -} - -export interface IChartDataItem { - time: string; - value: number; - fiatValue: number; -} - -export interface IChartData { - start24HoursAgo: IChartDataItem[]; - start1WeekAgo: IChartDataItem[]; - start1MonthAgo: IChartDataItem[]; - start6MonthAgo: IChartDataItem[]; - start1YearAgo: IChartDataItem[]; - ALL: IChartDataItem[]; -} +// @flow +export interface IPeriodButtonProps { + id: string; + label: string; + active: boolean; +} + +export interface IChartDataItem { + time: string; + value: number; + fiatValue: number; +} + +export interface IChartData { + start24HoursAgo: IChartDataItem[]; + start1WeekAgo: IChartDataItem[]; + start1MonthAgo: IChartDataItem[]; + start6MonthAgo: IChartDataItem[]; + start1YearAgo: IChartDataItem[]; + ALL: IChartDataItem[]; +} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/types/index.js b/packages/yoroi-extension/app/UI/features/portfolio/common/types/index.ts similarity index 93% rename from packages/yoroi-extension/app/UI/features/portfolio/common/types/index.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/types/index.ts index 62931cb3f3..3a96aeaa99 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/types/index.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/types/index.ts @@ -1,82 +1,82 @@ -// @flow -import { IChartData } from './chart'; - -export * from './table'; -export * from './transaction'; -export * from './chart'; - -export type BalanceType = { - ada: number, - usd: number, - percents: number, - amount: number, -}; - -export interface IDetailOverview { - description: string; - website: string; - detailOn: string; - policyId: string; - fingerprint: string; -} - -export interface IDetailPerformanceItem { - value: number; -} - -export type TokenType = { - name: string, - id: string, - price: number, - portfolioPercents: number, - '24h': number, - '1W': number, - '1M': number, - totalAmount: number, - totalAmountUsd: number, - overview: IDetailOverview, - performance: IDetailPerformanceItem[], - chartData: IChartData, -}; - -export type LiquidityItemType = { - id: number, - tokenPair: string, - DEX: string, - DEXLink: string, - firstToken: { - name: string, - id: string, - }, - secondToken: { - name: string, - id: string, - }, - lpTokens: number, - totalValue: number, - totalValueUsd: number, - firstTokenValue: number, - firstTokenValueUsd: number, - secondTokenValue: number, - secondTokenValueUsd: number, -}; - -export type OrderItemType = { - id: number, - pair: string, - firstToken: { - name: string, - id: string, - }, - secondToken: { - name: string, - id: string, - }, - DEX: string, - DEXLink: string, - assetPrice: number, - assetAmount: number, - transactionId: string, - totalValue: number, - totalValueUsd: number, -}; +// @flow +import { IChartData } from './chart'; + +export * from './table'; +export * from './transaction'; +export * from './chart'; + +export type BalanceType = { + ada: number, + usd: number, + percents: number, + amount: number, +}; + +export interface IDetailOverview { + description: string; + website: string; + detailOn: string; + policyId: string; + fingerprint: string; +} + +export interface IDetailPerformanceItem { + value: number | string | null; +} + +export type TokenType = { + name: string, + id: string, + price: number, + portfolioPercents: number, + '24h': number, + '1W': number, + '1M': number, + totalAmount: number, + totalAmountUsd: number, + overview: IDetailOverview, + performance: IDetailPerformanceItem[], + chartData: IChartData, +}; + +export type LiquidityItemType = { + id: number, + tokenPair: string, + DEX: string, + DEXLink: string, + firstToken: { + name: string, + id: string, + }, + secondToken: { + name: string, + id: string, + }, + lpTokens: number, + totalValue: number, + totalValueUsd: number, + firstTokenValue: number, + firstTokenValueUsd: number, + secondTokenValue: number, + secondTokenValueUsd: number, +}; + +export type OrderItemType = { + id: number, + pair: string, + firstToken: { + name: string, + id: string, + }, + secondToken: { + name: string, + id: string, + }, + DEX: string, + DEXLink: string, + assetPrice: number, + assetAmount: number, + transactionId: string, + totalValue: number, + totalValueUsd: number, +}; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/types/table.js b/packages/yoroi-extension/app/UI/features/portfolio/common/types/table.js deleted file mode 100644 index d3bc22c9b1..0000000000 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/types/table.js +++ /dev/null @@ -1,9 +0,0 @@ -// @flow -export interface IHeadCell { - id: string; - label: string; - align: string; - sortType?: string; - disabledSort?: boolean; - isPadding?: boolean; -} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/types/table.ts b/packages/yoroi-extension/app/UI/features/portfolio/common/types/table.ts new file mode 100644 index 0000000000..bbccabcdad --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/types/table.ts @@ -0,0 +1,12 @@ +import { TableCellProps } from '@mui/material'; +import { TableSortType } from '../hooks/useTableSort'; + +// @flow +export interface IHeadCell { + id: string; + label: string; + align: TableCellProps['align']; + sortType?: TableSortType; + disabledSort?: boolean; + isPadding?: boolean; +} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/types/transaction.js b/packages/yoroi-extension/app/UI/features/portfolio/common/types/transaction.ts similarity index 95% rename from packages/yoroi-extension/app/UI/features/portfolio/common/types/transaction.js rename to packages/yoroi-extension/app/UI/features/portfolio/common/types/transaction.ts index e63303992b..eb39b37faa 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/types/transaction.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/types/transaction.ts @@ -1,25 +1,25 @@ -// @flow -export const HistoryItemType = Object.freeze({ - SENT: 1, - RECEIVED: 2, - ERROR: 3, - WITHDRAW: 4, - DELEGATE: 5, -}); - -export const HistoryItemStatus = Object.freeze({ - LOW: 'Low', - HIGH: 'High', - FAILED: 'Failed', -}); - -export type TransactionItemType = { - type: typeof HistoryItemType, - status: typeof HistoryItemStatus, - time: number, - feeValue?: number, - feeValueUsd?: number, - amountTotal: number, - amountTotalUsd: number, - amountAsset: number | string, -}; +// @flow +export const HistoryItemType = Object.freeze({ + SENT: 1, + RECEIVED: 2, + ERROR: 3, + WITHDRAW: 4, + DELEGATE: 5, +}); + +export const HistoryItemStatus = Object.freeze({ + LOW: 'Low', + HIGH: 'High', + FAILED: 'Failed', +}); + +export type TransactionItemType = { + type: typeof HistoryItemType, + status: typeof HistoryItemStatus, + time: number, + feeValue?: number, + feeValueUsd?: number, + amountTotal: number, + amountTotalUsd: number, + amountAsset: number | string, +}; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/module/PortfolioContextProvider.js b/packages/yoroi-extension/app/UI/features/portfolio/module/PortfolioContextProvider.tsx similarity index 65% rename from packages/yoroi-extension/app/UI/features/portfolio/module/PortfolioContextProvider.js rename to packages/yoroi-extension/app/UI/features/portfolio/module/PortfolioContextProvider.tsx index 84066f41a6..b9ecce38e7 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/module/PortfolioContextProvider.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/module/PortfolioContextProvider.tsx @@ -1,67 +1,57 @@ -// flow -import * as React from 'react'; - -import { - PortfolioAction, - PortfolioActionType, - PortfolioReducer, - defaultPortfolioActions, - defaultPortfolioState, - PortfolioState, - PortfolioActions, - CurrencyType, -} from './state'; - -const initialPortfolioProvider = { - ...defaultPortfolioState, - ...defaultPortfolioActions, -}; -const PortfolioContext = React.createContext(initialPortfolioProvider); - -type PortfolioProviderProps = { - children: React.ReactNode, - settingFiatPairUnit: { - currency: CurrencyType, - enabled: boolean, - }, - initialState: { - unitOfAccount: CurrencyType, - }, -}; - -export const PortfolioContextProvider = ({ - children, - settingFiatPairUnit, - initialState = { - unitOfAccount: settingFiatPairUnit.enabled ? settingFiatPairUnit.currency : 'USD', - }, -}: PortfolioProviderProps) => { - - const [state, dispatch] = React.useReducer(PortfolioReducer, { - ...defaultPortfolioState, - ...initialState, - }); - - const actions = React.useRef({ - changeUnitOfAccount: (currency: CurrencyType) => { - dispatch({ - type: PortfolioActionType.UnitOfAccountChanged, - unitOfAccount: currency, - }); - }, - }).current; - - const context = React.useMemo( - () => ({ - ...state, - ...actions, - settingFiatPairUnit, - }), - [state, actions] - ); - - return {children}; -}; - -export const usePortfolio = () => - React.useContext(PortfolioContext) ?? invalid('usePortfolio: needs to be wrapped in a PortfolioManagerProvider'); +// flow +import * as React from 'react'; + +import { PortfolioActionType, PortfolioReducer, defaultPortfolioActions, defaultPortfolioState, CurrencyType } from './state'; + +const initialPortfolioProvider = { + ...defaultPortfolioState, + ...defaultPortfolioActions, +}; +const PortfolioContext = React.createContext(initialPortfolioProvider); + +type PortfolioProviderProps = { + children: React.ReactNode; + settingFiatPairUnit: { + currency: CurrencyType; + enabled: boolean; + }; + initialState: { + unitOfAccount: CurrencyType; + }; +}; + +export const PortfolioContextProvider = ({ + children, + settingFiatPairUnit, + initialState = { + unitOfAccount: settingFiatPairUnit.enabled ? settingFiatPairUnit.currency : 'USD', + }, +}: PortfolioProviderProps) => { + const [state, dispatch] = React.useReducer(PortfolioReducer, { + ...defaultPortfolioState, + ...initialState, + }); + + const actions = React.useRef({ + changeUnitOfAccount: (currency: CurrencyType) => { + dispatch({ + type: PortfolioActionType.changeUnitOfAccount, + unitOfAccount: currency, + }); + }, + }).current; + + const context = React.useMemo( + () => ({ + ...state, + ...actions, + settingFiatPairUnit, + }), + [state, actions] + ); + + return {children}; +}; + +export const usePortfolio = () => + React.useContext(PortfolioContext) ?? console.log('usePortfolio: needs to be wrapped in a PortfolioManagerProvider'); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/module/state.js b/packages/yoroi-extension/app/UI/features/portfolio/module/state.ts similarity index 51% rename from packages/yoroi-extension/app/UI/features/portfolio/module/state.js rename to packages/yoroi-extension/app/UI/features/portfolio/module/state.ts index 0c57edb49b..0f09f6c9e2 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/module/state.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/module/state.ts @@ -1,47 +1,54 @@ -// @flow -import { invalid } from '@yoroi/common'; -import { produce } from 'immer'; - -export type CurrencyType = 'ADA' | 'USD' | 'BRL' | 'ETH' | 'BTC' | 'KRW' | 'CNY' | 'EUR' | 'JPY'; - -// Define types -export type PortfolioActions = {| - +unitOfAccountChanged: (currency: CurrencyType) => void, -|}; - -export const PortfolioActionType = Object.freeze({ - UnitOfAccountChanged: 'unitOfAccountChanged', -}); - -export type PortfolioAction = {| - type: typeof PortfolioActionType.UnitOfAccountChanged, - unitOfAccount: CurrencyType, -|}; - -// Define state type -export type PortfolioState = {| - unitOfAccount: CurrencyType, -|}; - -// Define default state -export const defaultPortfolioState: PortfolioState = { - unitOfAccount: 'ADA', -}; - -// Define action handlers -export const defaultPortfolioActions: PortfolioActions = { - unitOfAccountChanged: () => invalid('missing init unitOfAccountChanged'), -}; - -// Reducer function -export const PortfolioReducer = (state: PortfolioState, action: PortfolioAction): PortfolioState => { - return produce(state, draft => { - switch (action.type) { - case PortfolioActionType.UnitOfAccountChanged: - draft.unitOfAccount = action.unitOfAccount; - break; - default: - return; - } - }); -}; +// @flow +import { produce } from 'immer'; + +export type CurrencyType = 'ADA' | 'USD' | 'BRL' | 'ETH' | 'BTC' | 'KRW' | 'CNY' | 'EUR' | 'JPY' | null; + +// Define types +export type PortfolioActions = { + changeUnitOfAccount: (currency: CurrencyType) => void; +}; + +export const PortfolioActionType = Object.freeze({ + changeUnitOfAccount: 'changeUnitOfAccount', +}); + +export type PortfolioAction = { + type: typeof PortfolioActionType.changeUnitOfAccount; + unitOfAccount: CurrencyType; +}; + +// Define state type +export type PortfolioState = { + unitOfAccount: CurrencyType; + settingFiatPairUnit: { + currency: CurrencyType; + enabled: boolean; + }; +}; + +// Define default state +export const defaultPortfolioState: PortfolioState = { + unitOfAccount: 'ADA', + settingFiatPairUnit: { + currency: null, + enabled: false, + }, +}; + +// Define action handlers +export const defaultPortfolioActions: PortfolioActions = { + changeUnitOfAccount: () => console.log('missing init changeUnitOfAccount'), +}; + +// Reducer function +export const PortfolioReducer = (state: PortfolioState, action: PortfolioAction): PortfolioState => { + return produce(state, draft => { + switch (action.type) { + case PortfolioActionType.changeUnitOfAccount: + draft.unitOfAccount = action.unitOfAccount; + break; + default: + return; + } + }); +}; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.tsx similarity index 97% rename from packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.js rename to packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.tsx index 62e4e70c5e..0389520e7a 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.tsx @@ -1,24 +1,24 @@ -// @flow -import React from 'react'; -import { Box, Stack, Typography } from '@mui/material'; -import { useTheme } from '@mui/material'; -import { useStrings } from '../../common/hooks/useStrings'; -import illustrationPng from '../../common/assets/images/illustration.png'; - -const LendAndBorrow = () => { - const theme = useTheme(); - const strings = useStrings(); - - return ( - - - - - {strings.soonAvailable} - - - - ); -}; - -export default LendAndBorrow; +// @flow +import React from 'react'; +import { Box, Stack, Typography } from '@mui/material'; +import { useTheme } from '@mui/material'; +import { useStrings } from '../../common/hooks/useStrings'; +import illustrationPng from '../../common/assets/images/illustration.png'; + +const LendAndBorrow = () => { + const theme = useTheme(); + const strings = useStrings(); + + return ( + + + + + {strings.soonAvailable} + + + + ); +}; + +export default LendAndBorrow; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.tsx b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.tsx index dd844d4396..1975ed69dd 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.tsx @@ -9,7 +9,7 @@ import hoskyPng from '../../common/assets/images/hosky-token.png'; import minswapPng from '../../common/assets/images/minswap-dex.png'; import { Skeleton } from '../../../../components'; import { useStrings } from '../../common/hooks/useStrings'; -import useTableSort from '../../common/hooks/useTableSort'; +import useTableSort, { ISortState } from '../../common/hooks/useTableSort'; import Table from '../../common/components/Table'; import { IHeadCell } from '../../common/types/table'; import { LiquidityItemType } from '../../common/types/index'; @@ -74,9 +74,9 @@ const LiquidityTable = ({ data, isLoading }: Props): JSX.Element => { const theme: any = useTheme(); const strings = useStrings(); const { unitOfAccount } = usePortfolio(); - const [{ order, orderBy }, setSortState] = useState({ - order: '', - orderBy: '', + const [{ order, orderBy }, setSortState] = useState({ + order: null, + orderBy: null, }); const list = useMemo(() => [...data], [data]); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.tsx similarity index 89% rename from packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js rename to packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.tsx index 1020ef886a..ae013e0665 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.tsx @@ -1,216 +1,213 @@ -// @flow -import { ReactNode, useMemo, useState } from 'react'; -import { TableCell, TableRow, Typography, Stack, Box } from '@mui/material'; -import { useTheme } from '@mui/material/styles'; -import { useNavigateTo } from '../../common/hooks/useNavigateTo'; -import { useStrings } from '../../common/hooks/useStrings'; -import adaPng from '../../../../../assets/images/ada.png'; -import hoskyPng from '../../common/assets/images/hosky-token.png'; -import minswapPng from '../../common/assets/images/minswap-dex.png'; -import { Chip, Skeleton } from '../../../../components'; -import { truncateAddressShort } from '../../../../../utils/formatters'; -import { usePortfolio } from '../../module/PortfolioContextProvider'; -import { Icon } from '../../../../components/icons'; -import useTableSort from '../../common/hooks/useTableSort'; -import Table from '../../common/components/Table'; -import { IHeadCell } from '../../common/types/table'; -import { OrderItemType } from '../../common/types/index'; - -const TableRowSkeleton = ({ theme, ...props }) => ( - - - - - - - / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -); - -interface Props { - data: OrderItemType[]; - isLoading: boolean; -} - -const OrderTable = ({ data, isLoading }: Props): ReactNode => { - const theme = useTheme(); - const navigateTo = useNavigateTo(); - const strings = useStrings(); - const { unitOfAccount } = usePortfolio(); - const [{ order, orderBy }, setSortState] = useState({ - order: '', - orderBy: '', - }); - const list = useMemo(() => [...data], [data]); - - const headCells: IHeadCell[] = [ - { id: 'pair', label: strings.pair, align: 'left', disabledSort: true }, - { id: 'DEX', label: strings.dex, align: 'left', disabledSort: true }, - { id: 'assetPrice', label: strings.assetPrice, align: 'left', disabledSort: true }, - { id: 'assetAmount', label: strings.assetAmount, align: 'left', disabledSort: true }, - { id: 'transactionId', label: strings.transactionId, align: 'left', disabledSort: true }, - { - id: 'totalValue', - label: strings.totalValue, - align: 'right', - disabledSort: false, - sortType: 'numeric', - }, - ]; - const { getSortedData, handleRequestSort } = useTableSort({ order, orderBy, setSortState, headCells, data }); - - return ( - } - > - {getSortedData(list).map(row => ( - - - - - - {row.firstToken.name} - - - / - - - - {row.secondToken.name} - - - - - - - chrome.tabs.create({ - url: row.DEXLink, - }) - } - sx={{ width: 'fit-content', cursor: 'pointer' }} - > - - - {row.DEX} - - - - - - {row.assetPrice} - - - - {row.assetAmount} - - - - - chrome.tabs.create({ - url: `https://cardanoscan.io/transaction/${row.transactionId}`, - }) - } - color="ds.primary_c600" - sx={{ cursor: 'pointer' }} - > - {truncateAddressShort(row.transactionId, 10)} - - - - - - - {row.totalValue} {row.firstToken.name} - - {row.firstToken.name === 'ADA' && unitOfAccount === 'ADA' ? null : ( - - {row.totalValueUsd} {unitOfAccount} - - )} - - - - ))} -
- ); -}; - -export default OrderTable; +// @flow +import React, { useMemo, useState } from 'react'; +import { TableCell, TableRow, Typography, Stack, Box } from '@mui/material'; +import { useTheme } from '@mui/material/styles'; +import { useStrings } from '../../common/hooks/useStrings'; +import adaPng from '../../../../../assets/images/ada.png'; +import hoskyPng from '../../common/assets/images/hosky-token.png'; +import minswapPng from '../../common/assets/images/minswap-dex.png'; +import { Skeleton } from '../../../../components'; +import { truncateAddressShort } from '../../../../../utils/formatters'; +import { usePortfolio } from '../../module/PortfolioContextProvider'; +import useTableSort, { ISortState } from '../../common/hooks/useTableSort'; +import Table from '../../common/components/Table'; +import { IHeadCell } from '../../common/types/table'; +import { OrderItemType } from '../../common/types/index'; + +const TableRowSkeleton = ({ theme, ...props }) => ( + + + + + + + / + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +); + +interface Props { + data: OrderItemType[]; + isLoading: boolean; +} + +const OrderTable = ({ data, isLoading }: Props): JSX.Element => { + const theme = useTheme(); + const strings = useStrings(); + const { unitOfAccount } = usePortfolio(); + const [{ order, orderBy }, setSortState] = useState({ + order: null, + orderBy: null, + }); + const list = useMemo(() => [...data], [data]); + + const headCells: IHeadCell[] = [ + { id: 'pair', label: strings.pair, align: 'left', disabledSort: true }, + { id: 'DEX', label: strings.dex, align: 'left', disabledSort: true }, + { id: 'assetPrice', label: strings.assetPrice, align: 'left', disabledSort: true }, + { id: 'assetAmount', label: strings.assetAmount, align: 'left', disabledSort: true }, + { id: 'transactionId', label: strings.transactionId, align: 'left', disabledSort: true }, + { + id: 'totalValue', + label: strings.totalValue, + align: 'right', + disabledSort: false, + sortType: 'numeric', + }, + ]; + const { getSortedData, handleRequestSort } = useTableSort({ order, orderBy, setSortState, headCells, data }); + + return ( + } + > + {getSortedData(list).map(row => ( + + + + + + {row.firstToken.name} + + + / + + + + {row.secondToken.name} + + + + + + + chrome.tabs.create({ + url: row.DEXLink, + }) + } + sx={{ width: 'fit-content', cursor: 'pointer' }} + > + + + {row.DEX} + + + + + + {row.assetPrice} + + + + {row.assetAmount} + + + + + chrome.tabs.create({ + url: `https://cardanoscan.io/transaction/${row.transactionId}`, + }) + } + color="ds.primary_c600" + sx={{ cursor: 'pointer' }} + > + {truncateAddressShort(row.transactionId, 10)} + + + + + + + {row.totalValue} {row.firstToken.name} + + {row.firstToken.name === 'ADA' && unitOfAccount === 'ADA' ? null : ( + + {row.totalValueUsd} {unitOfAccount} + + )} + + + + ))} +
+ ); +}; + +export default OrderTable; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.tsx similarity index 81% rename from packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js rename to packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.tsx index f994fdc7af..47fdf64de4 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.tsx @@ -1,151 +1,152 @@ -// @flow -import { Typography, Stack, Box, Input, InputAdornment, Button, styled } from '@mui/material'; -import React, { useEffect, useState } from 'react'; -import { Tooltip, SearchInput, Chip, Skeleton } from '../../../../components'; -import { useTheme } from '@mui/material/styles'; -import LiquidityTable from './LiquidityTable'; -import mockData from '../../common/mockData'; -import OrderTable from './OrderTable'; -import LendAndBorrow from './LendAndBorrow'; -import { useStrings } from '../../common/hooks/useStrings'; -import { Icon } from '../../../../components/icons/index'; -import PortfolioHeader from '../../common/components/PortfolioHeader'; -import { LiquidityItemType, OrderItemType } from '../../common/types/index'; - -const StyledButton = styled(Button)(({ theme }) => ({ - height: '40px', - textTransform: 'none', - color: theme.palette.ds.gray_cmax, - padding: `${theme.spacing(1)} !important`, -})); - -const TableTabs = { - LIQUIDITY: 1, - ORDER: 2, - LENDBORROW: 3, -}; - -interface Props { - data: { - liquidityList: LiquidityItemType[], - orderList: OrderItemType[], - }; -} - -const PortfolioDapps = ({ data }: Props) => { - const theme = useTheme(); - const strings = useStrings(); - const [keyword, setKeyword] = useState(); - const [isLoading, setIsLoading] = useState(); - const [liquidityList, setLiquidlityList] = useState(data.liquidityList); - const [orderList, setOrderList] = useState(data.orderList); - const [buttonProps, setButtonProps] = useState([ - { - id: TableTabs.LIQUIDITY, - label: `${strings.liquidityPool}`, - active: true, - }, - { id: TableTabs.ORDER, label: `${strings.openOrders}`, active: false }, - { id: TableTabs.LENDBORROW, label: `${strings.lendAndBorrow}`, active: false }, - ]); - - useEffect(() => { - // FAKE FETCHING DATA TO SEE SKELETON - setIsLoading(true); - - const timer = setTimeout(() => { - setIsLoading(false); - }, 2000); - - return () => clearTimeout(timer); - }, []); - - useEffect(() => { - if (!keyword) { - setLiquidlityList(data.liquidityList); - setOrderList(data.orderList); - return; - } - - const lowercaseKeyword = keyword.toLowerCase(); - - const liquidityTemp = data.liquidityList.filter(item => { - return item.tokenPair.toLowerCase().includes(lowercaseKeyword); - }); - const orderTemp = data.orderList.filter(item => { - return item.pair.toLowerCase().includes(lowercaseKeyword); - }); - if (liquidityTemp && liquidityTemp.length > 0) { - setLiquidlityList(liquidityTemp); - } else { - setLiquidlityList([]); - } - if (orderTemp && orderTemp.length > 0) { - setOrderList(orderTemp); - } else { - setOrderList([]); - } - }, [keyword]); - - const handleChangeTab = id => { - const temp = buttonProps.map(prop => { - if (prop.id === id) - return { - ...prop, - active: true, - }; - return { - ...prop, - active: false, - }; - }); - setButtonProps(temp); - }; - - return ( - - - % {strings.balancePerformance} - +/- {strings.balanceChange} - - {strings.in24hours} ({strings.dapps}) - - - } - /> - - - {buttonProps.map(button => ( - handleChangeTab(button.id)} - sx={{ backgroundColor: button.active ? theme.palette.ds.gray_c200 : 'transparent' }} - > - - {button.label} ( - {button.id === TableTabs.LIQUIDITY - ? liquidityList.length - : button.id === TableTabs.ORDER - ? orderList.length - : button.id === TableTabs.LENDBORROW - ? 0 - : null} - ) - - - ))} - - - {buttonProps[0].active && } - {buttonProps[1].active && } - {buttonProps[2].active && } - - ); -}; - -export default PortfolioDapps; +// @flow +import { Stack, Button, styled } from '@mui/material'; +import React, { useEffect, useState } from 'react'; +import { useTheme } from '@mui/material/styles'; +import LiquidityTable from './LiquidityTable'; +import mockData from '../../common/mockData'; +import OrderTable from './OrderTable'; +import LendAndBorrow from './LendAndBorrow'; +import { useStrings } from '../../common/hooks/useStrings'; +import PortfolioHeader from '../../common/components/PortfolioHeader'; +import { LiquidityItemType, OrderItemType } from '../../common/types/index'; +import Typography from '../../common/components/TextPrimitives'; + +const StyledButton = styled(Button)(({ theme }: any) => ({ + height: '40px', + textTransform: 'none', + color: theme.palette.ds.gray_cmax, + padding: `${theme.spacing(1)} !important`, +})); + +const TableTabs = { + LIQUIDITY: 1, + ORDER: 2, + LENDBORROW: 3, +}; + +interface Props { + data: + | { + liquidityList: LiquidityItemType[]; + orderList: OrderItemType[]; + } + | any; +} + +const PortfolioDapps = ({ data }: Props) => { + const theme: any = useTheme(); + const strings = useStrings(); + const [keyword, setKeyword] = useState(); + const [isLoading, setIsLoading] = useState(false); + const [liquidityList, setLiquidlityList] = useState(data.liquidityList); + const [orderList, setOrderList] = useState(data.orderList); + const [buttonProps, setButtonProps] = useState([ + { + id: TableTabs.LIQUIDITY, + label: `${strings.liquidityPool}`, + active: true, + }, + { id: TableTabs.ORDER, label: `${strings.openOrders}`, active: false }, + { id: TableTabs.LENDBORROW, label: `${strings.lendAndBorrow}`, active: false }, + ]); + + useEffect(() => { + // FAKE FETCHING DATA TO SEE SKELETON + setIsLoading(true); + + const timer = setTimeout(() => { + setIsLoading(false); + }, 2000); + + return () => clearTimeout(timer); + }, []); + + useEffect(() => { + if (!keyword) { + setLiquidlityList(data.liquidityList); + setOrderList(data.orderList); + return; + } + + const lowercaseKeyword = keyword.toLowerCase(); + + const liquidityTemp = data.liquidityList.filter(item => { + return item.tokenPair.toLowerCase().includes(lowercaseKeyword); + }); + const orderTemp = data.orderList.filter(item => { + return item.pair.toLowerCase().includes(lowercaseKeyword); + }); + if (liquidityTemp && liquidityTemp.length > 0) { + setLiquidlityList(liquidityTemp); + } else { + setLiquidlityList([]); + } + if (orderTemp && orderTemp.length > 0) { + setOrderList(orderTemp); + } else { + setOrderList([]); + } + }, [keyword]); + + const handleChangeTab = id => { + const temp = buttonProps.map(prop => { + if (prop.id === id) + return { + ...prop, + active: true, + }; + return { + ...prop, + active: false, + }; + }); + setButtonProps(temp); + }; + + return ( + + + % {strings.balancePerformance} + +/- {strings.balanceChange} + + {strings.in24hours} ({strings.dapps}) + + + } + /> + + + {buttonProps.map(button => ( + handleChangeTab(button.id)} + sx={{ backgroundColor: button.active ? theme.palette.ds.gray_c200 : 'transparent' }} + > + + {button.label} ( + {button.id === TableTabs.LIQUIDITY + ? liquidityList.length + : button.id === TableTabs.ORDER + ? orderList.length + : button.id === TableTabs.LENDBORROW + ? 0 + : null} + ) + + + ))} + + + {buttonProps[0]?.active && } + {buttonProps[1]?.active && } + {buttonProps[2]?.active && } + + ); +}; + +export default PortfolioDapps; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.tsx similarity index 88% rename from packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js rename to packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.tsx index 3085c64489..55259bd24d 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.tsx @@ -1,193 +1,196 @@ -// @flow -import { Box, Button, Stack, styled, Typography } from '@mui/material'; -import React, { ReactNode, useEffect, useMemo, useState } from 'react'; -import { LineChart, Line, CartesianGrid, XAxis, YAxis, ResponsiveContainer, Label, Tooltip as RechartTooltip } from 'recharts'; -import { useTheme } from '@mui/material/styles'; -import { Skeleton, Tooltip, Chip } from '../../../../components'; -import chartSkeletonPng from '../../common/assets/images/token-detail-chart-skeleton.png'; -import { useStrings } from '../../common/hooks/useStrings'; -import { usePortfolio } from '../../module/PortfolioContextProvider'; -import { Icon } from '../../../../components/icons'; -import useChart from '../../common/hooks/useChart'; -import { TokenType } from '../../common/types/index'; - -const StyledButton = styled(Button)(({ theme, disabled, variant }) => ({ - fontWeight: 500, - fontSize: '0.75rem', - lineHeight: '1.125rem', - height: '30px', - padding: '6px !important', - minWidth: '36px', - backgroundColor: - variant === 'contained' ? (disabled ? theme.palette.ds.gray_c100 : theme.palette.ds.el_primary_medium) : `transparent`, - - '&.MuiButton-contained': { - color: theme.palette.ds.el_static_white, - }, - '&.MuiButton-secondary': { - color: disabled ? theme.palette.ds.gray_c100 : theme.palette.ds.text_primary_medium, - }, -})); - -interface Props { - isLoading: boolean; - tokenInfo: TokenType; - isAda: boolean; -} - -const TokenDetailChart = ({ isLoading, tokenInfo, isAda }: Props): ReactNode => { - const chartHeight = isAda ? 156 : 241; - const theme = useTheme(); - const strings = useStrings(); - const { unitOfAccount } = usePortfolio(); - const { - CustomYAxisTick, - CustomActiveDot, - handleChoosePeriod, - handleMouseMove, - handleMouseDown, - handleMouseUp, - periodButtonProps, - detailInfo, - minValue, - maxValue, - } = useChart(tokenInfo.chartData); - - return ( - - - {isLoading ? ( - - ) : ( - - {strings.marketPrice} - - )} - - {isLoading ? ( - - ) : ( - - {detailInfo.fiatValue} - -  {unitOfAccount} - - - )} - - {strings.tokenPriceChange} - {strings.in24hours} - - } - placement="top" - > - - {isLoading ? ( - - ) : ( - = 0} - label={ - - {detailInfo.value >= 0 ? ( - - ) : ( - - )} - - - {detailInfo.value >= 0 ? detailInfo.value : -1 * detailInfo.value}% - - - } - /> - )} - - {isLoading ? ( - - ) : ( - = 0} - label={ - - {detailInfo.fiatValue >= 0 && '+'} - {detailInfo.fiatValue} {unitOfAccount} - - } - /> - )} - - - - - - - - {isLoading ? null : ( - - item.active).id]} - onMouseDown={handleMouseDown} - onMouseUp={handleMouseUp} - onMouseMove={handleMouseMove} - onMouseLeave={handleMouseUp} - > - - - } /> - ( - item.active).id].length} - {...props} - /> - )} - dot={false} - type="monotone" - dataKey="value" - strokeWidth={2} - stroke={isLoading ? theme.palette.ds.gray_c50 : theme.palette.ds.primary_c600} - /> - - - )} - - - - {periodButtonProps.map(({ id, active, label }) => ( - handleChoosePeriod(id)} - > - {label} - - ))} - - - - ); -}; - -export default TokenDetailChart; +// @flow +import { Box, Button, Stack, styled } from '@mui/material'; +import React from 'react'; +import { LineChart, Line, CartesianGrid, YAxis, ResponsiveContainer, Tooltip as RechartTooltip } from 'recharts'; +import { useTheme } from '@mui/material/styles'; +import { Skeleton, Tooltip, Chip } from '../../../../components'; +import chartSkeletonPng from '../../common/assets/images/token-detail-chart-skeleton.png'; +import { useStrings } from '../../common/hooks/useStrings'; +import { usePortfolio } from '../../module/PortfolioContextProvider'; +import { Icon } from '../../../../components/icons'; +import useChart from '../../common/hooks/useChart'; +import { TokenType } from '../../common/types/index'; +import Typography from '../../common/components/TextPrimitives'; +import mockData from '../../common/mockData'; + +const StyledButton = styled(Button)(({ theme, disabled, variant }: { theme: any; disabled: boolean; variant: string }) => ({ + fontWeight: 500, + fontSize: '0.75rem', + lineHeight: '1.125rem', + height: '30px', + padding: '6px !important', + minWidth: '36px', + backgroundColor: + variant === 'contained' ? (disabled ? theme.palette.ds.gray_c100 : theme.palette.ds.el_primary_medium) : `transparent`, + + '&.MuiButton-contained': { + color: theme.palette.ds.el_static_white, + }, + '&.MuiButton-secondary': { + color: disabled ? theme.palette.ds.gray_c100 : theme.palette.ds.text_primary_medium, + }, +})); + +interface Props { + isLoading: boolean; + tokenInfo: TokenType | null; + isAda: boolean; +} + +const TokenDetailChart = ({ isLoading, tokenInfo, isAda }: Props): JSX.Element => { + const chartHeight = isAda ? 156 : 241; + const theme: any = useTheme(); + const strings = useStrings(); + const { unitOfAccount } = usePortfolio(); + const { + CustomYAxisTick, + CustomActiveDot, + handleChoosePeriod, + handleMouseMove, + handleMouseDown, + handleMouseUp, + periodButtonProps, + detailInfo, + minValue, + maxValue, + } = useChart(tokenInfo?.chartData === undefined ? mockData.wallet.tokenList[0]?.chartData : tokenInfo?.chartData); + + return ( + + + {isLoading ? ( + + ) : ( + + {strings.marketPrice} + + )} + + {isLoading ? ( + + ) : ( + + {detailInfo.fiatValue} + +  {unitOfAccount} + + + )} + + {strings.tokenPriceChange} + {strings.in24hours} + + } + placement="top" + > + + {isLoading ? ( + + ) : ( + = 0} + label={ + + {detailInfo.value >= 0 ? ( + + ) : ( + + )} + + + {detailInfo.value >= 0 ? detailInfo.value : -1 * detailInfo.value}% + + + } + /> + )} + + {isLoading ? ( + + ) : ( + = 0} + label={ + + {detailInfo.fiatValue >= 0 && '+'} + {detailInfo.fiatValue} {unitOfAccount} + + } + /> + )} + + + + + + + + {isLoading ? null : ( + + item?.active)?.id || 0]} + onMouseDown={handleMouseDown} + onMouseUp={handleMouseUp} + onMouseMove={handleMouseMove} + onMouseLeave={handleMouseUp} + > + + + } /> + ( + item.active)?.id || 0].length} + {...props} + /> + )} + dot={false} + type="monotone" + dataKey="value" + strokeWidth={2} + stroke={isLoading ? theme.palette.ds.gray_c50 : theme.palette.ds.primary_c600} + /> + + + )} + + + + {periodButtonProps.map(({ id, active, label }) => ( + handleChoosePeriod(id)} + theme={theme} + > + {label} + + ))} + + + + ); +}; + +export default TokenDetailChart; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.tsx similarity index 83% rename from packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js rename to packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.tsx index 443f1a717b..fa363d6ccd 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.tsx @@ -1,164 +1,164 @@ -// @flow -import React, { ReactNode } from 'react'; -import { Stack, Box, Typography, Link, Button } from '@mui/material'; -import { Skeleton } from '../../../../components/Skeleton'; -import { CopyButton } from '../../../../components/buttons/CopyButton'; -import { useTheme } from '@mui/material/styles'; -import tokenPng from '../../common/assets/images/token.png'; -import { useStrings } from '../../common/hooks/useStrings'; -import { TokenType } from '../../common/types/index'; - -interface Props { - tokenInfo: TokenType; - isLoading: boolean; - isAda: boolean; -} - -const TokenDetailOverview = ({ tokenInfo, isLoading, isAda }: Props): ReactNode => { - const theme = useTheme(); - const strings = useStrings(); - - return ( - - - {isLoading ? ( - - ) : ( - - )} - {isLoading ? ( - - ) : ( - - {tokenInfo.name} - - )} - - - - {isLoading ? ( - - ) : ( - - {strings.description} - - )} - {isLoading ? ( - <> - - - - - ) : ( - {tokenInfo.overview.description} - )} - - - - {isLoading ? ( - - ) : ( - - {strings.website} - - )} - {isLoading ? ( - - ) : ( - - cardano.org - - )} - - - {isAda ? null : ( - <> - - {isLoading ? ( - - ) : ( - - {strings.policyId} - - )} - - - {isLoading ? ( - - - - - ) : ( - - {tokenInfo.overview.policyId} - - )} - - - - - - {isLoading ? ( - - ) : ( - - {strings.fingerprint} - - )} - - - {isLoading ? ( - - - - - ) : ( - - {tokenInfo.overview.fingerprint} - - )} - - - - - )} - - - {isLoading ? ( - - ) : ( - - {strings.detailsOn} - - )} - - {isLoading ? ( - - ) : ( - - Cardanoscan - - )} - {isLoading ? ( - - ) : ( - - Adaex - - )} - - - - ); -}; - -export default TokenDetailOverview; +// @flow +import React from 'react'; +import { Stack, Box, Typography, Link } from '@mui/material'; +import { Skeleton } from '../../../../components/Skeleton'; +import { CopyButton } from '../../../../components/buttons/CopyButton'; +import { useTheme } from '@mui/material/styles'; +import tokenPng from '../../common/assets/images/token.png'; +import { useStrings } from '../../common/hooks/useStrings'; +import { TokenType } from '../../common/types/index'; + +interface Props { + tokenInfo: TokenType | null; + isLoading: boolean; + isAda: boolean; +} + +const TokenDetailOverview = ({ tokenInfo, isLoading, isAda }: Props): JSX.Element => { + const theme: any = useTheme(); + const strings = useStrings(); + + return ( + + + {isLoading ? ( + + ) : ( + + )} + {isLoading ? ( + + ) : ( + + {tokenInfo?.name} + + )} + + + + {isLoading ? ( + + ) : ( + + {strings.description} + + )} + {isLoading ? ( + <> + + + + + ) : ( + {tokenInfo?.overview.description} + )} + + + + {isLoading ? ( + + ) : ( + + {strings.website} + + )} + {isLoading ? ( + + ) : ( + + cardano.org + + )} + + + {isAda ? null : ( + <> + + {isLoading ? ( + + ) : ( + + {strings.policyId} + + )} + + + {isLoading ? ( + + + + + ) : ( + + {tokenInfo?.overview.policyId} + + )} + + + + + + {isLoading ? ( + + ) : ( + + {strings.fingerprint} + + )} + + + {isLoading ? ( + + + + + ) : ( + + {tokenInfo?.overview.fingerprint} + + )} + + + + + )} + + + {isLoading ? ( + + ) : ( + + {strings.detailsOn} + + )} + + {isLoading ? ( + + ) : ( + + Cardanoscan + + )} + {isLoading ? ( + + ) : ( + + Adaex + + )} + + + + ); +}; + +export default TokenDetailOverview; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.tsx similarity index 86% rename from packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js rename to packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.tsx index 4af509b3c7..be14344459 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.tsx @@ -1,76 +1,76 @@ -// @flow -import React, { ReactNode } from 'react'; -import { Box, Stack, Typography, Link } from '@mui/material'; -import { useTheme } from '@mui/material/styles'; -import { useStrings } from '../../common/hooks/useStrings'; -import { usePortfolio } from '../../module/PortfolioContextProvider'; -import { Skeleton } from '../../../../components/Skeleton'; -import { TokenType } from '../../common/types/index'; - -const PerformanceItemType = { - FIAT: 'fiat', - TOKEN: 'token', - RANK: 'rank', -}; - -interface Props { - tokenInfo: TokenType; - isLoading: boolean; -} - -const TokenDetailPerformance = ({ tokenInfo, isLoading }: Props): ReactNode => { - const theme = useTheme(); - const strings = useStrings(); - const { unitOfAccount } = usePortfolio(); - - const performanceItemList = [ - { id: 'tokenPriceChange', type: PerformanceItemType.FIAT, label: strings.tokenPriceChange }, - { id: 'tokenPrice', type: PerformanceItemType.FIAT, label: strings.tokenPrice }, - { id: 'marketCap', type: PerformanceItemType.FIAT, label: strings.marketCap }, - { id: 'volumn', type: PerformanceItemType.FIAT, label: strings['24hVolumn'] }, - { id: 'rank', type: PerformanceItemType.RANK, label: strings.rank }, - { id: 'circulating', type: PerformanceItemType.TOKEN, label: strings.circulating }, - { id: 'totalSupply', type: PerformanceItemType.TOKEN, label: strings.totalSupply }, - { id: 'maxSupply', type: PerformanceItemType.TOKEN, label: strings.maxSupply }, - { id: 'allTimeHigh', type: PerformanceItemType.FIAT, label: strings.allTimeHigh }, - { id: 'allTimeLow', type: PerformanceItemType.FIAT, label: strings.allTimeLow }, - ]; - - return ( - - - {strings.marketData} - - - {performanceItemList.map((item, index) => ( - - {item.label} - {isLoading ? ( - - ) : ( - - {tokenInfo.performance[index].value ? ( - <> - {item.type === PerformanceItemType.RANK && '#'} - {tokenInfo.performance[index].value} {item.type === PerformanceItemType.FIAT && unitOfAccount} - {item.type === PerformanceItemType.TOKEN && tokenInfo.name} - - ) : ( - '--' - )} - - )} - - ))} - - - ); -}; - -export default TokenDetailPerformance; +// @flow +import React from 'react'; +import { Box, Stack, Typography } from '@mui/material'; +import { useTheme } from '@mui/material/styles'; +import { useStrings } from '../../common/hooks/useStrings'; +import { usePortfolio } from '../../module/PortfolioContextProvider'; +import { Skeleton } from '../../../../components/Skeleton'; +import { TokenType } from '../../common/types/index'; + +const PerformanceItemType = { + FIAT: 'fiat', + TOKEN: 'token', + RANK: 'rank', +}; + +interface Props { + tokenInfo: TokenType | null; + isLoading: boolean; +} + +const TokenDetailPerformance = ({ tokenInfo, isLoading }: Props): JSX.Element => { + const theme = useTheme(); + const strings = useStrings(); + const { unitOfAccount } = usePortfolio(); + + const performanceItemList = [ + { id: 'tokenPriceChange', type: PerformanceItemType.FIAT, label: strings.tokenPriceChange }, + { id: 'tokenPrice', type: PerformanceItemType.FIAT, label: strings.tokenPrice }, + { id: 'marketCap', type: PerformanceItemType.FIAT, label: strings.marketCap }, + { id: 'volumn', type: PerformanceItemType.FIAT, label: strings['24hVolumn'] }, + { id: 'rank', type: PerformanceItemType.RANK, label: strings.rank }, + { id: 'circulating', type: PerformanceItemType.TOKEN, label: strings.circulating }, + { id: 'totalSupply', type: PerformanceItemType.TOKEN, label: strings.totalSupply }, + { id: 'maxSupply', type: PerformanceItemType.TOKEN, label: strings.maxSupply }, + { id: 'allTimeHigh', type: PerformanceItemType.FIAT, label: strings.allTimeHigh }, + { id: 'allTimeLow', type: PerformanceItemType.FIAT, label: strings.allTimeLow }, + ]; + + return ( + + + {strings.marketData} + + + {performanceItemList.map((item, index) => ( + + {item.label} + {isLoading ? ( + + ) : ( + + {tokenInfo?.performance[index]?.value ? ( + <> + {item.type === PerformanceItemType.RANK && '#'} + {tokenInfo?.performance[index]?.value} {item.type === PerformanceItemType.FIAT && unitOfAccount} + {item.type === PerformanceItemType.TOKEN && tokenInfo?.name} + + ) : ( + '--' + )} + + )} + + ))} + + + ); +}; + +export default TokenDetailPerformance; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.tsx similarity index 68% rename from packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js rename to packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.tsx index eb1dc54bc5..b5518cd5c5 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.tsx @@ -1,210 +1,185 @@ -// @flow -import React, { ReactNode, useEffect, useState } from 'react'; -import { Badge, Box, Button, Chip, Divider, IconButton, Link, Stack, Typography } from '@mui/material'; -import { ReactComponent as BackIcon } from '../../../../../assets/images/assets-page/back-arrow.inline.svg'; -import { styled } from '@mui/material/styles'; -import { Skeleton, CopyButton, Card } from '../../../../components'; -import { tableCellClasses } from '@mui/material/TableCell'; -import TransactionTable from './TransactionTable'; -import TokenDetailChart from './TokenDetailChart'; -import SubMenu from '../../../../../components/topbar/SubMenu'; -import { useTheme } from '@mui/material/styles'; -import { useNavigateTo } from '../../common/hooks/useNavigateTo'; -import { useStrings } from '../../common/hooks/useStrings'; -import mockData from '../../common/mockData'; -import TokenDetailPerformance from './TokenDetailPerformance'; -import TokenDetailOverview from './TokenDetailOverview'; -import { usePortfolio } from '../../module/PortfolioContextProvider'; -import { TokenType, TransactionItemType } from '../../common/types/index'; - -const Header = styled(Box)({ - display: 'flex', - justifyContent: 'space-between', -}); - -const TokenInfo = styled(Stack)({ - width: '100%', -}); - -const StyledButton = styled(Button)(({ theme }) => ({ - maxHeight: '40px', - minWidth: '140.25px', - - '&.MuiButton-contained': { - backgroundColor: theme.palette.ds.el_primary_medium, - color: theme.palette.ds.el_static_white, - - '&:hover': { - backgroundColor: theme.palette.ds.el_primary_high, - }, - }, - - '&.MuiButton-secondary': { - color: theme.palette.ds.text_primary_medium, - }, -})); - -const TabContent = styled(Box)({ - flex: 1, -}); - -const StyledSubMenu = styled(SubMenu)(({ theme }) => ({ - '& > button': { - padding: '11px 0 !important', - }, - - '& > .SubMenuItem_enabled': { - color: theme.palette.ds.el_primary_medium, - borderColor: theme.palette.ds.el_primary_medium, - }, -})); - -interface Props { - tokenInfo: TokenType; - transactionHistory: TransactionItemType[]; -} - -const TokenDetails = ({ tokenInfo, transactionHistory }: Props): ReactNode => { - const theme = useTheme(); - const navigateTo = useNavigateTo(); - const strings = useStrings(); - const { unitOfAccount } = usePortfolio(); - const [isLoading, setIsLoading] = useState(false); - const isAda = tokenInfo.name.toLowerCase() === 'ada'; - - const subMenuOptions = [ - { - label: strings.performance, - className: 'performance', - route: 'performance', - }, - { - label: strings.overview, - className: 'overview', - route: 'overview', - }, - ]; - - const [selectedTab, setSelectedTab] = useState(subMenuOptions[0].route); - - const isActiveItem: string => boolean = route => { - if (route === selectedTab) { - return true; - } else { - return false; - } - }; - - useEffect(() => { - // FAKE FETCHING DATA TO SEE SKELETON - setIsLoading(true); - - const timer = setTimeout(() => { - setIsLoading(false); - }, 2000); - - return () => clearTimeout(timer); - }, []); - - return ( - -
- - - navigateTo.swapPage()}> - {strings.swap} - - navigateTo.sendPage()}> - {strings.send} - - navigateTo.receivePage()}> - {strings.receive} - - -
- - - - - - - {isLoading ? : `${tokenInfo.name} ${strings.balance}`} - - - - {isLoading ? ( - - ) : ( - - - {tokenInfo.totalAmount} - - - {tokenInfo.name} - - - )} - - {isLoading ? ( - - ) : ( - - {tokenInfo.totalAmountUsd} {unitOfAccount} - - )} - - - - - - - - - - - setSelectedTab(route)} - isActiveItem={isActiveItem} - locationId="token-details" - /> - - - - {selectedTab === subMenuOptions[0].route ? ( - - - - ) : null} - - {selectedTab === subMenuOptions[1].route ? ( - - - - ) : null} - - - - - - -
- ); -}; - -export default TokenDetails; +// @flow +import React, { useEffect, useState } from 'react'; +import { Box, Button, Divider, Stack } from '@mui/material'; +import { ReactComponent as BackIcon } from '../../../../../assets/images/assets-page/back-arrow.inline.svg'; +import { styled } from '@mui/material/styles'; +import { Skeleton, Card } from '../../../../components'; +import TransactionTable from './TransactionTable'; +import TokenDetailChart from './TokenDetailChart'; +import SubMenu from '../../../../../components/topbar/SubMenu'; +import { useTheme } from '@mui/material/styles'; +import { useNavigateTo } from '../../common/hooks/useNavigateTo'; +import { useStrings } from '../../common/hooks/useStrings'; +import TokenDetailPerformance from './TokenDetailPerformance'; +import TokenDetailOverview from './TokenDetailOverview'; +import { usePortfolio } from '../../module/PortfolioContextProvider'; +import { TokenType } from '../../common/types/index'; +import Typography from '../../common/components/TextPrimitives'; +import NavigationButton from '../../common/components/NavigationButton'; + +const Header = styled(Box)({ + display: 'flex', + justifyContent: 'space-between', +}); + +const TokenInfo = styled(Stack)({ + width: '100%', +}); + +const TabContent = styled(Box)({ + flex: 1, +}); + +const StyledSubMenu = styled(SubMenu)(({ theme }) => ({ + '& > button': { + padding: '11px 0 !important', + }, + + '& > .SubMenuItem_enabled': { + color: theme.palette.ds.el_primary_medium, + borderColor: theme.palette.ds.el_primary_medium, + }, +})); + +interface Props { + tokenInfo: TokenType | null; +} + +const TokenDetails = ({ tokenInfo }: Props): JSX.Element => { + const theme: any = useTheme(); + const navigateTo = useNavigateTo(); + const strings = useStrings(); + const { unitOfAccount } = usePortfolio(); + const [isLoading, setIsLoading] = useState(false); + const isAda = tokenInfo?.name.toLowerCase() === 'ada'; + + const subMenuOptions = [ + { + label: strings.performance, + className: 'performance', + route: 'performance', + }, + { + label: strings.overview, + className: 'overview', + route: 'overview', + }, + ]; + + const [selectedTab, setSelectedTab] = useState(subMenuOptions[0]?.route); + + const isActiveItem = (route: string) => { + if (route === selectedTab) { + return true; + } else { + return false; + } + }; + + useEffect(() => { + // FAKE FETCHING DATA TO SEE SKELETON + setIsLoading(true); + + const timer = setTimeout(() => { + setIsLoading(false); + }, 2000); + + return () => clearTimeout(timer); + }, []); + + return ( + +
+ + + navigateTo.swapPage()} label={strings.swap} /> + navigateTo.sendPage()} label={strings.send} /> + navigateTo.receivePage()} label={strings.receive} /> + +
+ + + + + + + {isLoading ? : `${tokenInfo?.name} ${strings.balance}`} + + + + {isLoading ? ( + + ) : ( + + + {tokenInfo?.totalAmount} + + + {tokenInfo?.name} + + + )} + + {isLoading ? ( + + ) : ( + + {tokenInfo?.totalAmountUsd} {unitOfAccount} + + )} + + + + + + + + + + + setSelectedTab(route)} + isActiveItem={isActiveItem} + locationId="token-details" + /> + + + + {selectedTab === subMenuOptions[0]?.route ? ( + + + + ) : null} + + {selectedTab === subMenuOptions[1]?.route ? ( + + + + ) : null} + + + + + + +
+ ); +}; + +export default TokenDetails; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.tsx similarity index 92% rename from packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js rename to packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.tsx index 0f9133fc5d..d4f5eb9178 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.js +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.tsx @@ -1,242 +1,239 @@ -// @flow -import React, { Fragment, useMemo, useState } from 'react'; -import { Box, Stack, Typography, IconButton, Table, TableCell, TableHead, TableBody, TableRow, styled } from '@mui/material'; -import { useTheme } from '@mui/material/styles'; -import { Card } from '../../../../components'; -import moment from 'moment'; -import { useStrings } from '../../common/hooks/useStrings'; -import { usePortfolio } from '../../module/PortfolioContextProvider'; -import { Icon } from '../../../../components/icons'; -import { HistoryItemStatus, HistoryItemType } from '../../common/types/transaction'; -import { mapStrings } from '../../common/helpers/transactionHelper'; -import { TransactionItemType } from '../../common/types/transaction'; -import { IHeadCell } from '../../common/types/table'; - -const Container = styled(Box)(({ theme }) => ({ - width: '100%', - margin: '30px 0', -})); - -interface Props { - history: TransactionItemType[]; -} - -const TransactionTable = ({ history }: Props): Node => { - const theme = useTheme(); - const strings = useStrings(); - const { unitOfAccount } = usePortfolio(); - - const headCells: IHeadCell[] = [ - { id: 'transactionType', label: strings.transactionType, align: 'left' }, - { id: 'status', label: strings.status, align: 'left' }, - { id: 'fee', label: strings.fee, align: 'center' }, - { id: 'amount', label: strings.amount, align: 'right' }, - ]; - - const groupedData = useMemo(() => { - if (!history) return []; - const today = new Date(); - const yesterday = new Date(); - yesterday.setDate(today.getDate() - 1); - - return _.chain(mapStrings(history, strings)) - .groupBy(t => { - const time = new Date(t.time); - time.setHours(0, 0, 0, 0); // set the time to 00:00:00 for grouping by day - return time.toISOString(); - }) - .map((data, title) => ({ - title: - new Date(title).getDate() === today.getDate() - ? strings.today - : new Date(title).getDate() === yesterday.getDate() - ? strings.yesterday - : moment(title).format('MMMM DD, YYYY'), - data: _.chain(data) - .sortBy(item => new Date(item.time).getTime()) - .reverse() - .value(), - })) - .sortBy(group => new Date(group.data[0].time).getTime()) - .reverse() - .value(); - }, [history]); - - return ( - - - - - {strings.transactionHistory} - - - - - {headCells.map(({ id, align, label }) => ( - - - {label} - - - ))} - - - - {groupedData.map((item, index) => ( - - - - {item.title} - - - {item.data.map((row, index) => ( - - ))} - - ))} - -
-
-
-
- ); -}; - -const TransactionHistoryItem = ({ index, row, theme, strings, unitOfAccount, headCells }) => { - const [isExpanded, setIsExpanded] = useState(false); - - return ( - - - - - {row.type === HistoryItemType.SENT && } - {row.type === HistoryItemType.RECEIVED && ( - - )} - {row.type === HistoryItemType.ERROR && } - {row.type === HistoryItemType.WITHDRAW && } - {row.type === HistoryItemType.DELEGATE && } - - - {row.label} - {isExpanded && ( - - {moment.utc(row.time).local().format('h:mm A')} - - )} - - - - - - {row.status} - - - - - - {row.feeValue ? `${row.feeValue} ADA` : '-'} - - {isExpanded && - (unitOfAccount === 'ADA' ? null : ( - - {row.feeValueUsd ? `${row.feeValueUsd} ${unitOfAccount}` : '-'} - - ))} - - - - setIsExpanded(!isExpanded)} - > - - - {(row.type === HistoryItemType.RECEIVED || - row.type === HistoryItemType.WITHDRAW || - row.type === HistoryItemType.DELEGATE) && - '+ '} - {row.amountTotal} ADA - - {isExpanded ? ( - - {unitOfAccount === 'ADA' ? null : ( - - {(row.type === HistoryItemType.RECEIVED || - row.type === HistoryItemType.WITHDRAW || - row.type === HistoryItemType.DELEGATE) && - '+ '} - {row.amountTotalUsd} {unitOfAccount} - - )} - {row.type === HistoryItemType.RECEIVED && ( - - + {row.amountAsset} {strings.assets} - - )} - {row.type === HistoryItemType.SENT && ( - - {row.amountAsset} - - )} - - ) : null} - - - - - - ); -}; - -export default TransactionTable; +// @flow +import React, { Fragment, useMemo, useState } from 'react'; +import { Box, Stack, Typography, IconButton, Table, TableCell, TableHead, TableBody, TableRow, styled } from '@mui/material'; +import { useTheme } from '@mui/material/styles'; +import { Card } from '../../../../components'; +import moment from 'moment'; +import { useStrings } from '../../common/hooks/useStrings'; +import { usePortfolio } from '../../module/PortfolioContextProvider'; +import { Icon } from '../../../../components/icons'; +import { HistoryItemStatus, HistoryItemType } from '../../common/types/transaction'; +import { mapStrings } from '../../common/helpers/transactionHelper'; +import { IHeadCell } from '../../common/types/table'; +import _ from 'lodash'; +import mockData from '../../common/mockData'; + +const Container = styled(Box)(() => ({ + width: '100%', + margin: '30px 0', +})); + +const TransactionTable = (): JSX.Element => { + const theme = useTheme(); + const strings = useStrings(); + const { unitOfAccount } = usePortfolio(); + + const headCells: IHeadCell[] = [ + { id: 'transactionType', label: strings.transactionType, align: 'left' }, + { id: 'status', label: strings.status, align: 'left' }, + { id: 'fee', label: strings.fee, align: 'center' }, + { id: 'amount', label: strings.amount, align: 'right' }, + ]; + + const groupedData = useMemo(() => { + if (!mockData.transactionHistory) return []; + const today = new Date(); + const yesterday = new Date(); + yesterday.setDate(today.getDate() - 1); + + return _.chain(mapStrings(mockData.transactionHistory, strings)) + .groupBy(t => { + const time = new Date(t.time); + time.setHours(0, 0, 0, 0); // set the time to 00:00:00 for grouping by day + return time.toISOString(); + }) + .map((data, title) => ({ + title: + new Date(title).getDate() === today.getDate() + ? strings.today + : new Date(title).getDate() === yesterday.getDate() + ? strings.yesterday + : moment(title).format('MMMM DD, YYYY'), + data: _.chain(data) + .sortBy(item => new Date(item.time).getTime()) + .reverse() + .value(), + })) + .sortBy(group => new Date(group.data[0].time).getTime()) + .reverse() + .value(); + }, [mockData.transactionHistory]); + + return ( + + + + + {strings.transactionHistory} + + + + + {headCells.map(({ id, align, label }) => ( + + + {label} + + + ))} + + + + {groupedData.map(item => ( + + + + {item.title} + + + {item.data.map((row, index) => ( + + ))} + + ))} + +
+
+
+
+ ); +}; + +const TransactionHistoryItem = ({ index, row, theme, strings, unitOfAccount, headCells }) => { + const [isExpanded, setIsExpanded] = useState(false); + + return ( + + + + + {row.type === HistoryItemType.SENT && } + {row.type === HistoryItemType.RECEIVED && ( + + )} + {row.type === HistoryItemType.ERROR && } + {row.type === HistoryItemType.WITHDRAW && } + {row.type === HistoryItemType.DELEGATE && } + + + {row.label} + {isExpanded && ( + + {moment.utc(row.time).local().format('h:mm A')} + + )} + + + + + + {row.status} + + + + + + {row.feeValue ? `${row.feeValue} ADA` : '-'} + + {isExpanded && + (unitOfAccount === 'ADA' ? null : ( + + {row.feeValueUsd ? `${row.feeValueUsd} ${unitOfAccount}` : '-'} + + ))} + + + + setIsExpanded(!isExpanded)} + > + + + {(row.type === HistoryItemType.RECEIVED || + row.type === HistoryItemType.WITHDRAW || + row.type === HistoryItemType.DELEGATE) && + '+ '} + {row.amountTotal} ADA + + {isExpanded ? ( + + {unitOfAccount === 'ADA' ? null : ( + + {(row.type === HistoryItemType.RECEIVED || + row.type === HistoryItemType.WITHDRAW || + row.type === HistoryItemType.DELEGATE) && + '+ '} + {row.amountTotalUsd} {unitOfAccount} + + )} + {row.type === HistoryItemType.RECEIVED && ( + + + {row.amountAsset} {strings.assets} + + )} + {row.type === HistoryItemType.SENT && ( + + {row.amountAsset} + + )} + + ) : null} + + + + + + ); +}; + +export default TransactionTable; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.tsx b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.tsx index b7f6636cab..d7bd3bb333 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.tsx @@ -9,7 +9,7 @@ import { Chip, Skeleton } from '../../../../components'; import { Icon } from '../../../../components/icons'; import { useNavigateTo } from '../../common/hooks/useNavigateTo'; import { useStrings } from '../../common/hooks/useStrings'; -import useTableSort from '../../common/hooks/useTableSort'; +import useTableSort, { ISortState } from '../../common/hooks/useTableSort'; import Table from '../../common/components/Table'; import { IHeadCell } from '../../common/types/table'; import { TokenType } from '../../common/types/index'; @@ -72,7 +72,7 @@ const StatsTable = ({ data, isLoading }: Props): JSX.Element => { const navigateTo = useNavigateTo(); const strings = useStrings(); const { unitOfAccount } = usePortfolio(); - const [{ order, orderBy }, setSortState] = useState({ + const [{ order, orderBy }, setSortState] = useState({ order: null, orderBy: null, }); diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.tsx b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.tsx index 8e794ad0d9..b2327191a8 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.tsx +++ b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.tsx @@ -1,8 +1,8 @@ // @flow import React from 'react'; -import TokenDetails from '../../features/portfolio/useCases/TokenDetails/TokenDetails'; import mockData from '../../features/portfolio/common/mockData'; import PortfolioLayout from './layout'; +import TokenDetails from './../../features/portfolio/useCases/TokenDetails/TokenDetails'; type Props = { stores: any; @@ -16,12 +16,12 @@ const PortfolioDetailPage = ({ match, ...props }: Props) => { const tokenInfo = React.useMemo(() => { const tmp = mockData.wallet.tokenList.find(item => item.id === tokenId); if (tmp) return tmp; - return {}; + return null; }, [tokenId]); return ( - + ); }; From b8d575aa104b5e2d535c292b1b20b9ad9ced1881 Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Mon, 10 Jun 2024 17:52:55 +0700 Subject: [PATCH 102/464] fix chart changing period will change specific detail info --- .../UI/features/portfolio/common/hooks/useChart.tsx | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useChart.tsx b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useChart.tsx index c72e3506c9..ad53dc35e8 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useChart.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useChart.tsx @@ -119,6 +119,18 @@ const useChart = (data: IChartData | undefined) => { }; }); setPeriodButtonProps(tmp); + setDetailInfo({ + value: data + ? data[periodButtonProps.find(item => item.id === id)?.id || 0][ + data[periodButtonProps.find(item => item.id === id)?.id || 0].length - 1 + ].value + : 0, + fiatValue: data + ? data[periodButtonProps.find(item => item.id === id)?.id || 0][ + data[periodButtonProps.find(item => item.id === id)?.id || 0].length - 1 + ].fiatValue + : 0, + }); }; const handleMouseMove = (props: LineChartProps) => { From 646beb01e904c712d64056a3f74462a3de80b1b3 Mon Sep 17 00:00:00 2001 From: yushi Date: Mon, 10 Jun 2024 20:30:12 +0800 Subject: [PATCH 103/464] finish the sell ADA on Encryptus flow --- .../wallet/send/TransactionSuccessDialog.js | 17 ++++++++++-- .../app/containers/wallet/WalletSendPage.js | 12 +++++++-- .../app/stores/toplevel/LoadingStore.js | 25 +++++++++++++++++ .../app/stores/toplevel/WalletStore.js | 27 +++++++++++++++++++ .../chrome/content-scripts/inject.js | 9 +++---- .../chrome/extension/background.js | 24 +++++++++++++++++ 6 files changed, 104 insertions(+), 10 deletions(-) diff --git a/packages/yoroi-extension/app/components/wallet/send/TransactionSuccessDialog.js b/packages/yoroi-extension/app/components/wallet/send/TransactionSuccessDialog.js index f8875f1e42..1d8b99d85a 100644 --- a/packages/yoroi-extension/app/components/wallet/send/TransactionSuccessDialog.js +++ b/packages/yoroi-extension/app/components/wallet/send/TransactionSuccessDialog.js @@ -20,11 +20,20 @@ const messages = defineMessages({ id: 'wallet.transaction.success.explanation', defaultMessage: '!!!Check this transaction in the list of wallet transactions', }, + sellSendDone: { + id: 'wallet.transactions.success.sell', + defaultMessage: '!!!Transaction has been submitted', + }, + goToExchange: { + id: 'wallet.transactions.success.button.encryptus', + defaultMessage: '!!!Go to the exchange page', + }, }); type Props = {| +onClose: void => PossiblyAsync, +classicTheme: boolean, + +process: 'for-sell' | 'normal', |}; @observer @@ -41,7 +50,9 @@ export default class TransactionSuccessDialog extends Component { title={intl.formatMessage(messages.title)} actions={[ { - label: intl.formatMessage(globalMessages.goToTransactions), + label: intl.formatMessage( + this.props.process === 'normal' ? globalMessages.goToTransactions : messages.goToExchange + ), onClick: this.props.onClose, primary: true, }, @@ -58,7 +69,9 @@ export default class TransactionSuccessDialog extends Component { textAlign="center" maxWidth="400px" > - {intl.formatMessage(messages.explanation)} + {intl.formatMessage( + this.props.process === 'normal' ? messages.explanation: messages.sellSendDone + )}
diff --git a/packages/yoroi-extension/app/containers/wallet/WalletSendPage.js b/packages/yoroi-extension/app/containers/wallet/WalletSendPage.js index 07b7a6a8a0..2765f1e327 100644 --- a/packages/yoroi-extension/app/containers/wallet/WalletSendPage.js +++ b/packages/yoroi-extension/app/containers/wallet/WalletSendPage.js @@ -74,8 +74,13 @@ class WalletSendPage extends Component { @observable showSupportedAddressDomainBanner: boolean = true; closeTransactionSuccessDialog: void => void = () => { - this.props.actions.dialogs.closeActiveDialog.trigger(); - this.props.actions.router.goToRoute.trigger({ route: ROUTES.WALLETS.TRANSACTIONS }); + const redirect = this.props.stores.loading.sellAdaParams?.redirect; + if (redirect) { + window.document.location = redirect; + } else { + this.props.actions.dialogs.closeActiveDialog.trigger(); + this.props.actions.router.goToRoute.trigger({ route: ROUTES.WALLETS.TRANSACTIONS }); + } }; openTransactionSuccessDialog: void => void = () => { @@ -293,8 +298,11 @@ class WalletSendPage extends Component { return this.noCloudWarningDialog(); } if (uiDialogs.isOpen(TransactionSuccessDialog)) { + const process = this.props.stores.loading.sellAdaParams?.redirect ? + 'for-sell' : 'normal'; return ( diff --git a/packages/yoroi-extension/app/stores/toplevel/LoadingStore.js b/packages/yoroi-extension/app/stores/toplevel/LoadingStore.js index ce8427f361..1e870cbb12 100644 --- a/packages/yoroi-extension/app/stores/toplevel/LoadingStore.js +++ b/packages/yoroi-extension/app/stores/toplevel/LoadingStore.js @@ -17,6 +17,12 @@ import { } from '../../utils/tabManager'; import type { lf$Database } from 'lovefield'; +type SellAdaParamsType = {| + addr: string, + redirect: string, + amount: string, +|}; + export default class LoadingStore extends BaseLoadingStore { /** * null if app not opened from URI Scheme OR URI scheme was invalid @@ -24,6 +30,7 @@ export default class LoadingStore extends BaseLoadingStore { + this._uriParams = uriParams; + }); + } + @computed get shouldRedirect(): boolean { return this._shouldRedirect; } diff --git a/packages/yoroi-extension/app/stores/toplevel/WalletStore.js b/packages/yoroi-extension/app/stores/toplevel/WalletStore.js index f6f1ba663f..84780f4e3f 100644 --- a/packages/yoroi-extension/app/stores/toplevel/WalletStore.js +++ b/packages/yoroi-extension/app/stores/toplevel/WalletStore.js @@ -31,6 +31,8 @@ import { createProblematicWalletDialog } from '../../containers/wallet/dialogs/P import type { ActionsMap } from '../../actions/index'; import type { StoresMap } from '../index'; import { getWalletChecksum } from '../../api/export/utils'; +import { MultiToken } from '../../api/common/lib/MultiToken'; +import { BigNumber } from 'bignumber.js'; type GroupedWallets = {| publicDerivers: Array>, @@ -342,6 +344,31 @@ export default class WalletStore extends Store { this.actions.serverConnection.parallelSyncStateChange.listen(() => { this._startRefreshAllWallets(); }); + // todo: under the current architecture, the delay is required otherwise if we go to the send page + // immediately it would crash, but soon we will migrate to new architecture which allows for + // immediate transition + const { sellAdaParams } = this.stores.loading; + if (sellAdaParams) { + const { selected } = this; + if (!selected) { + throw new Error('unexpected'); + } + const defaultToken = selected.getParent().getDefaultToken(); + this.stores.loading.setUriParams({ + address: sellAdaParams.addr, + amount: new MultiToken( + [{ + identifier: defaultToken.defaultIdentifier, + networkId: defaultToken.defaultNetworkId, + amount: (new BigNumber(sellAdaParams.amount)).shiftedBy(6), + }], + defaultToken, + ), + }); + this.actions.router.goToRoute.trigger({ + route: ROUTES.WALLETS.SEND, + }); + } }, 50); // let the UI render first so that the loading process is perceived faster }; diff --git a/packages/yoroi-extension/chrome/content-scripts/inject.js b/packages/yoroi-extension/chrome/content-scripts/inject.js index 5bb82be5a0..f73f62692b 100644 --- a/packages/yoroi-extension/chrome/content-scripts/inject.js +++ b/packages/yoroi-extension/chrome/content-scripts/inject.js @@ -239,15 +239,12 @@ async function convertImgToBase64(origin, urls) { return reader.result; } -// relay Banxa callback to the extension tab +// relay Banxa/Encryptus callback to the extension tab window.addEventListener('message', function (event) { if ( event.source === window && - ( - event.origin === 'http://localhost:8000' || - event.origin === 'https://ramp-redirect.yoroiwallet.com' - ) && - event.data?.type === 'banxa callback' + /https:\/\/([a-z-]+\.)?yoroi-?wallet\.com/.test(event.origin) && + event.data?.type === 'exchange callback' ) { chrome.runtime.sendMessage(event.data); } diff --git a/packages/yoroi-extension/chrome/extension/background.js b/packages/yoroi-extension/chrome/extension/background.js index f89501f21d..b2c8ddbaff 100644 --- a/packages/yoroi-extension/chrome/extension/background.js +++ b/packages/yoroi-extension/chrome/extension/background.js @@ -857,6 +857,9 @@ const yoroiMessageHandler = async ( chrome.runtime.onMessage.addListener( (message, sender, sendResponse) => { + if (handleExchangeRedirectMessage(message, sender)) { + return; + } if (isYoroiMessage(message)) { // Returning `true` is required by Firefox, see: // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage @@ -1783,3 +1786,24 @@ async function transformCardanoUtxos( }; }); } + +function handleExchangeRedirectMessage(message, sender) { + const url = new URL(sender.url); + if (url.hostname === 'yoroi-wallet.com') { + const { searchParams } = url; + const cardanoLink = decodeURIComponent(searchParams.get('link') || ''); + const m = cardanoLink.match(/web\+cardano:([a-z0-9]+)\?amount=([0-9\.]+)/); + if (!m) { + return; + } + const addr = m[1]; + const amount = m[2]; + const redirectTo = searchParams.get('redirectTo'); + // $FlowFixMe[prop-missing] flow doesn't know replaceAll + const redirectToFixed = redirectTo?.replaceAll('%253A', ':')?.replaceAll('%252F', '/') || ''; + chrome.tabs.remove(sender.tab.id); + const extensionUrl = `main_window.html?action=sell-ada&addr=${addr}&amount=${amount}` + + `&redirect=${encodeURIComponent(redirectToFixed)}`; + chrome.tabs.create({ url: extensionUrl }); + } +} From 5a2acb82321bdaea4782646e08c9668fcda76177 Mon Sep 17 00:00:00 2001 From: yushi Date: Mon, 10 Jun 2024 21:03:04 +0800 Subject: [PATCH 104/464] add translation text --- .../app/components/wallet/send/TransactionSuccessDialog.js | 2 +- packages/yoroi-extension/app/i18n/locales/en-US.json | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/components/wallet/send/TransactionSuccessDialog.js b/packages/yoroi-extension/app/components/wallet/send/TransactionSuccessDialog.js index 1d8b99d85a..ed159558e6 100644 --- a/packages/yoroi-extension/app/components/wallet/send/TransactionSuccessDialog.js +++ b/packages/yoroi-extension/app/components/wallet/send/TransactionSuccessDialog.js @@ -25,7 +25,7 @@ const messages = defineMessages({ defaultMessage: '!!!Transaction has been submitted', }, goToExchange: { - id: 'wallet.transactions.success.button.encryptus', + id: 'wallet.transactions.success.button.exchange', defaultMessage: '!!!Go to the exchange page', }, }); diff --git a/packages/yoroi-extension/app/i18n/locales/en-US.json b/packages/yoroi-extension/app/i18n/locales/en-US.json index d6106e1042..a711e96e41 100644 --- a/packages/yoroi-extension/app/i18n/locales/en-US.json +++ b/packages/yoroi-extension/app/i18n/locales/en-US.json @@ -949,6 +949,8 @@ "wallet.transaction.type.stakeKeyRegistered": "Staking key registered", "wallet.transaction.withdraw": "Withdraw", "wallet.transaction.withdrawalsLabel": "Withdrawals", + "wallet.transactions.success.button.exchange": "Go to the exchange page", + "wallet.transactions.success.sell": "!!!Transaction has been submitted", "wallet.transfer.deregister.deregister": "Deregister", "wallet.transfer.deregister.keep": "Keep registered", "wallet.transfer.deregister.line1": "When withdrawing rewards, you also have the option to deregister the staking key", From 5eafedf03b84a12036b602e9a3dfa37f7d099948 Mon Sep 17 00:00:00 2001 From: yushi Date: Mon, 10 Jun 2024 21:07:23 +0800 Subject: [PATCH 105/464] change button text to buy/sell --- .../yoroi-extension/app/components/topbar/BuySellAdaButton.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/components/topbar/BuySellAdaButton.js b/packages/yoroi-extension/app/components/topbar/BuySellAdaButton.js index 3ed4b7bbb2..726e07719d 100644 --- a/packages/yoroi-extension/app/components/topbar/BuySellAdaButton.js +++ b/packages/yoroi-extension/app/components/topbar/BuySellAdaButton.js @@ -46,7 +46,7 @@ class BuySellAdaButton extends Component { variant="secondary" onClick={() => this.props.onBuySellClick()} > - {intl.formatMessage(globalMessages.buyAda)} + {intl.formatMessage(globalMessages.buySellAda)} ); From c47bc3caf09509de11f56b49445051156026cf14 Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Tue, 11 Jun 2024 11:04:08 +0700 Subject: [PATCH 106/464] fix styles and refactor chart and texts --- packages/yoroi-extension/.d.ts | 2 + .../app/UI/components/Card.tsx | 5 +- .../app/UI/components/Chip.tsx | 3 +- .../app/UI/components/Input/SearchInput.tsx | 59 +++++++++---------- .../app/UI/components/Skeleton.tsx | 13 +--- .../app/UI/components/Tooltip.tsx | 34 +++++------ .../app/UI/components/buttons/CopyButton.tsx | 1 - .../common/components/NavigationButton.tsx | 44 +++++++------- .../common/components/PortfolioHeader.tsx | 9 ++- .../common/components/PortfolioMenu.tsx | 5 +- .../common/components/SortableTableHead.tsx | 3 +- .../portfolio/common/components/Table.tsx | 1 - .../common/components/TextPrimitives.tsx | 7 --- .../portfolio/common/helpers/mockHelper.ts | 2 - .../common/helpers/transactionHelper.ts | 1 - .../portfolio/common/hooks/useChart.tsx | 8 +-- .../portfolio/common/hooks/useNavigateTo.ts | 1 - .../portfolio/common/hooks/useStrings.ts | 1 - .../portfolio/common/hooks/useTableSort.ts | 1 - .../UI/features/portfolio/common/mockData.ts | 1 - .../features/portfolio/common/types/chart.ts | 1 - .../features/portfolio/common/types/index.ts | 1 - .../features/portfolio/common/types/table.ts | 1 - .../portfolio/common/types/transaction.ts | 1 - .../module/PortfolioContextProvider.tsx | 1 - .../app/UI/features/portfolio/module/state.ts | 1 - .../useCases/Dapps/LendAndBorrow.tsx | 1 - .../useCases/Dapps/LiquidityTable.tsx | 1 - .../portfolio/useCases/Dapps/OrderTable.tsx | 1 - .../useCases/Dapps/PortfolioDapps.tsx | 9 ++- .../TokenDetails/TokenDetailChart.tsx | 8 +-- .../TokenDetails/TokenDetailOverview.tsx | 1 - .../TokenDetails/TokenDetailPerformance.tsx | 1 - .../useCases/TokenDetails/TokenDetails.tsx | 4 +- .../TokenDetails/TransactionTable.tsx | 1 - .../useCases/Wallet/PortfolioWallet.tsx | 3 +- .../portfolio/useCases/Wallet/StatsTable.tsx | 11 ++-- .../UI/pages/portfolio/PortfolioDappsPage.tsx | 1 - .../pages/portfolio/PortfolioDetailPage.tsx | 1 - .../app/UI/pages/portfolio/PortfolioPage.tsx | 1 - 40 files changed, 102 insertions(+), 149 deletions(-) delete mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/components/TextPrimitives.tsx diff --git a/packages/yoroi-extension/.d.ts b/packages/yoroi-extension/.d.ts index 3e8b423a8e..768957e549 100644 --- a/packages/yoroi-extension/.d.ts +++ b/packages/yoroi-extension/.d.ts @@ -8,3 +8,5 @@ declare module '*.png'; declare module '*.svg'; declare module '*.jpeg'; declare module '*.jpg'; + +declare module 'recharts'; diff --git a/packages/yoroi-extension/app/UI/components/Card.tsx b/packages/yoroi-extension/app/UI/components/Card.tsx index d0e7c5631d..85cf6f780c 100644 --- a/packages/yoroi-extension/app/UI/components/Card.tsx +++ b/packages/yoroi-extension/app/UI/components/Card.tsx @@ -1,9 +1,8 @@ -// @flow import React from 'react'; import { Box, styled } from '@mui/material'; -const StyledCard = styled(Box)(({ theme }: { theme: any }) => ({ - borderRadius: '8px', +const StyledCard = styled(Box)(({ theme }: any) => ({ + borderRadius: `${theme.shape.borderRadius}px`, flex: '1 1 100%', display: 'flex', flexDirection: 'column', diff --git a/packages/yoroi-extension/app/UI/components/Chip.tsx b/packages/yoroi-extension/app/UI/components/Chip.tsx index 38c0294137..07cea8b7fd 100644 --- a/packages/yoroi-extension/app/UI/components/Chip.tsx +++ b/packages/yoroi-extension/app/UI/components/Chip.tsx @@ -1,11 +1,10 @@ -// @flow import React from 'react'; import { Chip as MuiChip } from '@mui/material'; interface Props { label: string; active: boolean; - sx: any; + sx?: any; } export const Chip = ({ label, active, sx, ...props }: Props): JSX.Element => { diff --git a/packages/yoroi-extension/app/UI/components/Input/SearchInput.tsx b/packages/yoroi-extension/app/UI/components/Input/SearchInput.tsx index 22397455ad..375bbb92aa 100644 --- a/packages/yoroi-extension/app/UI/components/Input/SearchInput.tsx +++ b/packages/yoroi-extension/app/UI/components/Input/SearchInput.tsx @@ -1,34 +1,9 @@ -// @flow import React from 'react'; -import { Input, InputAdornment, styled } from '@mui/material'; +import { Input, InputAdornment, InputProps } from '@mui/material'; import { useRef } from 'react'; -import { useTheme } from '@mui/material/styles'; import { Icon } from './../icons/index'; -const StyledInput = styled(Input)(({ theme }: { theme: any }) => ({ - borderRadius: `${theme.shape.borderRadius}px`, - width: '320px', - height: '40px', - padding: `${theme.spacing(1)} ${theme.spacing(2)} ${theme.spacing(1)} ${theme.spacing(1)}`, - border: '1px solid', - borderColor: theme.palette.ds.gray_c400, - 'input::placeholder': { - color: theme.palette.ds.gray_c600, - }, -})); - -const StyledInputAdornment = styled(InputAdornment)(({ theme }: { theme: any }) => ({ - '&:hover': { - cursor: 'pointer', - }, - - '& > svg > use': { - fill: theme.palette.ds.gray_c900, - }, -})); - -export const SearchInput = props => { - const theme = useTheme(); +export const SearchInput = (props: InputProps) => { const ref = useRef(null); const focusInput = () => { @@ -38,14 +13,38 @@ export const SearchInput = props => { }; return ( - + ({ + '&:hover': { + cursor: 'pointer', + }, + + '& > svg > g > use': { + fill: theme.palette.ds.gray_c900, + }, + })} + > - + } + sx={(theme: any) => ({ + borderRadius: `${theme.shape.borderRadius}px`, + width: '320px', + height: '40px', + padding: `${theme.spacing(1)} ${theme.spacing(2)} ${theme.spacing(1)} ${theme.spacing(1)}`, + border: '1px solid', + borderColor: theme.palette.ds.gray_c400, + 'input::placeholder': { + color: theme.palette.ds.gray_c600, + }, + ...props.sx, + })} {...props} /> ); diff --git a/packages/yoroi-extension/app/UI/components/Skeleton.tsx b/packages/yoroi-extension/app/UI/components/Skeleton.tsx index 328efb54fd..6fdfc22ba5 100644 --- a/packages/yoroi-extension/app/UI/components/Skeleton.tsx +++ b/packages/yoroi-extension/app/UI/components/Skeleton.tsx @@ -1,14 +1,7 @@ -// @flow import React from 'react'; -import { Skeleton as MuiSkeleton } from '@mui/material'; +import { Skeleton as MuiSkeleton, SkeletonProps } from '@mui/material'; -interface Props { - width: string; - height: string; - sx?: any; -} - -export const Skeleton = ({ width, height, sx, ...props }: Props): JSX.Element => { +export const Skeleton = ({ width, height, ...props }: SkeletonProps): JSX.Element => { return ( borderRadius: `${theme.shape.borderRadius}px`, backgroundColor: theme.palette.ds.gray_c100, opacity: 0.8, - ...sx, + ...props.sx, })} /> ); diff --git a/packages/yoroi-extension/app/UI/components/Tooltip.tsx b/packages/yoroi-extension/app/UI/components/Tooltip.tsx index 603397603b..e7cdb9c9c2 100644 --- a/packages/yoroi-extension/app/UI/components/Tooltip.tsx +++ b/packages/yoroi-extension/app/UI/components/Tooltip.tsx @@ -1,26 +1,24 @@ -// @flow import React from 'react'; -import { styled } from '@mui/material'; import { default as MuiTooltip, TooltipProps, tooltipClasses } from '@mui/material/Tooltip'; -import { useTheme } from '@mui/material/styles'; - -const StyledTooltip = styled(({ className, ...props }: TooltipProps) => ( - -))(({ theme }: { theme: any }) => ({ - color: theme.palette.ds.text_primary_on, - [`& .${tooltipClasses.arrow}`]: { - color: theme.palette.ds.gray_c900, - }, - [`& .${tooltipClasses.tooltip}`]: { - backgroundColor: theme.palette.ds.gray_c900, - }, -})); export const Tooltip = ({ children, ...props }: TooltipProps): JSX.Element => { - const theme = useTheme(); return ( - + ({ + color: theme.palette.ds.text_primary_on, + [`& .${tooltipClasses.arrow}`]: { + color: theme.palette.ds.gray_c900, + }, + [`& .${tooltipClasses.tooltip}`]: { + backgroundColor: theme.palette.ds.gray_c900, + }, + ...props.sx, + })} + {...props} + > {children} - + ); }; diff --git a/packages/yoroi-extension/app/UI/components/buttons/CopyButton.tsx b/packages/yoroi-extension/app/UI/components/buttons/CopyButton.tsx index 2fe88af9d6..a781df9c23 100644 --- a/packages/yoroi-extension/app/UI/components/buttons/CopyButton.tsx +++ b/packages/yoroi-extension/app/UI/components/buttons/CopyButton.tsx @@ -1,4 +1,3 @@ -// @flow import React, { useState } from 'react'; import { IconButton } from '@mui/material'; import { CopyToClipboard } from 'react-copy-to-clipboard'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/components/NavigationButton.tsx b/packages/yoroi-extension/app/UI/features/portfolio/common/components/NavigationButton.tsx index ca2375ba4b..ab0cc0711a 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/components/NavigationButton.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/components/NavigationButton.tsx @@ -1,30 +1,32 @@ -// @ts-nocheck import React from 'react'; -import { Button, Typography, styled } from '@mui/material'; +import { Button, Typography } from '@mui/material'; -const StyledButton = styled(Button)(({ theme }: any) => ({ - maxHeight: '40px', - minWidth: '140.25px', - - '&.MuiButton-contained': { - backgroundColor: theme.palette.ds.el_primary_medium, - color: theme.palette.ds.el_static_white, +const NavigationButton = ({ label, ...props }) => { + return ( + ); }; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioHeader.tsx b/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioHeader.tsx index 388795a11e..d3f6b1b936 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioHeader.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioHeader.tsx @@ -1,17 +1,15 @@ -// @flow import React, { useState } from 'react'; -import { Stack } from '@mui/material'; +import { Stack, Typography } from '@mui/material'; import { useTheme } from '@mui/material/styles'; import { useStrings } from '../hooks/useStrings'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import { Icon } from '../../../../components/icons'; import { SearchInput, Tooltip, Chip, Skeleton } from '../../../../components'; import { BalanceType } from '../types/index'; -import Typography from './TextPrimitives'; interface Props { balance: BalanceType; - setKeyword: (string) => void; + setKeyword: (keyword: string) => void; isLoading: boolean; tooltipTitle: JSX.Element; } @@ -87,7 +85,7 @@ const PortfolioHeader = ({ balance, setKeyword, isLoading, tooltipTitle }: Props ) : ( )} - + {/* @ts-ignore */} {balance.percents >= 0 ? balance.percents : -1 * balance.percents}% @@ -97,6 +95,7 @@ const PortfolioHeader = ({ balance, setKeyword, isLoading, tooltipTitle }: Props = 0} label={ + // @ts-ignore {balance.amount >= 0 && '+'} {balance.amount} USD diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.tsx b/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.tsx index 8b38370c6b..29117c6f66 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.tsx @@ -1,4 +1,3 @@ -// @flow import React from 'react'; import SubMenu from '../../../../../components/topbar/SubMenu'; import { ROUTES } from '../../../../../routes-config'; @@ -12,8 +11,8 @@ interface SubMenuOption { } interface Props { - onItemClick: (string) => void; - isActiveItem: (string) => boolean; + onItemClick: (itemId: string) => void; + isActiveItem: (itemId: string) => boolean; } const PortfolioMenu = ({ onItemClick, isActiveItem }: Props): JSX.Element => { diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/components/SortableTableHead.tsx b/packages/yoroi-extension/app/UI/features/portfolio/common/components/SortableTableHead.tsx index a0d95b8639..abfc98dbf7 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/components/SortableTableHead.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/components/SortableTableHead.tsx @@ -1,5 +1,3 @@ -// @flow -// @ts-nocheck import React from 'react'; import { TableHead, TableRow, TableCell, Stack, Typography } from '@mui/material'; import { Icon } from '../../../../components/icons'; @@ -22,6 +20,7 @@ const SortableTableHead = ({ headCells, order, orderBy, onRequestSort }: Props): {headCells.map(({ label, align, id, isPadding, disabledSort }) => { return ( + {/* @ts-ignore */} {children}; - -export default Typography; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/helpers/mockHelper.ts b/packages/yoroi-extension/app/UI/features/portfolio/common/helpers/mockHelper.ts index 3b92fb45c6..d24a8905b2 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/helpers/mockHelper.ts +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/helpers/mockHelper.ts @@ -1,5 +1,3 @@ -// @flow - // CONSTANTS export const now = new Date(); export const start24HoursAgo: number = new Date(now.getTime() - 24 * 60 * 60 * 1000).getTime(); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/helpers/transactionHelper.ts b/packages/yoroi-extension/app/UI/features/portfolio/common/helpers/transactionHelper.ts index a4250872bc..a84f6db8c9 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/helpers/transactionHelper.ts +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/helpers/transactionHelper.ts @@ -1,4 +1,3 @@ -// @flow import { HistoryItemStatus, HistoryItemType } from '../types/transaction'; export const mapStrings = (arr: any[], strings: any) => diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useChart.tsx b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useChart.tsx index ad53dc35e8..3ddb4a921c 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useChart.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useChart.tsx @@ -1,16 +1,14 @@ -// @flow +// @flow import React, { useState } from 'react'; import { useStrings } from './useStrings'; import { useTheme } from '@mui/material/styles'; import { Box } from '@mui/material'; import moment from 'moment'; import { IPeriodButtonProps, IChartData } from '../types/chart'; -import { LineChartProps } from 'recharts'; const useChart = (data: IChartData | undefined) => { const strings = useStrings(); const theme: any = useTheme(); - const [periodButtonProps, setPeriodButtonProps] = useState([ { id: 'start24HoursAgo', label: strings['24H'], active: true }, { id: 'start1WeekAgo', label: strings['1W'], active: false }, @@ -133,7 +131,7 @@ const useChart = (data: IChartData | undefined) => { }); }; - const handleMouseMove = (props: LineChartProps) => { + const handleMouseMove = (props: any) => { if (!isDragging) return; if (!props.isTooltipActive) { @@ -151,7 +149,7 @@ const useChart = (data: IChartData | undefined) => { }); }; - const handleMouseDown = (props: LineChartProps) => { + const handleMouseDown = (props: any) => { if (!props || !props.activePayload || props.activePayload.length <= 0) return; const value = props.activePayload[0].payload.value; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useNavigateTo.ts b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useNavigateTo.ts index 077b059c98..4e45dceb31 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useNavigateTo.ts +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useNavigateTo.ts @@ -1,4 +1,3 @@ -// @flow import { useHistory } from 'react-router-dom'; import React from 'react'; import { ROUTES } from '../../../../../routes-config'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.ts b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.ts index b6805a4e18..1b6667482e 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.ts +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useStrings.ts @@ -1,4 +1,3 @@ -// @flow import React from 'react'; import { defineMessages } from 'react-intl'; import { useIntl } from '../../../../context/IntlProvider'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useTableSort.ts b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useTableSort.ts index 4853662f45..e2ddee1a76 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useTableSort.ts +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useTableSort.ts @@ -1,4 +1,3 @@ -// @flow import { useCallback } from 'react'; import { IHeadCell } from '../types/index'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.ts b/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.ts index d19d7c6e3d..32eefeee78 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.ts +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/mockData.ts @@ -1,4 +1,3 @@ -// @flow import { createChartData, getRandomTime, start1WeekAgo, start24HoursAgo } from './helpers/mockHelper'; import { HistoryItemStatus, HistoryItemType } from './types/transaction'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/types/chart.ts b/packages/yoroi-extension/app/UI/features/portfolio/common/types/chart.ts index 4c62583617..9a3332b52e 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/types/chart.ts +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/types/chart.ts @@ -1,4 +1,3 @@ -// @flow export interface IPeriodButtonProps { id: string; label: string; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/types/index.ts b/packages/yoroi-extension/app/UI/features/portfolio/common/types/index.ts index 3a96aeaa99..8f596b294c 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/types/index.ts +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/types/index.ts @@ -1,4 +1,3 @@ -// @flow import { IChartData } from './chart'; export * from './table'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/types/table.ts b/packages/yoroi-extension/app/UI/features/portfolio/common/types/table.ts index bbccabcdad..6b05fb2d26 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/types/table.ts +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/types/table.ts @@ -1,7 +1,6 @@ import { TableCellProps } from '@mui/material'; import { TableSortType } from '../hooks/useTableSort'; -// @flow export interface IHeadCell { id: string; label: string; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/types/transaction.ts b/packages/yoroi-extension/app/UI/features/portfolio/common/types/transaction.ts index eb39b37faa..d658fffe36 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/types/transaction.ts +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/types/transaction.ts @@ -1,4 +1,3 @@ -// @flow export const HistoryItemType = Object.freeze({ SENT: 1, RECEIVED: 2, diff --git a/packages/yoroi-extension/app/UI/features/portfolio/module/PortfolioContextProvider.tsx b/packages/yoroi-extension/app/UI/features/portfolio/module/PortfolioContextProvider.tsx index b9ecce38e7..beec93c990 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/module/PortfolioContextProvider.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/module/PortfolioContextProvider.tsx @@ -1,4 +1,3 @@ -// flow import * as React from 'react'; import { PortfolioActionType, PortfolioReducer, defaultPortfolioActions, defaultPortfolioState, CurrencyType } from './state'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/module/state.ts b/packages/yoroi-extension/app/UI/features/portfolio/module/state.ts index 0f09f6c9e2..fb6ea3762b 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/module/state.ts +++ b/packages/yoroi-extension/app/UI/features/portfolio/module/state.ts @@ -1,4 +1,3 @@ -// @flow import { produce } from 'immer'; export type CurrencyType = 'ADA' | 'USD' | 'BRL' | 'ETH' | 'BTC' | 'KRW' | 'CNY' | 'EUR' | 'JPY' | null; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.tsx b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.tsx index 0389520e7a..3712d52fcc 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LendAndBorrow.tsx @@ -1,4 +1,3 @@ -// @flow import React from 'react'; import { Box, Stack, Typography } from '@mui/material'; import { useTheme } from '@mui/material'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.tsx b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.tsx index 1975ed69dd..789f4f6311 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/LiquidityTable.tsx @@ -1,4 +1,3 @@ -// @flow import React from 'react'; import { useMemo, useState } from 'react'; import { TableCell, TableRow, Typography, Stack, Box } from '@mui/material'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.tsx b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.tsx index ae013e0665..2ba381d137 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.tsx @@ -1,4 +1,3 @@ -// @flow import React, { useMemo, useState } from 'react'; import { TableCell, TableRow, Typography, Stack, Box } from '@mui/material'; import { useTheme } from '@mui/material/styles'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.tsx b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.tsx index 47fdf64de4..a3b741c0e7 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.tsx @@ -1,5 +1,4 @@ -// @flow -import { Stack, Button, styled } from '@mui/material'; +import { Stack, Button, styled, Typography } from '@mui/material'; import React, { useEffect, useState } from 'react'; import { useTheme } from '@mui/material/styles'; import LiquidityTable from './LiquidityTable'; @@ -9,7 +8,6 @@ import LendAndBorrow from './LendAndBorrow'; import { useStrings } from '../../common/hooks/useStrings'; import PortfolioHeader from '../../common/components/PortfolioHeader'; import { LiquidityItemType, OrderItemType } from '../../common/types/index'; -import Typography from '../../common/components/TextPrimitives'; const StyledButton = styled(Button)(({ theme }: any) => ({ height: '40px', @@ -36,7 +34,7 @@ interface Props { const PortfolioDapps = ({ data }: Props) => { const theme: any = useTheme(); const strings = useStrings(); - const [keyword, setKeyword] = useState(); + const [keyword, setKeyword] = useState(''); const [isLoading, setIsLoading] = useState(false); const [liquidityList, setLiquidlityList] = useState(data.liquidityList); const [orderList, setOrderList] = useState(data.orderList); @@ -88,7 +86,7 @@ const PortfolioDapps = ({ data }: Props) => { } }, [keyword]); - const handleChangeTab = id => { + const handleChangeTab = (id: number) => { const temp = buttonProps.map(prop => { if (prop.id === id) return { @@ -127,6 +125,7 @@ const PortfolioDapps = ({ data }: Props) => { onClick={() => handleChangeTab(button.id)} sx={{ backgroundColor: button.active ? theme.palette.ds.gray_c200 : 'transparent' }} > + {/* @ts-ignore */} {button.label} ( {button.id === TableTabs.LIQUIDITY diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.tsx b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.tsx index 55259bd24d..770d924c88 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.tsx @@ -1,5 +1,4 @@ -// @flow -import { Box, Button, Stack, styled } from '@mui/material'; +import { Box, Button, Stack, Typography, styled } from '@mui/material'; import React from 'react'; import { LineChart, Line, CartesianGrid, YAxis, ResponsiveContainer, Tooltip as RechartTooltip } from 'recharts'; import { useTheme } from '@mui/material/styles'; @@ -10,7 +9,6 @@ import { usePortfolio } from '../../module/PortfolioContextProvider'; import { Icon } from '../../../../components/icons'; import useChart from '../../common/hooks/useChart'; import { TokenType } from '../../common/types/index'; -import Typography from '../../common/components/TextPrimitives'; import mockData from '../../common/mockData'; const StyledButton = styled(Button)(({ theme, disabled, variant }: { theme: any; disabled: boolean; variant: string }) => ({ @@ -71,6 +69,7 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }: Props): JSX.Element = ) : ( {detailInfo.fiatValue} + {/* @ts-ignore */}  {unitOfAccount} @@ -98,7 +97,7 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }: Props): JSX.Element = ) : ( )} - + {/* @ts-ignore */} {detailInfo.value >= 0 ? detailInfo.value : -1 * detailInfo.value}% @@ -113,6 +112,7 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }: Props): JSX.Element = = 0} label={ + // @ts-ignore {detailInfo.fiatValue >= 0 && '+'} {detailInfo.fiatValue} {unitOfAccount} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.tsx b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.tsx index fa363d6ccd..6d517d0114 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailOverview.tsx @@ -1,4 +1,3 @@ -// @flow import React from 'react'; import { Stack, Box, Typography, Link } from '@mui/material'; import { Skeleton } from '../../../../components/Skeleton'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.tsx b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.tsx index be14344459..8fbb818ca1 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.tsx @@ -1,4 +1,3 @@ -// @flow import React from 'react'; import { Box, Stack, Typography } from '@mui/material'; import { useTheme } from '@mui/material/styles'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.tsx b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.tsx index b5518cd5c5..eb20d6f98f 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.tsx @@ -1,6 +1,5 @@ -// @flow import React, { useEffect, useState } from 'react'; -import { Box, Button, Divider, Stack } from '@mui/material'; +import { Box, Button, Divider, Stack, Typography } from '@mui/material'; import { ReactComponent as BackIcon } from '../../../../../assets/images/assets-page/back-arrow.inline.svg'; import { styled } from '@mui/material/styles'; import { Skeleton, Card } from '../../../../components'; @@ -14,7 +13,6 @@ import TokenDetailPerformance from './TokenDetailPerformance'; import TokenDetailOverview from './TokenDetailOverview'; import { usePortfolio } from '../../module/PortfolioContextProvider'; import { TokenType } from '../../common/types/index'; -import Typography from '../../common/components/TextPrimitives'; import NavigationButton from '../../common/components/NavigationButton'; const Header = styled(Box)({ diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.tsx b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.tsx index d4f5eb9178..93b49e8b80 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.tsx @@ -1,4 +1,3 @@ -// @flow import React, { Fragment, useMemo, useState } from 'react'; import { Box, Stack, Typography, IconButton, Table, TableCell, TableHead, TableBody, TableRow, styled } from '@mui/material'; import { useTheme } from '@mui/material/styles'; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.tsx b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.tsx index 8d9f901c56..a0f3d2b77d 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.tsx @@ -1,4 +1,3 @@ -// @flow import { Typography, Stack } from '@mui/material'; import React, { useEffect, useState } from 'react'; import { useTheme } from '@mui/material/styles'; @@ -15,7 +14,7 @@ interface Props { const PortfolioWallet = ({ data }: Props): JSX.Element => { const theme = useTheme(); const strings = useStrings(); - const [keyword, setKeyword] = useState(); + const [keyword, setKeyword] = useState(''); const [isLoading, setIsLoading] = useState(false); const [tokenList, setTokenList] = useState(data); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.tsx b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.tsx index d7bd3bb333..42cb485d31 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.tsx @@ -1,4 +1,3 @@ -// @flow import React from 'react'; import { useMemo, useState } from 'react'; import { TableCell, TableRow, Typography, Stack, Box } from '@mui/material'; @@ -162,8 +161,8 @@ const StatsTable = ({ data, isLoading }: Props): JSX.Element => { ) : ( )} - - {row['24h'] >= 0 ? row['24h'] : -1 * row['24h']}% + {/* @ts-ignore */} + {row['24h'] >= 0 ? row['24h'] : -1 * row['24h']}% } sx={{ cursor: 'pointer' }} @@ -180,7 +179,8 @@ const StatsTable = ({ data, isLoading }: Props): JSX.Element => { ) : ( )} - {row['1W'] >= 0 ? row['1W'] : -1 * row['1W']}% + {/* @ts-ignore */} + {row['1W'] >= 0 ? row['1W'] : -1 * row['1W']}% } sx={{ cursor: 'pointer' }} @@ -197,7 +197,8 @@ const StatsTable = ({ data, isLoading }: Props): JSX.Element => { ) : ( )} - {row['1M'] >= 0 ? row['1M'] : -1 * row['1M']}% + {/* @ts-ignore */} + {row['1M'] >= 0 ? row['1M'] : -1 * row['1M']}% } sx={{ cursor: 'pointer' }} diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDappsPage.tsx b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDappsPage.tsx index db85aa6250..4895722267 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDappsPage.tsx +++ b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDappsPage.tsx @@ -1,4 +1,3 @@ -// @flow import React from 'react'; import PortfolioDapps from '../../features/portfolio/useCases/Dapps/PortfolioDapps'; import mockData from '../../features/portfolio/common/mockData'; diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.tsx b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.tsx index b2327191a8..e5e664850c 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.tsx +++ b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioDetailPage.tsx @@ -1,4 +1,3 @@ -// @flow import React from 'react'; import mockData from '../../features/portfolio/common/mockData'; import PortfolioLayout from './layout'; diff --git a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.tsx b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.tsx index 14ec968fc9..d5ba755b11 100644 --- a/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.tsx +++ b/packages/yoroi-extension/app/UI/pages/portfolio/PortfolioPage.tsx @@ -1,4 +1,3 @@ -// @flow import React from 'react'; import PortfolioWallet from '../../features/portfolio/useCases/Wallet/PortfolioWallet'; import mockData from '../../features/portfolio/common/mockData'; From dec215971248fe3191e13694712f25a96539659f Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Tue, 11 Jun 2024 12:36:04 +0700 Subject: [PATCH 107/464] updated types --- .../common/components/NavigationButton.tsx | 13 +- .../portfolio/common/hooks/useChart.tsx | 3 +- .../portfolio/common/hooks/useTableSort.ts | 4 +- .../UI/features/portfolio/common/mockData.ts | 201 +++++++++--------- .../features/portfolio/common/types/index.ts | 4 - .../features/portfolio/common/types/table.ts | 3 +- .../portfolio/common/types/transaction.ts | 16 +- .../TokenDetails/TokenDetailChart.tsx | 5 +- .../TokenDetails/TokenDetailOverview.tsx | 2 +- .../TokenDetails/TokenDetailPerformance.tsx | 2 +- .../useCases/TokenDetails/TokenDetails.tsx | 7 +- .../TokenDetails/TransactionTable.tsx | 10 +- .../pages/portfolio/PortfolioDetailPage.tsx | 5 +- 13 files changed, 140 insertions(+), 135 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/components/NavigationButton.tsx b/packages/yoroi-extension/app/UI/features/portfolio/common/components/NavigationButton.tsx index ab0cc0711a..90cdfda6af 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/components/NavigationButton.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/components/NavigationButton.tsx @@ -1,9 +1,18 @@ import React from 'react'; import { Button, Typography } from '@mui/material'; -const NavigationButton = ({ label, ...props }) => { +interface Props { + label: string; + onClick: () => void; + variant: any; + sx?: any; +} + +const NavigationButton = ({ label, onClick, variant, sx, ...props }: Props) => { return ( +
navigateTo.swapPage()} label={strings.swap} /> navigateTo.sendPage()} label={strings.send} /> diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.tsx b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.tsx index 525397cda1..fc535c9ea1 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/PortfolioWallet.tsx @@ -63,9 +63,15 @@ const PortfolioWallet = ({ data }: Props): JSX.Element => { isLoading={isLoading} tooltipTitle={ <> - % {strings.balancePerformance} - +/- {strings.balanceChange} - {strings.in24hours} + + % {strings.balancePerformance} + + + +/- {strings.balanceChange} + + + {strings.in24hours} + } /> diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.tsx b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.tsx index 44e2ffb806..5e4ca18284 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Wallet/StatsTable.tsx @@ -1,242 +1,242 @@ -import React from 'react'; -import { useMemo, useState } from 'react'; -import { TableCell, TableRow, Typography, Stack, Box } from '@mui/material'; -import { useTheme } from '@mui/material/styles'; -import tokenPng from '../../common/assets/images/token.png'; -import { usePortfolio } from '../../module/PortfolioContextProvider'; -import { Chip, Skeleton } from '../../../../components'; -import { Icon } from '../../../../components/icons'; -import { useNavigateTo } from '../../common/hooks/useNavigateTo'; -import { useStrings } from '../../common/hooks/useStrings'; -import useTableSort, { ISortState } from '../../common/hooks/useTableSort'; -import Table from '../../common/components/Table'; -import { IHeadCell } from '../../common/types/table'; -import { TokenType } from '../../common/types/index'; -import { ChipTypes } from '../../../../components/Chip'; -import { formatNumber } from '../../common/helpers/formatHelper'; - -const TableRowSkeleton = ({ theme, ...props }) => ( - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -); - -interface Props { - data: TokenType[]; - isLoading: boolean; -} - -const StatsTable = ({ data, isLoading }: Props): JSX.Element => { - const theme: any = useTheme(); - const navigateTo = useNavigateTo(); - const strings = useStrings(); - const { unitOfAccount } = usePortfolio(); - const [{ order, orderBy }, setSortState] = useState({ - order: null, - orderBy: null, - }); - const list = useMemo(() => [...data], [data]); - - const headCells: IHeadCell[] = [ - { id: 'name', label: strings.name, align: 'left', sortType: 'character' }, - { id: 'price', label: strings.price, align: 'left', sortType: 'numeric' }, - { id: '24h', label: strings['24H'], align: 'left', sortType: 'numeric' }, - { id: '1W', label: strings['1W'], align: 'left', sortType: 'numeric' }, - { id: '1M', label: strings['1M'], align: 'left', sortType: 'numeric' }, - { - id: 'portfolioPercents', - label: `${strings.portfolio} %`, - align: 'left', - sortType: 'numeric', - }, - { - id: 'totalAmount', - label: strings.totalAmount, - align: 'right', - sortType: 'numeric', - }, - ]; - const { getSortedData, handleRequestSort } = useTableSort({ order, orderBy, setSortState, headCells, data }); - - return ( - } - > - {getSortedData(list).map((row: TokenType) => ( - navigateTo.portfolioDetail(row.id)} - sx={{ - cursor: 'pointer', - transition: 'all 0.3s ease-in-out', - borderRadius: `${theme.shape.borderRadius}px`, - '& td': { border: 0 }, - '&:hover': { - backgroundColor: theme.palette.ds.gray_c50, - }, - }} - > - - - - - - {row.name} - - - {row.id} - - - - - - - - {formatNumber(row.price)} USD - - - - - 0 ? ChipTypes.ACTIVE : row['24h'] < 0 ? ChipTypes.INACTIVE : ChipTypes.DISABLED} - label={ - - {row['24h'] > 0 ? ( - - ) : row['24h'] < 0 ? ( - - ) : null} - {/* @ts-ignore */} - - {row['24h'] >= 0 ? formatNumber(row['24h']) : formatNumber(-1 * row['24h'])}% - - - } - sx={{ cursor: 'pointer' }} - /> - - - - 0 ? ChipTypes.ACTIVE : row['1W'] < 0 ? ChipTypes.INACTIVE : ChipTypes.DISABLED} - label={ - - {row['1W'] > 0 ? ( - - ) : row['1W'] < 0 ? ( - - ) : null} - {/* @ts-ignore */} - - {row['1W'] >= 0 ? formatNumber(row['1W']) : formatNumber(-1 * row['1W'])}% - - - } - sx={{ cursor: 'pointer' }} - /> - - - - 0 ? ChipTypes.ACTIVE : row['1M'] < 0 ? ChipTypes.INACTIVE : ChipTypes.DISABLED} - label={ - - {row['1M'] > 0 ? ( - - ) : row['1M'] < 0 ? ( - - ) : null} - {/* @ts-ignore */} - - {row['1M'] >= 0 ? formatNumber(row['1M']) : formatNumber(-1 * row['1M'])}% - - - } - sx={{ cursor: 'pointer' }} - /> - - - - - {formatNumber(row.portfolioPercents)} % - - - - - - - - {formatNumber(row.totalAmount)} {row.name} - - {row.name === 'ADA' && unitOfAccount === 'ADA' ? null : ( - - {formatNumber(row.totalAmountUsd)} {unitOfAccount} - - )} - - - - - ))} -
- ); -}; - -export default StatsTable; +import React from 'react'; +import { useMemo, useState } from 'react'; +import { TableCell, TableRow, Typography, Stack, Box } from '@mui/material'; +import { useTheme } from '@mui/material/styles'; +import tokenPng from '../../common/assets/images/token.png'; +import { usePortfolio } from '../../module/PortfolioContextProvider'; +import { Chip, Skeleton } from '../../../../components'; +import { Icon } from '../../../../components/icons'; +import { useNavigateTo } from '../../common/hooks/useNavigateTo'; +import { useStrings } from '../../common/hooks/useStrings'; +import useTableSort, { ISortState } from '../../common/hooks/useTableSort'; +import Table from '../../common/components/Table'; +import { IHeadCell } from '../../common/types/table'; +import { TokenType } from '../../common/types/index'; +import { ChipTypes } from '../../../../components/Chip'; +import { formatNumber } from '../../common/helpers/formatHelper'; + +const TableRowSkeleton = ({ theme, ...props }) => ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +); + +interface Props { + data: TokenType[]; + isLoading: boolean; +} + +const StatsTable = ({ data, isLoading }: Props): JSX.Element => { + const theme: any = useTheme(); + const navigateTo = useNavigateTo(); + const strings = useStrings(); + const { unitOfAccount } = usePortfolio(); + const [{ order, orderBy }, setSortState] = useState({ + order: null, + orderBy: null, + }); + const list = useMemo(() => [...data], [data]); + + const headCells: IHeadCell[] = [ + { id: 'name', label: strings.name, align: 'left', sortType: 'character' }, + { id: 'price', label: strings.price, align: 'left', sortType: 'numeric' }, + { id: '24h', label: strings['24H'], align: 'left', sortType: 'numeric' }, + { id: '1W', label: strings['1W'], align: 'left', sortType: 'numeric' }, + { id: '1M', label: strings['1M'], align: 'left', sortType: 'numeric' }, + { + id: 'portfolioPercents', + label: `${strings.portfolio} %`, + align: 'left', + sortType: 'numeric', + }, + { + id: 'totalAmount', + label: strings.totalAmount, + align: 'right', + sortType: 'numeric', + }, + ]; + const { getSortedData, handleRequestSort } = useTableSort({ order, orderBy, setSortState, headCells, data }); + + return ( + } + > + {getSortedData(list).map((row: TokenType) => ( + navigateTo.portfolioDetail(row.id)} + sx={{ + cursor: 'pointer', + transition: 'all 0.3s ease-in-out', + borderRadius: `${theme.shape.borderRadius}px`, + '& td': { border: 0 }, + '&:hover': { + backgroundColor: theme.palette.ds.gray_c50, + }, + }} + > + + + + + + {row.name} + + + {row.id} + + + + + + + + {formatNumber(row.price)} USD + + + + + 0 ? ChipTypes.ACTIVE : row['24h'] < 0 ? ChipTypes.INACTIVE : ChipTypes.DISABLED} + label={ + + {row['24h'] > 0 ? ( + + ) : row['24h'] < 0 ? ( + + ) : null} + {/* @ts-ignore */} + + {row['24h'] >= 0 ? formatNumber(row['24h']) : formatNumber(-1 * row['24h'])}% + + + } + sx={{ cursor: 'pointer' }} + /> + + + + 0 ? ChipTypes.ACTIVE : row['1W'] < 0 ? ChipTypes.INACTIVE : ChipTypes.DISABLED} + label={ + + {row['1W'] > 0 ? ( + + ) : row['1W'] < 0 ? ( + + ) : null} + {/* @ts-ignore */} + + {row['1W'] >= 0 ? formatNumber(row['1W']) : formatNumber(-1 * row['1W'])}% + + + } + sx={{ cursor: 'pointer' }} + /> + + + + 0 ? ChipTypes.ACTIVE : row['1M'] < 0 ? ChipTypes.INACTIVE : ChipTypes.DISABLED} + label={ + + {row['1M'] > 0 ? ( + + ) : row['1M'] < 0 ? ( + + ) : null} + {/* @ts-ignore */} + + {row['1M'] >= 0 ? formatNumber(row['1M']) : formatNumber(-1 * row['1M'])}% + + + } + sx={{ cursor: 'pointer' }} + /> + + + + + {formatNumber(row.portfolioPercents)} % + + + + + + + + {formatNumber(row.totalAmount)} {row.name} + + {row.name === 'ADA' && unitOfAccount === 'ADA' ? null : ( + + {formatNumber(row.totalAmountUsd)} {unitOfAccount} + + )} + + + + + ))} +
+ ); +}; + +export default StatsTable; From 6fcfc174a5ff6fd34d90b5e6f07baed6d7de5976 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Fri, 14 Jun 2024 15:39:11 +0300 Subject: [PATCH 147/464] fixes --- .../module/GovernanceContextProvider.tsx | 2 +- packages/yoroi-extension/package-lock.json | 8 +- packages/yoroi-extension/package.json | 2 +- packages/yoroi-extension/yarn.lock | 15129 ---------------- 4 files changed, 6 insertions(+), 15135 deletions(-) delete mode 100644 packages/yoroi-extension/yarn.lock diff --git a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx index c4f6a4f060..85b430dc04 100644 --- a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx @@ -52,7 +52,7 @@ export const GovernanceContextProvider = ({ children, currentWallet }: Governanc oldBackendUrl: String(backendService), newBackendUrl: String(backendService), networkId: networkId, - wasm: RustModule.CrossCsl.init('global'), + wasm: RustModule.CrossCsl.init, }); const governanceStatus = await govApi.getAccountState(skey, skey); diff --git a/packages/yoroi-extension/package-lock.json b/packages/yoroi-extension/package-lock.json index 0674cbabcf..1737b5ffc2 100644 --- a/packages/yoroi-extension/package-lock.json +++ b/packages/yoroi-extension/package-lock.json @@ -20,7 +20,7 @@ "@emurgo/cip4-js": "1.0.5", "@emurgo/cross-csl-browser": "4.4.0", "@emurgo/yoroi-eutxo-txs": "0.0.2-alpha.8", - "@emurgo/yoroi-lib": "0.15.5-alpha.8", + "@emurgo/yoroi-lib": "0.15.6-alpha.1", "@ledgerhq/hw-transport-u2f": "5.36.0-deprecated", "@ledgerhq/hw-transport-webauthn": "5.36.0-deprecated", "@ledgerhq/hw-transport-webhid": "5.51.1", @@ -2708,9 +2708,9 @@ } }, "node_modules/@emurgo/yoroi-lib": { - "version": "0.15.5-alpha.8", - "resolved": "https://registry.npmjs.org/@emurgo/yoroi-lib/-/yoroi-lib-0.15.5-alpha.8.tgz", - "integrity": "sha512-avc0cwttCgEgBMflxKK2Kaxw4IbErLa+ezlWWgJ4iGN0fgHYcpY335xXd2g+cQmsRKpPyhNWWqPXafo6e8lT8Q==", + "version": "0.15.6-alpha.1", + "resolved": "https://registry.npmjs.org/@emurgo/yoroi-lib/-/yoroi-lib-0.15.6-alpha.1.tgz", + "integrity": "sha512-uI3fjgVC17LZ5yRQsCWh6epYISSNdxG9N2rMtD6XsK4YfWFRQoGu9jaBHzKF69mskGYeB7KGyqnCaBGflQqWmA==", "dependencies": { "@cardano-foundation/ledgerjs-hw-app-cardano": "^6.0.0", "@emurgo/cross-csl-core": "4.4.0", diff --git a/packages/yoroi-extension/package.json b/packages/yoroi-extension/package.json index 52703198a7..9db2312544 100644 --- a/packages/yoroi-extension/package.json +++ b/packages/yoroi-extension/package.json @@ -153,7 +153,7 @@ "@emurgo/cip4-js": "1.0.5", "@emurgo/cross-csl-browser": "4.4.0", "@emurgo/yoroi-eutxo-txs": "0.0.2-alpha.8", - "@emurgo/yoroi-lib": "0.15.5-alpha.8", + "@emurgo/yoroi-lib": "0.15.6-alpha.1", "@ledgerhq/hw-transport-u2f": "5.36.0-deprecated", "@ledgerhq/hw-transport-webauthn": "5.36.0-deprecated", "@ledgerhq/hw-transport-webhid": "5.51.1", diff --git a/packages/yoroi-extension/yarn.lock b/packages/yoroi-extension/yarn.lock deleted file mode 100644 index 7281da2543..0000000000 --- a/packages/yoroi-extension/yarn.lock +++ /dev/null @@ -1,15129 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@amplitude/ampli@^1.32.0": - version "1.35.0" - resolved "https://registry.yarnpkg.com/@amplitude/ampli/-/ampli-1.35.0.tgz#1f41b62732abad4c3344defa5b4707535515dfae" - integrity sha512-5OzsJBMrlzWwyV+08Hjbox3H4ItH9zJUj5E821nUlTsrh5cJk/+0sMHAJvCMakCoQ/VJBKULI1CNa7JGKL62uQ== - dependencies: - "@amplitude/identify" "^1.10.0" - "@amplitude/node" "^1.10.0" - "@amplitude/types" "^1.10.0" - "@babel/parser" "^7.12.11" - "@babel/traverse" "^7.12.12" - "@oclif/command" "^1.6.1" - "@oclif/config" "^1.15.1" - "@oclif/errors" "^1.2.2" - "@oclif/parser" "^3.8.3" - "@oclif/plugin-autocomplete" "^0.3.0" - "@oclif/plugin-help" "^3.2.2" - "@oclif/plugin-update" "^1.3.10" - "@oclif/plugin-warn-if-update-available" "^1.7.0" - "@phenomnomnominal/tsquery" "^3.0.0" - "@sentry/node" "^6.2.5" - "@sentry/types" "^6.2.5" - "@types/debug" "^4.1.5" - "@types/inquirer" "^8.2.4" - ansi-regex "^5.0.1" - antlr4ts "^0.5.0-alpha.4" - chalk "^2.4.2" - client-oauth2 "^4.3.3" - conf "^6.2.0" - debug "^4.1.1" - dotenv "^8.2.0" - fs-extra "^8.1.0" - get-port "^5.0.0" - globby "^10.0.1" - graphql "^15.4.0" - graphql-request "^3.3.0" - graphql-tag "^2.11.0" - https-proxy-agent "^5.0.1" - ignore-walk "^3.0.3" - inquirer "^8.2.4" - inquirer-autocomplete-prompt "^2.0.0" - json5 "^2.1.1" - lodash "^4.17.21" - minimatch "^3.0.4" - node-fetch "^2.6.1" - open "^7.3.1" - ora "^4.1.1" - php-parser "^3.0.0-prerelease.8" - pkce-challenge "^2.2.0" - randomstring "^1.1.5" - rimraf "^3.0.2" - stoppable "^1.1.0" - tmp "^0.2.1" - tslib "^1.14.1" - typescript "^3.9.7" - uuid "^9.0.0" - vue-parser "^1.1.6" - -"@amplitude/analytics-browser@^2.1.3": - version "2.8.1" - resolved "https://registry.yarnpkg.com/@amplitude/analytics-browser/-/analytics-browser-2.8.1.tgz#e23ccc1bb36106ca437d3bad20883e97168f7ecf" - integrity sha512-gvCvGQUbHjrmQQma5qBDQo25TD/p+TCoWX20XfGJC0rR51MCWacbYQZ6CQrECXte7c6XNzc11hC6Kf50bO0Sxw== - dependencies: - "@amplitude/analytics-client-common" "^2.2.1" - "@amplitude/analytics-core" "^2.2.8" - "@amplitude/analytics-types" "^2.5.1" - "@amplitude/plugin-page-view-tracking-browser" "^2.2.13" - tslib "^2.4.1" - -"@amplitude/analytics-client-common@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@amplitude/analytics-client-common/-/analytics-client-common-2.2.1.tgz#83bff4c49046547d2efed8e8a154d12c8a338526" - integrity sha512-JXpLjKgP7LiBMZF5eMjtiPiSPW8FxvF4bHubDg26Ck2buBUQvrBq6D4VyOky0m1zG7WA4vOoLANu3sWfF02/7Q== - dependencies: - "@amplitude/analytics-connector" "^1.4.8" - "@amplitude/analytics-core" "^2.2.8" - "@amplitude/analytics-types" "^2.5.1" - tslib "^2.4.1" - -"@amplitude/analytics-connector@^1.4.8": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@amplitude/analytics-connector/-/analytics-connector-1.5.0.tgz#89a78b8c6463abe4de1d621db4af6c62f0d62b0a" - integrity sha512-T8mOYzB9RRxckzhL0NTHwdge9xuFxXEOplC8B1Y3UX3NHa3BLh7DlBUZlCOwQgMc2nxDfnSweDL5S3bhC+W90g== - -"@amplitude/analytics-core@^2.2.8": - version "2.2.8" - resolved "https://registry.yarnpkg.com/@amplitude/analytics-core/-/analytics-core-2.2.8.tgz#135d2a39c2af2826636212295712e571affd8e68" - integrity sha512-T4ZFk1LUD+4z02XMSWK4qPvMREUTgNtEoYQc6BvNyfOx1Ih21qyJLFcdSw05gL26JuuuYZWFkpHxxKm8IoZh8Q== - dependencies: - "@amplitude/analytics-types" "^2.5.1" - tslib "^2.4.1" - -"@amplitude/analytics-types@^2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@amplitude/analytics-types/-/analytics-types-2.5.1.tgz#ca14f4b4ed09bbf21ea5294a22eba5c197515167" - integrity sha512-xGuLiHRLv5z3RSAHiICjzHK4TjUZJ7aHr/jM0XhSgD/V1YdmG/s8y1UAWGI2Stsxm2x0DWNOyEpjYkGohlnXtA== - -"@amplitude/identify@^1.10.0", "@amplitude/identify@^1.10.2": - version "1.10.2" - resolved "https://registry.yarnpkg.com/@amplitude/identify/-/identify-1.10.2.tgz#25d88f9e3bedd99701c777b9e44408ac69179aa1" - integrity sha512-ywxeabS8ukMdJWNwx3rG/EBngXFg/4NsPhlyAxbBUcI7HzBXEJUKepiZfkz8K6Y7f0mpc23Qz1aBf48ZJDZmkQ== - dependencies: - "@amplitude/types" "^1.10.2" - "@amplitude/utils" "^1.10.2" - tslib "^2.0.0" - -"@amplitude/node@^1.10.0": - version "1.10.2" - resolved "https://registry.yarnpkg.com/@amplitude/node/-/node-1.10.2.tgz#79fb80e7228486521156eae510de998264e6620c" - integrity sha512-E3xp8DOpkF5ThjrRlAmSocnrEYsTPpd3Zg4WdBLms0ackQSgQpw6z84+YMcoPerZHJJ/LEqdo4Cg4Z5Za3D+3Q== - dependencies: - "@amplitude/identify" "^1.10.2" - "@amplitude/types" "^1.10.2" - "@amplitude/utils" "^1.10.2" - tslib "^2.0.0" - -"@amplitude/plugin-page-view-tracking-browser@^2.2.13": - version "2.2.13" - resolved "https://registry.yarnpkg.com/@amplitude/plugin-page-view-tracking-browser/-/plugin-page-view-tracking-browser-2.2.13.tgz#da799d259a86d83d5c0304a78d7feff7628e1fb6" - integrity sha512-EYvG4RTyNqIGlq3J+UnrTRRj75xp3nOSETeInPQbnHhiPaCzxTjWrb9URkzy2IYSyBSn4KEQkZegmzhWXxlvvw== - dependencies: - "@amplitude/analytics-client-common" "^2.2.1" - "@amplitude/analytics-types" "^2.5.1" - tslib "^2.4.1" - -"@amplitude/types@^1.10.0", "@amplitude/types@^1.10.2": - version "1.10.2" - resolved "https://registry.yarnpkg.com/@amplitude/types/-/types-1.10.2.tgz#8f3c6c3c9ee24f401ee037b351c3c67eb945eefc" - integrity sha512-I8qenRI7uU6wKNb9LiZrAosSHVoNHziXouKY81CrqxH9xhVTEIJFXeuCV0hbtBr0Al/8ejnGjQRx+S2SvU/pPg== - -"@amplitude/utils@^1.10.2": - version "1.10.2" - resolved "https://registry.yarnpkg.com/@amplitude/utils/-/utils-1.10.2.tgz#ce77dc8a54fcd3843511531cc7d56363247c7ad8" - integrity sha512-tVsHXu61jITEtRjB7NugQ5cVDd4QDzne8T3ifmZye7TiJeUfVRvqe44gDtf55A+7VqhDhyEIIXTA1iVcDGqlEw== - dependencies: - "@amplitude/types" "^1.10.2" - tslib "^2.0.0" - -"@ampproject/remapping@^2.2.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" - integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.24" - -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" - integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== - dependencies: - "@babel/highlight" "^7.24.7" - picocolors "^1.0.0" - -"@babel/compat-data@^7.12.13", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.7.tgz#d23bbea508c3883ba8251fb4164982c36ea577ed" - integrity sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw== - -"@babel/core@7.12.17": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.17.tgz#993c5e893333107a2815d8e0d73a2c3755e280b2" - integrity sha512-V3CuX1aBywbJvV2yzJScRxeiiw0v2KZZYYE3giywxzFJL13RiyPjaaDwhDnxmgFTTS7FgvM2ijr4QmKNIu0AtQ== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.12.17" - "@babel/helper-module-transforms" "^7.12.17" - "@babel/helpers" "^7.12.17" - "@babel/parser" "^7.12.17" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.12.17" - "@babel/types" "^7.12.17" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.19" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.7.5": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.7.tgz#b676450141e0b52a3d43bc91da86aa608f950ac4" - integrity sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.24.7" - "@babel/helper-compilation-targets" "^7.24.7" - "@babel/helper-module-transforms" "^7.24.7" - "@babel/helpers" "^7.24.7" - "@babel/parser" "^7.24.7" - "@babel/template" "^7.24.7" - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/generator@^7.12.17", "@babel/generator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.7.tgz#1654d01de20ad66b4b4d99c135471bc654c55e6d" - integrity sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA== - dependencies: - "@babel/types" "^7.24.7" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz#5373c7bc8366b12a033b4be1ac13a206c6656aab" - integrity sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg== - dependencies: - "@babel/types" "^7.24.7" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz#37d66feb012024f2422b762b9b2a7cfe27c7fba3" - integrity sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-compilation-targets@^7.12.17", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz#4eb6c4a80d6ffeac25ab8cd9a21b5dfa48d503a9" - integrity sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg== - dependencies: - "@babel/compat-data" "^7.24.7" - "@babel/helper-validator-option" "^7.24.7" - browserslist "^4.22.2" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-create-class-features-plugin@^7.12.13", "@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz#2eaed36b3a1c11c53bdf80d53838b293c52f5b3b" - integrity sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-function-name" "^7.24.7" - "@babel/helper-member-expression-to-functions" "^7.24.7" - "@babel/helper-optimise-call-expression" "^7.24.7" - "@babel/helper-replace-supers" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/helper-split-export-declaration" "^7.24.7" - semver "^6.3.1" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.7.tgz#be4f435a80dc2b053c76eeb4b7d16dd22cfc89da" - integrity sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - regexpu-core "^5.3.1" - semver "^6.3.1" - -"@babel/helper-define-polyfill-provider@^0.6.1", "@babel/helper-define-polyfill-provider@^0.6.2": - version "0.6.2" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" - integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== - dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - -"@babel/helper-environment-visitor@^7.18.9", "@babel/helper-environment-visitor@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz#4b31ba9551d1f90781ba83491dd59cf9b269f7d9" - integrity sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ== - dependencies: - "@babel/types" "^7.24.7" - -"@babel/helper-function-name@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz#75f1e1725742f39ac6584ee0b16d94513da38dd2" - integrity sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA== - dependencies: - "@babel/template" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-hoist-variables@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz#b4ede1cde2fd89436397f30dc9376ee06b0f25ee" - integrity sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ== - dependencies: - "@babel/types" "^7.24.7" - -"@babel/helper-member-expression-to-functions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.7.tgz#67613d068615a70e4ed5101099affc7a41c5225f" - integrity sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b" - integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-module-transforms@^7.12.17", "@babel/helper-module-transforms@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz#31b6c9a2930679498db65b685b1698bfd6c7daf8" - integrity sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ== - dependencies: - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-module-imports" "^7.24.7" - "@babel/helper-simple-access" "^7.24.7" - "@babel/helper-split-export-declaration" "^7.24.7" - "@babel/helper-validator-identifier" "^7.24.7" - -"@babel/helper-optimise-call-expression@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz#8b0a0456c92f6b323d27cfd00d1d664e76692a0f" - integrity sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A== - dependencies: - "@babel/types" "^7.24.7" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz#98c84fe6fe3d0d3ae7bfc3a5e166a46844feb2a0" - integrity sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg== - -"@babel/helper-remap-async-to-generator@^7.18.9", "@babel/helper-remap-async-to-generator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.7.tgz#b3f0f203628522713849d49403f1a414468be4c7" - integrity sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-wrap-function" "^7.24.7" - -"@babel/helper-replace-supers@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz#f933b7eed81a1c0265740edc91491ce51250f765" - integrity sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg== - dependencies: - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-member-expression-to-functions" "^7.24.7" - "@babel/helper-optimise-call-expression" "^7.24.7" - -"@babel/helper-simple-access@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3" - integrity sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-skip-transparent-expression-wrappers@^7.12.1", "@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz#5f8fa83b69ed5c27adc56044f8be2b3ea96669d9" - integrity sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-split-export-declaration@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz#83949436890e07fa3d6873c61a96e3bbf692d856" - integrity sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA== - dependencies: - "@babel/types" "^7.24.7" - -"@babel/helper-string-parser@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz#4d2d0f14820ede3b9807ea5fc36dfc8cd7da07f2" - integrity sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg== - -"@babel/helper-validator-identifier@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" - integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== - -"@babel/helper-validator-option@^7.12.17", "@babel/helper-validator-option@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz#24c3bb77c7a425d1742eec8fb433b5a1b38e62f6" - integrity sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw== - -"@babel/helper-wrap-function@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz#52d893af7e42edca7c6d2c6764549826336aae1f" - integrity sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw== - dependencies: - "@babel/helper-function-name" "^7.24.7" - "@babel/template" "^7.24.7" - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helpers@^7.12.17", "@babel/helpers@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.7.tgz#aa2ccda29f62185acb5d42fb4a3a1b1082107416" - integrity sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg== - dependencies: - "@babel/template" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.7", "@babel/highlight@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" - integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== - dependencies: - "@babel/helper-validator-identifier" "^7.24.7" - chalk "^2.4.2" - js-tokens "^4.0.0" - picocolors "^1.0.0" - -"@babel/node@7.12.17": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.12.17.tgz#f892e4a16a108a62f7d4cc327f1608d8dae0d556" - integrity sha512-NLe32pSqoweEFvCEHxvJq3DgBx3oBLtgNfdW5936pMEc5TE2P8jVmDiY6JXQccn/4tt9sBLMUuh+tF3VXWyMhA== - dependencies: - "@babel/register" "^7.12.13" - commander "^4.0.1" - core-js "^3.2.1" - lodash "^4.17.19" - node-environment-flags "^1.0.5" - regenerator-runtime "^0.13.4" - v8flags "^3.1.1" - -"@babel/parser@^7.1.0", "@babel/parser@^7.12.11", "@babel/parser@^7.12.17", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.7.tgz#9a5226f92f0c5c8ead550b750f5608e766c8ce85" - integrity sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw== - -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.7.tgz#fd059fd27b184ea2b4c7e646868a9a381bbc3055" - integrity sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ== - dependencies: - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.7.tgz#468096ca44bbcbe8fcc570574e12eb1950e18107" - integrity sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz#e4eabdd5109acc399b38d7999b2ef66fc2022f89" - integrity sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/plugin-transform-optional-chaining" "^7.24.7" - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.7.tgz#71b21bb0286d5810e63a1538aa901c58e87375ec" - integrity sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg== - dependencies: - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-proposal-async-generator-functions@^7.12.13": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" - integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-remap-async-to-generator" "^7.18.9" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-proposal-class-properties@7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.13.tgz#3d2ce350367058033c93c098e348161d6dc0d8c8" - integrity sha512-8SCJ0Ddrpwv4T7Gwb33EmW1V9PY5lggTO+A8WjyIwxrSHDUyBw4MtF96ifn1n8H806YlxbVCoKXbbmzD6RD+cA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-proposal-class-properties@^7.12.13": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" - integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-proposal-decorators@7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.12.13.tgz#d4c89b40c2b7a526b0d394de4f4def36191e413e" - integrity sha512-x2aOr5w4ARJoYHFKoG2iEUL/Xe99JAJXjAasHijXp3/KgaetJXGE62SmHgsW3Tia/XUT5AxF2YC0F+JyhPY/0Q== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-syntax-decorators" "^7.12.13" - -"@babel/plugin-proposal-dynamic-import@^7.12.17": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" - integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-proposal-export-default-from@7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.12.13.tgz#f110284108a9b2b96f01b15b3be9e54c2610a989" - integrity sha512-idIsBT+DGXdOHL82U+8bwX4goHm/z10g8sGGrQroh+HCRcm7mDv/luaGdWJQMTuCX2FsdXS7X0Nyyzp4znAPJA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-syntax-export-default-from" "^7.12.13" - -"@babel/plugin-proposal-export-namespace-from@7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz#393be47a4acd03fa2af6e3cde9b06e33de1b446d" - integrity sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-export-namespace-from@^7.12.13": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" - integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.12.13": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" - integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-proposal-logical-assignment-operators@^7.12.13": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83" - integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-proposal-nullish-coalescing-operator@7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.13.tgz#24867307285cee4e1031170efd8a7ac807deefde" - integrity sha512-Qoxpy+OxhDBI5kRqliJFAl4uWXk3Bn24WeFstPH0iLymFehSAUR8MHpqU7njyXv/qbo7oN6yTy5bfCmXdKpo1Q== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.13": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" - integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-proposal-numeric-separator@^7.12.13": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" - integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-proposal-object-rest-spread@^7.12.13": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" - integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== - dependencies: - "@babel/compat-data" "^7.20.5" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.20.7" - -"@babel/plugin-proposal-optional-catch-binding@^7.12.13": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" - integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-proposal-optional-chaining@7.12.17": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.17.tgz#e382becadc2cb16b7913b6c672d92e4b33385b5c" - integrity sha512-TvxwI80pWftrGPKHNfkvX/HnoeSTR7gC4ezWnAL39PuktYUe6r8kEpOLTYnkBTsaoeazXm2jHJ22EQ81sdgfcA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" - -"@babel/plugin-proposal-optional-chaining@^7.12.17": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" - integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-proposal-private-methods@^7.12.13": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" - integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": - version "7.21.0-placeholder-for-preset-env.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" - integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== - -"@babel/plugin-proposal-unicode-property-regex@^7.12.13", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" - integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-decorators@^7.12.13": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.7.tgz#e4f8a0a8778ccec669611cd5aed1ed8e6e3a6fcf" - integrity sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-syntax-dynamic-import@7.8.3", "@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-default-from@^7.12.13": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.24.7.tgz#85dae9098933573aae137fb52141dd3ca52ae7ac" - integrity sha512-bTPz4/635WQ9WhwsyPdxUJDVpsi/X9BMmy/8Rf/UAlOO4jSql4CxUCjWI5PiM+jG+c4LVPTScoTw80geFj9+Bw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-flow@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.7.tgz#d1759e84dd4b437cf9fae69b4c06c41d7625bfb7" - integrity sha512-9G8GYT/dxn/D1IIKOUBmGX0mnmj46mGH9NnZyJLwtCpgh5f7D2VbuKodb+2s9m1Yavh1s7ASQN8lf0eqrb1LTw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-syntax-import-assertions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz#2a0b406b5871a20a841240586b1300ce2088a778" - integrity sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-syntax-import-attributes@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz#b4f9ea95a79e6912480c4b626739f86a076624ca" - integrity sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz#39a1fa4a7e3d3d7f34e2acc6be585b718d30e02d" - integrity sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.12.13", "@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-typescript@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz#58d458271b4d3b6bb27ee6ac9525acbb259bad1c" - integrity sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" - integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-arrow-functions@^7.12.13", "@babel/plugin-transform-arrow-functions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz#4f6886c11e423bd69f3ce51dbf42424a5f275514" - integrity sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-async-generator-functions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz#7330a5c50e05181ca52351b8fd01642000c96cfd" - integrity sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g== - dependencies: - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-remap-async-to-generator" "^7.24.7" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-transform-async-to-generator@^7.12.13", "@babel/plugin-transform-async-to-generator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz#72a3af6c451d575842a7e9b5a02863414355bdcc" - integrity sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA== - dependencies: - "@babel/helper-module-imports" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-remap-async-to-generator" "^7.24.7" - -"@babel/plugin-transform-block-scoped-functions@^7.12.13", "@babel/plugin-transform-block-scoped-functions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz#a4251d98ea0c0f399dafe1a35801eaba455bbf1f" - integrity sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-block-scoping@^7.12.13", "@babel/plugin-transform-block-scoping@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.7.tgz#42063e4deb850c7bd7c55e626bf4e7ab48e6ce02" - integrity sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-class-properties@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz#256879467b57b0b68c7ddfc5b76584f398cd6834" - integrity sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-class-static-block@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz#c82027ebb7010bc33c116d4b5044fbbf8c05484d" - integrity sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-transform-classes@^7.12.13", "@babel/plugin-transform-classes@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.7.tgz#4ae6ef43a12492134138c1e45913f7c46c41b4bf" - integrity sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-compilation-targets" "^7.24.7" - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-function-name" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-replace-supers" "^7.24.7" - "@babel/helper-split-export-declaration" "^7.24.7" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.12.13", "@babel/plugin-transform-computed-properties@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz#4cab3214e80bc71fae3853238d13d097b004c707" - integrity sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/template" "^7.24.7" - -"@babel/plugin-transform-destructuring@^7.12.13", "@babel/plugin-transform-destructuring@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.7.tgz#a097f25292defb6e6cc16d6333a4cfc1e3c72d9e" - integrity sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-dotall-regex@^7.12.13", "@babel/plugin-transform-dotall-regex@^7.24.7", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz#5f8bf8a680f2116a7207e16288a5f974ad47a7a0" - integrity sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-duplicate-keys@^7.12.13", "@babel/plugin-transform-duplicate-keys@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz#dd20102897c9a2324e5adfffb67ff3610359a8ee" - integrity sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-dynamic-import@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz#4d8b95e3bae2b037673091aa09cd33fecd6419f4" - integrity sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-transform-exponentiation-operator@^7.12.13", "@babel/plugin-transform-exponentiation-operator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz#b629ee22645f412024297d5245bce425c31f9b0d" - integrity sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-export-namespace-from@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz#176d52d8d8ed516aeae7013ee9556d540c53f197" - integrity sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-transform-flow-strip-types@^7.12.13": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.24.7.tgz#ae454e62219288fbb734541ab00389bfb13c063e" - integrity sha512-cjRKJ7FobOH2eakx7Ja+KpJRj8+y+/SiB3ooYm/n2UJfxu0oEaOoxOinitkJcPqv9KxS0kxTGPUaR7L2XcXDXA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-flow" "^7.24.7" - -"@babel/plugin-transform-for-of@^7.12.13", "@babel/plugin-transform-for-of@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz#f25b33f72df1d8be76399e1b8f3f9d366eb5bc70" - integrity sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - -"@babel/plugin-transform-function-name@^7.12.13", "@babel/plugin-transform-function-name@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.7.tgz#6d8601fbffe665c894440ab4470bc721dd9131d6" - integrity sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w== - dependencies: - "@babel/helper-compilation-targets" "^7.24.7" - "@babel/helper-function-name" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-json-strings@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz#f3e9c37c0a373fee86e36880d45b3664cedaf73a" - integrity sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-transform-literals@^7.12.13", "@babel/plugin-transform-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.7.tgz#36b505c1e655151a9d7607799a9988fc5467d06c" - integrity sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-logical-assignment-operators@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz#a58fb6eda16c9dc8f9ff1c7b1ba6deb7f4694cb0" - integrity sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-transform-member-expression-literals@^7.12.13", "@babel/plugin-transform-member-expression-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz#3b4454fb0e302e18ba4945ba3246acb1248315df" - integrity sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-modules-amd@^7.12.13", "@babel/plugin-transform-modules-amd@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz#65090ed493c4a834976a3ca1cde776e6ccff32d7" - integrity sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg== - dependencies: - "@babel/helper-module-transforms" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-modules-commonjs@^7.12.13", "@babel/plugin-transform-modules-commonjs@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.7.tgz#9fd5f7fdadee9085886b183f1ad13d1ab260f4ab" - integrity sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ== - dependencies: - "@babel/helper-module-transforms" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-simple-access" "^7.24.7" - -"@babel/plugin-transform-modules-systemjs@^7.12.13", "@babel/plugin-transform-modules-systemjs@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.7.tgz#f8012316c5098f6e8dee6ecd58e2bc6f003d0ce7" - integrity sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw== - dependencies: - "@babel/helper-hoist-variables" "^7.24.7" - "@babel/helper-module-transforms" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-validator-identifier" "^7.24.7" - -"@babel/plugin-transform-modules-umd@^7.12.13", "@babel/plugin-transform-modules-umd@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz#edd9f43ec549099620df7df24e7ba13b5c76efc8" - integrity sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A== - dependencies: - "@babel/helper-module-transforms" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.12.13", "@babel/plugin-transform-named-capturing-groups-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz#9042e9b856bc6b3688c0c2e4060e9e10b1460923" - integrity sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-new-target@^7.12.13", "@babel/plugin-transform-new-target@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz#31ff54c4e0555cc549d5816e4ab39241dfb6ab00" - integrity sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-nullish-coalescing-operator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz#1de4534c590af9596f53d67f52a92f12db984120" - integrity sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-transform-numeric-separator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz#bea62b538c80605d8a0fac9b40f48e97efa7de63" - integrity sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-transform-object-rest-spread@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz#d13a2b93435aeb8a197e115221cab266ba6e55d6" - integrity sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q== - dependencies: - "@babel/helper-compilation-targets" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.24.7" - -"@babel/plugin-transform-object-super@^7.12.13", "@babel/plugin-transform-object-super@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz#66eeaff7830bba945dd8989b632a40c04ed625be" - integrity sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-replace-supers" "^7.24.7" - -"@babel/plugin-transform-optional-catch-binding@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz#00eabd883d0dd6a60c1c557548785919b6e717b4" - integrity sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-transform-optional-chaining@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.7.tgz#b8f6848a80cf2da98a8a204429bec04756c6d454" - integrity sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-transform-parameters@^7.12.13", "@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz#5881f0ae21018400e320fc7eb817e529d1254b68" - integrity sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-private-methods@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz#e6318746b2ae70a59d023d5cc1344a2ba7a75f5e" - integrity sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-private-property-in-object@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz#4eec6bc701288c1fab5f72e6a4bbc9d67faca061" - integrity sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-transform-property-literals@^7.12.13", "@babel/plugin-transform-property-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz#f0d2ed8380dfbed949c42d4d790266525d63bbdc" - integrity sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-react-constant-elements@^7.12.1": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.24.7.tgz#b85e8f240b14400277f106c9c9b585d9acf608a1" - integrity sha512-7LidzZfUXyfZ8/buRW6qIIHBY8wAZ1OrY9c/wTr8YhZ6vMPo+Uc/CVFLYY1spZrEQlD4w5u8wjqk5NQ3OVqQKA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-react-display-name@^7.12.13", "@babel/plugin-transform-react-display-name@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz#9caff79836803bc666bcfe210aeb6626230c293b" - integrity sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-react-jsx-development@^7.12.12", "@babel/plugin-transform-react-jsx-development@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz#eaee12f15a93f6496d852509a850085e6361470b" - integrity sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ== - dependencies: - "@babel/plugin-transform-react-jsx" "^7.24.7" - -"@babel/plugin-transform-react-jsx@^7.12.13", "@babel/plugin-transform-react-jsx@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.7.tgz#17cd06b75a9f0e2bd076503400e7c4b99beedac4" - integrity sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-module-imports" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-jsx" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/plugin-transform-react-pure-annotations@^7.12.1", "@babel/plugin-transform-react-pure-annotations@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz#bdd9d140d1c318b4f28b29a00fb94f97ecab1595" - integrity sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-regenerator@^7.12.13", "@babel/plugin-transform-regenerator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz#021562de4534d8b4b1851759fd7af4e05d2c47f8" - integrity sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - regenerator-transform "^0.15.2" - -"@babel/plugin-transform-reserved-words@^7.12.13", "@babel/plugin-transform-reserved-words@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz#80037fe4fbf031fc1125022178ff3938bb3743a4" - integrity sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-runtime@7.12.17": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.17.tgz#329cb61d293b7e60a7685b91dda7c300668cee18" - integrity sha512-s+kIJxnaTj+E9Q3XxQZ5jOo+xcogSe3V78/iFQ5RmoT0jROdpcdxhfGdq/VLqW1hFSzw6VjqN8aQqTaAMixWsw== - dependencies: - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - semver "^5.5.1" - -"@babel/plugin-transform-shorthand-properties@^7.12.13", "@babel/plugin-transform-shorthand-properties@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz#85448c6b996e122fa9e289746140aaa99da64e73" - integrity sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-spread@^7.12.13", "@babel/plugin-transform-spread@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz#e8a38c0fde7882e0fb8f160378f74bd885cc7bb3" - integrity sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - -"@babel/plugin-transform-sticky-regex@^7.12.13", "@babel/plugin-transform-sticky-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz#96ae80d7a7e5251f657b5cf18f1ea6bf926f5feb" - integrity sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-template-literals@^7.12.13", "@babel/plugin-transform-template-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz#a05debb4a9072ae8f985bcf77f3f215434c8f8c8" - integrity sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-typeof-symbol@^7.12.13", "@babel/plugin-transform-typeof-symbol@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.7.tgz#f074be466580d47d6e6b27473a840c9f9ca08fb0" - integrity sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-typescript@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.7.tgz#b006b3e0094bf0813d505e0c5485679eeaf4a881" - integrity sha512-iLD3UNkgx2n/HrjBesVbYX6j0yqn/sJktvbtKKgcaLIQ4bTTQ8obAypc1VpyHPD2y4Phh9zHOaAt8e/L14wCpw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-typescript" "^7.24.7" - -"@babel/plugin-transform-unicode-escapes@^7.12.13", "@babel/plugin-transform-unicode-escapes@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz#2023a82ced1fb4971630a2e079764502c4148e0e" - integrity sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-unicode-property-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz#9073a4cd13b86ea71c3264659590ac086605bbcd" - integrity sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-unicode-regex@^7.12.13", "@babel/plugin-transform-unicode-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz#dfc3d4a51127108099b19817c0963be6a2adf19f" - integrity sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-unicode-sets-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz#d40705d67523803a576e29c63cef6e516b858ed9" - integrity sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/preset-env@7.12.17": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.17.tgz#94a3793ff089c32ee74d76a3c03a7597693ebaaa" - integrity sha512-9PMijx8zFbCwTHrd2P4PJR5nWGH3zWebx2OcpTjqQrHhCiL2ssSR2Sc9ko2BsI2VmVBfoaQmPrlMTCui4LmXQg== - dependencies: - "@babel/compat-data" "^7.12.13" - "@babel/helper-compilation-targets" "^7.12.17" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-validator-option" "^7.12.17" - "@babel/plugin-proposal-async-generator-functions" "^7.12.13" - "@babel/plugin-proposal-class-properties" "^7.12.13" - "@babel/plugin-proposal-dynamic-import" "^7.12.17" - "@babel/plugin-proposal-export-namespace-from" "^7.12.13" - "@babel/plugin-proposal-json-strings" "^7.12.13" - "@babel/plugin-proposal-logical-assignment-operators" "^7.12.13" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.13" - "@babel/plugin-proposal-numeric-separator" "^7.12.13" - "@babel/plugin-proposal-object-rest-spread" "^7.12.13" - "@babel/plugin-proposal-optional-catch-binding" "^7.12.13" - "@babel/plugin-proposal-optional-chaining" "^7.12.17" - "@babel/plugin-proposal-private-methods" "^7.12.13" - "@babel/plugin-proposal-unicode-property-regex" "^7.12.13" - "@babel/plugin-syntax-async-generators" "^7.8.0" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.0" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" - "@babel/plugin-syntax-top-level-await" "^7.12.13" - "@babel/plugin-transform-arrow-functions" "^7.12.13" - "@babel/plugin-transform-async-to-generator" "^7.12.13" - "@babel/plugin-transform-block-scoped-functions" "^7.12.13" - "@babel/plugin-transform-block-scoping" "^7.12.13" - "@babel/plugin-transform-classes" "^7.12.13" - "@babel/plugin-transform-computed-properties" "^7.12.13" - "@babel/plugin-transform-destructuring" "^7.12.13" - "@babel/plugin-transform-dotall-regex" "^7.12.13" - "@babel/plugin-transform-duplicate-keys" "^7.12.13" - "@babel/plugin-transform-exponentiation-operator" "^7.12.13" - "@babel/plugin-transform-for-of" "^7.12.13" - "@babel/plugin-transform-function-name" "^7.12.13" - "@babel/plugin-transform-literals" "^7.12.13" - "@babel/plugin-transform-member-expression-literals" "^7.12.13" - "@babel/plugin-transform-modules-amd" "^7.12.13" - "@babel/plugin-transform-modules-commonjs" "^7.12.13" - "@babel/plugin-transform-modules-systemjs" "^7.12.13" - "@babel/plugin-transform-modules-umd" "^7.12.13" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.13" - "@babel/plugin-transform-new-target" "^7.12.13" - "@babel/plugin-transform-object-super" "^7.12.13" - "@babel/plugin-transform-parameters" "^7.12.13" - "@babel/plugin-transform-property-literals" "^7.12.13" - "@babel/plugin-transform-regenerator" "^7.12.13" - "@babel/plugin-transform-reserved-words" "^7.12.13" - "@babel/plugin-transform-shorthand-properties" "^7.12.13" - "@babel/plugin-transform-spread" "^7.12.13" - "@babel/plugin-transform-sticky-regex" "^7.12.13" - "@babel/plugin-transform-template-literals" "^7.12.13" - "@babel/plugin-transform-typeof-symbol" "^7.12.13" - "@babel/plugin-transform-unicode-escapes" "^7.12.13" - "@babel/plugin-transform-unicode-regex" "^7.12.13" - "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.12.17" - core-js-compat "^3.8.0" - semver "^5.5.0" - -"@babel/preset-env@^7.12.1": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.7.tgz#ff067b4e30ba4a72f225f12f123173e77b987f37" - integrity sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ== - dependencies: - "@babel/compat-data" "^7.24.7" - "@babel/helper-compilation-targets" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-validator-option" "^7.24.7" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.24.7" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.24.7" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.7" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.24.7" - "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.24.7" - "@babel/plugin-syntax-import-attributes" "^7.24.7" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.24.7" - "@babel/plugin-transform-async-generator-functions" "^7.24.7" - "@babel/plugin-transform-async-to-generator" "^7.24.7" - "@babel/plugin-transform-block-scoped-functions" "^7.24.7" - "@babel/plugin-transform-block-scoping" "^7.24.7" - "@babel/plugin-transform-class-properties" "^7.24.7" - "@babel/plugin-transform-class-static-block" "^7.24.7" - "@babel/plugin-transform-classes" "^7.24.7" - "@babel/plugin-transform-computed-properties" "^7.24.7" - "@babel/plugin-transform-destructuring" "^7.24.7" - "@babel/plugin-transform-dotall-regex" "^7.24.7" - "@babel/plugin-transform-duplicate-keys" "^7.24.7" - "@babel/plugin-transform-dynamic-import" "^7.24.7" - "@babel/plugin-transform-exponentiation-operator" "^7.24.7" - "@babel/plugin-transform-export-namespace-from" "^7.24.7" - "@babel/plugin-transform-for-of" "^7.24.7" - "@babel/plugin-transform-function-name" "^7.24.7" - "@babel/plugin-transform-json-strings" "^7.24.7" - "@babel/plugin-transform-literals" "^7.24.7" - "@babel/plugin-transform-logical-assignment-operators" "^7.24.7" - "@babel/plugin-transform-member-expression-literals" "^7.24.7" - "@babel/plugin-transform-modules-amd" "^7.24.7" - "@babel/plugin-transform-modules-commonjs" "^7.24.7" - "@babel/plugin-transform-modules-systemjs" "^7.24.7" - "@babel/plugin-transform-modules-umd" "^7.24.7" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.24.7" - "@babel/plugin-transform-new-target" "^7.24.7" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.7" - "@babel/plugin-transform-numeric-separator" "^7.24.7" - "@babel/plugin-transform-object-rest-spread" "^7.24.7" - "@babel/plugin-transform-object-super" "^7.24.7" - "@babel/plugin-transform-optional-catch-binding" "^7.24.7" - "@babel/plugin-transform-optional-chaining" "^7.24.7" - "@babel/plugin-transform-parameters" "^7.24.7" - "@babel/plugin-transform-private-methods" "^7.24.7" - "@babel/plugin-transform-private-property-in-object" "^7.24.7" - "@babel/plugin-transform-property-literals" "^7.24.7" - "@babel/plugin-transform-regenerator" "^7.24.7" - "@babel/plugin-transform-reserved-words" "^7.24.7" - "@babel/plugin-transform-shorthand-properties" "^7.24.7" - "@babel/plugin-transform-spread" "^7.24.7" - "@babel/plugin-transform-sticky-regex" "^7.24.7" - "@babel/plugin-transform-template-literals" "^7.24.7" - "@babel/plugin-transform-typeof-symbol" "^7.24.7" - "@babel/plugin-transform-unicode-escapes" "^7.24.7" - "@babel/plugin-transform-unicode-property-regex" "^7.24.7" - "@babel/plugin-transform-unicode-regex" "^7.24.7" - "@babel/plugin-transform-unicode-sets-regex" "^7.24.7" - "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.10" - babel-plugin-polyfill-corejs3 "^0.10.4" - babel-plugin-polyfill-regenerator "^0.6.1" - core-js-compat "^3.31.0" - semver "^6.3.1" - -"@babel/preset-flow@7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.12.13.tgz#71ee7fe65a95b507ac12bcad65a4ced27d8dfc3e" - integrity sha512-gcEjiwcGHa3bo9idURBp5fmJPcyFPOszPQjztXrOjUE2wWVqc6fIVJPgWPIQksaQ5XZ2HWiRsf2s1fRGVjUtVw== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-transform-flow-strip-types" "^7.12.13" - -"@babel/preset-modules@0.1.6-no-external-plugins": - version "0.1.6-no-external-plugins" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" - integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/preset-modules@^0.1.3": - version "0.1.6" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6.tgz#31bcdd8f19538437339d17af00d177d854d9d458" - integrity sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/preset-react@7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.13.tgz#5f911b2eb24277fa686820d5bd81cad9a0602a0a" - integrity sha512-TYM0V9z6Abb6dj1K7i5NrEhA13oS5ujUYQYDfqIBXYHOc2c2VkFgc+q9kyssIyUfy4/hEwqrgSlJ/Qgv8zJLsA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-transform-react-display-name" "^7.12.13" - "@babel/plugin-transform-react-jsx" "^7.12.13" - "@babel/plugin-transform-react-jsx-development" "^7.12.12" - "@babel/plugin-transform-react-pure-annotations" "^7.12.1" - -"@babel/preset-react@^7.12.5": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.24.7.tgz#480aeb389b2a798880bf1f889199e3641cbb22dc" - integrity sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-validator-option" "^7.24.7" - "@babel/plugin-transform-react-display-name" "^7.24.7" - "@babel/plugin-transform-react-jsx" "^7.24.7" - "@babel/plugin-transform-react-jsx-development" "^7.24.7" - "@babel/plugin-transform-react-pure-annotations" "^7.24.7" - -"@babel/preset-typescript@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz#66cd86ea8f8c014855671d5ea9a737139cbbfef1" - integrity sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-validator-option" "^7.24.7" - "@babel/plugin-syntax-jsx" "^7.24.7" - "@babel/plugin-transform-modules-commonjs" "^7.24.7" - "@babel/plugin-transform-typescript" "^7.24.7" - -"@babel/register@7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.12.13.tgz#e9cb57618264f2944634da941ba9755088ef9ec5" - integrity sha512-fnCeRXj970S9seY+973oPALQg61TRvAaW0nRDe1f4ytKqM3fZgsNXewTZWmqZedg74LFIRpg/11dsrPZZvYs2g== - dependencies: - find-cache-dir "^2.0.0" - lodash "^4.17.19" - make-dir "^2.1.0" - pirates "^4.0.0" - source-map-support "^0.5.16" - -"@babel/register@^7.12.13": - version "7.24.6" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.24.6.tgz#59e21dcc79e1d04eed5377633b0f88029a6bef9e" - integrity sha512-WSuFCc2wCqMeXkz/i3yfAAsxwWflEgbVkZzivgAmXl/MxrXeoYFZOOPllbC8R8WTF7u61wSRQtDVZ1879cdu6w== - dependencies: - clone-deep "^4.0.1" - find-cache-dir "^2.0.0" - make-dir "^2.1.0" - pirates "^4.0.6" - source-map-support "^0.5.16" - -"@babel/regjsgen@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" - integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== - -"@babel/runtime-corejs3@7.12.18": - version "7.12.18" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.12.18.tgz#e5663237e5658e4c09586995d2dd6d2c8cfd6fc0" - integrity sha512-ngR7yhNTjDxxe1VYmhqQqqXZWujGb6g0IoA4qeG6MxNGRnIw2Zo8ImY8HfaQ7l3T6GklWhdNfyhWk0C0iocdVA== - dependencies: - core-js-pure "^3.0.0" - regenerator-runtime "^0.13.4" - -"@babel/runtime-corejs3@^7.10.2": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.24.7.tgz#65a99097e4c28e6c3a174825591700cc5abd710e" - integrity sha512-eytSX6JLBY6PVAeQa2bFlDx/7Mmln/gaEpsit5a3WEvjGfiIytEsgAwuIXCPM0xvw0v0cJn3ilq0/TvXrW0kgA== - dependencies: - core-js-pure "^3.30.2" - regenerator-runtime "^0.14.0" - -"@babel/runtime@7.12.18": - version "7.12.18" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.18.tgz#af137bd7e7d9705a412b3caaf991fe6aaa97831b" - integrity sha512-BogPQ7ciE6SYAUPtlm9tWbgI9+2AgqSam6QivMgXgAT+fKbgppaj4ZX15MHeLC1PVF5sNk70huBu20XxWOs8Cg== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.8", "@babel/runtime@^7.15.4", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.9", "@babel/runtime@^7.21.0", "@babel/runtime@^7.23.8", "@babel/runtime@^7.23.9", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.7.tgz#f4f0d5530e8dbdf59b3451b9b3e594b6ba082e12" - integrity sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/template@^7.12.13", "@babel/template@^7.24.7", "@babel/template@^7.3.3": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.7.tgz#02efcee317d0609d2c07117cb70ef8fb17ab7315" - integrity sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig== - dependencies: - "@babel/code-frame" "^7.24.7" - "@babel/parser" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.12", "@babel/traverse@^7.12.17", "@babel/traverse@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.7.tgz#de2b900163fa741721ba382163fe46a936c40cf5" - integrity sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA== - dependencies: - "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.24.7" - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-function-name" "^7.24.7" - "@babel/helper-hoist-variables" "^7.24.7" - "@babel/helper-split-export-declaration" "^7.24.7" - "@babel/parser" "^7.24.7" - "@babel/types" "^7.24.7" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.12.17", "@babel/types@^7.12.6", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.7.tgz#6027fe12bc1aa724cd32ab113fb7f1988f1f66f2" - integrity sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q== - dependencies: - "@babel/helper-string-parser" "^7.24.7" - "@babel/helper-validator-identifier" "^7.24.7" - to-fast-properties "^2.0.0" - -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - -"@cardano-foundation/ledgerjs-hw-app-cardano@6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@cardano-foundation/ledgerjs-hw-app-cardano/-/ledgerjs-hw-app-cardano-6.0.0.tgz#720f2eb90efd8ca90a055bb09e22d8988bdda7cd" - integrity sha512-aiWlERF5sXMzygE62YH9AXrVePu5ZG+QKGv/ZhvYec35vUhDFJK8qPiLzXmTy6MdoDKSqbYVRPd6jY3KKs5pOg== - dependencies: - "@ledgerhq/hw-transport" "^6.27.10" - base-x "^3.0.5" - bech32 "^1.1.4" - int64-buffer "^1.0.1" - -"@cardano-foundation/ledgerjs-hw-app-cardano@^5.0.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@cardano-foundation/ledgerjs-hw-app-cardano/-/ledgerjs-hw-app-cardano-5.1.0.tgz#69b94f7c5055bdb19aa719ff277fa5f683d11067" - integrity sha512-ucuz/XbS/0ZD0Bal/GI/kiTm9jDIl8J+A7ypEqcAcBDGicFsyWmtPotOTwuDovTsiM8+eA/5OGTFX0oRqzxstQ== - dependencies: - "@ledgerhq/hw-transport" "^5.12.0" - "@types/ledgerhq__hw-transport" "^4.21.3" - base-x "^3.0.5" - bech32 "^1.1.4" - blake2 "^4.0.2" - int64-buffer "^1.0.1" - -"@cardano-foundation/ledgerjs-hw-app-cardano@^6.0.0": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@cardano-foundation/ledgerjs-hw-app-cardano/-/ledgerjs-hw-app-cardano-6.0.1.tgz#733ae494f615716f7a5efd64dc1997fd29ba72f0" - integrity sha512-35LU2482b6mGA8NVhCut5sEid0zqy82lXmgoenkQfDxDJtx7zV6U7/Dx9OjuDLpcedEUm/7s2WPjjHv/lsinIQ== - dependencies: - "@ledgerhq/hw-transport" "^6.27.10" - base-x "^3.0.5" - bech32 "^1.1.4" - int64-buffer "^1.0.1" - -"@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== - dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" - -"@date-io/core@^2.15.0", "@date-io/core@^2.17.0": - version "2.17.0" - resolved "https://registry.yarnpkg.com/@date-io/core/-/core-2.17.0.tgz#360a4d0641f069776ed22e457876e8a8a58c205e" - integrity sha512-+EQE8xZhRM/hsY0CDTVyayMDDY5ihc4MqXCrPxooKw19yAzUIC6uUqsZeaOFNL9YKTNxYKrJP5DFgE8o5xRCOw== - -"@date-io/date-fns@^2.15.0": - version "2.17.0" - resolved "https://registry.yarnpkg.com/@date-io/date-fns/-/date-fns-2.17.0.tgz#1d9d0a02e0137524331819c9576a4e8e19a6142b" - integrity sha512-L0hWZ/mTpy3Gx/xXJ5tq5CzHo0L7ry6KEO9/w/JWiFWFLZgiNVo3ex92gOl3zmzjHqY/3Ev+5sehAr8UnGLEng== - dependencies: - "@date-io/core" "^2.17.0" - -"@date-io/dayjs@^2.15.0": - version "2.17.0" - resolved "https://registry.yarnpkg.com/@date-io/dayjs/-/dayjs-2.17.0.tgz#ec3e2384136c028971ca2f78800a6877b9fdbe62" - integrity sha512-Iq1wjY5XzBh0lheFA0it6Dsyv94e8mTiNR8vuTai+KopxDkreL3YjwTmZHxkgB7/vd0RMIACStzVgWvPATnDCA== - dependencies: - "@date-io/core" "^2.17.0" - -"@date-io/luxon@^2.15.0": - version "2.17.0" - resolved "https://registry.yarnpkg.com/@date-io/luxon/-/luxon-2.17.0.tgz#76e1f001aaa38fe7f0049f010fe356db1bb517d2" - integrity sha512-l712Vdm/uTddD2XWt9TlQloZUiTiRQtY5TCOG45MQ/8u0tu8M17BD6QYHar/3OrnkGybALAMPzCy1r5D7+0HBg== - dependencies: - "@date-io/core" "^2.17.0" - -"@date-io/moment@^2.15.0": - version "2.17.0" - resolved "https://registry.yarnpkg.com/@date-io/moment/-/moment-2.17.0.tgz#04d2487d9d15d468b2e7903b87268fa1c89b56cb" - integrity sha512-e4nb4CDZU4k0WRVhz1Wvl7d+hFsedObSauDHKtZwU9kt7gdYEAzKgnrSCTHsEaXrDumdrkCYTeZ0Tmyk7uV4tw== - dependencies: - "@date-io/core" "^2.17.0" - -"@discoveryjs/json-ext@^0.5.0": - version "0.5.7" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" - integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== - -"@emotion/babel-plugin@^11.11.0": - version "11.11.0" - resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz#c2d872b6a7767a9d176d007f5b31f7d504bb5d6c" - integrity sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ== - dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/runtime" "^7.18.3" - "@emotion/hash" "^0.9.1" - "@emotion/memoize" "^0.8.1" - "@emotion/serialize" "^1.1.2" - babel-plugin-macros "^3.1.0" - convert-source-map "^1.5.0" - escape-string-regexp "^4.0.0" - find-root "^1.1.0" - source-map "^0.5.7" - stylis "4.2.0" - -"@emotion/cache@^11.11.0": - version "11.11.0" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.11.0.tgz#809b33ee6b1cb1a625fef7a45bc568ccd9b8f3ff" - integrity sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ== - dependencies: - "@emotion/memoize" "^0.8.1" - "@emotion/sheet" "^1.2.2" - "@emotion/utils" "^1.2.1" - "@emotion/weak-memoize" "^0.3.1" - stylis "4.2.0" - -"@emotion/hash@^0.9.1": - version "0.9.1" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43" - integrity sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ== - -"@emotion/is-prop-valid@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz#d4175076679c6a26faa92b03bb786f9e52612337" - integrity sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw== - dependencies: - "@emotion/memoize" "^0.8.1" - -"@emotion/memoize@^0.8.1": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" - integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== - -"@emotion/react@^11.4.1": - version "11.11.4" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.4.tgz#3a829cac25c1f00e126408fab7f891f00ecc3c1d" - integrity sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw== - dependencies: - "@babel/runtime" "^7.18.3" - "@emotion/babel-plugin" "^11.11.0" - "@emotion/cache" "^11.11.0" - "@emotion/serialize" "^1.1.3" - "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" - "@emotion/utils" "^1.2.1" - "@emotion/weak-memoize" "^0.3.1" - hoist-non-react-statics "^3.3.1" - -"@emotion/serialize@^1.1.2", "@emotion/serialize@^1.1.3", "@emotion/serialize@^1.1.4": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.4.tgz#fc8f6d80c492cfa08801d544a05331d1cc7cd451" - integrity sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ== - dependencies: - "@emotion/hash" "^0.9.1" - "@emotion/memoize" "^0.8.1" - "@emotion/unitless" "^0.8.1" - "@emotion/utils" "^1.2.1" - csstype "^3.0.2" - -"@emotion/sheet@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.2.tgz#d58e788ee27267a14342303e1abb3d508b6d0fec" - integrity sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA== - -"@emotion/styled@^11.3.0": - version "11.11.5" - resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.11.5.tgz#0c5c8febef9d86e8a926e663b2e5488705545dfb" - integrity sha512-/ZjjnaNKvuMPxcIiUkf/9SHoG4Q196DRl1w82hQ3WCsjo1IUR8uaGWrC6a87CrYAW0Kb/pK7hk8BnLgLRi9KoQ== - dependencies: - "@babel/runtime" "^7.18.3" - "@emotion/babel-plugin" "^11.11.0" - "@emotion/is-prop-valid" "^1.2.2" - "@emotion/serialize" "^1.1.4" - "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" - "@emotion/utils" "^1.2.1" - -"@emotion/unitless@^0.8.1": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.1.tgz#182b5a4704ef8ad91bde93f7a860a88fd92c79a3" - integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ== - -"@emotion/use-insertion-effect-with-fallbacks@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz#08de79f54eb3406f9daaf77c76e35313da963963" - integrity sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw== - -"@emotion/utils@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.1.tgz#bbab58465738d31ae4cb3dbb6fc00a5991f755e4" - integrity sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg== - -"@emotion/weak-memoize@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6" - integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww== - -"@emurgo/cardano-message-signing-browser@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@emurgo/cardano-message-signing-browser/-/cardano-message-signing-browser-1.0.1.tgz#fb0a481575131d15bf15bb8781cb03bd3f7d56b0" - integrity sha512-yC4Ymq44WR0bXO1wzxCoyc2W/RD1KSAla0oYhin7IYoVkp2raGp8wt7QNF4pDdNnTcejn5fyPyYY9dL4666H1w== - -"@emurgo/cardano-message-signing-nodejs@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@emurgo/cardano-message-signing-nodejs/-/cardano-message-signing-nodejs-1.0.1.tgz#b2fa1f7541055a6c4b8e805492b1a9362bea5835" - integrity sha512-PoKh1tQnJX18f8iEr8Jk1KXxKCn9eqaSslMI1pyOJvYRJhQVDLCh0+9YReufjp0oFJIY1ShcrR+4/WnECVZUKQ== - -"@emurgo/cardano-serialization-lib-browser@12.0.0-alpha.26": - version "12.0.0-alpha.26" - resolved "https://registry.yarnpkg.com/@emurgo/cardano-serialization-lib-browser/-/cardano-serialization-lib-browser-12.0.0-alpha.26.tgz#36c9982bc56bf4d0587c3736d5a422cc7130e347" - integrity sha512-zP3DxaPHuJY0mOFX+3uYcu0F/ItEmgfoMJIWiT/86DeRlg7D3YLD+TxB8yvrGgADxtNKe2jJ7Y1Twrpd09GKNw== - -"@emurgo/cardano-serialization-lib-nodejs@12.0.0-alpha.26": - version "12.0.0-alpha.26" - resolved "https://registry.yarnpkg.com/@emurgo/cardano-serialization-lib-nodejs/-/cardano-serialization-lib-nodejs-12.0.0-alpha.26.tgz#4e5fea7ba6d72888e21c5a9bea6bcff367834a4b" - integrity sha512-QheEm7wVZ4Tc0gOIYMUyf2VUb8a1ZjnDy4zNcGSRmuO1zlbJfjLDGv+uXG+pKqZN4fzMAzOtUwolTtbxzTzYbA== - -"@emurgo/cip14-js@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@emurgo/cip14-js/-/cip14-js-2.0.0.tgz#6ef78ddac8a35f2725e9ccebfd5ae114716c4b48" - integrity sha512-EvjgTs4NCqH1j0wxXqWCj31P7NmTzl3aR+9am0OLSsf3NA9GsdKH5QNyXJrvSZILM4yWzlZNum3y8S5PfdM1aA== - dependencies: - bech32 "2.0.0" - blake2b "2.1.3" - -"@emurgo/cip14-js@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@emurgo/cip14-js/-/cip14-js-3.0.1.tgz#68bcf6db1e4891d347e19f1e643df9be5ebc92dc" - integrity sha512-u0XobeajNSlmeGBmY3ntA+NE/Vns7hKP0xrFzWyAO7YubETOifTjUddJN4gpvXE4S08DPUcNBVe3sx1m5GPIOg== - dependencies: - bech32 "2.0.0" - blake2b "2.1.3" - -"@emurgo/cip4-js@1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@emurgo/cip4-js/-/cip4-js-1.0.5.tgz#b99ca25024b61743cc6fc733011e3dc8da21d622" - integrity sha512-vugHV1ca5zcUpx6Hzdt85KMvUbYIBAn/zwdWuSQ/1soCyEZnrOZJShi0hYRJoUghOpQ8TjGOCEln7B+Jgf3IJg== - dependencies: - blake2b "2.1.3" - buffer-crc32 "0.2.13" - fnv-plus "1.3.1" - -"@emurgo/cross-csl-browser@4.4.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@emurgo/cross-csl-browser/-/cross-csl-browser-4.4.0.tgz#57bfe5359868a22e1f6d82359ffcb2ba7793f207" - integrity sha512-BVtrK9sOjSEuSLl7Xb8tvKf/IdTowAmi0FN2O2Juvzg7WEhsEQY3bUoiZY7eVETOLLBHjl0kDfaRDQOUc3ow9g== - dependencies: - "@emurgo/cardano-serialization-lib-browser" "12.0.0-alpha.26" - "@emurgo/cross-csl-core" "4.4.0" - -"@emurgo/cross-csl-core@4.4.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@emurgo/cross-csl-core/-/cross-csl-core-4.4.0.tgz#b808b562f2c2442784a46384aea750718f6e5a59" - integrity sha512-R12cAHmkjeLb7g0+Og5zoi8is7jh5uONICaKLCvebqV6kHhCShSSHSdCbvqmCH3H8szPodkOkLp5qXNmxqfNxA== - dependencies: - "@cardano-foundation/ledgerjs-hw-app-cardano" "^5.0.0" - "@types/mocha" "^9.1.1" - axios "^0.24.0" - bech32 "^2.0.0" - bignumber.js "^9.0.1" - blake2b "^2.1.4" - hash-wasm "^4.9.0" - mocha "^10.0.0" - -"@emurgo/cross-csl-nodejs@4.4.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@emurgo/cross-csl-nodejs/-/cross-csl-nodejs-4.4.0.tgz#7a8c8b7078018080283a9dc5340326e0e9a8d59c" - integrity sha512-yDtNFCYobYL7hILvico3Q85DIvDhc5H24UjDd8gdYApu6YGyR5C+Roz34VALxHlR8y2RA9cUM2GUt+a8Ev/Kxg== - dependencies: - "@emurgo/cardano-serialization-lib-nodejs" "12.0.0-alpha.26" - "@emurgo/cross-csl-core" "4.4.0" - -"@emurgo/yoroi-eutxo-txs@0.0.2-alpha.8": - version "0.0.2-alpha.8" - resolved "https://registry.yarnpkg.com/@emurgo/yoroi-eutxo-txs/-/yoroi-eutxo-txs-0.0.2-alpha.8.tgz#9971abde5128917c81ebad9d202dc9701f33eb7c" - integrity sha512-H9VdDrqLMsGSFRUyfNXEwBmabn+06Z27Fq1lcH7LiIy5HquiKoqZ7jbp4J5fQnnnYNkHchcZnSFP4wX2KGLApA== - dependencies: - "@cardano-foundation/ledgerjs-hw-app-cardano" "^5.0.0" - "@emurgo/cross-csl-core" "4.4.0" - "@ledgerhq/hw-transport-node-hid" "^6.27.2" - axios "^0.27.2" - bech32 "^2.0.0" - bignumber.js "^9.1.0" - bip39 "^3.0.4" - hash-wasm "^4.9.0" - -"@emurgo/yoroi-lib@0.15.4": - version "0.15.4" - resolved "https://registry.yarnpkg.com/@emurgo/yoroi-lib/-/yoroi-lib-0.15.4.tgz#cfa722819ff5a89db21d5efe8d9d16cb2d616eb7" - integrity sha512-vHXdRknq0UYzPaIlhxaP/7X8LXNRRZBnyqvMMM8yuIqxNbe8lobxPDbM2ki/BHsOdR1w1Xk8Z3ZTC2RxM69U8w== - dependencies: - "@cardano-foundation/ledgerjs-hw-app-cardano" "^6.0.0" - "@emurgo/cross-csl-core" "4.4.0" - "@noble/hashes" "^1.3.2" - axios "^0.24.0" - bech32 "^2.0.0" - bignumber.js "^9.0.1" - easy-crc "1.1.0" - -"@eslint/eslintrc@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.3.0.tgz#d736d6963d7003b6514e6324bec9c602ac340318" - integrity sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg== - dependencies: - ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^12.1.0" - ignore "^4.0.6" - import-fresh "^3.2.1" - js-yaml "^3.13.1" - lodash "^4.17.20" - minimatch "^3.0.4" - strip-json-comments "^3.1.1" - -"@floating-ui/core@^1.0.0": - version "1.6.2" - resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.2.tgz#d37f3e0ac1f1c756c7de45db13303a266226851a" - integrity sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg== - dependencies: - "@floating-ui/utils" "^0.2.0" - -"@floating-ui/dom@^1.0.0": - version "1.6.5" - resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.5.tgz#323f065c003f1d3ecf0ff16d2c2c4d38979f4cb9" - integrity sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw== - dependencies: - "@floating-ui/core" "^1.0.0" - "@floating-ui/utils" "^0.2.0" - -"@floating-ui/react-dom@^2.0.8": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.0.tgz#4f0e5e9920137874b2405f7d6c862873baf4beff" - integrity sha512-lNzj5EQmEKn5FFKc04+zasr09h/uX8RtJRNj5gUXsSQIXHVWTVh+hVAg1vOMCexkX8EgvemMvIFpQfkosnVNyA== - dependencies: - "@floating-ui/dom" "^1.0.0" - -"@floating-ui/utils@^0.2.0": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.2.tgz#d8bae93ac8b815b2bd7a98078cf91e2724ef11e5" - integrity sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw== - -"@formatjs/ecma402-abstract@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-2.0.0.tgz#39197ab90b1c78b7342b129a56a7acdb8f512e17" - integrity sha512-rRqXOqdFmk7RYvj4khklyqzcfQl9vEL/usogncBHRZfZBDOwMGuSRNFl02fu5KGHXdbinju+YXyuR+Nk8xlr/g== - dependencies: - "@formatjs/intl-localematcher" "0.5.4" - tslib "^2.4.0" - -"@formatjs/fast-memoize@2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-2.2.0.tgz#33bd616d2e486c3e8ef4e68c99648c196887802b" - integrity sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA== - dependencies: - tslib "^2.4.0" - -"@formatjs/icu-messageformat-parser@2.7.8": - version "2.7.8" - resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.8.tgz#f6d7643001e9bb5930d812f1f9a9856f30fa0343" - integrity sha512-nBZJYmhpcSX0WeJ5SDYUkZ42AgR3xiyhNCsQweFx3cz/ULJjym8bHAzWKvG5e2+1XO98dBYC0fWeeAECAVSwLA== - dependencies: - "@formatjs/ecma402-abstract" "2.0.0" - "@formatjs/icu-skeleton-parser" "1.8.2" - tslib "^2.4.0" - -"@formatjs/icu-skeleton-parser@1.8.2": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.2.tgz#2252c949ae84ee66930e726130ea66731a123c9f" - integrity sha512-k4ERKgw7aKGWJZgTarIcNEmvyTVD9FYh0mTrrBMHZ1b8hUu6iOJ4SzsZlo3UNAvHYa+PnvntIwRPt1/vy4nA9Q== - dependencies: - "@formatjs/ecma402-abstract" "2.0.0" - tslib "^2.4.0" - -"@formatjs/intl-displaynames@6.6.8": - version "6.6.8" - resolved "https://registry.yarnpkg.com/@formatjs/intl-displaynames/-/intl-displaynames-6.6.8.tgz#2f5afac8df83167f5a6ef8543600eaf1ef99c885" - integrity sha512-Lgx6n5KxN16B3Pb05z3NLEBQkGoXnGjkTBNCZI+Cn17YjHJ3fhCeEJJUqRlIZmJdmaXQhjcQVDp6WIiNeRYT5g== - dependencies: - "@formatjs/ecma402-abstract" "2.0.0" - "@formatjs/intl-localematcher" "0.5.4" - tslib "^2.4.0" - -"@formatjs/intl-listformat@7.5.7": - version "7.5.7" - resolved "https://registry.yarnpkg.com/@formatjs/intl-listformat/-/intl-listformat-7.5.7.tgz#125e05105fabd1ae5f11881d6ab74484f2098ee4" - integrity sha512-MG2TSChQJQT9f7Rlv+eXwUFiG24mKSzmF144PLb8m8OixyXqn4+YWU+5wZracZGCgVTVmx8viCf7IH3QXoiB2g== - dependencies: - "@formatjs/ecma402-abstract" "2.0.0" - "@formatjs/intl-localematcher" "0.5.4" - tslib "^2.4.0" - -"@formatjs/intl-localematcher@0.5.4": - version "0.5.4" - resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz#caa71f2e40d93e37d58be35cfffe57865f2b366f" - integrity sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g== - dependencies: - tslib "^2.4.0" - -"@formatjs/intl-unified-numberformat@^3.2.0": - version "3.3.7" - resolved "https://registry.yarnpkg.com/@formatjs/intl-unified-numberformat/-/intl-unified-numberformat-3.3.7.tgz#9995a24568908188e716d81a1de5b702b2ee00e2" - integrity sha512-KnWgLRHzCAgT9eyt3OS34RHoyD7dPDYhRcuKn+/6Kv2knDF8Im43J6vlSW6Hm1w63fNq3ZIT1cFk7RuVO3Psag== - dependencies: - "@formatjs/intl-utils" "^2.3.0" - -"@formatjs/intl-utils@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@formatjs/intl-utils/-/intl-utils-2.3.0.tgz#2dc8c57044de0340eb53a7ba602e59abf80dc799" - integrity sha512-KWk80UPIzPmUg+P0rKh6TqspRw0G6eux1PuJr+zz47ftMaZ9QDwbGzHZbtzWkl5hgayM/qrKRutllRC7D/vVXQ== - -"@formatjs/intl@2.10.4": - version "2.10.4" - resolved "https://registry.yarnpkg.com/@formatjs/intl/-/intl-2.10.4.tgz#e1819e0858fb05ca65923a020f346bc74e894e92" - integrity sha512-56483O+HVcL0c7VucAS2tyH020mt9XTozZO67cwtGg0a7KWDukS/FzW3OnvaHmTHDuYsoPIzO+ZHVfU6fT/bJw== - dependencies: - "@formatjs/ecma402-abstract" "2.0.0" - "@formatjs/fast-memoize" "2.2.0" - "@formatjs/icu-messageformat-parser" "2.7.8" - "@formatjs/intl-displaynames" "6.6.8" - "@formatjs/intl-listformat" "7.5.7" - intl-messageformat "10.5.14" - tslib "^2.4.0" - -"@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" - integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== - -"@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== - dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" - -"@istanbuljs/schema@^0.1.2": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jest/console@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" - integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== - dependencies: - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^26.6.2" - jest-util "^26.6.2" - slash "^3.0.0" - -"@jest/core@^26.6.3": - version "26.6.3" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" - integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== - dependencies: - "@jest/console" "^26.6.2" - "@jest/reporters" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-changed-files "^26.6.2" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-resolve-dependencies "^26.6.3" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - jest-watcher "^26.6.2" - micromatch "^4.0.2" - p-each-series "^2.1.0" - rimraf "^3.0.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - -"@jest/environment@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" - integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== - dependencies: - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - jest-mock "^26.6.2" - -"@jest/fake-timers@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" - integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== - dependencies: - "@jest/types" "^26.6.2" - "@sinonjs/fake-timers" "^6.0.1" - "@types/node" "*" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-util "^26.6.2" - -"@jest/globals@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" - integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/types" "^26.6.2" - expect "^26.6.2" - -"@jest/reporters@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" - integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.4" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.3" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - jest-haste-map "^26.6.2" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - slash "^3.0.0" - source-map "^0.6.0" - string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^7.0.0" - optionalDependencies: - node-notifier "^8.0.0" - -"@jest/source-map@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" - integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.2.4" - source-map "^0.6.0" - -"@jest/test-result@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" - integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== - dependencies: - "@jest/console" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^26.6.3": - version "26.6.3" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" - integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== - dependencies: - "@jest/test-result" "^26.6.2" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" - -"@jest/transform@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" - integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^26.6.2" - babel-plugin-istanbul "^6.0.0" - chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-regex-util "^26.0.0" - jest-util "^26.6.2" - micromatch "^4.0.2" - pirates "^4.0.1" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" - -"@jest/types@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" - integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - -"@jridgewell/gen-mapping@^0.3.5": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" - integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== - dependencies: - "@jridgewell/set-array" "^1.2.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.24" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" - integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== - -"@jridgewell/set-array@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== - -"@jridgewell/source-map@^0.3.3": - version "0.3.6" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" - integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@jsonjoy.com/base64@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/base64/-/base64-1.1.2.tgz#cf8ea9dcb849b81c95f14fc0aaa151c6b54d2578" - integrity sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA== - -"@jsonjoy.com/json-pack@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pack/-/json-pack-1.0.4.tgz#ab59c642a2e5368e8bcfd815d817143d4f3035d0" - integrity sha512-aOcSN4MeAtFROysrbqG137b7gaDDSmVrl5mpo6sT/w+kcXpWnzhMjmY/Fh/sDx26NBxyIE7MB1seqLeCAzy9Sg== - dependencies: - "@jsonjoy.com/base64" "^1.1.1" - "@jsonjoy.com/util" "^1.1.2" - hyperdyperid "^1.2.0" - thingies "^1.20.0" - -"@jsonjoy.com/util@^1.1.2": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/util/-/util-1.1.3.tgz#75b1c3cf21b70e665789d1ad3eabeff8b7fd1429" - integrity sha512-g//kkF4kOwUjemValCtOc/xiYzmwMRmWq3Bn+YnzOzuZLHq2PpMOxxIayN3cKbo7Ko2Np65t6D9H81IvXbXhqg== - -"@ledgerhq/devices@^5.34.0", "@ledgerhq/devices@^5.49.0", "@ledgerhq/devices@^5.51.1": - version "5.51.1" - resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-5.51.1.tgz#d741a4a5d8f17c2f9d282fd27147e6fe1999edb7" - integrity sha512-4w+P0VkbjzEXC7kv8T1GJ/9AVaP9I6uasMZ/JcdwZBS3qwvKo5A5z9uGhP5c7TvItzcmPb44b5Mw2kT+WjUuAA== - dependencies: - "@ledgerhq/errors" "^5.50.0" - "@ledgerhq/logs" "^5.50.0" - rxjs "6" - semver "^7.3.5" - -"@ledgerhq/devices@^8.3.0": - version "8.3.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-8.3.0.tgz#a1e1a21608e162fb3a512f57863bf9842b29493f" - integrity sha512-h5Scr+yIae8yjPOViCHLdMjpqn4oC2Whrsq8LinRxe48LEGMdPqSV1yY7+3Ch827wtzNpMv+/ilKnd8rY+rTlg== - dependencies: - "@ledgerhq/errors" "^6.16.4" - "@ledgerhq/logs" "^6.12.0" - rxjs "^7.8.1" - semver "^7.3.5" - -"@ledgerhq/errors@^5.34.0", "@ledgerhq/errors@^5.49.0", "@ledgerhq/errors@^5.50.0": - version "5.50.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-5.50.0.tgz#e3a6834cb8c19346efca214c1af84ed28e69dad9" - integrity sha512-gu6aJ/BHuRlpU7kgVpy2vcYk6atjB4iauP2ymF7Gk0ez0Y/6VSMVSJvubeEQN+IV60+OBK0JgeIZG7OiHaw8ow== - -"@ledgerhq/errors@^6.16.4": - version "6.16.4" - resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-6.16.4.tgz#a38baffe8b096d9fff3ad839cadb55704c8d8e7b" - integrity sha512-M57yFaLYSN+fZCX0E0zUqOmrV6eipK+s5RhijHoUNlHUqrsvUz7iRQgpd5gRgHB5VkIjav7KdaZjKiWGcHovaQ== - -"@ledgerhq/hw-transport-node-hid-noevents@^6.29.6": - version "6.29.6" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-6.29.6.tgz#a328bdde245283f3ca3b82ffa19f7f31b745a22d" - integrity sha512-H1cGC4TLwSCxve3rbV7qfPJBZfy7VD7k9Czc9HOMDwQ9zHFtaoeiIotIMGjzHjfPtAGauMpAYvrpmEdBBX5sHg== - dependencies: - "@ledgerhq/devices" "^8.3.0" - "@ledgerhq/errors" "^6.16.4" - "@ledgerhq/hw-transport" "^6.30.6" - "@ledgerhq/logs" "^6.12.0" - node-hid "^2.1.2" - -"@ledgerhq/hw-transport-node-hid@^6.27.2": - version "6.28.6" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-6.28.6.tgz#8a62d1aaf4d62c53639e42171078a082d7cdda50" - integrity sha512-USSTOO0zv9XtguWismP7/StnNS/s7Rz0JOGGaBhKe3Bzl7d5XPncUlmOvoNFzzY/QdasEoFs2QId1+ibJG71Vw== - dependencies: - "@ledgerhq/devices" "^8.3.0" - "@ledgerhq/errors" "^6.16.4" - "@ledgerhq/hw-transport" "^6.30.6" - "@ledgerhq/hw-transport-node-hid-noevents" "^6.29.6" - "@ledgerhq/logs" "^6.12.0" - lodash "^4.17.21" - node-hid "^2.1.2" - usb "2.9.0" - -"@ledgerhq/hw-transport-u2f@5.36.0-deprecated": - version "5.36.0-deprecated" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-u2f/-/hw-transport-u2f-5.36.0-deprecated.tgz#66e3ed399a117a1c0110871a055dd54f5fe707fd" - integrity sha512-T/+mGHIiUK/ZQATad6DMDmobCMZ1mVST952009jKzhaE1Et2Uy2secU+QhRkx3BfEAkvwa0zSRSYCL9d20Iqjg== - dependencies: - "@ledgerhq/errors" "^5.34.0" - "@ledgerhq/hw-transport" "^5.34.0" - "@ledgerhq/logs" "^5.30.0" - u2f-api "0.2.7" - -"@ledgerhq/hw-transport-webauthn@5.36.0-deprecated": - version "5.36.0-deprecated" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-webauthn/-/hw-transport-webauthn-5.36.0-deprecated.tgz#d5c40ebd9e2099a8f5f1792f4f45af73e0731fe3" - integrity sha512-MCT59enCaevP458x+n4BGA8z9nVhuxGP5wtCtlUB7uxkWB6j12RHzPwyqlPo1z7baEby8fQe0VCI5lbGaCSBDQ== - dependencies: - "@ledgerhq/devices" "^5.34.0" - "@ledgerhq/errors" "^5.34.0" - "@ledgerhq/hw-transport" "^5.34.0" - "@ledgerhq/logs" "^5.30.0" - -"@ledgerhq/hw-transport-webhid@5.51.1": - version "5.51.1" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-webhid/-/hw-transport-webhid-5.51.1.tgz#2050d65ef4ce179e8f43cd7245b811d8f05fdcfc" - integrity sha512-w/2qSU0vwFY+D/4ucuYRViO7iS3Uuxmj9sI/Iiqkoiax9Xppb0/6H5m3ffKv6iPMmRYbgwCgXorqx4SLLSD8Kg== - dependencies: - "@ledgerhq/devices" "^5.51.1" - "@ledgerhq/errors" "^5.50.0" - "@ledgerhq/hw-transport" "^5.51.1" - "@ledgerhq/logs" "^5.50.0" - -"@ledgerhq/hw-transport-webusb@5.49.0": - version "5.49.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-webusb/-/hw-transport-webusb-5.49.0.tgz#3edbeca4d1c554d36acf9bd2cc5a79250eeab101" - integrity sha512-oWgaVdAmQ9lOUnq1dhmCBP9v1ghEV+YBh0nHi7JtdpuLBuGd9red1HXdg5INE2J10rxO/wra3OoHcJlQguR8ew== - dependencies: - "@ledgerhq/devices" "^5.49.0" - "@ledgerhq/errors" "^5.49.0" - "@ledgerhq/hw-transport" "^5.49.0" - "@ledgerhq/logs" "^5.49.0" - -"@ledgerhq/hw-transport@^5.12.0", "@ledgerhq/hw-transport@^5.34.0", "@ledgerhq/hw-transport@^5.49.0", "@ledgerhq/hw-transport@^5.51.1": - version "5.51.1" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-5.51.1.tgz#8dd14a8e58cbee4df0c29eaeef983a79f5f22578" - integrity sha512-6wDYdbWrw9VwHIcoDnqWBaDFyviyjZWv6H9vz9Vyhe4Qd7TIFmbTl/eWs6hZvtZBza9K8y7zD8ChHwRI4s9tSw== - dependencies: - "@ledgerhq/devices" "^5.51.1" - "@ledgerhq/errors" "^5.50.0" - events "^3.3.0" - -"@ledgerhq/hw-transport@^6.27.10", "@ledgerhq/hw-transport@^6.30.6": - version "6.30.6" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-6.30.6.tgz#c6d84672ac4828f311831998f4101ea205215a6d" - integrity sha512-fT0Z4IywiuJuZrZE/+W0blkV5UCotDPFTYKLkKCLzYzuE6javva7D/ajRaIeR+hZ4kTmKF4EqnsmDCXwElez+w== - dependencies: - "@ledgerhq/devices" "^8.3.0" - "@ledgerhq/errors" "^6.16.4" - "@ledgerhq/logs" "^6.12.0" - events "^3.3.0" - -"@ledgerhq/logs@^5.30.0", "@ledgerhq/logs@^5.49.0", "@ledgerhq/logs@^5.50.0": - version "5.50.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.50.0.tgz#29c6419e8379d496ab6d0426eadf3c4d100cd186" - integrity sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA== - -"@ledgerhq/logs@^6.12.0": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-6.12.0.tgz#ad903528bf3687a44da435d7b2479d724d374f5d" - integrity sha512-ExDoj1QV5eC6TEbMdLUMMk9cfvNKhhv5gXol4SmULRVCx/3iyCPhJ74nsb3S0Vb+/f+XujBEj3vQn5+cwS0fNA== - -"@leichtgewicht/ip-codec@^2.0.1": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1" - integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw== - -"@mui/base@5.0.0-beta.40": - version "5.0.0-beta.40" - resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.40.tgz#1f8a782f1fbf3f84a961e954c8176b187de3dae2" - integrity sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ== - dependencies: - "@babel/runtime" "^7.23.9" - "@floating-ui/react-dom" "^2.0.8" - "@mui/types" "^7.2.14" - "@mui/utils" "^5.15.14" - "@popperjs/core" "^2.11.8" - clsx "^2.1.0" - prop-types "^15.8.1" - -"@mui/core-downloads-tracker@^5.15.19": - version "5.15.19" - resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.19.tgz#7af0025c871f126367a55219486681954e4821d7" - integrity sha512-tCHSi/Tomez9ERynFhZRvFO6n9ATyrPs+2N80DMDzp6xDVirbBjEwhPcE+x7Lj+nwYw0SqFkOxyvMP0irnm55w== - -"@mui/lab@^5.0.0-alpha.51": - version "5.0.0-alpha.170" - resolved "https://registry.yarnpkg.com/@mui/lab/-/lab-5.0.0-alpha.170.tgz#4519dfc8d1c51ca54fb9d8b91b95a3733d07be16" - integrity sha512-0bDVECGmrNjd3+bLdcLiwYZ0O4HP5j5WSQm5DV6iA/Z9kr8O6AnvZ1bv9ImQbbX7Gj3pX4o43EKwCutj3EQxQg== - dependencies: - "@babel/runtime" "^7.23.9" - "@mui/base" "5.0.0-beta.40" - "@mui/system" "^5.15.15" - "@mui/types" "^7.2.14" - "@mui/utils" "^5.15.14" - clsx "^2.1.0" - prop-types "^15.8.1" - -"@mui/material@^5.0.4": - version "5.15.19" - resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.15.19.tgz#a5bd50b6e68cee4ed39ea91dbecede5a020aaa97" - integrity sha512-lp5xQBbcRuxNtjpWU0BWZgIrv2XLUz4RJ0RqFXBdESIsKoGCQZ6P3wwU5ZPuj5TjssNiKv9AlM+vHopRxZhvVQ== - dependencies: - "@babel/runtime" "^7.23.9" - "@mui/base" "5.0.0-beta.40" - "@mui/core-downloads-tracker" "^5.15.19" - "@mui/system" "^5.15.15" - "@mui/types" "^7.2.14" - "@mui/utils" "^5.15.14" - "@types/react-transition-group" "^4.4.10" - clsx "^2.1.0" - csstype "^3.1.3" - prop-types "^15.8.1" - react-is "^18.2.0" - react-transition-group "^4.4.5" - -"@mui/private-theming@^5.15.14": - version "5.15.14" - resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.15.14.tgz#edd9a82948ed01586a01c842eb89f0e3f68970ee" - integrity sha512-UH0EiZckOWcxiXLX3Jbb0K7rC8mxTr9L9l6QhOZxYc4r8FHUkefltV9VDGLrzCaWh30SQiJvAEd7djX3XXY6Xw== - dependencies: - "@babel/runtime" "^7.23.9" - "@mui/utils" "^5.15.14" - prop-types "^15.8.1" - -"@mui/styled-engine@^5.15.14": - version "5.15.14" - resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.15.14.tgz#168b154c4327fa4ccc1933a498331d53f61c0de2" - integrity sha512-RILkuVD8gY6PvjZjqnWhz8fu68dVkqhM5+jYWfB5yhlSQKg+2rHkmEwm75XIeAqI3qwOndK6zELK5H6Zxn4NHw== - dependencies: - "@babel/runtime" "^7.23.9" - "@emotion/cache" "^11.11.0" - csstype "^3.1.3" - prop-types "^15.8.1" - -"@mui/system@^5.15.15": - version "5.15.15" - resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.15.15.tgz#658771b200ce3c4a0f28e58169f02e5e718d1c53" - integrity sha512-aulox6N1dnu5PABsfxVGOZffDVmlxPOVgj56HrUnJE8MCSh8lOvvkd47cebIVQQYAjpwieXQXiDPj5pwM40jTQ== - dependencies: - "@babel/runtime" "^7.23.9" - "@mui/private-theming" "^5.15.14" - "@mui/styled-engine" "^5.15.14" - "@mui/types" "^7.2.14" - "@mui/utils" "^5.15.14" - clsx "^2.1.0" - csstype "^3.1.3" - prop-types "^15.8.1" - -"@mui/types@^7.2.14": - version "7.2.14" - resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.14.tgz#8a02ac129b70f3d82f2f9b76ded2c8d48e3fc8c9" - integrity sha512-MZsBZ4q4HfzBsywtXgM1Ksj6HDThtiwmOKUXH1pKYISI9gAVXCNHNpo7TlGoGrBaYWZTdNoirIN7JsQcQUjmQQ== - -"@mui/utils@^5.10.3", "@mui/utils@^5.15.14": - version "5.15.14" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.15.14.tgz#e414d7efd5db00bfdc875273a40c0a89112ade3a" - integrity sha512-0lF/7Hh/ezDv5X7Pry6enMsbYyGKjADzvHyo3Qrc/SSlTsQ1VkbDMbH0m2t3OR5iIVLwMoxwM7yGd+6FCMtTFA== - dependencies: - "@babel/runtime" "^7.23.9" - "@types/prop-types" "^15.7.11" - prop-types "^15.8.1" - react-is "^18.2.0" - -"@mui/x-date-pickers@^5.0.8": - version "5.0.20" - resolved "https://registry.yarnpkg.com/@mui/x-date-pickers/-/x-date-pickers-5.0.20.tgz#7b4e5b5a214a8095937ba7d82bb82acd6f270d72" - integrity sha512-ERukSeHIoNLbI1C2XRhF9wRhqfsr+Q4B1SAw2ZlU7CWgcG8UBOxgqRKDEOVAIoSWL+DWT6GRuQjOKvj6UXZceA== - dependencies: - "@babel/runtime" "^7.18.9" - "@date-io/core" "^2.15.0" - "@date-io/date-fns" "^2.15.0" - "@date-io/dayjs" "^2.15.0" - "@date-io/luxon" "^2.15.0" - "@date-io/moment" "^2.15.0" - "@mui/utils" "^5.10.3" - "@types/react-transition-group" "^4.4.5" - clsx "^1.2.1" - prop-types "^15.7.2" - react-transition-group "^4.4.5" - rifm "^0.12.1" - -"@noble/hashes@^1.2.0", "@noble/hashes@^1.3.2": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" - integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@npmcli/fs@^1.0.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" - integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== - dependencies: - "@gar/promisify" "^1.0.1" - semver "^7.3.5" - -"@npmcli/fs@^2.1.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" - integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== - dependencies: - "@gar/promisify" "^1.1.3" - semver "^7.3.5" - -"@npmcli/move-file@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - -"@npmcli/move-file@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" - integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - -"@oclif/color@^0.1.0": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@oclif/color/-/color-0.1.2.tgz#28b07e2850d9ce814d0b587ce3403b7ad8f7d987" - integrity sha512-M9o+DOrb8l603qvgz1FogJBUGLqcMFL1aFg2ZEL0FbXJofiNTLOWIeB4faeZTLwE6dt0xH9GpCVpzksMMzGbmA== - dependencies: - ansi-styles "^3.2.1" - chalk "^3.0.0" - strip-ansi "^5.2.0" - supports-color "^5.4.0" - tslib "^1" - -"@oclif/command@^1.5.13", "@oclif/command@^1.6.1", "@oclif/command@^1.7.0", "@oclif/command@^1.8.15", "@oclif/command@^1.8.6": - version "1.8.36" - resolved "https://registry.yarnpkg.com/@oclif/command/-/command-1.8.36.tgz#9739b9c268580d064a50887c4597d1b4e86ca8b5" - integrity sha512-/zACSgaYGtAQRzc7HjzrlIs14FuEYAZrMOEwicRoUnZVyRunG4+t5iSEeQu0Xy2bgbCD0U1SP/EdeNZSTXRwjQ== - dependencies: - "@oclif/config" "^1.18.2" - "@oclif/errors" "^1.3.6" - "@oclif/help" "^1.0.1" - "@oclif/parser" "^3.8.17" - debug "^4.1.1" - semver "^7.5.4" - -"@oclif/config@1.18.16": - version "1.18.16" - resolved "https://registry.yarnpkg.com/@oclif/config/-/config-1.18.16.tgz#3235d260ab1eb8388ebb6255bca3dd956249d796" - integrity sha512-VskIxVcN22qJzxRUq+raalq6Q3HUde7sokB7/xk5TqRZGEKRVbFeqdQBxDWwQeudiJEgcNiMvIFbMQ43dY37FA== - dependencies: - "@oclif/errors" "^1.3.6" - "@oclif/parser" "^3.8.16" - debug "^4.3.4" - globby "^11.1.0" - is-wsl "^2.1.1" - tslib "^2.6.1" - -"@oclif/config@1.18.2": - version "1.18.2" - resolved "https://registry.yarnpkg.com/@oclif/config/-/config-1.18.2.tgz#5bfe74a9ba6a8ca3dceb314a81bd9ce2e15ebbfe" - integrity sha512-cE3qfHWv8hGRCP31j7fIS7BfCflm/BNZ2HNqHexH+fDrdF2f1D5S8VmXWLC77ffv3oDvWyvE9AZeR0RfmHCCaA== - 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.13.0", "@oclif/config@^1.15.1", "@oclif/config@^1.16.0", "@oclif/config@^1.17.1", "@oclif/config@^1.18.2": - version "1.18.17" - resolved "https://registry.yarnpkg.com/@oclif/config/-/config-1.18.17.tgz#00aa4049da27edca8f06fc106832d9f0f38786a5" - integrity sha512-k77qyeUvjU8qAJ3XK3fr/QVAqsZO8QOBuESnfeM5HHtPNLSyfVcwiMM2zveSW5xRdLSG3MfV8QnLVkuyCL2ENg== - dependencies: - "@oclif/errors" "^1.3.6" - "@oclif/parser" "^3.8.17" - debug "^4.3.4" - globby "^11.1.0" - is-wsl "^2.1.1" - tslib "^2.6.1" - -"@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== - dependencies: - clean-stack "^3.0.0" - fs-extra "^8.1" - indent-string "^4.0.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -"@oclif/errors@1.3.6", "@oclif/errors@^1.2.2", "@oclif/errors@^1.3.3", "@oclif/errors@^1.3.4", "@oclif/errors@^1.3.5", "@oclif/errors@^1.3.6": - version "1.3.6" - resolved "https://registry.yarnpkg.com/@oclif/errors/-/errors-1.3.6.tgz#e8fe1fc12346cb77c4f274e26891964f5175f75d" - integrity sha512-fYaU4aDceETd89KXP+3cLyg9EHZsLD3RxF2IU9yxahhBpspWjkWi3Dy3bTgcwZ3V47BgxQaGapzJWDM33XIVDQ== - dependencies: - clean-stack "^3.0.0" - fs-extra "^8.1" - indent-string "^4.0.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -"@oclif/help@^1.0.1": - version "1.0.15" - resolved "https://registry.yarnpkg.com/@oclif/help/-/help-1.0.15.tgz#5e36e576b8132a4906d2662204ad9de7ece87e8f" - integrity sha512-Yt8UHoetk/XqohYX76DfdrUYLsPKMc5pgkzsZVHDyBSkLiGRzujVaGZdjr32ckVZU9q3a47IjhWxhip7Dz5W/g== - dependencies: - "@oclif/config" "1.18.16" - "@oclif/errors" "1.3.6" - chalk "^4.1.2" - indent-string "^4.0.0" - lodash "^4.17.21" - string-width "^4.2.0" - strip-ansi "^6.0.0" - widest-line "^3.1.0" - wrap-ansi "^6.2.0" - -"@oclif/linewrap@^1.0.0": - version "1.0.0" - 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.16", "@oclif/parser@^3.8.17", "@oclif/parser@^3.8.3": - version "3.8.17" - resolved "https://registry.yarnpkg.com/@oclif/parser/-/parser-3.8.17.tgz#e1ce0f29b22762d752d9da1c7abd57ad81c56188" - integrity sha512-l04iSd0xoh/16TGVpXb81Gg3z7tlQGrEup16BrVLsZBK6SEYpYHRJZnM32BwZrHI97ZSFfuSwVlzoo6HdsaK8A== - dependencies: - "@oclif/errors" "^1.3.6" - "@oclif/linewrap" "^1.0.0" - chalk "^4.1.0" - tslib "^2.6.2" - -"@oclif/plugin-autocomplete@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@oclif/plugin-autocomplete/-/plugin-autocomplete-0.3.0.tgz#eec788596a88a4ca5170a9103b6c2835119a8fbd" - integrity sha512-gCuIUCswvoU1BxDDvHSUGxW8rFagiacle8jHqE49+WnuniXD/N8NmJvnzmlNyc8qLE192CnKK+qYyAF+vaFQBg== - dependencies: - "@oclif/command" "^1.5.13" - "@oclif/config" "^1.13.0" - chalk "^4.1.0" - cli-ux "^5.2.1" - debug "^4.0.0" - fs-extra "^9.0.1" - moment "^2.22.1" - -"@oclif/plugin-help@^3.2.2": - 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== - dependencies: - "@oclif/command" "^1.8.15" - "@oclif/config" "1.18.2" - "@oclif/errors" "1.3.5" - "@oclif/help" "^1.0.1" - chalk "^4.1.2" - indent-string "^4.0.0" - lodash "^4.17.21" - string-width "^4.2.0" - strip-ansi "^6.0.0" - widest-line "^3.1.0" - wrap-ansi "^6.2.0" - -"@oclif/plugin-update@^1.3.10": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@oclif/plugin-update/-/plugin-update-1.5.0.tgz#a9e0092a9b7ae01e54708938e2a424903f5079ef" - integrity sha512-GsWK1CMeBBO8YknThoOZulj3xE+ZgZAXW1ouNJALXcs3mbROzszLDGjXV3RM6ffbJpnWLiMIqSFNOE8d+vGcgQ== - dependencies: - "@oclif/color" "^0.1.0" - "@oclif/command" "^1.7.0" - "@oclif/config" "^1.16.0" - "@oclif/errors" "^1.3.4" - "@types/semver" "^7.3.4" - cli-ux "^5.5.1" - cross-spawn "^7.0.3" - debug "^4.3.1" - filesize "^6.1.0" - fs-extra "^9.0.1" - http-call "^5.3.0" - lodash "^4.17.21" - log-chopper "^1.0.2" - semver "^7.3.5" - tar-fs "^2.1.1" - -"@oclif/plugin-warn-if-update-available@^1.7.0": - 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.8.6" - "@oclif/config" "^1.17.1" - "@oclif/errors" "^1.3.5" - chalk "^4.1.0" - debug "^4.1.0" - fs-extra "^9.0.1" - http-call "^5.2.2" - lodash "^4.17.21" - semver "^7.3.2" - -"@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== - -"@octokit/auth-token@^2.4.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.5.0.tgz#27c37ea26c205f28443402477ffd261311f21e36" - integrity sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g== - dependencies: - "@octokit/types" "^6.0.3" - -"@octokit/endpoint@^6.0.1": - version "6.0.12" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.12.tgz#3b4d47a4b0e79b1027fb8d75d4221928b2d05658" - integrity sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA== - dependencies: - "@octokit/types" "^6.0.3" - is-plain-object "^5.0.0" - universal-user-agent "^6.0.0" - -"@octokit/openapi-types@^12.11.0": - version "12.11.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-12.11.0.tgz#da5638d64f2b919bca89ce6602d059f1b52d3ef0" - integrity sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ== - -"@octokit/plugin-paginate-rest@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz#004170acf8c2be535aba26727867d692f7b488fc" - integrity sha512-jbsSoi5Q1pj63sC16XIUboklNw+8tL9VOnJsWycWYR78TKss5PVpIPb1TUUcMQ+bBh7cY579cVAWmf5qG+dw+Q== - dependencies: - "@octokit/types" "^2.0.1" - -"@octokit/plugin-request-log@^1.0.0": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" - integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== - -"@octokit/plugin-rest-endpoint-methods@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz#3288ecf5481f68c494dd0602fc15407a59faf61e" - integrity sha512-EZi/AWhtkdfAYi01obpX0DF7U6b1VRr30QNQ5xSFPITMdLSfhcBqjamE3F+sKcxPbD7eZuMHu3Qkk2V+JGxBDQ== - dependencies: - "@octokit/types" "^2.0.1" - deprecation "^2.3.1" - -"@octokit/request-error@^1.0.2": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-1.2.1.tgz#ede0714c773f32347576c25649dc013ae6b31801" - integrity sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA== - dependencies: - "@octokit/types" "^2.0.0" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request-error@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.1.0.tgz#9e150357831bfc788d13a4fd4b1913d60c74d677" - integrity sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg== - dependencies: - "@octokit/types" "^6.0.3" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request@^5.2.0": - version "5.6.3" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.3.tgz#19a022515a5bba965ac06c9d1334514eb50c48b0" - integrity sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A== - dependencies: - "@octokit/endpoint" "^6.0.1" - "@octokit/request-error" "^2.1.0" - "@octokit/types" "^6.16.1" - is-plain-object "^5.0.0" - node-fetch "^2.6.7" - universal-user-agent "^6.0.0" - -"@octokit/rest@^16.43.1": - version "16.43.2" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.43.2.tgz#c53426f1e1d1044dee967023e3279c50993dd91b" - integrity sha512-ngDBevLbBTFfrHZeiS7SAMAZ6ssuVmXuya+F/7RaVvlysgGa1JKJkKWY+jV6TCJYcW0OALfJ7nTIGXcBXzycfQ== - dependencies: - "@octokit/auth-token" "^2.4.0" - "@octokit/plugin-paginate-rest" "^1.1.1" - "@octokit/plugin-request-log" "^1.0.0" - "@octokit/plugin-rest-endpoint-methods" "2.4.0" - "@octokit/request" "^5.2.0" - "@octokit/request-error" "^1.0.2" - atob-lite "^2.0.0" - before-after-hook "^2.0.0" - btoa-lite "^1.0.0" - deprecation "^2.0.0" - lodash.get "^4.4.2" - lodash.set "^4.3.2" - lodash.uniq "^4.5.0" - octokit-pagination-methods "^1.1.0" - once "^1.4.0" - universal-user-agent "^4.0.0" - -"@octokit/types@^2.0.0", "@octokit/types@^2.0.1": - version "2.16.2" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-2.16.2.tgz#4c5f8da3c6fecf3da1811aef678fda03edac35d2" - integrity sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q== - dependencies: - "@types/node" ">= 8" - -"@octokit/types@^6.0.3", "@octokit/types@^6.16.1": - version "6.41.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.41.0.tgz#e58ef78d78596d2fb7df9c6259802464b5f84a04" - integrity sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg== - dependencies: - "@octokit/openapi-types" "^12.11.0" - -"@phenomnomnominal/tsquery@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@phenomnomnominal/tsquery/-/tsquery-3.0.0.tgz#6f2f4dbf6304ff52b12cc7a5b979f20c3794a22a" - integrity sha512-SW8lKitBHWJ9fAYkJ9kJivuctwNYCh3BUxLdH0+XiR1GPBiu+7qiZzh8p8jqlj1LgVC1TbvfNFroaEsmYlL8Iw== - dependencies: - esquery "^1.0.1" - -"@pmmmwh/react-refresh-webpack-plugin@0.5.11": - version "0.5.11" - resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz#7c2268cedaa0644d677e8c4f377bc8fb304f714a" - integrity sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ== - dependencies: - ansi-html-community "^0.0.8" - common-path-prefix "^3.0.0" - core-js-pure "^3.23.3" - error-stack-parser "^2.0.6" - find-up "^5.0.0" - html-entities "^2.1.0" - loader-utils "^2.0.4" - schema-utils "^3.0.0" - source-map "^0.7.3" - -"@popperjs/core@^2.11.8": - version "2.11.8" - resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" - integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== - -"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" - integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== - -"@protobufjs/base64@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" - integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== - -"@protobufjs/codegen@^2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" - integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== - -"@protobufjs/eventemitter@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" - integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== - -"@protobufjs/fetch@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" - integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== - dependencies: - "@protobufjs/aspromise" "^1.1.1" - "@protobufjs/inquire" "^1.1.0" - -"@protobufjs/float@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" - integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== - -"@protobufjs/inquire@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" - integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== - -"@protobufjs/path@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" - integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== - -"@protobufjs/pool@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" - integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== - -"@protobufjs/utf8@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" - integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== - -"@react-native-async-storage/async-storage@^1.19.3": - version "1.23.1" - resolved "https://registry.yarnpkg.com/@react-native-async-storage/async-storage/-/async-storage-1.23.1.tgz#cad3cd4fab7dacfe9838dce6ecb352f79150c883" - integrity sha512-Qd2kQ3yi6Y3+AcUlrHxSLlnBvpdCEMVGFlVBneVOjaFaPU61g1huc38g339ysXspwY1QZA2aNhrk/KlHGO+ewA== - dependencies: - merge-options "^3.0.4" - -"@scure/base@^1.1.1": - version "1.1.6" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.6.tgz#8ce5d304b436e4c84f896e0550c83e4d88cb917d" - integrity sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g== - -"@sentry/core@6.19.7": - version "6.19.7" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.19.7.tgz#156aaa56dd7fad8c89c145be6ad7a4f7209f9785" - integrity sha512-tOfZ/umqB2AcHPGbIrsFLcvApdTm9ggpi/kQZFkej7kMphjT+SGBiQfYtjyg9jcRW+ilAR4JXC9BGKsdEQ+8Vw== - dependencies: - "@sentry/hub" "6.19.7" - "@sentry/minimal" "6.19.7" - "@sentry/types" "6.19.7" - "@sentry/utils" "6.19.7" - tslib "^1.9.3" - -"@sentry/hub@6.19.7": - version "6.19.7" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.19.7.tgz#58ad7776bbd31e9596a8ec46365b45cd8b9cfd11" - integrity sha512-y3OtbYFAqKHCWezF0EGGr5lcyI2KbaXW2Ik7Xp8Mu9TxbSTuwTe4rTntwg8ngPjUQU3SUHzgjqVB8qjiGqFXCA== - dependencies: - "@sentry/types" "6.19.7" - "@sentry/utils" "6.19.7" - tslib "^1.9.3" - -"@sentry/minimal@6.19.7": - version "6.19.7" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.19.7.tgz#b3ee46d6abef9ef3dd4837ebcb6bdfd01b9aa7b4" - integrity sha512-wcYmSJOdvk6VAPx8IcmZgN08XTXRwRtB1aOLZm+MVHjIZIhHoBGZJYTVQS/BWjldsamj2cX3YGbGXNunaCfYJQ== - dependencies: - "@sentry/hub" "6.19.7" - "@sentry/types" "6.19.7" - tslib "^1.9.3" - -"@sentry/node@^6.2.5": - version "6.19.7" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.19.7.tgz#32963b36b48daebbd559e6f13b1deb2415448592" - integrity sha512-gtmRC4dAXKODMpHXKfrkfvyBL3cI8y64vEi3fDD046uqYcrWdgoQsffuBbxMAizc6Ez1ia+f0Flue6p15Qaltg== - dependencies: - "@sentry/core" "6.19.7" - "@sentry/hub" "6.19.7" - "@sentry/types" "6.19.7" - "@sentry/utils" "6.19.7" - cookie "^0.4.1" - https-proxy-agent "^5.0.0" - lru_map "^0.3.3" - tslib "^1.9.3" - -"@sentry/types@6.19.7", "@sentry/types@^6.2.5": - version "6.19.7" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.19.7.tgz#c6b337912e588083fc2896eb012526cf7cfec7c7" - integrity sha512-jH84pDYE+hHIbVnab3Hr+ZXr1v8QABfhx39KknxqKWr2l0oEItzepV0URvbEhB446lk/S/59230dlUUIBGsXbg== - -"@sentry/utils@6.19.7": - version "6.19.7" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.19.7.tgz#6edd739f8185fd71afe49cbe351c1bbf5e7b7c79" - integrity sha512-z95ECmE3i9pbWoXQrD/7PgkBAzJYR+iXtPuTkpBjDKs86O3mT+PXOT3BAn79w2wkn7/i3vOGD2xVr1uiMl26dA== - dependencies: - "@sentry/types" "6.19.7" - tslib "^1.9.3" - -"@servie/events@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@servie/events/-/events-1.0.0.tgz#8258684b52d418ab7b86533e861186638ecc5dc1" - integrity sha512-sBSO19KzdrJCM3gdx6eIxV8M9Gxfgg6iDQmH5TIAGaUu+X9VDdsINXJOnoiZ1Kx3TrHdH4bt5UVglkjsEGBcvw== - -"@sindresorhus/is@^2.0.0": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-2.1.1.tgz#ceff6a28a5b4867c2dd4a1ba513de278ccbe8bb1" - integrity sha512-/aPsuoj/1Dw/kzhkgz+ES6TxG0zfTMGLwuK2ZG00k/iJzYHTLCE8mVU8EPqEOp/lmxPoq1C1C9RYToRKb2KEfg== - -"@sinonjs/commons@^1.7.0": - version "1.8.6" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" - integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" - integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== - dependencies: - "@sinonjs/commons" "^1.7.0" - -"@svgr/babel-plugin-add-jsx-attribute@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906" - integrity sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg== - -"@svgr/babel-plugin-remove-jsx-attribute@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz#6b2c770c95c874654fd5e1d5ef475b78a0a962ef" - integrity sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg== - -"@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz#25621a8915ed7ad70da6cea3d0a6dbc2ea933efd" - integrity sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA== - -"@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz#0b221fc57f9fcd10e91fe219e2cd0dd03145a897" - integrity sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ== - -"@svgr/babel-plugin-svg-dynamic-title@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz#139b546dd0c3186b6e5db4fefc26cb0baea729d7" - integrity sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg== - -"@svgr/babel-plugin-svg-em-dimensions@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz#6543f69526632a133ce5cabab965deeaea2234a0" - integrity sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw== - -"@svgr/babel-plugin-transform-react-native-svg@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz#00bf9a7a73f1cad3948cdab1f8dfb774750f8c80" - integrity sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q== - -"@svgr/babel-plugin-transform-svg-component@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz#583a5e2a193e214da2f3afeb0b9e8d3250126b4a" - integrity sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ== - -"@svgr/babel-preset@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-5.5.0.tgz#8af54f3e0a8add7b1e2b0fcd5a882c55393df327" - integrity sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig== - dependencies: - "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0" - "@svgr/babel-plugin-remove-jsx-attribute" "^5.4.0" - "@svgr/babel-plugin-remove-jsx-empty-expression" "^5.0.1" - "@svgr/babel-plugin-replace-jsx-attribute-value" "^5.0.1" - "@svgr/babel-plugin-svg-dynamic-title" "^5.4.0" - "@svgr/babel-plugin-svg-em-dimensions" "^5.4.0" - "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0" - "@svgr/babel-plugin-transform-svg-component" "^5.5.0" - -"@svgr/core@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/core/-/core-5.5.0.tgz#82e826b8715d71083120fe8f2492ec7d7874a579" - integrity sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ== - dependencies: - "@svgr/plugin-jsx" "^5.5.0" - camelcase "^6.2.0" - cosmiconfig "^7.0.0" - -"@svgr/hast-util-to-babel-ast@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz#5ee52a9c2533f73e63f8f22b779f93cd432a5461" - integrity sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ== - dependencies: - "@babel/types" "^7.12.6" - -"@svgr/plugin-jsx@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz#1aa8cd798a1db7173ac043466d7b52236b369000" - integrity sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA== - dependencies: - "@babel/core" "^7.12.3" - "@svgr/babel-preset" "^5.5.0" - "@svgr/hast-util-to-babel-ast" "^5.5.0" - svg-parser "^2.0.2" - -"@svgr/plugin-svgo@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz#02da55d85320549324e201c7b2e53bf431fcc246" - integrity sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ== - dependencies: - cosmiconfig "^7.0.0" - deepmerge "^4.2.2" - svgo "^1.2.2" - -"@svgr/webpack@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.5.0.tgz#aae858ee579f5fa8ce6c3166ef56c6a1b381b640" - integrity sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g== - dependencies: - "@babel/core" "^7.12.3" - "@babel/plugin-transform-react-constant-elements" "^7.12.1" - "@babel/preset-env" "^7.12.1" - "@babel/preset-react" "^7.12.5" - "@svgr/core" "^5.5.0" - "@svgr/plugin-jsx" "^5.5.0" - "@svgr/plugin-svgo" "^5.5.0" - loader-utils "^2.0.0" - -"@szmarczak/http-timer@^4.0.0": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" - integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== - dependencies: - defer-to-connect "^2.0.0" - -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - -"@tootallnate/once@2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" - integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== - -"@trezor/analytics@1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@trezor/analytics/-/analytics-1.0.5.tgz#a30d6b836cacd12b69848e4044733030507a00e5" - integrity sha512-XpgAsQDi8uZ+PmfCS6KUn+frUqR1ckOY9NdeC0PMGmkTzWm47oatvoyLSy2umd30T9M4h1LJECBqA80XpEV5MA== - dependencies: - "@trezor/env-utils" "1.0.4" - "@trezor/utils" "9.0.11" - -"@trezor/blockchain-link-types@1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@trezor/blockchain-link-types/-/blockchain-link-types-1.0.4.tgz#9b76bf2a2c4b866f03906c5b2bb32df16c99df1f" - integrity sha512-EBX8Fi38mqIRStOQsUNbma1RwEP57B104N77p1CPHML3Kxu6M0DVcTulFKJKAJ6laQyfULzTeUYfEdn//dCcFA== - -"@trezor/blockchain-link-utils@1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@trezor/blockchain-link-utils/-/blockchain-link-utils-1.0.5.tgz#16b568e3ec5b7933b509111da321eb528a84f2d0" - integrity sha512-Kj8Zuy22ApV+FcLhMFdFVMAjbJwS4VaXndkz1OgjF7UHTb0jEJtIk5JSe5KNbvNUsyGcEAn9vZ+RogfZETOVGw== - dependencies: - "@trezor/utils" "9.0.11" - bignumber.js "^9.1.1" - -"@trezor/blockchain-link@2.1.15": - version "2.1.15" - resolved "https://registry.yarnpkg.com/@trezor/blockchain-link/-/blockchain-link-2.1.15.tgz#840f6c85d856230c51d60b201713ee48153c7470" - integrity sha512-Y7QsggFUGk84yKY06eSuS3oTNwH+chz0fuCWMs7aKr4TxXsxILNwzoYg7Erecf+WZuydAdmjZRDT4QbmMUc65g== - dependencies: - "@trezor/blockchain-link-types" "1.0.4" - "@trezor/blockchain-link-utils" "1.0.5" - "@trezor/utils" "9.0.11" - "@trezor/utxo-lib" "1.0.9" - "@types/web" "^0.0.100" - bignumber.js "^9.1.1" - events "^3.3.0" - ripple-lib "^1.10.1" - socks-proxy-agent "6.1.1" - ws "7.5.9" - -"@trezor/connect-analytics@1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@trezor/connect-analytics/-/connect-analytics-1.0.4.tgz#15723402609921b9334e7b2883284d236b24d5d2" - integrity sha512-GLD5CCh6hcXsovxM2Fyns25GbGRCJ3lgFhWQ9WyqkFveI41cwMGCJZuXSyGSWCeMpazOYdvpgyXMqc22J2tatg== - dependencies: - "@trezor/analytics" "1.0.5" - -"@trezor/connect-common@0.0.18": - version "0.0.18" - resolved "https://registry.yarnpkg.com/@trezor/connect-common/-/connect-common-0.0.18.tgz#95c27d0da4f044f58cee2871b0b36a917e2c9597" - integrity sha512-tFian3z2ce/gQpjtFddr5NCKeJEEpV/t+Srb0Sa/STXqY/mTaADzti1aqp+/w4bL+1E2NNdAmCtsCl5AZc4a+A== - dependencies: - "@trezor/env-utils" "1.0.4" - -"@trezor/connect-web@9.1.1": - version "9.1.1" - resolved "https://registry.yarnpkg.com/@trezor/connect-web/-/connect-web-9.1.1.tgz#5317d2d3c570f583f551dd180ea00b3e6bccb401" - integrity sha512-FDwdARtUAITO80bahfU5gR4NS0q85rOvtyCCtwGgbH04JpOvmmoaNgYdXwfYfPaZCd2ZxZZ4omBermVPaE/wvA== - dependencies: - "@trezor/connect" "9.1.1" - "@trezor/utils" "9.0.11" - events "^3.3.0" - -"@trezor/connect@9.1.1": - version "9.1.1" - resolved "https://registry.yarnpkg.com/@trezor/connect/-/connect-9.1.1.tgz#950e0ef937ad80ce0b15b33a5fdc11da8adeb018" - integrity sha512-qIovN55BN5zciRiwIeEAHISjspy9jWkusBntk5z5SFmXw95KG6trms7GCodpbEuueboUS9Ts9xHorYwvqMmweg== - dependencies: - "@trezor/blockchain-link" "2.1.15" - "@trezor/blockchain-link-types" "1.0.4" - "@trezor/connect-analytics" "1.0.4" - "@trezor/connect-common" "0.0.18" - "@trezor/transport" "1.1.14" - "@trezor/utils" "9.0.11" - "@trezor/utxo-lib" "1.0.9" - bignumber.js "^9.1.1" - blakejs "^1.2.1" - bs58 "^5.0.0" - bs58check "^3.0.1" - cross-fetch "^3.1.6" - events "^3.3.0" - randombytes "2.1.0" - -"@trezor/env-utils@1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@trezor/env-utils/-/env-utils-1.0.4.tgz#5e14da94478050cc1315df17694df53740979ddc" - integrity sha512-V9DdjpCH6hyN7AYPEIV1WR44fmgN6d3iF8DtHYNljnMFOaan167DDVq51ZpSPAnyppulIEhdK7kuLDW3KPcnpw== - dependencies: - ua-parser-js "^1.0.35" - -"@trezor/transport@1.1.14": - version "1.1.14" - resolved "https://registry.yarnpkg.com/@trezor/transport/-/transport-1.1.14.tgz#c3dc9a1fbb61e405970715d2a675410596632041" - integrity sha512-KRurYZonsPugKyCJFEEkDi82gjD1lwNDEaROCwQvIHcdXO2spHj1XDlIWa8dgBVrglukJmYutqCzE+RtaMeVVQ== - dependencies: - "@trezor/utils" "9.0.11" - bytebuffer "^5.0.1" - cross-fetch "^3.1.6" - json-stable-stringify "^1.0.2" - long "^4.0.0" - prettier "2.8.8" - protobufjs "7.2.4" - usb "^2.9.0" - -"@trezor/utils@9.0.11": - version "9.0.11" - resolved "https://registry.yarnpkg.com/@trezor/utils/-/utils-9.0.11.tgz#4baaae3c3aa6e4341351205e26ffdd8194e13253" - integrity sha512-HJBgR6/VYjJX8AP/fNIcYC+gDNjP2JLfgYBrT/naupEwDQJcxfn8KgUBrR1/akm61g8CPOot/YEj4o5nXuRt/g== - -"@trezor/utxo-lib@1.0.9": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@trezor/utxo-lib/-/utxo-lib-1.0.9.tgz#434dbfd5e96197dd2d25303d84bb384d6b79a8a9" - integrity sha512-ezLJzAslhW6HVTyZWpfBmrXY5/hz5XKT0FkYRS7lhnf56LwtVPUkLvLqGtDPuV8djF04meXxoRNO8jjtnQgYqA== - dependencies: - "@trezor/utils" "9.0.11" - bchaddrjs "^0.5.2" - bech32 "^2.0.0" - bip66 "^1.1.5" - bitcoin-ops "^1.4.1" - blake-hash "^2.0.0" - blakejs "^1.2.1" - bn.js "^5.2.1" - bs58 "^5.0.0" - bs58check "^3.0.1" - create-hash "^1.2.0" - create-hmac "^1.1.7" - int64-buffer "^1.0.1" - pushdata-bitcoin "^1.0.1" - tiny-secp256k1 "^1.1.6" - typeforce "^1.18.0" - varuint-bitcoin "^1.1.2" - wif "^2.0.6" - -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.3", "@types/babel__core@^7.1.7": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" - integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== - dependencies: - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.8" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" - integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" - integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.20.6" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" - integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== - dependencies: - "@babel/types" "^7.20.7" - -"@types/body-parser@*": - version "1.19.5" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" - integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/bonjour@^3.5.9": - version "3.5.13" - resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.13.tgz#adf90ce1a105e81dd1f9c61fdc5afda1bfb92956" - integrity sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ== - dependencies: - "@types/node" "*" - -"@types/cacheable-request@^6.0.1": - version "6.0.3" - resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" - integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "^3.1.4" - "@types/node" "*" - "@types/responselike" "^1.0.0" - -"@types/connect-history-api-fallback@^1.3.5": - version "1.5.4" - resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz#7de71645a103056b48ac3ce07b3520b819c1d5b3" - integrity sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw== - dependencies: - "@types/express-serve-static-core" "*" - "@types/node" "*" - -"@types/connect@*": - version "3.4.38" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" - integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== - dependencies: - "@types/node" "*" - -"@types/debug@^4.1.5": - version "4.1.12" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" - integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== - dependencies: - "@types/ms" "*" - -"@types/eslint-scope@^3.7.0": - version "3.7.7" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" - integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "8.56.10" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.10.tgz#eb2370a73bf04a901eeba8f22595c7ee0f7eb58d" - integrity sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== - -"@types/estree@^0.0.46": - version "0.0.46" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.46.tgz#0fb6bfbbeabd7a30880504993369c4bf1deab1fe" - integrity sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg== - -"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": - version "4.19.3" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.3.tgz#e469a13e4186c9e1c0418fb17be8bc8ff1b19a7a" - integrity sha512-KOzM7MhcBFlmnlr/fzISFF5vGWVSvN6fTd4T+ExOt08bA/dA5kpSzY52nMsI1KDFmUREpJelPYyuslLRSjjgCg== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" - -"@types/express@*", "@types/express@^4.17.13": - version "4.17.21" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" - integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.33" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/glob@^7.1.1": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" - integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - -"@types/graceful-fs@^4.1.2": - version "4.1.9" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" - integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== - dependencies: - "@types/node" "*" - -"@types/history@^4.7.11": - version "4.7.11" - resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.11.tgz#56588b17ae8f50c53983a524fc3cc47437969d64" - integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== - -"@types/hoist-non-react-statics@^3.3.0", "@types/hoist-non-react-statics@^3.3.1": - version "3.3.5" - resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz#dab7867ef789d87e2b4b0003c9d65c49cc44a494" - integrity sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg== - dependencies: - "@types/react" "*" - hoist-non-react-statics "^3.3.0" - -"@types/html-minifier-terser@^5.0.0": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz#693b316ad323ea97eed6b38ed1a3cc02b1672b57" - integrity sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w== - -"@types/http-cache-semantics@*": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" - integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== - -"@types/http-errors@*": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" - integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== - -"@types/http-proxy@^1.17.8": - version "1.17.14" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.14.tgz#57f8ccaa1c1c3780644f8a94f9c6b5000b5e2eec" - integrity sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w== - dependencies: - "@types/node" "*" - -"@types/inquirer@^8.2.4": - version "8.2.10" - resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-8.2.10.tgz#9444dce2d764c35bc5bb4d742598aaa4acb6561b" - integrity sha512-IdD5NmHyVjWM8SHWo/kPBgtzXatwPkfwzyP3fN1jF2g9BWt5WO+8hL2F4o2GKIYsU40PpqeevuUWvkS/roXJkA== - dependencies: - "@types/through" "*" - rxjs "^7.2.0" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" - integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== - -"@types/istanbul-lib-report@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" - integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" - integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": - version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" - integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - -"@types/keyv@^3.1.1", "@types/keyv@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" - integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== - dependencies: - "@types/node" "*" - -"@types/ledgerhq__hw-transport@^4.21.3": - version "4.21.8" - resolved "https://registry.yarnpkg.com/@types/ledgerhq__hw-transport/-/ledgerhq__hw-transport-4.21.8.tgz#973fedb76ade14307fe85db336373a5a5da54f79" - integrity sha512-uO2AJYZUVCwgyqgyy2/KW+JsQaO0hcwDdubRaHgF2ehO0ngGAY41PbE8qnPnmUw1uerMXONvL68QFioA7Y6C5g== - dependencies: - "@types/node" "*" - -"@types/lodash@^4.14.136": - version "4.17.4" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.4.tgz#0303b64958ee070059e3a7184048a55159fe20b7" - integrity sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ== - -"@types/mdast@^3.0.0", "@types/mdast@^3.0.3": - version "3.0.15" - resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.15.tgz#49c524a263f30ffa28b71ae282f813ed000ab9f5" - integrity sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ== - dependencies: - "@types/unist" "^2" - -"@types/mime@^1": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" - integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== - -"@types/minimatch@*": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" - integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== - -"@types/minimist@^1.2.0": - version "1.2.5" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e" - integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== - -"@types/mocha@^9.1.1": - version "9.1.1" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" - integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== - -"@types/ms@*": - version "0.7.34" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" - integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== - -"@types/node-forge@^1.3.0": - version "1.3.11" - resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.11.tgz#0972ea538ddb0f4d9c2fa0ec5db5724773a604da" - integrity sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ== - dependencies: - "@types/node" "*" - -"@types/node@*", "@types/node@>= 8", "@types/node@>=13.7.0": - version "20.14.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.2.tgz#a5f4d2bcb4b6a87bffcaa717718c5a0f208f4a18" - integrity sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q== - dependencies: - undici-types "~5.26.4" - -"@types/normalize-package-data@^2.4.0": - version "2.4.4" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" - integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== - -"@types/parse-json@^4.0.0": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" - integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== - -"@types/prettier@^2.0.0": - version "2.7.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" - integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== - -"@types/prop-types@*", "@types/prop-types@^15.7.11": - version "15.7.12" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" - integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== - -"@types/q@^1.5.1": - version "1.5.8" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.8.tgz#95f6c6a08f2ad868ba230ead1d2d7f7be3db3837" - integrity sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw== - -"@types/qs@*": - version "6.9.15" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.15.tgz#adde8a060ec9c305a82de1babc1056e73bd64dce" - integrity sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg== - -"@types/range-parser@*": - version "1.2.7" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" - integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== - -"@types/react-intl@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/react-intl/-/react-intl-3.0.0.tgz#a2cce0024b6cfe403be28ccf67f49d720fa810ec" - integrity sha512-k8F3d05XQGEqSWIfK97bBjZe4z9RruXU9Wa7OZ2iUC5pdeIpzuQDZe/9C2J3Xir5//ZtAkhcv08Wfx3n5TBTQg== - dependencies: - react-intl "*" - -"@types/react-redux@^7.1.20": - version "7.1.33" - resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.33.tgz#53c5564f03f1ded90904e3c90f77e4bd4dc20b15" - integrity sha512-NF8m5AjWCkert+fosDsN3hAlHzpjSiXlVy9EgQEmLoBhaNXbmyeGs/aj5dQzKuF+/q+S7JQagorGDW8pJ28Hmg== - dependencies: - "@types/hoist-non-react-statics" "^3.3.0" - "@types/react" "*" - hoist-non-react-statics "^3.3.0" - redux "^4.0.0" - -"@types/react-router-dom@^5.3.3": - version "5.3.3" - resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83" - integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw== - dependencies: - "@types/history" "^4.7.11" - "@types/react" "*" - "@types/react-router" "*" - -"@types/react-router@*": - version "5.1.20" - resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.20.tgz#88eccaa122a82405ef3efbcaaa5dcdd9f021387c" - integrity sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q== - dependencies: - "@types/history" "^4.7.11" - "@types/react" "*" - -"@types/react-transition-group@^4.4.10", "@types/react-transition-group@^4.4.5": - version "4.4.10" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.10.tgz#6ee71127bdab1f18f11ad8fb3322c6da27c327ac" - integrity sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q== - dependencies: - "@types/react" "*" - -"@types/react@*", "@types/react@16 || 17 || 18": - version "18.3.3" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.3.tgz#9679020895318b0915d7a3ab004d92d33375c45f" - integrity sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw== - dependencies: - "@types/prop-types" "*" - csstype "^3.0.2" - -"@types/responselike@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50" - integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== - dependencies: - "@types/node" "*" - -"@types/retry@0.12.0": - version "0.12.0" - resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" - integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== - -"@types/schema-utils@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/schema-utils/-/schema-utils-1.0.0.tgz#295d36f01e2cb8bc3207ca1d9a68e210db6b40cb" - integrity sha512-YesPanU1+WCigC/Aj1Mga8UCOjHIfMNHZ3zzDsUY7lI8GlKnh/Kv2QwJOQ+jNQ36Ru7IfzSedlG14hppYaN13A== - -"@types/semver@^7.3.4": - version "7.5.8" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" - integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== - -"@types/send@*": - version "0.17.4" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" - integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== - dependencies: - "@types/mime" "^1" - "@types/node" "*" - -"@types/serve-index@^1.9.1": - version "1.9.4" - resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.4.tgz#e6ae13d5053cb06ed36392110b4f9a49ac4ec898" - integrity sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug== - dependencies: - "@types/express" "*" - -"@types/serve-static@*", "@types/serve-static@^1.13.10": - version "1.15.7" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" - integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== - dependencies: - "@types/http-errors" "*" - "@types/node" "*" - "@types/send" "*" - -"@types/sockjs@^0.3.33": - version "0.3.36" - resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535" - integrity sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q== - dependencies: - "@types/node" "*" - -"@types/stack-utils@^2.0.0": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" - integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== - -"@types/through@*": - version "0.0.33" - resolved "https://registry.yarnpkg.com/@types/through/-/through-0.0.33.tgz#14ebf599320e1c7851e7d598149af183c6b9ea56" - integrity sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ== - dependencies: - "@types/node" "*" - -"@types/tough-cookie@^4.0.2": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304" - integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== - -"@types/unist@^2", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": - version "2.0.10" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.10.tgz#04ffa7f406ab628f7f7e97ca23e290cd8ab15efc" - integrity sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA== - -"@types/w3c-web-usb@^1.0.6": - version "1.0.10" - resolved "https://registry.yarnpkg.com/@types/w3c-web-usb/-/w3c-web-usb-1.0.10.tgz#cf89cccd2d93b6245e784c19afe0a9f5038d4528" - integrity sha512-CHgUI5kTc/QLMP8hODUHhge0D4vx+9UiAwIGiT0sTy/B2XpdX1U5rJt6JSISgr6ikRT7vxV9EVAFeYZqUnl1gQ== - -"@types/web@^0.0.100": - version "0.0.100" - resolved "https://registry.yarnpkg.com/@types/web/-/web-0.0.100.tgz#174f5952c40ab0940b0aa04e76d2f2776005b8c6" - integrity sha512-8NDSrDsyF7qv93SQ7aNFk0NqpNb1QEC1meoEZW/+KGMHZWd0WOC2DiT9pVhS5+w5q+u9+2bkBCfUQpe9wbqiPA== - -"@types/ws@^7.2.0": - version "7.4.7" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" - integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== - dependencies: - "@types/node" "*" - -"@types/ws@^8.5.5": - version "8.5.10" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787" - integrity sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== - dependencies: - "@types/node" "*" - -"@types/yargs-parser@*": - version "21.0.3" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" - integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== - -"@types/yargs@^15.0.0": - version "15.0.19" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.19.tgz#328fb89e46109ecbdb70c295d96ff2f46dfd01b9" - integrity sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA== - dependencies: - "@types/yargs-parser" "*" - -"@vespaiach/axios-fetch-adapter@^0.3.0": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@vespaiach/axios-fetch-adapter/-/axios-fetch-adapter-0.3.1.tgz#b0c08167bec9cc558f578a1b9ccff52ead1cf1cb" - integrity sha512-+1F52VWXmQHSRFSv4/H0wtnxfvjRMPK5531e880MIjypPdUSX6QZuoDgEVeCE1vjhzDdxCVX7rOqkub7StEUwQ== - -"@webassemblyjs/ast@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.0.tgz#a5aa679efdc9e51707a4207139da57920555961f" - integrity sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - -"@webassemblyjs/floating-point-hex-parser@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz#34d62052f453cd43101d72eab4966a022587947c" - integrity sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA== - -"@webassemblyjs/helper-api-error@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz#aaea8fb3b923f4aaa9b512ff541b013ffb68d2d4" - integrity sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w== - -"@webassemblyjs/helper-buffer@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz#d026c25d175e388a7dbda9694e91e743cbe9b642" - integrity sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA== - -"@webassemblyjs/helper-numbers@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz#7ab04172d54e312cc6ea4286d7d9fa27c88cd4f9" - integrity sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.0" - "@webassemblyjs/helper-api-error" "1.11.0" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz#85fdcda4129902fe86f81abf7e7236953ec5a4e1" - integrity sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA== - -"@webassemblyjs/helper-wasm-section@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz#9ce2cc89300262509c801b4af113d1ca25c1a75b" - integrity sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-buffer" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/wasm-gen" "1.11.0" - -"@webassemblyjs/ieee754@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz#46975d583f9828f5d094ac210e219441c4e6f5cf" - integrity sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.0.tgz#f7353de1df38aa201cba9fb88b43f41f75ff403b" - integrity sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.0.tgz#86e48f959cf49e0e5091f069a709b862f5a2cadf" - integrity sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw== - -"@webassemblyjs/wasm-edit@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz#ee4a5c9f677046a210542ae63897094c2027cb78" - integrity sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-buffer" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/helper-wasm-section" "1.11.0" - "@webassemblyjs/wasm-gen" "1.11.0" - "@webassemblyjs/wasm-opt" "1.11.0" - "@webassemblyjs/wasm-parser" "1.11.0" - "@webassemblyjs/wast-printer" "1.11.0" - -"@webassemblyjs/wasm-gen@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz#3cdb35e70082d42a35166988dda64f24ceb97abe" - integrity sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/ieee754" "1.11.0" - "@webassemblyjs/leb128" "1.11.0" - "@webassemblyjs/utf8" "1.11.0" - -"@webassemblyjs/wasm-opt@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz#1638ae188137f4bb031f568a413cd24d32f92978" - integrity sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-buffer" "1.11.0" - "@webassemblyjs/wasm-gen" "1.11.0" - "@webassemblyjs/wasm-parser" "1.11.0" - -"@webassemblyjs/wasm-parser@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz#3e680b8830d5b13d1ec86cc42f38f3d4a7700754" - integrity sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-api-error" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/ieee754" "1.11.0" - "@webassemblyjs/leb128" "1.11.0" - "@webassemblyjs/utf8" "1.11.0" - -"@webassemblyjs/wast-printer@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz#680d1f6a5365d6d401974a8e949e05474e1fab7e" - integrity sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@xtuc/long" "4.2.2" - -"@webpack-cli/configtest@^1.0.1": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.2.0.tgz#7b20ce1c12533912c3b217ea68262365fa29a6f5" - integrity sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg== - -"@webpack-cli/info@^1.2.2": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.5.0.tgz#6c78c13c5874852d6e2dd17f08a41f3fe4c261b1" - integrity sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ== - dependencies: - envinfo "^7.7.3" - -"@webpack-cli/serve@^1.3.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.7.0.tgz#e1993689ac42d2b16e9194376cfb6753f6254db1" - integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q== - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -"@yoroi/api@1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@yoroi/api/-/api-1.5.0.tgz#0f69ec1632b0fd91227c5a983b35e19ef386dec4" - integrity sha512-NDBooUvBn/1dk3wSF1elNhRxuxE5qSsqA6V6kcYPrb/vCWPQlom1T/zouPfT9Vfyc/eHDDZxz83/6dOIw3W4QA== - dependencies: - "@emurgo/cip14-js" "^3.0.1" - "@yoroi/common" "1.5.0" - axios "^1.5.0" - zod "^3.22.1" - -"@yoroi/api@1.5.1": - version "1.5.1" - resolved "https://registry.yarnpkg.com/@yoroi/api/-/api-1.5.1.tgz#079d2f0efa85ea1ce2a3e444a377fbf2e2d6f8d7" - integrity sha512-upwmeE1a9pdykkDMBRl1Ubwvb4YDWbK5M3OKHAA9b0iKivpblo+vhjOqyqfaaUqRR5GdCljkgvJuaJLYqd0PVA== - dependencies: - "@emurgo/cip14-js" "^3.0.1" - "@yoroi/common" "1.5.1" - axios "^1.5.0" - zod "^3.22.1" - -"@yoroi/common@1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@yoroi/common/-/common-1.5.0.tgz#1c8714de630b1c1e2e6f8820bb29d155be511065" - integrity sha512-MSKqDSGQ8Iv18f2KCxkIl+I+nPHLww/2Y1jBiHvgaSEQ6MoN6rZsV+CIoPorSAhcc/mIiWX7gl3sdfU7trsiUQ== - dependencies: - axios "^1.5.0" - zod "^3.22.1" - -"@yoroi/common@1.5.1": - version "1.5.1" - resolved "https://registry.yarnpkg.com/@yoroi/common/-/common-1.5.1.tgz#0fca4c400e076e829acc44ef629eae1310b9e3b4" - integrity sha512-ifOdu0wOoXUqMAWfsK05UAQIBytUHK6W60P5gdcBDjg7s28IykxRP7h0MnbGocgV89p5Sdyd/10yb0eRh2o+Nw== - dependencies: - axios "^1.5.0" - zod "^3.22.1" - -"@yoroi/common@1.5.2": - version "1.5.2" - resolved "https://registry.yarnpkg.com/@yoroi/common/-/common-1.5.2.tgz#a768cf1e280697b41352eb92b5aff68c7ba76088" - integrity sha512-RBmWIqcZr7SrJTnbIhAlf4WzqGuaO6Lt+Bj/RkWlH0hFkETg7kqaXBmxrRN/ZrwngB+1XXXlRL2Zz21sqwLy/A== - dependencies: - "@yoroi/types" "1.5.4" - -"@yoroi/exchange@2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@yoroi/exchange/-/exchange-2.0.1.tgz#f7b31c0662bcf7be89e6900e708a3c0e382c6677" - integrity sha512-NK2Z0ektfkiD73lRIQQDHmXg5L26rQ1K3YaLLElSCsnR2jFWxJNTCY/xpX9/y3pB+jtuIP6B0NxvHKM+6PK1GQ== - dependencies: - "@yoroi/common" "1.5.2" - "@yoroi/types" "1.5.4" - optionalDependencies: - "@react-native-async-storage/async-storage" "^1.19.3" - -"@yoroi/resolver@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@yoroi/resolver/-/resolver-2.0.2.tgz#dcf04f72cf1c7c00bd865fa1b5db928b53235425" - integrity sha512-Oc57u66flJOxJIkOWxLZQoiU9pfGPXfJLXGpsh8PCwMxhu18+EZM+CXTEbPHoX3cakGQbjnmjWcjNyBMh8gtig== - dependencies: - "@yoroi/api" "1.5.0" - "@yoroi/common" "1.5.0" - axios "^1.5.0" - zod "^3.22.2" - -"@yoroi/staking@^1.5.1": - version "1.5.1" - resolved "https://registry.yarnpkg.com/@yoroi/staking/-/staking-1.5.1.tgz#d77951f03d38ebb2b296af16ee7e541888c03169" - integrity sha512-CgJhPR7rf07QSstwdhPt5C+P8jNuZiqv3s4+ODlj8x60johIl6/5sz2vt+zGcx4R8pzFw1D/pDyFmdw0BDvzlg== - dependencies: - "@emurgo/cip14-js" "^3.0.1" - bech32 "^2.0.0" - bip39 "^3.1.0" - immer "^10.0.2" - optionalDependencies: - "@react-native-async-storage/async-storage" "^1.19.3" - -"@yoroi/swap@1.5.2": - version "1.5.2" - resolved "https://registry.yarnpkg.com/@yoroi/swap/-/swap-1.5.2.tgz#143435da53ac03e9fc7815e3c7cde1b5fe4f30c1" - integrity sha512-kC3ER0TfEd3fmxlAqQt/mzrFbd/JRyzHhXxPCkyQPzEX2sYMgZDJh+TJOwLpanSG71LwQHpY3YXDJJuzFJUnCQ== - dependencies: - "@emurgo/cip14-js" "^3.0.1" - "@yoroi/api" "1.5.1" - "@yoroi/common" "1.5.1" - immer "^10.0.2" - optionalDependencies: - "@react-native-async-storage/async-storage" "^1.19.3" - -"@yoroi/types@1.5.4": - version "1.5.4" - resolved "https://registry.yarnpkg.com/@yoroi/types/-/types-1.5.4.tgz#6e2a1605785e828e5d5cf7f8bc7b8e344448aea5" - integrity sha512-Hk3YHG6glQcStNjkwgDI+pWfLNfFGk+N3Iz8Iv/t+8mVFU4tZy4ZQYwtx5IIRVTwrl62maGlH9/84rwXp2u3Yw== - -abab@^2.0.3, abab@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - -acorn-jsx@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn@^7.1.1, acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.0.4, acorn@^8.2.4, acorn@^8.8.2: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -agent-base@6, agent-base@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agentkeepalive@^4.1.3, agentkeepalive@^4.2.1: - version "4.5.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" - integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== - dependencies: - humanize-ms "^1.2.1" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv-formats@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" - integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== - dependencies: - ajv "^8.0.0" - -ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv-keywords@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" - integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== - dependencies: - fast-deep-equal "^3.1.3" - -ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.0, ajv@^8.0.1, ajv@^8.9.0: - version "8.16.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.16.0.tgz#22e2a92b94f005f7e0f9c9d39652ef0b8f6f0cb4" - integrity sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw== - dependencies: - fast-deep-equal "^3.1.3" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.4.1" - -ansi-colors@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - -ansi-escapes@^4.2.1, ansi-escapes@^4.3.0, ansi-escapes@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-html-community@0.0.8, ansi-html-community@^0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" - integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== - -ansi-html@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" - integrity sha512-JoAxEa1DfP9m2xfB/y2r/aKcwXNlltr4+0QSBC4TrLfcxyvepX2Pv0t/xpgGV5bGsDzCYV8SzjWgyCW0T9yYbA== - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== - -ansi-regex@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" - integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== - -ansi-regex@^5.0.0, ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0, ansi-styles@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansicolors@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" - integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg== - -antlr4ts@^0.5.0-alpha.4: - version "0.5.0-alpha.4" - resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" - integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -anymatch@^3.0.3, anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -"aproba@^1.0.3 || ^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -archiver-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2" - integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw== - dependencies: - glob "^7.1.4" - graceful-fs "^4.2.0" - lazystream "^1.0.0" - lodash.defaults "^4.2.0" - lodash.difference "^4.5.0" - lodash.flatten "^4.4.0" - lodash.isplainobject "^4.0.6" - lodash.union "^4.6.0" - normalize-path "^3.0.0" - readable-stream "^2.0.0" - -archiver@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/archiver/-/archiver-3.1.1.tgz#9db7819d4daf60aec10fe86b16cb9258ced66ea0" - integrity sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg== - dependencies: - archiver-utils "^2.1.0" - async "^2.6.3" - buffer-crc32 "^0.2.1" - glob "^7.1.4" - readable-stream "^3.4.0" - tar-stream "^2.1.0" - zip-stream "^2.1.2" - -are-we-there-yet@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" - integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -"argparse@~ 0.1.11": - version "0.1.16" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-0.1.16.tgz#cfd01e0fbba3d6caed049fbd758d40f65196f57c" - integrity sha512-LjmC2dNpdn2L4UzyoaIr11ELYoLn37ZFy9zObrQFHsSuOepeUEMKnM8w5KL4Tnrp2gy88rRuQt6Ky8Bjml+Baw== - dependencies: - underscore "~1.7.0" - underscore.string "~2.4.0" - -aria-query@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" - integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== - dependencies: - "@babel/runtime" "^7.10.2" - "@babel/runtime-corejs3" "^7.10.2" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== - -array-buffer-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" - integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== - dependencies: - call-bind "^1.0.5" - is-array-buffer "^3.0.4" - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -array-includes@^3.1.1, array-includes@^3.1.6: - version "3.1.8" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" - integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.4" - is-string "^1.0.7" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== - -array.prototype.flat@^1.2.3, array.prototype.flat@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" - integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -array.prototype.flatmap@^1.2.3: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" - integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -array.prototype.reduce@^1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz#6aadc2f995af29cb887eb866d981dc85ab6f7dc7" - integrity sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-array-method-boxes-properly "^1.0.0" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - is-string "^1.0.7" - -arraybuffer.prototype.slice@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" - integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== - dependencies: - array-buffer-byte-length "^1.0.1" - call-bind "^1.0.5" - define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.2.1" - get-intrinsic "^1.2.3" - is-array-buffer "^3.0.4" - is-shared-array-buffer "^1.0.2" - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== - -asn1.js@^4.10.1: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" - integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -asn1@^0.2.4: - version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -assert@2.1.0, assert@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-2.1.0.tgz#6d92a238d05dc02e7427c881fb8be81c8448b2dd" - integrity sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw== - dependencies: - call-bind "^1.0.2" - is-nan "^1.3.2" - object-is "^1.1.5" - object.assign "^4.1.4" - util "^0.12.5" - -assertion-error@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" - integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== - -ast-types-flow@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" - integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -async-foreach@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" - integrity sha512-VUeSMD8nEGBWaZK4lizI1sf3yEC7pnAQ/mrI7pC2fBz2s/tq5jWWEngTwaf0Gruu/OoXRGLGg1XFqpYBiGTYJA== - -async-mutex@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.5.0.tgz#353c69a0b9e75250971a64ac203b0ebfddd75482" - integrity sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA== - dependencies: - tslib "^2.4.0" - -async@^2.6.3: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -atob-lite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696" - integrity sha512-LEeSAWeh2Gfa2FtlQE1shxQ8zi5F9GHarrGKz08TMdODD5T4eH6BMsvtnhbWZ+XQn+Gb6om/917ucvRu7l7ukw== - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -autoprefixer@10.2.4: - version "10.2.4" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.2.4.tgz#c0e7cf24fcc6a1ae5d6250c623f0cb8beef2f7e1" - integrity sha512-DCCdUQiMD+P/as8m3XkeTUkUKuuRqLGcwD0nll7wevhqoJfMRpJlkFd1+MQh1pvupjiQuip42lc/VFvfUTMSKw== - dependencies: - browserslist "^4.16.1" - caniuse-lite "^1.0.30001181" - colorette "^1.2.1" - fraction.js "^4.0.13" - normalize-range "^0.1.2" - postcss-value-parser "^4.1.0" - -available-typed-arrays@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" - integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== - dependencies: - possible-typed-array-names "^1.0.0" - -axe-core@^4.0.2: - version "4.9.1" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.9.1.tgz#fcd0f4496dad09e0c899b44f6c4bb7848da912ae" - integrity sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw== - -axios@0.21.1: - version "0.21.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" - integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== - dependencies: - follow-redirects "^1.10.0" - -axios@^0.24.0: - version "0.24.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.24.0.tgz#804e6fa1e4b9c5288501dd9dff56a7a0940d20d6" - integrity sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA== - dependencies: - follow-redirects "^1.14.4" - -axios@^0.27.2: - version "0.27.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" - integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== - dependencies: - follow-redirects "^1.14.9" - form-data "^4.0.0" - -axios@^1.5.0: - version "1.7.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.2.tgz#b625db8a7051fbea61c35a3cbb3a1daa7b9c7621" - integrity sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw== - dependencies: - follow-redirects "^1.15.6" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -axobject-query@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" - integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== - -b4a@^1.0.1: - version "1.6.6" - resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.6.tgz#a4cc349a3851987c3c4ac2d7785c18744f6da9ba" - integrity sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg== - -babel-eslint@11.0.0-beta.2: - version "11.0.0-beta.2" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-11.0.0-beta.2.tgz#de1f06795aa0d8cedcf6ac943e63056f5b4a7048" - integrity sha512-D2tunrOu04XloEdU2XVUminUu25FILlGruZmffqH5OSnLDhCheKNvUoM1ihrexdUvhizlix8bjqRnsss4V/UIQ== - dependencies: - eslint-scope "5.0.0" - eslint-visitor-keys "^1.1.0" - semver "^6.3.0" - -babel-helper-is-react-class@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/babel-helper-is-react-class/-/babel-helper-is-react-class-1.0.0.tgz#ef6f3678b05c76dbdeedadead7af98c2724d8431" - integrity sha512-9rulVgj7gg5/m33Z2zcYov042fe4WcNDGT52M0S5RjiNREg6Izreo/beEdAAiQTSnkb6/tzJ5c2cNaZN3fYHVw== - -babel-jest@26.6.3, babel-jest@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" - integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== - dependencies: - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/babel__core" "^7.1.7" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^26.6.2" - chalk "^4.0.0" - graceful-fs "^4.2.4" - slash "^3.0.0" - -babel-loader@8.2.2: - version "8.2.2" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" - integrity sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g== - dependencies: - find-cache-dir "^3.3.1" - loader-utils "^1.4.0" - make-dir "^3.1.0" - schema-utils "^2.6.5" - -babel-plugin-add-module-exports@1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-1.0.4.tgz#6caa4ddbe1f578c6a5264d4d3e6c8a2720a7ca2b" - integrity sha512-g+8yxHUZ60RcyaUpfNzy56OtWW+x9cyEe9j+CranqLiqbju2yf/Cy6ZtYK40EZxtrdHllzlVZgLmcOUCTlJ7Jg== - -babel-plugin-dynamic-import-node@2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - -babel-plugin-istanbul@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^5.0.4" - test-exclude "^6.0.0" - -babel-plugin-jest-hoist@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" - integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" - "@types/babel__traverse" "^7.0.6" - -babel-plugin-macros@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" - integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== - dependencies: - "@babel/runtime" "^7.12.5" - cosmiconfig "^7.0.0" - resolve "^1.19.0" - -babel-plugin-module-resolver@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-4.1.0.tgz#22a4f32f7441727ec1fbf4967b863e1e3e9f33e2" - integrity sha512-MlX10UDheRr3lb3P0WcaIdtCSRlxdQsB1sBqL7W0raF070bGl1HQQq5K3T2vf2XAYie+ww+5AKC/WrkjRO2knA== - dependencies: - find-babel-config "^1.2.0" - glob "^7.1.6" - pkg-up "^3.1.0" - reselect "^4.0.0" - resolve "^1.13.1" - -babel-plugin-nameof-js@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/babel-plugin-nameof-js/-/babel-plugin-nameof-js-0.0.2.tgz#7c9aa8af0026bd9e355004235a337c132753fdf3" - integrity sha512-QEChcRcANBjM9PcFb8JvuD/OaYY326sxzEcmAVkdJjvRcTapv3JLfFA79fC5RCyVbHoVcBUjGycrZnvmb+8Icw== - -babel-plugin-polyfill-corejs2@^0.4.10: - version "0.4.11" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" - integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== - dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.6.2" - semver "^6.3.1" - -babel-plugin-polyfill-corejs3@^0.10.4: - version "0.10.4" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz#789ac82405ad664c20476d0233b485281deb9c77" - integrity sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.1" - core-js-compat "^3.36.1" - -babel-plugin-polyfill-regenerator@^0.6.1: - version "0.6.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" - integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.2" - -babel-plugin-react-intl@5.1.18: - version "5.1.18" - resolved "https://registry.yarnpkg.com/babel-plugin-react-intl/-/babel-plugin-react-intl-5.1.18.tgz#7713c1fdf0055b606d67e2d1624a2e583a1fcdb7" - integrity sha512-tzzZoGDNQOiHmGFh+NPQJDpC10RbKlfw1CBVfALulqRa6UGkAv5eMs9sirxjhD3HryHPbYZ4x5FNdbzOyG2GJw== - dependencies: - "@babel/core" "^7.7.2" - "@babel/helper-plugin-utils" "^7.0.0" - "@types/babel__core" "^7.1.3" - "@types/schema-utils" "^1.0.0" - fs-extra "^8.1.0" - intl-messageformat-parser "^3.6.4" - schema-utils "^2.2.0" - -babel-plugin-transform-react-constant-elements@^6.5.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-constant-elements/-/babel-plugin-transform-react-constant-elements-6.23.0.tgz#2f119bf4d2cdd45eb9baaae574053c604f6147dd" - integrity sha512-22TG15ONh0FWXj98Y5KOpMmEfDIMJa66rg58LzxssT0LUEFN8utkM1NmBEBx1WKkJFa6spK9aR4yLbDQntPxhg== - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-react-inline-elements@^6.6.5: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-inline-elements/-/babel-plugin-transform-react-inline-elements-6.22.0.tgz#6687211a32b49a52f22c573a2b5504a25ef17c53" - integrity sha512-+MtsC5c6n97B7+Ai76yJK9IZR/BLuTT5nljbNEC3iQ9ukaNOKqJG42WnOtLkVs6n52Tazpe7hwK0Ngn/2NoOYQ== - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-react-pure-class-to-function@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-pure-class-to-function/-/babel-plugin-transform-react-pure-class-to-function-1.0.1.tgz#32a649c97d653250b419cfd1489331b0290d9ee4" - integrity sha512-gKq6ZjnblsWqlDazV8u3JU/gIovFa1XyCqwqJAfR+C/k1FiSYISKKI9L2bSYKOMX3Yn5QUKIVX23uE3kNTaQkg== - dependencies: - babel-helper-is-react-class "^1.0.0" - -babel-plugin-transform-react-remove-prop-types@^0.2.5: - version "0.2.12" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.2.12.tgz#3406696df0b8b456089f9d726d27e7e123d2f929" - integrity sha512-vvo7Bj6fAcs41BegHABNBe4fDArkjwXkoGIwb77+WwCBxArPgYNDnaD3d3HdcNrP2F75oigEBEkPpAb5EMuaQA== - -babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== - dependencies: - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-import-meta" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - -babel-preset-jest@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" - integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== - dependencies: - babel-plugin-jest-hoist "^26.6.2" - babel-preset-current-node-syntax "^1.0.0" - -babel-preset-react-optimize@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-react-optimize/-/babel-preset-react-optimize-1.0.1.tgz#c23509fba7cbc76d7de7050e7d26bcd22bc304e8" - integrity sha512-tmB6WqvJ137CQ5a4c4tYHutAc05EQi0zr1hj55Lmqiseg6gYWrE4J5r55eRJkJNVVkjxpvIDkVbAcdSbT8b5Sw== - dependencies: - babel-plugin-transform-react-constant-elements "^6.5.0" - babel-plugin-transform-react-inline-elements "^6.6.5" - babel-plugin-transform-react-pure-class-to-function "^1.0.1" - babel-plugin-transform-react-remove-prop-types "^0.2.5" - -babel-runtime@^6.22.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g== - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -bail@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" - integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== - -balanced-match@^0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" - integrity sha512-STw03mQKnGUYtoNjmowo4F2cRmIIxYEGiMsjjwla/u5P1lxadj/05WkNaFjNiKTgJkj8KiXbgAiRTmcQRwQNtg== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base-x@^3.0.2, base-x@^3.0.5, base-x@^3.0.9: - version "3.0.9" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" - integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== - dependencies: - safe-buffer "^5.0.1" - -base-x@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-4.0.0.tgz#d0e3b7753450c73f8ad2389b5c018a4af7b2224a" - integrity sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -batch@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== - -bchaddrjs@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/bchaddrjs/-/bchaddrjs-0.5.2.tgz#1f52b5077329774e7c82d4882964628106bb11a0" - integrity sha512-OO7gIn3m7ea4FVx4cT8gdlWQR2+++EquhdpWQJH9BQjK63tJJ6ngB3QMZDO6DiBoXiIGUsTPHjlrHVxPGcGxLQ== - dependencies: - bs58check "2.1.2" - buffer "^6.0.3" - cashaddrjs "0.4.4" - stream-browserify "^3.0.0" - -bech32@2.0.0, bech32@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/bech32/-/bech32-2.0.0.tgz#078d3686535075c8c79709f054b1b226a133b355" - integrity sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg== - -bech32@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" - integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== - -before-after-hook@^2.0.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" - integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== - -big-integer@1.6.36: - version "1.6.36" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.36.tgz#78631076265d4ae3555c04f85e7d9d2f3a071a36" - integrity sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg== - -big-integer@^1.6.16, big-integer@^1.6.17, big-integer@^1.6.48: - version "1.6.52" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85" - integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg== - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -bignumber.js@9.1.2, bignumber.js@^9.0.0, bignumber.js@^9.0.1, bignumber.js@^9.1.0, bignumber.js@^9.1.1: - version "9.1.2" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" - integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== - -binary-extensions@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" - integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== - -binary@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" - integrity sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg== - dependencies: - buffers "~0.1.1" - chainsaw "~0.1.0" - -bindings@^1.2.1, bindings@^1.3.0, bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -bip32@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/bip32/-/bip32-4.0.0.tgz#7fac3c05072188d2d355a4d6596b37188f06aa2f" - integrity sha512-aOGy88DDlVUhspIXJN+dVEtclhIsfAUppD43V0j40cPTld3pv/0X/MlrZSZ6jowIaQQzFwP8M6rFU2z2mVYjDQ== - dependencies: - "@noble/hashes" "^1.2.0" - "@scure/base" "^1.1.1" - typeforce "^1.11.5" - wif "^2.0.6" - -bip39@3.1.0, bip39@^3.0.4, bip39@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bip39/-/bip39-3.1.0.tgz#c55a418deaf48826a6ceb34ac55b3ee1577e18a3" - integrity sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A== - dependencies: - "@noble/hashes" "^1.2.0" - -bip66@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/bip66/-/bip66-1.1.5.tgz#01fa8748785ca70955d5011217d1b3139969ca22" - integrity sha512-nemMHz95EmS38a26XbbdxIYj5csHd3RMP3H5bwQknX0WYHF01qhpufP42mLOwVICuH2JmhIhXiWs89MfUGL7Xw== - dependencies: - safe-buffer "^5.0.1" - -bitcoin-ops@^1.3.0, bitcoin-ops@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/bitcoin-ops/-/bitcoin-ops-1.4.1.tgz#e45de620398e22fd4ca6023de43974ff42240278" - integrity sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow== - -bl@^4.0.3, bl@^4.1.0: - 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" - -blake-hash@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/blake-hash/-/blake-hash-2.0.0.tgz#af184dce641951126d05b7d1c3de3224f538d66e" - integrity sha512-Igj8YowDu1PRkRsxZA7NVkdFNxH5rKv5cpLxQ0CVXSIA77pVYwCPRQJ2sMew/oneUpfuYRyjG6r8SmmmnbZb1w== - dependencies: - node-addon-api "^3.0.0" - node-gyp-build "^4.2.2" - readable-stream "^3.6.0" - -blake2@^4.0.2: - version "4.1.1" - resolved "https://registry.yarnpkg.com/blake2/-/blake2-4.1.1.tgz#0c23524776ebbf76b3ffecb6fa73422a33f20526" - integrity sha512-HUmkY0MUDUVgejJVNrpNKAva8C4IWD/Rd862sdexoSibu86b6iu0gO0/RjovO2lM5+w6JqjIEmkuAgGhfHlnJw== - dependencies: - nan "^2.15.0" - -blake2b-wasm@^1.1.0: - version "1.1.7" - resolved "https://registry.yarnpkg.com/blake2b-wasm/-/blake2b-wasm-1.1.7.tgz#e4d075da10068e5d4c3ec1fb9accc4d186c55d81" - integrity sha512-oFIHvXhlz/DUgF0kq5B1CqxIDjIJwh9iDeUUGQUcvgiGz7Wdw03McEO7CfLBy7QKGdsydcMCgO9jFNBAFCtFcA== - dependencies: - nanoassert "^1.0.0" - -blake2b-wasm@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/blake2b-wasm/-/blake2b-wasm-2.4.0.tgz#9115649111edbbd87eb24ce7c04b427e4e2be5be" - integrity sha512-S1kwmW2ZhZFFFOghcx73+ZajEfKBqhP82JMssxtLVMxlaPea1p9uoLiUZ5WYyHn0KddwbLc+0vh4wR0KBNoT5w== - dependencies: - b4a "^1.0.1" - nanoassert "^2.0.0" - -blake2b@2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/blake2b/-/blake2b-2.1.3.tgz#f5388be424768e7c6327025dad0c3c6d83351bca" - integrity sha512-pkDss4xFVbMb4270aCyGD3qLv92314Et+FsKzilCLxDz5DuZ2/1g3w4nmBbu6nKApPspnjG7JcwTjGZnduB1yg== - dependencies: - blake2b-wasm "^1.1.0" - nanoassert "^1.0.0" - -blake2b@2.1.4, blake2b@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/blake2b/-/blake2b-2.1.4.tgz#817d278526ddb4cd673bfb1af16d1ad61e393ba3" - integrity sha512-AyBuuJNI64gIvwx13qiICz6H6hpmjvYS5DGkG6jbXMOT8Z3WUJ3V1X0FlhIoT1b/5JtHE3ki+xjtMvu1nn+t9A== - dependencies: - blake2b-wasm "^2.4.0" - nanoassert "^2.0.0" - -blakejs@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" - integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== - -bluebird@~3.4.1: - version "3.4.7" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" - integrity sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA== - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.8, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -body-parser@1.20.2: - version "1.20.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" - integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== - dependencies: - bytes "3.1.2" - content-type "~1.0.5" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.2" - type-is "~1.6.18" - unpipe "1.0.0" - -bonjour-service@^1.0.11: - version "1.2.1" - resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.2.1.tgz#eb41b3085183df3321da1264719fbada12478d02" - integrity sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw== - dependencies: - fast-deep-equal "^3.1.3" - multicast-dns "^7.2.5" - -boolbase@^1.0.0, boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@^3.0.3, braces@~3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.1" - -broadcast-channel@^3.4.1: - version "3.7.0" - resolved "https://registry.yarnpkg.com/broadcast-channel/-/broadcast-channel-3.7.0.tgz#2dfa5c7b4289547ac3f6705f9c00af8723889937" - integrity sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg== - dependencies: - "@babel/runtime" "^7.7.2" - detect-node "^2.1.0" - js-sha3 "0.8.0" - microseconds "0.2.0" - nano-time "1.0.0" - oblivious-set "1.0.0" - rimraf "3.0.2" - unload "2.2.0" - -brorand@^1.0.1, brorand@^1.0.5, brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== - -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browser-stdout@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" - integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== - -browserify-aes@^1.0.4, browserify-aes@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0, browserify-rsa@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" - integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== - dependencies: - bn.js "^5.0.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.3.tgz#7afe4c01ec7ee59a89a558a4b75bd85ae62d4208" - integrity sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw== - dependencies: - bn.js "^5.2.1" - browserify-rsa "^4.1.0" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.5" - hash-base "~3.0" - inherits "^2.0.4" - parse-asn1 "^5.1.7" - readable-stream "^2.3.8" - safe-buffer "^5.2.1" - -browserify-zlib@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== - dependencies: - pako "~1.0.5" - -browserslist@^4.14.5, browserslist@^4.16.1, browserslist@^4.22.2, browserslist@^4.23.0: - version "4.23.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" - integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== - dependencies: - caniuse-lite "^1.0.30001587" - electron-to-chromium "^1.4.668" - node-releases "^2.0.14" - update-browserslist-db "^1.0.13" - -bs58@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" - integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== - dependencies: - base-x "^3.0.2" - -bs58@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-5.0.0.tgz#865575b4d13c09ea2a84622df6c8cbeb54ffc279" - integrity sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ== - dependencies: - base-x "^4.0.0" - -bs58check@2.1.2, bs58check@<3.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" - integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== - dependencies: - bs58 "^4.0.0" - create-hash "^1.1.0" - safe-buffer "^5.1.2" - -bs58check@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-3.0.1.tgz#2094d13720a28593de1cba1d8c4e48602fdd841c" - integrity sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ== - dependencies: - "@noble/hashes" "^1.2.0" - bs58 "^5.0.0" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -btoa-lite@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" - integrity sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA== - -buffer-crc32@0.2.13, buffer-crc32@^0.2.1, buffer-crc32@^0.2.13: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer-indexof-polyfill@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz#d2732135c5999c64b277fcf9b1abe3498254729c" - integrity sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A== - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== - -buffer@6.0.3, buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -buffer@^5.0.8, buffer@^5.1.0, buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -buffers@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" - integrity sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ== - -byline@5.x: - version "5.0.0" - resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" - integrity sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q== - -byte-length@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/byte-length/-/byte-length-1.0.2.tgz#ba5a5909240b0121c079b7f7b15248d6f08223cc" - integrity sha512-ovBpjmsgd/teRmgcPh23d4gJvxDoXtAzEL9xTfMU8Yc2kqCDb7L9jAG0XHl1nzuGl+h3ebCIF1i62UFyA9V/2Q== - -bytebuffer@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/bytebuffer/-/bytebuffer-5.0.1.tgz#582eea4b1a873b6d020a48d58df85f0bba6cfddd" - integrity sha512-IuzSdmADppkZ6DlpycMkm8l9zeEq16fWtLvunEwFiYciR/BHo4E8/xs5piFquG+Za8OWmMqHF8zuRviz2LHvRQ== - dependencies: - long "~3" - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -cacache@^15.0.3, cacache@^15.2.0: - version "15.3.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" - integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== - dependencies: - "@npmcli/fs" "^1.0.0" - "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.0.2" - unique-filename "^1.1.1" - -cacache@^16.1.0: - version "16.1.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" - integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== - dependencies: - "@npmcli/fs" "^2.1.0" - "@npmcli/move-file" "^2.0.0" - chownr "^2.0.0" - fs-minipass "^2.1.0" - glob "^8.0.1" - infer-owner "^1.0.4" - lru-cache "^7.7.1" - minipass "^3.1.6" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - mkdirp "^1.0.4" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^9.0.0" - tar "^6.1.11" - unique-filename "^2.0.0" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -cacheable-lookup@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-2.0.1.tgz#87be64a18b925234875e10a9bb1ebca4adce6b38" - integrity sha512-EMMbsiOTcdngM/K6gV/OxF2x0t07+vMOWxZNSCRQMjO2MY2nhZQ6OYhOOpyQrbhqsgtvKGI7hcq6xjnA92USjg== - dependencies: - "@types/keyv" "^3.1.1" - keyv "^4.0.0" - -cacheable-request@^7.0.1: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" - integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^6.0.1" - responselike "^2.0.0" - -call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - set-function-length "^1.2.1" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camel-case@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" - integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== - dependencies: - pascal-case "^3.1.2" - tslib "^2.0.3" - -camelcase-keys@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" - integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== - dependencies: - camelcase "^5.3.1" - map-obj "^4.0.0" - quick-lru "^4.0.1" - -camelcase@^5.0.0, camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.0.0, camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-lite@^1.0.30001181, caniuse-lite@^1.0.30001587: - version "1.0.30001629" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001629.tgz#907a36f4669031bd8a1a8dbc2fa08b29e0db297e" - integrity sha512-c3dl911slnQhmxUIT4HhYzT7wnBK/XYpGnYLOj4nJBaRiw52Ibe7YxlDaAeRECvA786zCuExhxIUJ2K7nHMrBw== - -canvas-renderer@~2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/canvas-renderer/-/canvas-renderer-2.2.1.tgz#c1d131f78a9799aca8af9679ad0a005052b65550" - integrity sha512-RrBgVL5qCEDIXpJ6NrzyRNoTnXxYarqm/cS/W6ERhUJts5UQtt/XPEosGN3rqUkZ4fjBArlnCbsISJ+KCFnIAg== - dependencies: - "@types/node" "*" - -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" - -cardano-wallet-browser@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/cardano-wallet-browser/-/cardano-wallet-browser-1.2.2.tgz#f3baf82abedb8b403fc2f79c8b71b2f3ab800fd0" - integrity sha512-KogurUQeo/jiaHkB+TJygawTHPMPVjLvj8c5OjnxS7jQL7mTAqwMnrWrsFYX0iBb6mqFy5DhwNR4Kco/RoLMaQ== - -cardano-wallet@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/cardano-wallet/-/cardano-wallet-1.2.2.tgz#b04d8605ee272b86ee51ceee45cffe7fd2f2689b" - integrity sha512-G3nq0CDOQLph6cdeDj4Ienkjf0WTJOC5f8mnxgi8BGO68Qx9oCLjK6gIwJr2WXisCUTK+m21KvLQxHuw1zEmug== - -cardinal@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" - integrity sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw== - dependencies: - ansicolors "~0.3.2" - redeyed "~2.1.0" - -cashaddrjs@0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cashaddrjs/-/cashaddrjs-0.4.4.tgz#169f1ae620d325db77700273d972282adeeee331" - integrity sha512-xZkuWdNOh0uq/mxJIng6vYWfTowZLd9F4GMAlp2DwFHlcCqCm91NtuAc47RuV4L7r4PYcY5p6Cr2OKNb4hnkWA== - dependencies: - big-integer "1.6.36" - -cbor@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" - integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== - dependencies: - nofilter "^3.1.0" - -chacha-native@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/chacha-native/-/chacha-native-2.0.3.tgz#435259a015a46816d1bc11376bd4c09e35c4bf5f" - integrity sha512-93h+osfjhR2sMHAaapTLlL/COoBPEZ6upicPBQ4GfUyadoMb8t9/M0PKK8kC+F+DEA/Oy3Kg9w3HzY3J1foP3g== - dependencies: - bindings "^1.2.1" - inherits "^2.0.1" - nan "^2.4.0" - -chacha@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/chacha/-/chacha-2.1.0.tgz#f4d57c8768a1b4206e9967f858b48da7dd28eaa6" - integrity sha512-FhVtqaZOiHlOKUkAWfDlJ+oe/O8iPQbCC0pFXJqphr4YQBCZPXa8Mv3j35+W4eWFWCoTUcW2u5IWDDkknygvVA== - dependencies: - inherits "^2.0.1" - readable-stream "^1.0.33" - optionalDependencies: - chacha-native "^2.0.0" - -chai-as-promised@7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0" - integrity sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA== - dependencies: - check-error "^1.0.2" - -chai@4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.0.tgz#5523a5faf7f819c8a92480d70a8cccbadacfc25f" - integrity sha512-/BFd2J30EcOwmdOgXvVsmM48l0Br0nmZPlO0uOW4XKh6kpsUumRXBgPV+IlaqFaqr9cYbeoZAM1Npx0i4A+aiA== - dependencies: - assertion-error "^1.1.0" - check-error "^1.0.2" - deep-eql "^3.0.1" - get-func-name "^2.0.0" - pathval "^1.1.0" - type-detect "^4.0.5" - -chainsaw@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" - integrity sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ== - dependencies: - traverse ">=0.3.0 <0.4" - -chalk@^2.1.0, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -character-entities-legacy@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" - integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== - -character-entities@^1.0.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" - integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== - -character-reference-invalid@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" - integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -charenc@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== - -check-error@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" - integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== - dependencies: - get-func-name "^2.0.2" - -chokidar@3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chokidar@^3.5.3: - version "3.6.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" - integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -chrome-trace-event@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" - integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -cjs-module-lexer@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" - integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -classnames@2.5.1, classnames@^2.2.5: - version "2.5.1" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" - integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== - -clean-css@^4.2.3: - version "4.2.4" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.4.tgz#733bf46eba4e607c6891ea57c24a989356831178" - integrity sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A== - dependencies: - source-map "~0.6.0" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -clean-stack@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-3.0.1.tgz#155bf0b2221bf5f4fba89528d24c5953f17fe3a8" - integrity sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg== - dependencies: - escape-string-regexp "4.0.0" - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-progress@^3.4.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/cli-progress/-/cli-progress-3.12.0.tgz#807ee14b66bcc086258e444ad0f19e7d42577942" - integrity sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A== - dependencies: - string-width "^4.2.3" - -cli-spinners@^2.2.0, cli-spinners@^2.5.0: - version "2.9.2" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" - integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== - -cli-ux@^5.2.1, cli-ux@^5.5.1: - version "5.6.7" - resolved "https://registry.yarnpkg.com/cli-ux/-/cli-ux-5.6.7.tgz#32ef9e6cb2b457be834280cc799028a11c8235a8" - integrity sha512-dsKAurMNyFDnO6X1TiiRNiVbL90XReLKcvIq4H777NMqXGBxBws23ag8ubCJE97vVZEgWG2eSUhsyLf63Jv8+g== - dependencies: - "@oclif/command" "^1.8.15" - "@oclif/errors" "^1.3.5" - "@oclif/linewrap" "^1.0.0" - "@oclif/screen" "^1.0.4" - ansi-escapes "^4.3.0" - ansi-styles "^4.2.0" - cardinal "^2.1.1" - chalk "^4.1.0" - clean-stack "^3.0.0" - cli-progress "^3.4.0" - extract-stack "^2.0.0" - fs-extra "^8.1" - hyperlinker "^1.0.0" - indent-string "^4.0.0" - is-wsl "^2.2.0" - js-yaml "^3.13.1" - lodash "^4.17.21" - natural-orderby "^2.0.1" - object-treeify "^1.1.4" - password-prompt "^1.1.2" - semver "^7.3.2" - string-width "^4.2.0" - strip-ansi "^6.0.0" - supports-color "^8.1.0" - supports-hyperlinks "^2.1.0" - tslib "^2.0.0" - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -client-oauth2@^4.3.3: - version "4.3.3" - resolved "https://registry.yarnpkg.com/client-oauth2/-/client-oauth2-4.3.3.tgz#7a700e6f4bf412c1f96da0d6b50e07676561e086" - integrity sha512-k8AvUYJon0vv75ufoVo4nALYb/qwFFicO3I0+39C6xEdflqVtr+f9cy+0ZxAduoVSTfhP5DX2tY2XICAd5hy6Q== - dependencies: - popsicle "^12.0.5" - safe-buffer "^5.2.0" - -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== - -clsx@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" - integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== - -clsx@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" - integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== - -coa@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" - integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== - dependencies: - "@types/q" "^1.5.1" - chalk "^2.4.1" - q "^1.1.2" - -collect-v8-coverage@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" - integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@^1.1.4, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -colorette@^1.2.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" - integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== - -colorette@^2.0.10: - version "2.0.20" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" - integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== - -colors@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^4.0.1, commander@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - -commander@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" - integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== - -commander@^7.0.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -common-path-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" - integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - -component-emitter@^1.2.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.1.tgz#ef1d5796f7d93f135ee6fb684340b26403c97d17" - integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ== - -compress-commons@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-2.1.1.tgz#9410d9a534cf8435e3fbbb7c6ce48de2dc2f0610" - integrity sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q== - dependencies: - buffer-crc32 "^0.2.13" - crc32-stream "^3.0.1" - normalize-path "^3.0.0" - readable-stream "^2.3.6" - -compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - -compute-scroll-into-view@^1.0.17: - version "1.0.20" - resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz#1768b5522d1172754f5d0c9b02de3af6be506a43" - integrity sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -concurrently@8.2.2: - version "8.2.2" - resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-8.2.2.tgz#353141985c198cfa5e4a3ef90082c336b5851784" - integrity sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg== - dependencies: - chalk "^4.1.2" - date-fns "^2.30.0" - lodash "^4.17.21" - rxjs "^7.8.1" - shell-quote "^1.8.1" - spawn-command "0.0.2" - supports-color "^8.1.1" - tree-kill "^1.2.2" - yargs "^17.7.2" - -conf@^6.2.0: - version "6.2.4" - resolved "https://registry.yarnpkg.com/conf/-/conf-6.2.4.tgz#49d23c4e21ef2ac2860f7b5ed25b7b7e484f769f" - integrity sha512-GjgyPRLo1qK1LR9RWAdUagqo+DP18f5HWCFk4va7GS+wpxQTOzfuKTwKOvGW2c01/YXNicAyyoyuSddmdkBzZQ== - dependencies: - ajv "^6.10.2" - debounce-fn "^3.0.1" - dot-prop "^5.0.0" - env-paths "^2.2.0" - json-schema-typed "^7.0.1" - make-dir "^3.0.0" - onetime "^5.1.0" - pkg-up "^3.0.1" - semver "^6.2.0" - write-file-atomic "^3.0.0" - -config-webpack@1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/config-webpack/-/config-webpack-1.0.4.tgz#4768875d7394c799a135f9b6673be17e5ec04a1f" - integrity sha512-7Eb3HfaS855sW01JUwldttWflh3UejJn/ZRfDPCSyv4p/ao8eHyGrfIR5Lyerbl5CHTEEKIRwArXPXJHIQ2X3g== - -config@1.31.0: - version "1.31.0" - resolved "https://registry.yarnpkg.com/config/-/config-1.31.0.tgz#ab08aeba6536015d220cd0afe14b3e0501082542" - integrity sha512-Ep/l9Rd1J9IPueztJfpbOqVzuKHQh4ZODMNt9xqTYdBBNRXbV4oTu34kCkkfdRVcDq0ohtpaeXGgb+c0LQxFRA== - dependencies: - json5 "^1.0.1" - -confusing-browser-globals@^1.0.10: - version "1.0.11" - resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" - integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== - -connect-history-api-fallback@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" - integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== - -console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - integrity sha512-OKZnPGeMQy2RPaUIBPFFd71iNf4791H12MCRuVQDnzGRwCYNYmTDy5pdafo2SLAcEMKzTOQnLWG4QdcjeJUMEg== - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@^1.0.4, content-type@~1.0.4, content-type@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - -convert-source-map@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" - integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" - integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== - -cookie@^0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== - -copy-to-clipboard@^3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0" - integrity sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA== - dependencies: - toggle-selection "^1.0.6" - -copy-webpack-plugin@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-6.0.0.tgz#98eeb1aa2e7189b6e73ec876404c5c05e51828b3" - integrity sha512-tM6DhoJm8jvkHLjH62r5NHKSxmtyHYWOwWTkLWEZYHbxEH0Aele2pGRZ2HSDJb8Rdb/BcYWYFiJXTzHt377fPg== - dependencies: - cacache "^15.0.3" - find-cache-dir "^3.3.1" - glob-parent "^5.1.1" - globby "^11.0.0" - loader-utils "^2.0.0" - normalize-path "^3.0.0" - p-limit "^2.3.0" - schema-utils "^2.6.6" - serialize-javascript "^3.0.0" - webpack-sources "^1.4.3" - -core-js-compat@^3.31.0, core-js-compat@^3.36.1, core-js-compat@^3.8.0: - version "3.37.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.37.1.tgz#c844310c7852f4bdf49b8d339730b97e17ff09ee" - integrity sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg== - dependencies: - browserslist "^4.23.0" - -core-js-pure@^3.0.0, core-js-pure@^3.23.3, core-js-pure@^3.30.2: - version "3.37.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.37.1.tgz#2b4b34281f54db06c9a9a5bd60105046900553bd" - integrity sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA== - -core-js@^2.4.0, core-js@^2.6.10: - version "2.6.12" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" - integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== - -core-js@^3.2.1: - version "3.37.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.37.1.tgz#d21751ddb756518ac5a00e4d66499df981a62db9" - integrity sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cosmiconfig@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" - integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -crc32-stream@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-3.0.1.tgz#cae6eeed003b0e44d739d279de5ae63b171b4e85" - integrity sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w== - dependencies: - crc "^3.4.4" - readable-stream "^3.4.0" - -crc@^3.4.4: - version "3.8.0" - resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" - integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== - dependencies: - buffer "^5.1.0" - -create-ecdh@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" - integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== - dependencies: - bn.js "^4.1.0" - elliptic "^6.5.3" - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-fetch@^3.0.6, cross-fetch@^3.1.6: - version "3.1.8" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" - integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== - dependencies: - node-fetch "^2.6.12" - -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crx@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/crx/-/crx-5.0.1.tgz#33f7a81375acfab1aa3a8291424223434dc0978b" - integrity sha512-n/PzBx/fR1+xZCiJBats9y5zw/a+YBcoJ0ABnUaY56xb1RpXuFhsiCMpNY6WjVtylLzhUUXSWsbitesVg7v2vg== - dependencies: - archiver "^3.0.3" - commander "^2.20.0" - node-rsa "^1.0.5" - pbf "^3.2.0" - -crypt@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== - -crypto-browserify@3.12.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -crypto-random-string@3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-3.3.1.tgz#13cee94cac8001e4842501608ef779e0ed08f82d" - integrity sha512-5j88ECEn6h17UePrLi6pn1JcLtAiANa3KExyr9y9Z5vo2mv56Gh3I4Aja/B9P9uyMwyxNHAHWv+nE72f30T5Dg== - dependencies: - type-fest "^0.8.1" - -css-box-model@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/css-box-model/-/css-box-model-1.2.1.tgz#59951d3b81fd6b2074a62d49444415b0d2b4d7c1" - integrity sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw== - dependencies: - tiny-invariant "^1.0.6" - -css-loader@5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.0.2.tgz#24f758dae349bad0a440c50d7e2067742e0899cb" - integrity sha512-gbkBigdcHbmNvZ1Cg6aV6qh6k9N6XOr8YWzISLQGrwk2mgOH8LLrizhkxbDhQtaLtktyKHD4970S0xwz5btfTA== - dependencies: - camelcase "^6.2.0" - cssesc "^3.0.0" - icss-utils "^5.1.0" - loader-utils "^2.0.0" - postcss "^8.2.4" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.0" - postcss-modules-scope "^3.0.0" - postcss-modules-values "^4.0.0" - postcss-value-parser "^4.1.0" - schema-utils "^3.0.0" - semver "^7.3.4" - -css-select-base-adapter@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" - integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== - -css-select@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" - integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== - dependencies: - boolbase "^1.0.0" - css-what "^3.2.1" - domutils "^1.7.0" - nth-check "^1.0.2" - -css-select@^4.1.3: - version "4.3.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" - integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== - dependencies: - boolbase "^1.0.0" - css-what "^6.0.1" - domhandler "^4.3.1" - domutils "^2.8.0" - nth-check "^2.0.1" - -css-tree@1.0.0-alpha.37: - version "1.0.0-alpha.37" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" - integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== - dependencies: - mdn-data "2.0.4" - source-map "^0.6.1" - -css-tree@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== - dependencies: - mdn-data "2.0.14" - source-map "^0.6.1" - -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.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -cssfontparser@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/cssfontparser/-/cssfontparser-1.2.1.tgz#f4022fc8f9700c68029d542084afbaf425a3f3e3" - integrity sha512-6tun4LoZnj7VN6YeegOVb67KBX/7JJsqvj+pv3ZA7F878/eN33AbGa5b/S/wXxS/tcp8nc40xRUrsPlxIyNUPg== - -csso@^4.0.2: - version "4.2.0" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" - integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== - dependencies: - css-tree "^1.1.2" - -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - -csstype@^3.0.2, csstype@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" - integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== - -d3-array@^1.2.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" - integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw== - -d3-collection@1: - version "1.0.7" - resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.7.tgz#349bd2aa9977db071091c13144d5e4f16b5b310e" - integrity sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A== - -d3-color@1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.4.1.tgz#c52002bf8846ada4424d55d97982fef26eb3bc8a" - integrity sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q== - -d3-format@1: - version "1.4.5" - resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.4.5.tgz#374f2ba1320e3717eb74a9356c67daee17a7edb4" - integrity sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ== - -d3-interpolate@1, d3-interpolate@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.4.0.tgz#526e79e2d80daa383f9e0c1c1c7dcc0f0583e987" - integrity sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA== - dependencies: - d3-color "1" - -d3-path@1: - version "1.0.9" - resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.9.tgz#48c050bb1fe8c262493a8caf5524e3e9591701cf" - integrity sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg== - -d3-scale@^2.1.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-2.2.2.tgz#4e880e0b2745acaaddd3ede26a9e908a9e17b81f" - integrity sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw== - dependencies: - d3-array "^1.2.0" - d3-collection "1" - d3-format "1" - d3-interpolate "1" - d3-time "1" - d3-time-format "2" - -d3-shape@^1.2.0: - version "1.3.7" - resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.3.7.tgz#df63801be07bc986bc54f63789b4fe502992b5d7" - integrity sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw== - dependencies: - d3-path "1" - -d3-time-format@2: - version "2.3.0" - resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.3.0.tgz#107bdc028667788a8924ba040faf1fbccd5a7850" - integrity sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ== - dependencies: - d3-time "1" - -d3-time@1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.1.0.tgz#b1e19d307dae9c900b7e5b25ffc5dcc249a8a0f1" - integrity sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA== - -damerau-levenshtein@^1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" - integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== - -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - -data-view-buffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" - integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -data-view-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" - integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -data-view-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" - integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -date-fns@^2.30.0: - version "2.30.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" - integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== - dependencies: - "@babel/runtime" "^7.21.0" - -debounce-fn@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/debounce-fn/-/debounce-fn-3.0.1.tgz#034afe8b904d985d1ec1aa589cd15f388741d680" - integrity sha512-aBoJh5AhpqlRoHZjHmOzZlRx+wz2xVwGL9rjs+Kj0EWUrL4/h4K7OD176thl2Tdoqui/AaA4xhHrNArGLAaI3Q== - dependencies: - mimic-fn "^2.1.0" - -debug-log@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f" - integrity sha512-gV/pe1YIaKNgLYnd1g9VNW80tcb7oV5qvNUxG7NM8rbDpnl6RGunzlAtlGSb0wEs3nesu2vHNiX9TSsZ+Y+RjA== - -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3, debug@^4.3.4: - version "4.3.5" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" - integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== - dependencies: - ms "2.1.2" - -debug@4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -decamelize-keys@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" - integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== - -decamelize@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" - integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== - -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.0, decimal.js@^10.2.1: - version "10.4.3" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" - integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== - -decode-uri-component@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - -decompress-response@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-5.0.0.tgz#7849396e80e3d1eba8cb2f75ef4930f76461cb0f" - integrity sha512-TLZWWybuxWgoW7Lykv+gq9xvzOsUjQ9tF09Tj6NSTYGMTCHNXzrPnD6Hi+TgZq19PyTAGH4Ll/NIM/eTGglnMw== - dependencies: - mimic-response "^2.0.0" - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -deep-eql@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" - integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== - dependencies: - type-detect "^4.0.0" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepmerge@^4.2.2: - version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -default-gateway@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" - integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== - dependencies: - execa "^5.0.0" - -defaults@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" - integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== - dependencies: - clone "^1.0.2" - -defer-to-connect@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - -define-data-property@^1.0.1, define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - -define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -deglob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/deglob/-/deglob-3.1.0.tgz#1868193193d3432a5326e8fb2052b439a43a454e" - integrity sha512-al10l5QAYaM/PeuXkAr1Y9AQz0LCtWsnJG23pIgh44hDxHFOj36l6qvhfjnIWBYwZOqM1fXUFV9tkjL7JPdGvw== - dependencies: - find-root "^1.0.0" - glob "^7.0.5" - ignore "^5.0.0" - pkg-config "^1.1.0" - run-parallel "^1.1.2" - uniq "^1.0.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - -deprecation@^2.0.0, deprecation@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" - integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== - -des.js@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.1.0.tgz#1d37f5766f3bbff4ee9638e871a8768c173b81da" - integrity sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-libc@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" - integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== - -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - -detect-node@^2.0.4, detect-node@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" - integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== - -diff-sequences@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" - integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== - -diff@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -dns-packet@^5.2.2: - version "5.6.1" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.1.tgz#ae888ad425a9d1478a0674256ab866de1012cf2f" - integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== - dependencies: - "@leichtgewicht/ip-codec" "^2.0.1" - -doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - integrity sha512-lsGyRuYr4/PIB0txi+Fy2xOMI2dGaTguCaotzFGkVZuKR5usKfcRWIFKNM3QNrU7hh/+w2bwTW+ZeXPK5l8uVg== - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-converter@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" - integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== - dependencies: - utila "~0.4" - -dom-helpers@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" - integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA== - dependencies: - "@babel/runtime" "^7.1.2" - -dom-helpers@^5.0.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" - integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== - dependencies: - "@babel/runtime" "^7.8.7" - csstype "^3.0.2" - -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - -dom-serializer@^1.0.1: - 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" - entities "^2.0.0" - -dom-serializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" - integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.2" - entities "^4.2.0" - -domelementtype@1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: - 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" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" - -domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" - integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== - dependencies: - domelementtype "^2.2.0" - -domhandler@^5.0, domhandler@^5.0.2, domhandler@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" - integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== - dependencies: - domelementtype "^2.3.0" - -domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^2.5.2, domutils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" - integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - -domutils@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" - integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== - dependencies: - dom-serializer "^2.0.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" - -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -dot-prop@^5.0.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -dotenv@^8.2.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" - integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== - -downshift@^6.1.7: - version "6.1.12" - resolved "https://registry.yarnpkg.com/downshift/-/downshift-6.1.12.tgz#f14476b41a6f6fd080c340bad1ddf449f7143f6f" - integrity sha512-7XB/iaSJVS4T8wGFT3WRXmSF1UlBHAA40DshZtkrIscIN+VC+Lh363skLxFTvJwtNgHxAMDGEHT4xsyQFWL+UA== - dependencies: - "@babel/runtime" "^7.14.8" - compute-scroll-into-view "^1.0.17" - prop-types "^15.7.2" - react-is "^17.0.2" - tslib "^2.3.0" - -dropbox@4.0.30: - version "4.0.30" - resolved "https://registry.yarnpkg.com/dropbox/-/dropbox-4.0.30.tgz#747247b5088e26ab143db39afed8c66f0887d670" - integrity sha512-qmSeT8rhjARDHj3vxOTKQjc6IQ46AlRwJS8dqE26R323fikkjC4EXzocV12PsO7DOrjaqbOH3FjEdEEnrFraJw== - dependencies: - buffer "^5.0.8" - moment "^2.19.3" - -duplexer2@~0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" - integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA== - dependencies: - readable-stream "^2.0.2" - -duplexer3@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" - integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== - -easy-crc@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/easy-crc/-/easy-crc-1.1.0.tgz#fe59a33a9a33faf3ff54cf8f2ba7f13ab3730c1d" - integrity sha512-cvtERLTu8mYt1pOVVekJ4E0VdwyuKgL+VAfE3LY+Lw762i9M1bSEikm6fyGD2grxOdBfI0HgOmSi3HQneKr33A== - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -electron-to-chromium@^1.4.668: - version "1.4.794" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.794.tgz#cca7762998f6c42517770666e272f52a53c08605" - integrity sha512-6FApLtsYhDCY0Vglq3AptsdxQ+PJLc6AxlAM0HjEihUAiOPPbkASEsq9gtxUeZY9o0sJIEa3WnF0vVH4VT4iug== - -elliptic@^6.4.0, elliptic@^6.5.3, elliptic@^6.5.4, elliptic@^6.5.5: - version "6.5.5" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.5.tgz#c715e09f78b6923977610d4c2346d6ce22e6dded" - integrity sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -emittery@^0.7.1: - version "0.7.2" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" - integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.0.0: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -encoding@^0.1.12, encoding@^0.1.13: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -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== - dependencies: - once "^1.4.0" - -enhanced-resolve@^5.0.0, enhanced-resolve@^5.7.0: - version "5.17.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz#d037603789dd9555b89aaec7eb78845c49089bc5" - integrity sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -enquirer@^2.3.5, enquirer@^2.3.6: - version "2.4.1" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" - integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== - dependencies: - ansi-colors "^4.1.1" - strip-ansi "^6.0.1" - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -entities@^4.2.0, entities@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== - -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -envinfo@^7.7.3: - version "7.13.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.13.0.tgz#81fbb81e5da35d74e814941aeab7c325a606fb31" - integrity sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q== - -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - -error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -error-stack-parser@^2.0.6: - version "2.1.4" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" - integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== - dependencies: - stackframe "^1.3.4" - -es-abstract@^1.17.2, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2: - version "1.23.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" - integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== - dependencies: - array-buffer-byte-length "^1.0.1" - arraybuffer.prototype.slice "^1.0.3" - available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - data-view-buffer "^1.0.1" - data-view-byte-length "^1.0.1" - data-view-byte-offset "^1.0.0" - es-define-property "^1.0.0" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-set-tostringtag "^2.0.3" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.6" - get-intrinsic "^1.2.4" - get-symbol-description "^1.0.2" - globalthis "^1.0.3" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - has-proto "^1.0.3" - has-symbols "^1.0.3" - hasown "^2.0.2" - internal-slot "^1.0.7" - is-array-buffer "^3.0.4" - is-callable "^1.2.7" - is-data-view "^1.0.1" - is-negative-zero "^2.0.3" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.3" - is-string "^1.0.7" - is-typed-array "^1.1.13" - is-weakref "^1.0.2" - object-inspect "^1.13.1" - object-keys "^1.1.1" - object.assign "^4.1.5" - regexp.prototype.flags "^1.5.2" - safe-array-concat "^1.1.2" - safe-regex-test "^1.0.3" - string.prototype.trim "^1.2.9" - string.prototype.trimend "^1.0.8" - string.prototype.trimstart "^1.0.8" - typed-array-buffer "^1.0.2" - typed-array-byte-length "^1.0.1" - typed-array-byte-offset "^1.0.2" - typed-array-length "^1.0.6" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.15" - -es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== - -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" - -es-errors@^1.2.1, es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -es-module-lexer@^0.3.26: - version "0.3.26" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.3.26.tgz#7b507044e97d5b03b01d4392c74ffeb9c177a83b" - integrity sha512-Va0Q/xqtrss45hWzP8CZJwzGSZJjDM5/MJRE3IXXnUCcVLElR9BRaE9F62BopysASyc4nM3uwhSW7FFB9nlWAA== - -es-object-atoms@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" - integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== - dependencies: - es-errors "^1.3.0" - -es-set-tostringtag@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" - integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== - dependencies: - get-intrinsic "^1.2.4" - has-tostringtag "^1.0.2" - hasown "^2.0.1" - -es-shim-unscopables@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" - integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== - dependencies: - hasown "^2.0.0" - -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" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es6-error@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" - integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== - -escalade@^3.1.1, escalade@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" - integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escodegen@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" - integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionalDependencies: - source-map "~0.6.1" - -eslint-config-airbnb-base@^14.2.1: - version "14.2.1" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz#8a2eb38455dc5a312550193b319cdaeef042cd1e" - integrity sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA== - dependencies: - confusing-browser-globals "^1.0.10" - object.assign "^4.1.2" - object.entries "^1.1.2" - -eslint-config-airbnb@18.2.1: - version "18.2.1" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-18.2.1.tgz#b7fe2b42f9f8173e825b73c8014b592e449c98d9" - integrity sha512-glZNDEZ36VdlZWoxn/bUR1r/sdFKPd1mHPbqUtkctgNG4yT2DLLtJ3D+yCV+jzZCc2V1nBVkmdknOJBZ5Hc0fg== - dependencies: - eslint-config-airbnb-base "^14.2.1" - object.assign "^4.1.2" - object.entries "^1.1.2" - -eslint-config-prettier@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz#f4a4bd2832e810e8cc7c1411ec85b3e85c0c53f9" - integrity sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg== - -eslint-import-resolver-node@^0.3.4: - version "0.3.9" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" - integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== - dependencies: - debug "^3.2.7" - is-core-module "^2.13.0" - resolve "^1.22.4" - -eslint-module-utils@^2.6.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz#52f2404300c3bd33deece9d7372fb337cc1d7c34" - integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q== - dependencies: - debug "^3.2.7" - -eslint-plugin-flowtype@5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.2.1.tgz#15abd9e3b0f3432abc030d71948802be8eac12c5" - integrity sha512-uXZbEzC7iGmJLoOQ4aQVLrmNGqz5il4lTblB9wmq8R53GnCkv4/Y4K0WiJ6v07rpHHI1kOm6NTp8V//P5xTqBA== - dependencies: - lodash "^4.17.15" - string-natural-compare "^3.0.1" - -eslint-plugin-import@2.22.1: - version "2.22.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702" - integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw== - dependencies: - array-includes "^3.1.1" - array.prototype.flat "^1.2.3" - contains-path "^0.1.0" - debug "^2.6.9" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.4" - eslint-module-utils "^2.6.0" - has "^1.0.3" - minimatch "^3.0.4" - object.values "^1.1.1" - read-pkg-up "^2.0.0" - resolve "^1.17.0" - tsconfig-paths "^3.9.0" - -eslint-plugin-jsx-a11y@6.4.1: - version "6.4.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz#a2d84caa49756942f42f1ffab9002436391718fd" - integrity sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg== - dependencies: - "@babel/runtime" "^7.11.2" - aria-query "^4.2.2" - array-includes "^3.1.1" - ast-types-flow "^0.0.7" - axe-core "^4.0.2" - axobject-query "^2.2.0" - damerau-levenshtein "^1.0.6" - emoji-regex "^9.0.0" - has "^1.0.3" - jsx-ast-utils "^3.1.0" - language-tags "^1.0.5" - -eslint-plugin-no-floating-promise@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-no-floating-promise/-/eslint-plugin-no-floating-promise-1.0.2.tgz#5176e89cc84682a2ee7e9a523019552a751de82c" - integrity sha512-ccbyIlvDuKJOrwypw9NWn6CIxTK+/CYARhsqMyP6cXYgIFcNFs01sGXOqq8XzOJFw02Umkj6hCnffaV6nSiqyw== - dependencies: - requireindex "1.2.0" - -eslint-plugin-prettier@3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz#7079cfa2497078905011e6f82e8dd8453d1371b7" - integrity sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ== - dependencies: - prettier-linter-helpers "^1.0.0" - -eslint-plugin-promise@4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz#61485df2a359e03149fdafc0a68b0e030ad2ac45" - integrity sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ== - -eslint-plugin-react@7.22.0: - version "7.22.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.22.0.tgz#3d1c542d1d3169c45421c1215d9470e341707269" - integrity sha512-p30tuX3VS+NWv9nQot9xIGAHBXR0+xJVaZriEsHoJrASGCJZDJ8JLNM0YqKqI0AKm6Uxaa1VUHoNEibxRCMQHA== - dependencies: - array-includes "^3.1.1" - array.prototype.flatmap "^1.2.3" - doctrine "^2.1.0" - has "^1.0.3" - jsx-ast-utils "^2.4.1 || ^3.0.0" - object.entries "^1.1.2" - object.fromentries "^2.0.2" - object.values "^1.1.1" - prop-types "^15.7.2" - resolve "^1.18.1" - string.prototype.matchall "^4.0.2" - -eslint-plugin-simple-import-sort@^12.1.0: - version "12.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-12.1.0.tgz#8186ad55474d2f5c986a2f1bf70625a981e30d05" - integrity sha512-Y2fqAfC11TcG/WP3TrI1Gi3p3nc8XJyEOJYHyEPEGI/UAgNx6akxxlX74p7SbAQdLcgASKhj8M0GKvH3vq/+ig== - -eslint-scope@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" - integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint@7.20.0: - version "7.20.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.20.0.tgz#db07c4ca4eda2e2316e7aa57ac7fc91ec550bdc7" - integrity sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw== - dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.3.0" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.0.1" - doctrine "^3.0.0" - enquirer "^2.3.5" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.4.0" - esutils "^2.0.2" - file-entry-cache "^6.0.0" - functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^12.1.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash "^4.17.20" - minimatch "^3.0.4" - natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^6.0.4" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== - dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" - -esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -"esprima@~ 1.0.2": - version "1.0.4" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.0.4.tgz#9f557e08fc3b4d26ece9dd34f8fbf476b62585ad" - integrity sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA== - -esquery@^1.0.1, esquery@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.1.0, esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -events@^3.2.0, events@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -exec-sh@^0.3.2: - version "0.3.6" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" - integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-template@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== - -expect@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" - integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== - dependencies: - "@jest/types" "^26.6.2" - ansi-styles "^4.0.0" - jest-get-type "^26.3.0" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" - -express@^4.14.0, express@^4.17.3: - version "4.19.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" - integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.2" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.6.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extract-files@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-9.0.0.tgz#8a7744f2437f81f5ed3250ed9f1550de902fe54a" - integrity sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ== - -extract-stack@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/extract-stack/-/extract-stack-2.0.0.tgz#11367bc865bfcd9bc0db3123e5edb57786f11f9b" - integrity sha512-AEo4zm+TenK7zQorGK1f9mJ8L14hnTDi2ZQPR+Mub1NX8zimka1mXpV5LpH8x9HoUmFSHZCfLHqWvp0Y4FxxzQ== - -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-diff@^1.1.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" - integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== - -fast-glob@^3.0.3, fast-glob@^3.2.9: - version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fastest-levenshtein@^1.0.12: - version "1.0.16" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" - integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== - -fastq@^1.6.0: - version "1.17.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== - dependencies: - reusify "^1.0.4" - -faye-websocket@^0.11.3: - version "0.11.4" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" - integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== - dependencies: - websocket-driver ">=0.5.1" - -fb-watchman@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" - integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== - dependencies: - bser "2.1.1" - -figures@^3.0.0, figures@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -file-loader@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" - integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -file-saver@2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/file-saver/-/file-saver-2.0.5.tgz#d61cfe2ce059f414d899e9dd6d4107ee25670c38" - integrity sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA== - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -filesize@^6.1.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.4.0.tgz#914f50471dd66fdca3cefe628bd0cde4ef769bcd" - integrity sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ== - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -find-babel-config@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.2.tgz#41199b5cb9154dcb2fdc351cbe70eaf9198d5111" - integrity sha512-oK59njMyw2y3yxto1BCfVK7MQp/OYf4FleHu0RgosH3riFJ1aOuo/7naLDLAObfrgn3ueFhw5sAT/cp0QuJI3Q== - dependencies: - json5 "^1.0.2" - path-exists "^3.0.0" - -find-cache-dir@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - -find-cache-dir@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" - integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-root@^1.0.0, find-root@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" - integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== - -find-up@5.0.0, find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -find-up@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== - dependencies: - locate-path "^2.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" - integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== - dependencies: - flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" - -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - -flatted@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" - integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== - -flow-bin@0.142.0: - version "0.142.0" - resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.142.0.tgz#b46b69de1123cf7c5a50917402968e07291df054" - integrity sha512-YgiapK/wrJjcgSgOWfoncbZ4vZrZWdHs+p7V9duI9zo4ehW2nM/VRrpSaWoZ+CWu3t+duGyAvupJvC6MM2l07w== - -flow-typed@3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/flow-typed/-/flow-typed-3.3.1.tgz#538bbcf13098916a09731f06ed6c0e5b8aee7303" - integrity sha512-svxMNRJNTeKfOwBt/bPZvOrgkjpYH1nXC2v7dgbq4sZgZu/Slna6kAPD45fnOJ4D0TCS2B4yp6Nhc32AV1sxpQ== - dependencies: - "@octokit/rest" "^16.43.1" - colors "^1.4.0" - flowgen "^1.10.0" - fs-extra "^8.1.0" - glob "^7.1.6" - got "^10.5.7" - md5 "^2.2.1" - mkdirp "^1.0.3" - prettier "^1.19.1" - rimraf "^3.0.2" - semver "7.3.2" - table "^5.4.6" - through "^2.3.8" - unzipper "^0.10.8" - which "^2.0.2" - yargs "^15.1.0" - -flowgen@^1.10.0: - version "1.21.0" - resolved "https://registry.yarnpkg.com/flowgen/-/flowgen-1.21.0.tgz#f7ecb693892c4bd069492dbf77db561bbb451aa9" - integrity sha512-pFNFFyMLRmW6njhOIm5TrbGUDTv64aujmys2KrkRE2NYD8sXwJUyicQRwU5SPRBRJnFSD/FNlnHo2NnHI5eJSw== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/highlight" "^7.16.7" - commander "^6.1.0" - lodash "^4.17.20" - prettier "^2.5.1" - shelljs "^0.8.4" - typescript "~4.4.4" - typescript-compiler "^1.4.1-2" - -fnv-plus@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/fnv-plus/-/fnv-plus-1.3.1.tgz#c34cb4572565434acb08ba257e4044ce2b006d67" - integrity sha512-Gz1EvfOneuFfk4yG458dJ3TLJ7gV19q3OM/vVvvHf7eT02Hm1DleB4edsia6ahbKgAYxO9gvyQ1ioWZR+a00Yw== - -follow-redirects@^1.0.0, follow-redirects@^1.10.0, follow-redirects@^1.14.4, follow-redirects@^1.14.9, follow-redirects@^1.15.6: - version "1.15.6" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" - integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== - -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fraction.js@^4.0.13: - version "4.3.7" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" - integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== - dependencies: - map-cache "^0.2.2" - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -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@^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" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^9.0.1: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^2.0.0, fs-minipass@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs-monkey@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.6.tgz#8ead082953e88d992cf3ff844faa907b26756da2" - integrity sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@^2.1.2, fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -fstream@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" - integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -function.prototype.name@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" - integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - functions-have-names "^1.2.3" - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -gauge@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" - integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^3.0.7" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" - -gaze@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" - integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g== - dependencies: - globule "^1.0.0" - -gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.1, get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-func-name@^2.0.0, get-func-name@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" - integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - -get-port@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" - integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== - -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - integrity sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw== - -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.0.0, get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -get-symbol-description@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" - integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== - dependencies: - call-bind "^1.0.5" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== - -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== - -glob-parent@^5.0.0, glob-parent@^5.1.1, glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - -glob@8.1.0, glob@^8.0.1: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@~7.1.1: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^12.1.0: - version "12.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" - integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== - dependencies: - type-fest "^0.8.1" - -globalthis@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" - integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== - dependencies: - define-properties "^1.2.1" - gopd "^1.0.1" - -globby@^10.0.1: - version "10.0.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" - integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== - dependencies: - "@types/glob" "^7.1.1" - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.0.3" - glob "^7.1.3" - ignore "^5.1.1" - merge2 "^1.2.3" - slash "^3.0.0" - -globby@^11.0.0, globby@^11.0.1, globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -globule@^1.0.0: - version "1.3.4" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.4.tgz#7c11c43056055a75a6e68294453c17f2796170fb" - integrity sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg== - dependencies: - glob "~7.1.1" - lodash "^4.17.21" - minimatch "~3.0.2" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -got@^10.5.7: - version "10.7.0" - resolved "https://registry.yarnpkg.com/got/-/got-10.7.0.tgz#62889dbcd6cca32cd6a154cc2d0c6895121d091f" - integrity sha512-aWTDeNw9g+XqEZNcTjMMZSy7B7yE9toWOFYip7ofFTLleJhvZwUxxTxkTpKvF+p1SAA4VHmuEy7PiHTHyq8tJg== - dependencies: - "@sindresorhus/is" "^2.0.0" - "@szmarczak/http-timer" "^4.0.0" - "@types/cacheable-request" "^6.0.1" - cacheable-lookup "^2.0.0" - cacheable-request "^7.0.1" - decompress-response "^5.0.0" - duplexer3 "^0.1.4" - get-stream "^5.0.0" - lowercase-keys "^2.0.0" - mimic-response "^2.1.0" - p-cancelable "^2.0.0" - p-event "^4.0.0" - responselike "^2.0.0" - to-readable-stream "^2.0.0" - type-fest "^0.10.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4, graceful-fs@^4.2.6: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graphql-request@^3.3.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-3.7.0.tgz#c7406e537084f8b9788541e3e6704340ca13055b" - integrity sha512-dw5PxHCgBneN2DDNqpWu8QkbbJ07oOziy8z+bK/TAXufsOLaETuVO4GkXrbs0WjhdKhBMN3BkpN/RIvUHkmNUQ== - dependencies: - cross-fetch "^3.0.6" - extract-files "^9.0.0" - form-data "^3.0.0" - -graphql-tag@^2.11.0: - version "2.12.6" - resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1" - integrity sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg== - dependencies: - tslib "^2.1.0" - -graphql@^15.4.0: - version "15.8.0" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.8.0.tgz#33410e96b012fa3bdb1091cc99a94769db212b38" - integrity sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw== - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw== - -handle-thing@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" - integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== - -hard-rejection@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" - integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== - -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.0.1, has-proto@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - -has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - -has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6" - integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== - -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash-base@~3.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - integrity sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -hash-wasm@^4.9.0: - version "4.11.0" - resolved "https://registry.yarnpkg.com/hash-wasm/-/hash-wasm-4.11.0.tgz#7d1479b114c82e48498fdb1d2462a687d00386d5" - integrity sha512-HVusNXlVqHe0fzIzdQOGolnFN6mX/fqcrSAOcTBXdvzrXVHwTz11vXeKRmkR5gTuwVpvHZEIyKoePDvuAR+XwQ== - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - -he@1.2.0, he@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -history@^4.9.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" - integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== - dependencies: - "@babel/runtime" "^7.1.2" - loose-envify "^1.2.0" - resolve-pathname "^3.0.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - value-equal "^1.0.1" - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" - integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== - dependencies: - react-is "^16.7.0" - -homedir-polyfill@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== - dependencies: - parse-passwd "^1.0.0" - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -hosted-git-info@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" - integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== - dependencies: - lru-cache "^6.0.0" - -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== - dependencies: - whatwg-encoding "^1.0.5" - -html-entities@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" - integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== - -html-entities@^2.1.0, html-entities@^2.3.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.5.2.tgz#201a3cf95d3a15be7099521620d19dfb4f65359f" - integrity sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA== - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -html-loader@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-2.0.0.tgz#32e98b39cf7ce8be6851fa5466abe06015425a46" - integrity sha512-/8yd7xrPJM0ugzz4VDK/xLV39nPGpelwehonX/msg/N5ORvQj9G4VncX5coIWKkOSLBANseNaEcW+3Ga0twDWg== - dependencies: - html-minifier-terser "^5.1.1" - parse5-sax-parser "^6.0.1" - -html-minifier-terser@^5.0.1, html-minifier-terser@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" - integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== - dependencies: - camel-case "^4.1.1" - clean-css "^4.2.3" - commander "^4.1.1" - he "^1.2.0" - param-case "^3.0.3" - relateurl "^0.2.7" - terser "^4.6.3" - -html-to-react@^1.3.4: - version "1.7.0" - resolved "https://registry.yarnpkg.com/html-to-react/-/html-to-react-1.7.0.tgz#1664a0233a930ab1b12c442ddef0f1b72e7459f4" - integrity sha512-b5HTNaTGyOj5GGIMiWVr1k57egAZ/vGy0GGefnCQ1VW5hu9+eku8AXHtf2/DeD95cj/FKBKYa1J7SWBOX41yUQ== - dependencies: - domhandler "^5.0" - htmlparser2 "^9.0" - lodash.camelcase "^4.3.0" - -html-webpack-harddisk-plugin@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/html-webpack-harddisk-plugin/-/html-webpack-harddisk-plugin-2.0.0.tgz#2de78316554e7aa37d07066d3687901beca4d5ce" - integrity sha512-fWKH72FyaQ5K/j+kYy6LnQsQucSDnsEkghmB6g29TtpJ4sxHYFduEeUV1hfDqyDpCRW+bP7yacjQ+1ikeIDqeg== - -html-webpack-plugin@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.1.0.tgz#1c11bbe01ab9d1262c4b601edebcf394364b1f60" - integrity sha512-2axkp+2NHmvHUWrKe1dY4LyM3WatQEdFChr42OY7R/Ad7f0AQzaKscGCcqN/FtQBxo8rdfJP7M3RMFDttqok3g== - dependencies: - "@types/html-minifier-terser" "^5.0.0" - html-minifier-terser "^5.0.1" - loader-utils "^2.0.0" - lodash "^4.17.20" - pretty-error "^2.1.1" - tapable "^2.0.0" - -htmlparser2@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" - integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils "^2.5.2" - entities "^2.0.0" - -htmlparser2@^9.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-9.1.0.tgz#cdb498d8a75a51f739b61d3f718136c369bc8c23" - integrity sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.3" - domutils "^3.1.0" - entities "^4.5.0" - -http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - -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== - dependencies: - content-type "^1.0.4" - debug "^4.1.1" - is-retry-allowed "^1.1.0" - is-stream "^2.0.0" - parse-json "^4.0.0" - tunnel-agent "^0.6.0" - -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-parser-js@>=0.5.1: - version "0.5.8" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" - integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== - -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - -http-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" - integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== - dependencies: - "@tootallnate/once" "2" - agent-base "6" - debug "4" - -http-proxy-middleware@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" - integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== - dependencies: - "@types/http-proxy" "^1.17.8" - http-proxy "^1.18.1" - is-glob "^4.0.1" - is-plain-obj "^3.0.0" - micromatch "^4.0.2" - -http-proxy@^1.18.1: - version "1.18.1" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -httpolyglot@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/httpolyglot/-/httpolyglot-0.1.2.tgz#e4d347fe8984a62f467d4060df527f1851f6997b" - integrity sha512-ouHI1AaQMLgn4L224527S5+vq6hgvqPteurVfbm7ChViM3He2Wa8KP1Ny7pTYd7QKnDSPKcN8JYfC8r/lmsE3A== - -https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - -hyperdyperid@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/hyperdyperid/-/hyperdyperid-1.2.0.tgz#59668d323ada92228d2a869d3e474d5a33b69e6b" - integrity sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A== - -hyperlinker@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e" - integrity sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ== - -iconv-lite@0.4.24, iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -icss-utils@^5.0.0, icss-utils@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" - integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== - -ieee754@^1.1.12, ieee754@^1.1.13, ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore-walk@^3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335" - integrity sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ== - dependencies: - minimatch "^3.0.4" - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.0.0, ignore@^5.1.1, ignore@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== - -immer@^10.0.2, immer@^10.1.1: - version "10.1.1" - resolved "https://registry.yarnpkg.com/immer/-/immer-10.1.1.tgz#206f344ea372d8ea176891545ee53ccc062db7bc" - integrity sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw== - -import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== - -ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -inquirer-autocomplete-prompt@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-2.0.1.tgz#72868aada4d9d36814a6054cbd1ececc63aab0c6" - integrity sha512-jUHrH0btO7j5r8DTQgANf2CBkTZChoVySD8zF/wp5fZCOLIuUbleXhf4ZY5jNBOc1owA3gdfWtfZuppfYBhcUg== - dependencies: - ansi-escapes "^4.3.2" - figures "^3.2.0" - picocolors "^1.0.0" - run-async "^2.4.1" - rxjs "^7.5.4" - -inquirer@^8.2.4: - version "8.2.6" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.6.tgz#733b74888195d8d400a67ac332011b5fae5ea562" - integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.4.1" - run-async "^2.4.0" - rxjs "^7.5.5" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - wrap-ansi "^6.0.1" - -int64-buffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/int64-buffer/-/int64-buffer-1.0.1.tgz#c78d841b444cadf036cd04f8683696c740f15dca" - integrity sha512-+3azY4pXrjAupJHU1V9uGERWlhoqNswJNji6aD/02xac7oxol508AsMC5lxKhEqyZeDFy3enq5OGWXF4u75hiw== - -internal-slot@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" - integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== - dependencies: - es-errors "^1.3.0" - hasown "^2.0.0" - side-channel "^1.0.4" - -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - -interpret@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" - integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== - -intl-format-cache@^2.0.5: - version "2.2.9" - resolved "https://registry.yarnpkg.com/intl-format-cache/-/intl-format-cache-2.2.9.tgz#fb560de20c549cda20b569cf1ffb6dc62b5b93b4" - integrity sha512-Zv/u8wRpekckv0cLkwpVdABYST4hZNTDaX7reFetrYTJwxExR2VyTqQm+l0WmL0Qo8Mjb9Tf33qnfj0T7pjxdQ== - -intl-messageformat-parser@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/intl-messageformat-parser/-/intl-messageformat-parser-1.4.0.tgz#b43d45a97468cadbe44331d74bb1e8dea44fc075" - integrity sha512-/XkqFHKezO6UcF4Av2/Lzfrez18R0jyw7kRFhSeB/YRakdrgSc9QfFZUwNJI9swMwMoNPygK1ArC5wdFSjPw+A== - -intl-messageformat-parser@^3.6.4: - version "3.6.4" - resolved "https://registry.yarnpkg.com/intl-messageformat-parser/-/intl-messageformat-parser-3.6.4.tgz#5199d106d816c3dda26ee0694362a9cf823978fb" - integrity sha512-RgPGwue0mJtoX2Ax8EmMzJzttxjnva7gx0Q7mKJ4oALrTZvtmCeAw5Msz2PcjW4dtCh/h7vN/8GJCxZO1uv+OA== - dependencies: - "@formatjs/intl-unified-numberformat" "^3.2.0" - -intl-messageformat@10.5.14: - version "10.5.14" - resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.5.14.tgz#e5bb373f8a37b88fbe647d7b941f3ab2a37ed00a" - integrity sha512-IjC6sI0X7YRjjyVH9aUgdftcmZK7WXdHeil4KwbjDnRWjnVitKpAx3rr6t6di1joFp5188VqKcobOPA6mCLG/w== - dependencies: - "@formatjs/ecma402-abstract" "2.0.0" - "@formatjs/fast-memoize" "2.2.0" - "@formatjs/icu-messageformat-parser" "2.7.8" - tslib "^2.4.0" - -intl-messageformat@^2.0.0, intl-messageformat@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-2.2.0.tgz#345bcd46de630b7683330c2e52177ff5eab484fc" - integrity sha512-I+tSvHnXqJYjDfNmY95tpFMj30yoakC6OXAo+wu/wTMy6tA/4Fd4mvV7Uzs4cqK/Ap29sHhwjcY+78a8eifcXw== - dependencies: - intl-messageformat-parser "1.4.0" - -intl-relativeformat@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/intl-relativeformat/-/intl-relativeformat-2.2.0.tgz#6aca95d019ec8d30b6c5653b6629f9983ea5b6c5" - integrity sha512-4bV/7kSKaPEmu6ArxXf9xjv1ny74Zkwuey8Pm01NH4zggPP7JHwg2STk8Y3JdspCKRDriwIyLRfEXnj2ZLr4Bw== - dependencies: - intl-messageformat "^2.0.0" - -invariant@^2.1.1: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - -ip-address@^9.0.5: - version "9.0.5" - resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" - integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== - dependencies: - jsbn "1.1.0" - sprintf-js "^1.1.3" - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -ipaddr.js@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8" - integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== - -is-accessor-descriptor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz#3223b10628354644b86260db29b3e693f5ceedd4" - integrity sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA== - dependencies: - hasown "^2.0.0" - -is-alphabetical@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" - integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== - -is-alphanumerical@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" - integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== - dependencies: - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - -is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-array-buffer@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" - integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-buffer@^1.1.5, is-buffer@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-buffer@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-core-module@^2.13.0, is-core-module@^2.5.0: - version "2.13.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== - dependencies: - hasown "^2.0.0" - -is-data-descriptor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz#2109164426166d32ea38c405c1e0945d9e6a4eeb" - integrity sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw== - dependencies: - hasown "^2.0.0" - -is-data-view@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" - integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== - dependencies: - is-typed-array "^1.1.13" - -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-decimal@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" - integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== - -is-descriptor@^0.1.0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.7.tgz#2727eb61fd789dcd5bdf0ed4569f551d2fe3be33" - integrity sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg== - dependencies: - is-accessor-descriptor "^1.0.1" - is-data-descriptor "^1.0.1" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.3.tgz#92d27cb3cd311c4977a4db47df457234a13cb306" - integrity sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw== - dependencies: - is-accessor-descriptor "^1.0.1" - is-data-descriptor "^1.0.1" - -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -is-generator-function@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-hexadecimal@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" - integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== - -is-nan@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" - integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - -is-negative-zero@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" - integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== - -is-number-object@^1.0.4: - 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" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== - dependencies: - kind-of "^3.0.2" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== - -is-plain-obj@^2.0.0, is-plain-obj@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - -is-plain-obj@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" - integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== - -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-retry-allowed@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" - integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== - -is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" - integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== - dependencies: - call-bind "^1.0.7" - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typed-array@^1.1.13, is-typed-array@^1.1.3: - version "1.1.13" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" - integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== - dependencies: - which-typed-array "^1.1.14" - -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^2.1.1, is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" - integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== - -istanbul-lib-instrument@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" - integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== - dependencies: - "@babel/core" "^7.7.5" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" - semver "^6.3.0" - -istanbul-lib-instrument@^5.0.4: - version "5.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" - integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== - dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^6.3.0" - -istanbul-lib-report@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" - integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^4.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.0.2: - version "3.1.7" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" - integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -jdenticon@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/jdenticon/-/jdenticon-3.2.0.tgz#b5b9ef413cb66f70c600d6e69a764c977f248a46" - integrity sha512-z6Iq3fTODUMSOiR2nNYrqigS6Y0GvdXfyQWrUby7htDHvX7GNEwaWR4hcaL+FmhEgBe08Xkup/BKxXQhDJByPA== - dependencies: - canvas-renderer "~2.2.0" - -jest-canvas-mock@2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/jest-canvas-mock/-/jest-canvas-mock-2.3.1.tgz#9535d14bc18ccf1493be36ac37dd349928387826" - integrity sha512-5FnSZPrX3Q2ZfsbYNE3wqKR3+XorN8qFzDzB5o0golWgt6EOX1+emBnpOc9IAQ+NXFj8Nzm3h7ZdE/9H0ylBcg== - dependencies: - cssfontparser "^1.2.1" - moo-color "^1.0.2" - -jest-changed-files@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" - integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== - dependencies: - "@jest/types" "^26.6.2" - execa "^4.0.0" - throat "^5.0.0" - -jest-cli@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" - integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== - dependencies: - "@jest/core" "^26.6.3" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - import-local "^3.0.2" - is-ci "^2.0.0" - jest-config "^26.6.3" - jest-util "^26.6.2" - jest-validate "^26.6.2" - prompts "^2.0.1" - yargs "^15.4.1" - -jest-config@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" - integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== - dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^26.6.3" - "@jest/types" "^26.6.2" - babel-jest "^26.6.3" - chalk "^4.0.0" - deepmerge "^4.2.2" - glob "^7.1.1" - graceful-fs "^4.2.4" - jest-environment-jsdom "^26.6.2" - jest-environment-node "^26.6.2" - jest-get-type "^26.3.0" - jest-jasmine2 "^26.6.3" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - micromatch "^4.0.2" - pretty-format "^26.6.2" - -jest-diff@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" - integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== - dependencies: - chalk "^4.0.0" - diff-sequences "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - -jest-docblock@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" - integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== - dependencies: - detect-newline "^3.0.0" - -jest-each@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" - integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== - dependencies: - "@jest/types" "^26.6.2" - chalk "^4.0.0" - jest-get-type "^26.3.0" - jest-util "^26.6.2" - pretty-format "^26.6.2" - -jest-environment-jsdom@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" - integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" - jsdom "^16.4.0" - -jest-environment-node@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" - integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" - -jest-get-type@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" - integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== - -jest-haste-map@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" - integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== - dependencies: - "@jest/types" "^26.6.2" - "@types/graceful-fs" "^4.1.2" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-regex-util "^26.0.0" - jest-serializer "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.1.2" - -jest-jasmine2@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" - integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== - dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^26.6.2" - is-generator-fn "^2.0.0" - jest-each "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - pretty-format "^26.6.2" - throat "^5.0.0" - -jest-leak-detector@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" - integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== - dependencies: - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - -jest-matcher-utils@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" - integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== - dependencies: - chalk "^4.0.0" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - -jest-message-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" - integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== - dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/types" "^26.6.2" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.4" - micromatch "^4.0.2" - pretty-format "^26.6.2" - slash "^3.0.0" - stack-utils "^2.0.2" - -jest-mock@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" - integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== - dependencies: - "@jest/types" "^26.6.2" - "@types/node" "*" - -jest-pnp-resolver@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" - integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== - -jest-regex-util@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" - integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== - -jest-resolve-dependencies@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" - integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== - dependencies: - "@jest/types" "^26.6.2" - jest-regex-util "^26.0.0" - jest-snapshot "^26.6.2" - -jest-resolve@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" - integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== - dependencies: - "@jest/types" "^26.6.2" - chalk "^4.0.0" - graceful-fs "^4.2.4" - jest-pnp-resolver "^1.2.2" - jest-util "^26.6.2" - read-pkg-up "^7.0.1" - resolve "^1.18.1" - slash "^3.0.0" - -jest-runner@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" - integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== - dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - emittery "^0.7.1" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-docblock "^26.0.0" - jest-haste-map "^26.6.2" - jest-leak-detector "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" - jest-runtime "^26.6.3" - jest-util "^26.6.2" - jest-worker "^26.6.2" - source-map-support "^0.5.6" - throat "^5.0.0" - -jest-runtime@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" - integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== - dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/globals" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - cjs-module-lexer "^0.6.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - slash "^3.0.0" - strip-bom "^4.0.0" - yargs "^15.4.1" - -jest-serializer@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" - integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.4" - -jest-snapshot@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" - integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== - dependencies: - "@babel/types" "^7.0.0" - "@jest/types" "^26.6.2" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.0.0" - chalk "^4.0.0" - expect "^26.6.2" - graceful-fs "^4.2.4" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - jest-haste-map "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" - natural-compare "^1.4.0" - pretty-format "^26.6.2" - semver "^7.3.2" - -jest-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" - integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== - dependencies: - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - micromatch "^4.0.2" - -jest-validate@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" - integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== - dependencies: - "@jest/types" "^26.6.2" - camelcase "^6.0.0" - chalk "^4.0.0" - jest-get-type "^26.3.0" - leven "^3.1.0" - pretty-format "^26.6.2" - -jest-watcher@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" - integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== - dependencies: - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - jest-util "^26.6.2" - string-length "^4.0.1" - -jest-worker@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" - -jest-worker@^27.4.5: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest@26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" - integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== - dependencies: - "@jest/core" "^26.6.3" - import-local "^3.0.2" - jest-cli "^26.6.3" - -js-base64@^2.4.9: - version "2.6.4" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" - integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== - -js-sha3@0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" - integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.1.0.tgz#36ba02e618c50748e772dd352428904cbbadcf44" - integrity sha512-AgPExLjC+sVh3GLVZdoTprN9oKoF911GFq0CMs8XVXPyfOfelpH9+NKGAn0NKqt9g38/5nPHqBOD8ObqhoSQ6Q== - dependencies: - argparse "~ 0.1.11" - esprima "~ 1.0.2" - -jsbn@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" - integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== - -jsdom@^16.4.0: - version "16.7.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" - integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== - dependencies: - abab "^2.0.5" - acorn "^8.2.4" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.3.0" - data-urls "^2.0.0" - decimal.js "^10.2.1" - domexception "^2.0.1" - escodegen "^2.0.0" - form-data "^3.0.0" - html-encoding-sniffer "^2.0.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.5.0" - ws "^7.4.6" - xml-name-validator "^3.0.0" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-schema-typed@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/json-schema-typed/-/json-schema-typed-7.0.3.tgz#23ff481b8b4eebcd2ca123b4fa0409e66469a2d9" - integrity sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json-stable-stringify@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - integrity sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg== - dependencies: - jsonify "~0.0.0" - -json-stable-stringify@^1.0.1, json-stable-stringify@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz#52d4361b47d49168bcc4e564189a42e5a7439454" - integrity sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg== - dependencies: - call-bind "^1.0.5" - isarray "^2.0.5" - jsonify "^0.0.1" - object-keys "^1.1.1" - -json5@^1.0.1, json5@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -json5@^2.1.1, json5@^2.1.2, json5@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonify@^0.0.1, jsonify@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" - integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== - -jsonschema@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.2.tgz#83ab9c63d65bf4d596f91d81195e78772f6452bc" - integrity sha512-iX5OFQ6yx9NgbHCwse51ohhKgLuLL7Z5cNOeZOPIlDUtAMrxlruHLzVZxbltdHE5mEDXN+75oFOwq6Gn0MZwsA== - -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.1.0: - version "3.3.5" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" - integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== - dependencies: - array-includes "^3.1.6" - array.prototype.flat "^1.3.1" - object.assign "^4.1.4" - object.values "^1.1.6" - -keyv@^4.0.0, keyv@^4.5.3: - version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== - dependencies: - is-buffer "^1.1.5" - -kind-of@^6.0.2, kind-of@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -klona@^2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" - integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== - -language-subtag-registry@^0.3.20: - version "0.3.23" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7" - integrity sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ== - -language-tags@^1.0.5: - version "1.0.9" - resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.9.tgz#1ffdcd0ec0fafb4b1be7f8b11f306ad0f9c08777" - integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA== - dependencies: - language-subtag-registry "^0.3.20" - -launch-editor@^2.6.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.1.tgz#f259c9ef95cbc9425620bbbd14b468fcdb4ffe3c" - integrity sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw== - dependencies: - picocolors "^1.0.0" - shell-quote "^1.8.1" - -lazystream@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638" - integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== - dependencies: - readable-stream "^2.0.5" - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -listenercount@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" - integrity sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ== - -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - integrity sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ== - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - -loader-runner@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== - -loader-utils@^1.2.3, loader-utils@^1.4.0: - version "1.4.2" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.2.tgz#29a957f3a63973883eb684f10ffd3d151fec01a3" - integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^1.0.1" - -loader-utils@^2.0.0, loader-utils@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" - integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== - -lodash.defaults@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== - -lodash.difference@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" - integrity sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA== - -lodash.flatten@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== - -lodash.get@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== - -lodash.omit@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.omit/-/lodash.omit-4.5.0.tgz#6eb19ae5a1ee1dd9df0b969e66ce0b7fa30b5e60" - integrity sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg== - -lodash.set@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" - integrity sha512-4hNPN5jlm/N/HLMCO43v8BXKq9Z7QdAGc/VGrRD61w8gN9g/6jF9A4L1pbUgBLCffi0w9VsXfTOij5x8iTyFvg== - -lodash.throttle@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" - integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ== - -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== - -lodash.union@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" - integrity sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw== - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== - -lodash@4.17.21, lodash@^4.17.11, 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.17.5, lodash@^4.7.0, lodash@~4.17.4: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-chopper@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-chopper/-/log-chopper-1.0.2.tgz#a88da7a47a9f0e511eda4d5e1dc840e0eaf4547a" - integrity sha512-tEWS6Fb+Xv0yLChJ6saA1DP3H1yPL0PfiIN7SDJ+U/CyP+fD4G/dhKfow+P5UuJWi6BdE4mUcPkJclGXCWxDrg== - dependencies: - byline "5.x" - -log-symbols@4.1.0, log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -log-symbols@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" - integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== - dependencies: - chalk "^2.4.2" - -long@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" - integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== - -long@^5.0.0: - version "5.2.3" - resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" - integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== - -long@~3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b" - integrity sha512-ZYvPPOMqUwPoDsbJaR10iQJYnMuZhRTvHYl62ErLIEX7RgFlziSBUUvrt3OVfc47QlHHpzPZYP17g3Fv7oeJkg== - -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lottie-react@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/lottie-react/-/lottie-react-2.4.0.tgz#f7249eee2b1deee70457a2d142194fdf2456e4bd" - integrity sha512-pDJGj+AQlnlyHvOHFK7vLdsDcvbuqvwPZdMlJ360wrzGFurXeKPr8SiRCjLf3LrNYKANQtSsh5dz9UYQHuqx4w== - dependencies: - lottie-web "^5.10.2" - -lottie-web@^5.10.2: - version "5.12.2" - resolved "https://registry.yarnpkg.com/lottie-web/-/lottie-web-5.12.2.tgz#579ca9fe6d3fd9e352571edd3c0be162492f68e5" - integrity sha512-uvhvYPC8kGPjXT3MyKMrL3JitEAmDMp30lVkuq/590Mw9ok6pWcFCwXJveo0t5uqYw1UREQHofD+jVpdjBv8wg== - -lovefield@2.1.12: - version "2.1.12" - resolved "https://registry.yarnpkg.com/lovefield/-/lovefield-2.1.12.tgz#07fb9f1d7840578ec784706cad0fbe7de4c93f52" - integrity sha512-uOTF9enxl7bhyGtsWMkQTeWLpaNuJ0N0d5wH2/r6upQ3pvBEKEsiix+pwo8FHlli3SmDbrvuXo6a+HD7An99OQ== - dependencies: - js-yaml "~3.1.0" - nopt "~2.2.1" - -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lru-cache@^7.7.1: - version "7.18.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" - integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== - -lru_map@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" - integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== - -macos-release@^2.2.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.5.1.tgz#bccac4a8f7b93163a8d163b8ebf385b3c5f55bf9" - integrity sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A== - -make-dir@^2.0.0, make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" - integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== - dependencies: - semver "^7.5.3" - -make-error-cause@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/make-error-cause/-/make-error-cause-2.3.0.tgz#ecd11875971e506d510e93d37796e5b83f46d6f9" - integrity sha512-etgt+n4LlOkGSJbBTV9VROHA5R7ekIPS4vfh+bCAoJgRrJWdqJCBbpS3osRJ/HrT7R68MzMiY3L3sDJ/Fd8aBg== - dependencies: - make-error "^1.3.5" - -make-error@^1.3.5: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -make-fetch-happen@^10.0.4: - version "10.2.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" - integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== - dependencies: - agentkeepalive "^4.2.1" - cacache "^16.1.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^7.7.1" - minipass "^3.1.6" - minipass-collect "^1.0.2" - minipass-fetch "^2.0.3" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.3" - promise-retry "^2.0.1" - socks-proxy-agent "^7.0.0" - ssri "^9.0.0" - -make-fetch-happen@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" - integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== - dependencies: - agentkeepalive "^4.1.3" - cacache "^15.2.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^6.0.0" - minipass "^3.1.3" - minipass-collect "^1.0.2" - minipass-fetch "^1.3.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.2" - promise-retry "^2.0.1" - socks-proxy-agent "^6.0.0" - ssri "^8.0.0" - -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== - dependencies: - tmpl "1.0.5" - -map-age-cleaner@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== - -map-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== - -map-obj@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" - integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== - dependencies: - object-visit "^1.0.0" - -markdown-loader@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/markdown-loader/-/markdown-loader-6.0.0.tgz#7f8d40ee98b32d3bb8c5387d58e679600d3edeaa" - integrity sha512-kUTEEpWRc5zcQbdjpK0QYdp/9Z5Oep440foKSXc7wWetcRxrWm4vbbXRW0Gqhht5CKJ4gm7el4HOPPyqs/ziTA== - dependencies: - loader-utils "^1.2.3" - marked "^0.7.0" - -marked@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/marked/-/marked-0.7.0.tgz#b64201f051d271b1edc10a04d1ae9b74bb8e5c0e" - integrity sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg== - -match-sorter@^6.0.2: - version "6.3.4" - resolved "https://registry.yarnpkg.com/match-sorter/-/match-sorter-6.3.4.tgz#afa779d8e922c81971fbcb4781c7003ace781be7" - integrity sha512-jfZW7cWS5y/1xswZo8VBOdudUiSd9nifYRWphc9M5D/ee4w4AoXLgBEdRbgVaxbMuagBPeUC5y2Hi8DO6o9aDg== - dependencies: - "@babel/runtime" "^7.23.8" - remove-accents "0.5.0" - -math-expression-evaluator@^1.2.14: - version "1.4.0" - resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.4.0.tgz#3d66031117fbb7b9715ea6c9c68c2cd2eebd37e2" - integrity sha512-4vRUvPyxdO8cWULGTh9dZWL2tZK6LDBvj+OGHBER7poH9Qdt7kXEoj20wiz4lQUbUXQZFjPbe5mVDo9nutizCw== - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -md5@^2.2.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" - integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== - dependencies: - charenc "0.0.2" - crypt "0.0.2" - is-buffer "~1.1.6" - -mdast-add-list-metadata@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mdast-add-list-metadata/-/mdast-add-list-metadata-1.0.1.tgz#95e73640ce2fc1fa2dcb7ec443d09e2bfe7db4cf" - integrity sha512-fB/VP4MJ0LaRsog7hGPxgOrSL3gE/2uEdZyDuSEnKCv/8IkYHiDkIQSbChiJoHyxZZXZ9bzckyRk+vNxFzh8rA== - dependencies: - unist-util-visit-parents "1.1.2" - -mdast-util-from-markdown@^0.8.0: - version "0.8.5" - resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz#d1ef2ca42bc377ecb0463a987910dae89bd9a28c" - integrity sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ== - dependencies: - "@types/mdast" "^3.0.0" - mdast-util-to-string "^2.0.0" - micromark "~2.11.0" - parse-entities "^2.0.0" - unist-util-stringify-position "^2.0.0" - -mdast-util-to-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" - integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== - -mdn-data@2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" - integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== - -mdn-data@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" - integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -mem@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/mem/-/mem-8.1.1.tgz#cf118b357c65ab7b7e0817bdf00c8062297c0122" - integrity sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA== - dependencies: - map-age-cleaner "^0.1.3" - mimic-fn "^3.1.0" - -memfs@^3.2.0, memfs@^3.4.3: - version "3.6.0" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" - integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== - dependencies: - fs-monkey "^1.0.4" - -memfs@^4.6.0: - version "4.9.2" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.9.2.tgz#42e7b48207268dad8c9c48ea5d4952c5d3840433" - integrity sha512-f16coDZlTG1jskq3mxarwB+fGRrd0uXWt+o1WIhRfOwbXQZqUDsTVxQBFK9JjRQHblg8eAG2JSbprDXKjc7ijQ== - dependencies: - "@jsonjoy.com/json-pack" "^1.0.3" - "@jsonjoy.com/util" "^1.1.2" - sonic-forest "^1.0.0" - tslib "^2.0.0" - -memoize-one@^5.1.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" - integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== - -meow@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-9.0.0.tgz#cd9510bc5cac9dee7d03c73ee1f9ad959f4ea364" - integrity sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ== - dependencies: - "@types/minimist" "^1.2.0" - camelcase-keys "^6.2.2" - decamelize "^1.2.0" - decamelize-keys "^1.1.0" - hard-rejection "^2.1.0" - minimist-options "4.1.0" - normalize-package-data "^3.0.0" - read-pkg-up "^7.0.1" - redent "^3.0.0" - trim-newlines "^3.0.0" - type-fest "^0.18.0" - yargs-parser "^20.2.3" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - -merge-options@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/merge-options/-/merge-options-3.0.4.tgz#84709c2aa2a4b24c1981f66c179fe5565cc6dbb7" - integrity sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ== - dependencies: - is-plain-obj "^2.1.0" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micromark@~2.11.0: - version "2.11.4" - resolved "https://registry.yarnpkg.com/micromark/-/micromark-2.11.4.tgz#d13436138eea826383e822449c9a5c50ee44665a" - integrity sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA== - dependencies: - debug "^4.0.0" - parse-entities "^2.0.0" - -micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4: - version "4.0.7" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" - integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== - dependencies: - braces "^3.0.3" - picomatch "^2.3.1" - -microseconds@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/microseconds/-/microseconds-0.2.0.tgz#233b25f50c62a65d861f978a4a4f8ec18797dc39" - integrity sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA== - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.28, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-fn@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-3.1.0.tgz#65755145bbf3e36954b949c16450427451d5ca74" - integrity sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ== - -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -mimic-response@^2.0.0, mimic-response@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" - integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - -mini-create-react-context@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz#072171561bfdc922da08a60c2197a497cc2d1d5e" - integrity sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ== - dependencies: - "@babel/runtime" "^7.12.1" - tiny-warning "^1.0.3" - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== - -minimatch@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" - integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^3.0.4, minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@~3.0.2: - version "3.0.8" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1" - integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q== - dependencies: - brace-expansion "^1.1.7" - -minimist-options@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" - integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - kind-of "^6.0.3" - -minimist@1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-fetch@^1.3.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" - integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== - dependencies: - minipass "^3.1.0" - minipass-sized "^1.0.3" - minizlib "^2.0.0" - optionalDependencies: - encoding "^0.1.12" - -minipass-fetch@^2.0.3: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" - integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== - dependencies: - minipass "^3.1.6" - minipass-sized "^1.0.3" - minizlib "^2.1.2" - optionalDependencies: - encoding "^0.1.13" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3, minipass@^3.1.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - -minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mixwith@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/mixwith/-/mixwith-0.1.1.tgz#c8995918c5b61fbfda9ad377a857cd47750541c0" - integrity sha512-DQsf/liljH/9e+94jR+xfK8vlKceeKdOM9H9UEXLwGuvEEpO6debNtJ9yt1ZKzPKPrwqGxzMdu0BR1fnQb6i4A== - -mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - -"mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mobx-react-form@2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/mobx-react-form/-/mobx-react-form-2.0.8.tgz#ea98dd6c7d65625a25732a8a9c16ea7c71b21e3e" - integrity sha512-Z/JsXkN7B5xjG1tolHKytJiKmtLSdqkFKMco5AVagL8cQ0yJmE+iRZ212JKGHfkEKZrRWn7EDnX2STawIQFqxg== - dependencies: - lodash "^4.17.11" - -mobx-react-lite@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/mobx-react-lite/-/mobx-react-lite-2.2.2.tgz#87c217dc72b4e47b22493daf155daf3759f868a6" - integrity sha512-2SlXALHIkyUPDsV4VTKVR9DW7K3Ksh1aaIv3NrNJygTbhXe2A9GrcKHZ2ovIiOp/BXilOcTYemfHHZubP431dg== - -mobx-react-router@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/mobx-react-router/-/mobx-react-router-4.1.0.tgz#de014848207d8aa32f6a4e67ed861bd2cb6516e5" - integrity sha512-2knsbDqVorWLngZWbdO8tr7xcZXaLpVFsFlCaGaoyZ+EP9erVGRxnlWGqKyFObs3EH1JPLyTDOJ2LPTxb/lB6Q== - -mobx-react@6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/mobx-react/-/mobx-react-6.3.1.tgz#204f9756e42e19d91cb6598837063b7e7de87c52" - integrity sha512-IOxdJGnRSNSJrL2uGpWO5w9JH5q5HoxEqwOF4gye1gmZYdjoYkkMzSGMDnRCUpN/BNzZcFoMdHXrjvkwO7KgaQ== - dependencies: - mobx-react-lite "^2.2.0" - -mobx@5.15.7: - version "5.15.7" - resolved "https://registry.yarnpkg.com/mobx/-/mobx-5.15.7.tgz#b9a5f2b6251f5d96980d13c78e9b5d8d4ce22665" - integrity sha512-wyM3FghTkhmC+hQjyPGGFdpehrcX1KOXsDuERhfK2YbJemkUhEB+6wzEN639T21onxlfYBmriA1PFnvxTUhcKw== - -mocha@^10.0.0: - version "10.4.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.4.0.tgz#ed03db96ee9cfc6d20c56f8e2af07b961dbae261" - integrity sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA== - dependencies: - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.3" - debug "4.3.4" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "8.1.0" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "5.0.1" - ms "2.1.3" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - workerpool "6.2.1" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - -moment@2.30.1, moment@^2.19.3, moment@^2.22.1: - version "2.30.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" - integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== - -moo-color@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/moo-color/-/moo-color-1.0.3.tgz#d56435f8359c8284d83ac58016df7427febece74" - integrity sha512-i/+ZKXMDf6aqYtBhuOcej71YSlbjT3wCO/4H1j8rPvxDJEifdwgg5MaFyu6iYAT8GBZJg2z0dkgK4YMzvURALQ== - dependencies: - color-name "^1.1.4" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3, ms@^2.0.0, ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multicast-dns@^7.2.5: - version "7.2.5" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" - integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== - dependencies: - dns-packet "^5.2.2" - thunky "^1.0.2" - -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -nan@^2.13.2, nan@^2.15.0, nan@^2.17.0, nan@^2.4.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.19.0.tgz#bb58122ad55a6c5bc973303908d5b16cfdd5a8c0" - integrity sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw== - -nano-time@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/nano-time/-/nano-time-1.0.0.tgz#b0554f69ad89e22d0907f7a12b0993a5d96137ef" - integrity sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA== - dependencies: - big-integer "^1.6.16" - -nanoassert@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/nanoassert/-/nanoassert-1.1.0.tgz#4f3152e09540fde28c76f44b19bbcd1d5a42478d" - integrity sha512-C40jQ3NzfkP53NsO8kEOFd79p4b9kDXQMwgiY1z8ZwrDZgUyom0AHwGegF4Dm99L+YoYhuaB0ceerUcXmqr1rQ== - -nanoassert@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/nanoassert/-/nanoassert-2.0.0.tgz#a05f86de6c7a51618038a620f88878ed1e490c09" - integrity sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA== - -nanoid@^3.3.6, nanoid@^3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -napi-build-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" - integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -natural-orderby@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/natural-orderby/-/natural-orderby-2.0.3.tgz#8623bc518ba162f8ff1cdb8941d74deb0fdcc016" - integrity sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q== - -negotiator@0.6.3, negotiator@^0.6.2, negotiator@^0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - -node-abi@^3.3.0: - version "3.63.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.63.0.tgz#9bfbe68b87357f8b508554608b323e9b1052d045" - integrity sha512-vAszCsOUrUxjGAmdnM/pq7gUgie0IRteCQMX6d4A534fQCR93EJU5qgzBvU6EkFfK27s0T3HEV3BOyJIr7OMYw== - dependencies: - semver "^7.3.5" - -node-addon-api@^3.0.0, node-addon-api@^3.0.2: - version "3.2.1" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" - integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== - -node-addon-api@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76" - integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA== - -node-addon-api@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-8.0.0.tgz#5453b7ad59dd040d12e0f1a97a6fa1c765c5c9d2" - integrity sha512-ipO7rsHEBqa9STO5C5T10fj732ml+5kLN1cAG8/jdHd56ldQeGj3Q7+scUS+VHK/qy1zLEwC4wMK5+yM0btPvw== - -node-environment-flags@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088" - integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw== - dependencies: - object.getownpropertydescriptors "^2.0.3" - semver "^5.7.0" - -node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.7: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -node-forge@^1: - 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.2.2, node-gyp-build@^4.5.0: - version "4.8.1" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.1.tgz#976d3ad905e71b76086f4f0b0d3637fe79b6cda5" - integrity sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw== - -node-gyp@^8.4.1: - version "8.4.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" - integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^9.1.0" - nopt "^5.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - -node-hid@^2.1.2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/node-hid/-/node-hid-2.2.0.tgz#33e039e7530a7bfe2b7a25f0a2f9496af8b02236" - integrity sha512-vj48zh9j555DZzUhMc8tk/qw6xPFrDyPBH1ST1Z/hWaA/juBJw7IuSxPeOgpzNFNU36mGYj+THioRMt1xOdm/g== - dependencies: - bindings "^1.5.0" - node-addon-api "^3.0.2" - prebuild-install "^7.1.1" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== - -node-notifier@^8.0.0: - version "8.0.2" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" - integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== - dependencies: - growly "^1.3.0" - is-wsl "^2.2.0" - semver "^7.3.2" - shellwords "^0.1.1" - uuid "^8.3.0" - which "^2.0.2" - -node-releases@^2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" - integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== - -node-rsa@^1.0.5: - version "1.1.1" - resolved "https://registry.yarnpkg.com/node-rsa/-/node-rsa-1.1.1.tgz#efd9ad382097782f506153398496f79e4464434d" - integrity sha512-Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw== - dependencies: - asn1 "^0.2.4" - -node-sass@9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-9.0.0.tgz#c21cd17bd9379c2d09362b3baf2cbf089bce08ed" - integrity sha512-yltEuuLrfH6M7Pq2gAj5B6Zm7m+gdZoG66wTqG6mIZV/zijq3M2OO2HswtT6oBspPyFhHDcaxWpsBm0fRNDHPg== - dependencies: - async-foreach "^0.1.3" - chalk "^4.1.2" - cross-spawn "^7.0.3" - gaze "^1.0.0" - get-stdin "^4.0.1" - glob "^7.0.3" - lodash "^4.17.15" - make-fetch-happen "^10.0.4" - meow "^9.0.0" - nan "^2.17.0" - node-gyp "^8.4.1" - sass-graph "^4.0.1" - stdout-stream "^1.4.0" - "true-case-path" "^2.2.1" - -nofilter@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66" - integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== - -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" - -nopt@~2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-2.2.1.tgz#2aa09b7d1768487b3b89a9c5aa52335bff0baea7" - integrity sha512-gIOTA/uJuhPwFqp+spY7VQ1satbnGlD+iQVZxI18K6hs8Evq4sX81Ml7BB5byP/LsbR2yBVtmvdEmhi7evJ6Aw== - dependencies: - abbrev "1" - -normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" - integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== - dependencies: - hosted-git-info "^4.0.1" - is-core-module "^2.5.0" - semver "^7.3.4" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== - -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -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" - integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== - dependencies: - path-key "^2.0.0" - -npm-run-path@^4.0.0, npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -npmlog@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" - integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== - dependencies: - are-we-there-yet "^3.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.3" - set-blocking "^2.0.0" - -nth-check@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - -nth-check@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== - dependencies: - boolbase "^1.0.0" - -nwsapi@^2.2.0: - version "2.2.10" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.10.tgz#0b77a68e21a0b483db70b11fad055906e867cda8" - integrity sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ== - -object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-hash@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" - integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== - -object-inspect@^1.13.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== - -object-is@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" - integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-treeify@^1.1.4: - version "1.1.33" - resolved "https://registry.yarnpkg.com/object-treeify/-/object-treeify-1.1.33.tgz#f06fece986830a3cba78ddd32d4c11d1f76cdf40" - integrity sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== - dependencies: - isobject "^3.0.0" - -object.assign@^4.1.0, object.assign@^4.1.2, object.assign@^4.1.4, object.assign@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" - integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== - dependencies: - call-bind "^1.0.5" - define-properties "^1.2.1" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.entries@^1.1.2: - version "1.1.8" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" - integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -object.fromentries@^2.0.2: - version "2.0.8" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" - integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - -object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: - version "2.1.8" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz#2f1fe0606ec1a7658154ccd4f728504f69667923" - integrity sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A== - dependencies: - array.prototype.reduce "^1.0.6" - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - gopd "^1.0.1" - safe-array-concat "^1.1.2" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== - dependencies: - isobject "^3.0.1" - -object.values@^1.1.0, object.values@^1.1.1, object.values@^1.1.6: - version "1.2.0" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" - integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -oblivious-set@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/oblivious-set/-/oblivious-set-1.0.0.tgz#c8316f2c2fb6ff7b11b6158db3234c49f733c566" - integrity sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw== - -obuf@^1.0.0, obuf@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" - integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== - -octokit-pagination-methods@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" - integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ== - -on-finished@2.4.1, on-finished@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.0, onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -open@^7.3.1: - version "7.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" - integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== - dependencies: - is-docker "^2.0.0" - is-wsl "^2.1.1" - -open@^8.0.9: - version "8.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" - integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - -optionator@^0.9.1: - version "0.9.4" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" - integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.5" - -ora@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-4.1.1.tgz#566cc0348a15c36f5f0e979612842e02ba9dddbc" - integrity sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A== - dependencies: - chalk "^3.0.0" - cli-cursor "^3.1.0" - cli-spinners "^2.2.0" - is-interactive "^1.0.0" - log-symbols "^3.0.0" - mute-stream "0.0.8" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -os-name@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" - integrity sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg== - dependencies: - macos-release "^2.2.0" - windows-release "^3.1.0" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - -p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== - -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== - -p-each-series@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" - integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== - -p-event@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/p-event/-/p-event-4.2.0.tgz#af4b049c8acd91ae81083ebd1e6f5cae2044c1b5" - integrity sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ== - dependencies: - p-timeout "^3.1.0" - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== - dependencies: - p-limit "^1.1.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-retry@^4.5.0: - version "4.6.2" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" - integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== - dependencies: - "@types/retry" "0.12.0" - retry "^0.13.1" - -p-timeout@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" - integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== - dependencies: - p-finally "^1.0.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -pako@~1.0.5: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - -param-case@^3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" - integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-asn1@^5.0.0, parse-asn1@^5.1.7: - version "5.1.7" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.7.tgz#73cdaaa822125f9647165625eb45f8a051d2df06" - integrity sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg== - dependencies: - asn1.js "^4.10.1" - browserify-aes "^1.2.0" - evp_bytestokey "^1.0.3" - hash-base "~3.0" - pbkdf2 "^3.1.2" - safe-buffer "^5.2.1" - -parse-entities@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" - integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== - dependencies: - character-entities "^1.0.0" - character-entities-legacy "^1.0.0" - character-reference-invalid "^1.0.0" - is-alphanumerical "^1.0.0" - is-decimal "^1.0.0" - is-hexadecimal "^1.0.0" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ== - dependencies: - error-ex "^1.2.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== - -parse5-sax-parser@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz#98b4d366b5b266a7cd90b4b58906667af882daba" - integrity sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg== - dependencies: - parse5 "^6.0.1" - -parse5@6.0.1, parse5@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - -parse5@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" - integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA== - dependencies: - "@types/node" "*" - -parseurl@~1.3.2, parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascal-case@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" - integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== - -password-prompt@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/password-prompt/-/password-prompt-1.1.3.tgz#05e539f4e7ca4d6c865d479313f10eb9db63ee5f" - integrity sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw== - dependencies: - ansi-escapes "^4.3.2" - cross-spawn "^7.0.3" - -path-browserify@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" - integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -path-to-regexp@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.0.tgz#f7b3803336104c346889adece614669230645f38" - integrity sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg== - -path-to-regexp@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" - integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== - dependencies: - isarray "0.0.1" - -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - integrity sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ== - dependencies: - pify "^2.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pathval@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" - integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== - -pbf@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/pbf/-/pbf-3.2.1.tgz#b4c1b9e72af966cd82c6531691115cc0409ffe2a" - integrity sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ== - dependencies: - ieee754 "^1.1.12" - resolve-protobuf-schema "^2.1.0" - -pbkdf2@3.1.2, pbkdf2@^3.0.3, pbkdf2@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== - -php-parser@^3.0.0-prerelease.8: - version "3.1.5" - resolved "https://registry.yarnpkg.com/php-parser/-/php-parser-3.1.5.tgz#84500e5b5c6a0907e32c38b931bb4e7d3f275026" - integrity sha512-jEY2DcbgCm5aclzBdfW86GM6VEIWcSlhTBSHN1qhJguVePlYe28GhwS0yoeLYXpM2K8y6wzLwrbq814n2PHSoQ== - -picocolors@^1.0.0, picocolors@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" - integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pirates@^4.0.0, pirates@^4.0.1, pirates@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - -pkce-challenge@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/pkce-challenge/-/pkce-challenge-2.2.0.tgz#02622e0498b82aab248c8c7dbf6507e8bbe20abf" - integrity sha512-Ly0Y0OwhtG2N1ynk5ruqoyJxkrWhAPmvdRk0teiLh9Dp2+J4URKpv1JSKWD0j1Sd+QCeiwO9lTl0EjmrB2jWeA== - -pkg-config@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pkg-config/-/pkg-config-1.1.1.tgz#557ef22d73da3c8837107766c52eadabde298fe4" - integrity sha512-ft/WI9YK6FuTuw4Ql+QUaNXtm/ASQNqDUUsZEgFZKyFpW6amyP8Gx01xrRs8KdiNbbqXfYxkOXplpq1euWbOjw== - dependencies: - debug-log "^1.0.0" - find-root "^1.0.0" - xtend "^4.0.1" - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - -pkg-dir@^4.1.0, pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -pkg-up@^3.0.1, pkg-up@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" - integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== - dependencies: - find-up "^3.0.0" - -popsicle-content-encoding@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/popsicle-content-encoding/-/popsicle-content-encoding-1.0.0.tgz#2ab419083fee0387bf6e64d21b1a9af560795adb" - integrity sha512-4Df+vTfM8wCCJVTzPujiI6eOl3SiWQkcZg0AMrOkD1enMXsF3glIkFUZGvour1Sj7jOWCsNSEhBxpbbhclHhzw== - -popsicle-cookie-jar@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/popsicle-cookie-jar/-/popsicle-cookie-jar-1.0.1.tgz#a33bdafac85fe499989c73805216b71db2ef328d" - integrity sha512-QVIZhADP8nDbXIQW6wq8GU9IOSE8INUACO/9KD9TFKQ7qq8r/y3qUDz59xIi6p6TH19lCJJyBAPSXP1liIoySw== - dependencies: - "@types/tough-cookie" "^4.0.2" - tough-cookie "^4.1.3" - -popsicle-redirects@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/popsicle-redirects/-/popsicle-redirects-1.1.1.tgz#da0936ed97f0ea22b16daa028bc624cb5b6ce05d" - integrity sha512-mC2HrKjdTAWDalOjGxlXw9j6Qxrz/Yd2ui6bPxpi2IQDYWpF4gUAMxbA8EpSWJhLi0PuWKDwTHHPrUPGutAoIA== - -popsicle-transport-http@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/popsicle-transport-http/-/popsicle-transport-http-1.2.1.tgz#35fdf4a59f429470b13b62f4223ec0249e3a163b" - integrity sha512-i5r3IGHkGiBDm1oPFvOfEeSGWR0lQJcsdTqwvvDjXqcTHYJJi4iSi3ecXIttDiTBoBtRAFAE9nF91fspQr63FQ== - dependencies: - make-error-cause "^2.2.0" - -popsicle-transport-xhr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/popsicle-transport-xhr/-/popsicle-transport-xhr-2.0.0.tgz#23d5fabb0e50e321d50219860825c27cd827ddd9" - integrity sha512-5Sbud4Widngf1dodJE5cjEYXkzEUIl8CzyYRYR57t6vpy9a9KPGQX6KBKdPjmBZlR5A06pOBXuJnVr23l27rtA== - -popsicle-user-agent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/popsicle-user-agent/-/popsicle-user-agent-1.0.0.tgz#976af355b605966168733c4e03ad1e4f783f5d48" - integrity sha512-epKaq3TTfTzXcxBxjpoKYMcTTcAX8Rykus6QZu77XNhJuRHSRxMd+JJrbX/3PFI0opFGSN0BabbAYCbGxbu0mA== - -popsicle@^12.0.5: - version "12.1.2" - resolved "https://registry.yarnpkg.com/popsicle/-/popsicle-12.1.2.tgz#75dc39873dabc12b17ecb3ee19d033cce976fb40" - integrity sha512-xE2vEUa15TiHvFhGmKTtdKk9aSLL5CHX8Vw5kHfVM3R0YHiaTon6Ybsamw0XYqMR+Ng2RijX88iYUKPBMpLBww== - dependencies: - popsicle-content-encoding "^1.0.0" - popsicle-cookie-jar "^1.0.1" - popsicle-redirects "^1.1.0" - popsicle-transport-http "^1.1.0" - popsicle-transport-xhr "^2.0.0" - popsicle-user-agent "^1.0.0" - servie "^4.3.3" - throwback "^4.1.0" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== - -possible-typed-array-names@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" - integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== - -postcss-loader@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-5.0.0.tgz#bea95363dcb550d72ceb612ce44663356b7782d7" - integrity sha512-bOvyWP5VHCJbThbv7wrBwCBc3DsVpyCfd+k/wHOL3wTAMMHmSSfNts90EADf8bHa6I810ird1JBEKmBRgJu3cg== - dependencies: - cosmiconfig "^7.0.0" - klona "^2.0.4" - semver "^7.3.4" - -postcss-modules-extract-imports@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz#b4497cb85a9c0c4b5aabeb759bb25e8d89f15002" - integrity sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q== - -postcss-modules-local-by-default@^4.0.0: - version "4.0.5" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz#f1b9bd757a8edf4d8556e8d0f4f894260e3df78f" - integrity sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw== - dependencies: - icss-utils "^5.0.0" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" - -postcss-modules-scope@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz#a43d28289a169ce2c15c00c4e64c0858e43457d5" - integrity sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ== - dependencies: - postcss-selector-parser "^6.0.4" - -postcss-modules-values@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" - integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== - dependencies: - icss-utils "^5.0.0" - -postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: - version "6.1.0" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz#49694cb4e7c649299fea510a29fa6577104bcf53" - integrity sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-value-parser@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss@8.4.31: - version "8.4.31" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" - integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== - dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -postcss@^8.2.4: - version "8.4.38" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" - integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== - dependencies: - nanoid "^3.3.7" - picocolors "^1.0.0" - source-map-js "^1.2.0" - -prebuild-install@^7.1.1: - version "7.1.2" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.2.tgz#a5fd9986f5a6251fbc47e1e5c65de71e68c0a056" - integrity sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ== - dependencies: - detect-libc "^2.0.0" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.3" - mkdirp-classic "^0.5.3" - napi-build-utils "^1.0.1" - node-abi "^3.3.0" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^4.0.0" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - -prettier@2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" - integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== - -prettier@2.8.8, prettier@^2.5.1: - version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== - -prettier@^1.19.1: - version "1.19.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" - integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== - -pretty-error@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" - integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== - dependencies: - lodash "^4.17.20" - renderkid "^2.0.4" - -pretty-format@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" - integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== - dependencies: - "@jest/types" "^26.6.2" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^17.0.1" - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process@0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - -prompts@^2.0.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0, 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== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" - -protobufjs@7.2.4: - version "7.2.4" - resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.2.4.tgz#3fc1ec0cdc89dd91aef9ba6037ba07408485c3ae" - integrity sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ== - dependencies: - "@protobufjs/aspromise" "^1.1.2" - "@protobufjs/base64" "^1.1.2" - "@protobufjs/codegen" "^2.0.4" - "@protobufjs/eventemitter" "^1.1.0" - "@protobufjs/fetch" "^1.1.0" - "@protobufjs/float" "^1.0.2" - "@protobufjs/inquire" "^1.1.0" - "@protobufjs/path" "^1.1.2" - "@protobufjs/pool" "^1.1.0" - "@protobufjs/utf8" "^1.1.0" - "@types/node" ">=13.7.0" - long "^5.0.0" - -protocol-buffers-schema@^3.3.1: - version "3.6.0" - resolved "https://registry.yarnpkg.com/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz#77bc75a48b2ff142c1ad5b5b90c94cd0fa2efd03" - integrity sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw== - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -psl@^1.1.33: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0, punycode@^2.1.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -pushdata-bitcoin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/pushdata-bitcoin/-/pushdata-bitcoin-1.0.1.tgz#15931d3cd967ade52206f523aa7331aef7d43af7" - integrity sha512-hw7rcYTJRAl4olM8Owe8x0fBuJJ+WGbMhQuLWOXEMN3PxPCKQHRkhfL+XG0+iXUmSHjkMmb3Ba55Mt21cZc9kQ== - dependencies: - bitcoin-ops "^1.3.0" - -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== - -qrcode.react@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/qrcode.react/-/qrcode.react-3.1.0.tgz#5c91ddc0340f768316fbdb8fff2765134c2aecd8" - integrity sha512-oyF+Urr3oAMUG/OiOuONL3HXM+53wvuH3mtIWQrYmsXoAq0DkvZp2RYUWFSMFtbdOpuS++9v+WAkzNVkMlNW6Q== - -qs@6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -querystring@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd" - integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg== - -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-lru@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" - integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== - -raf-schd@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/raf-schd/-/raf-schd-4.0.3.tgz#5d6c34ef46f8b2a0e880a8fcdb743efc5bfdbc1a" - integrity sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ== - -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" - -randombytes@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.3.tgz#674c99760901c3c4112771a31e521dc349cc09ec" - integrity sha512-lDVjxQQFoCG1jcrP06LNo2lbWp4QTShEXnhActFBwYuHprllQV6VUpwreApsYqCgD+N1mHoqJ/BI/4eV4R2GYg== - -randombytes@2.1.0, randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -randomstring@^1.1.5: - version "1.3.0" - resolved "https://registry.yarnpkg.com/randomstring/-/randomstring-1.3.0.tgz#1bf9d730066899e70aee3285573f84708278683d" - integrity sha512-gY7aQ4i1BgwZ8I1Op4YseITAyiDiajeZOPQUbIq9TPGPhUm5FX59izIaOpmKbME1nmnEiABf28d9K2VSii6BBg== - dependencies: - randombytes "2.0.3" - -range-parser@^1.2.1, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -raw-loader@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.2.tgz#1aac6b7d1ad1501e66efdac1522c73e59a584eb6" - integrity sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -react-beautiful-dnd@13.1.1: - version "13.1.1" - resolved "https://registry.yarnpkg.com/react-beautiful-dnd/-/react-beautiful-dnd-13.1.1.tgz#b0f3087a5840920abf8bb2325f1ffa46d8c4d0a2" - integrity sha512-0Lvs4tq2VcrEjEgDXHjT98r+63drkKEgqyxdA7qD3mvKwga6a5SscbdLPO2IExotU1jW8L0Ksdl0Cj2AF67nPQ== - dependencies: - "@babel/runtime" "^7.9.2" - css-box-model "^1.2.0" - memoize-one "^5.1.1" - raf-schd "^4.0.2" - react-redux "^7.2.0" - redux "^4.0.4" - use-memo-one "^1.1.1" - -react-blockies@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/react-blockies/-/react-blockies-1.4.1.tgz#d4f0faf95ac197213a297a370a4d7f77ea3d0b08" - integrity sha512-4N015X5oPNnD3xQPsiqolOFzPZSSWyc5mJhJUZShUCHtiGUxVN+1qsWTcglkHMNySux9hUofaispqcw9QkWP5Q== - dependencies: - prop-types "^15.5.10" - -react-copy-to-clipboard@5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.3.tgz#2a0623b1115a1d8c84144e9434d3342b5af41ab4" - integrity sha512-9S3j+m+UxDZOM0Qb8mhnT/rMR0NGSrj9A/073yz2DSxPMYhmYFBMYIdI2X4o8AjOjyFsSNxDRnCX6s/gRxpriw== - dependencies: - copy-to-clipboard "^3" - prop-types "^15.5.8" - -react-dom@17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" - integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "^0.20.2" - -react-intl-translations-manager@5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/react-intl-translations-manager/-/react-intl-translations-manager-5.0.3.tgz#aee010ecf35975673e033ca5d7d3f4147894324d" - integrity sha512-EfBeugnOGFcdUbQyY9TqBMbuauQ8wm73ZqFr0UqCljhbXl7YDHQcVzclWFRkVmlUffzxitLQFhAZEVVeRNQSwA== - dependencies: - chalk "^2.3.2" - glob "^7.1.2" - json-stable-stringify "^1.0.1" - mkdirp "^0.5.1" - -react-intl@*: - version "6.6.8" - resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-6.6.8.tgz#cb60c90502d0025caf9f86ec298cdc4348da17c2" - integrity sha512-M0pkhzcgV31h++2901BiRXWl69hp2zPyLxRrSwRjd1ErXbNoubz/f4M6DrRTd4OiSUrT4ajRQzrmtS5plG4FtA== - dependencies: - "@formatjs/ecma402-abstract" "2.0.0" - "@formatjs/icu-messageformat-parser" "2.7.8" - "@formatjs/intl" "2.10.4" - "@formatjs/intl-displaynames" "6.6.8" - "@formatjs/intl-listformat" "7.5.7" - "@types/hoist-non-react-statics" "^3.3.1" - "@types/react" "16 || 17 || 18" - hoist-non-react-statics "^3.3.2" - intl-messageformat "10.5.14" - tslib "^2.4.0" - -react-intl@2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-2.9.0.tgz#c97c5d17d4718f1575fdbd5a769f96018a3b1843" - integrity sha512-27jnDlb/d2A7mSJwrbOBnUgD+rPep+abmoJE511Tf8BnoONIAUehy/U1zZCHGO17mnOwMWxqN4qC0nW11cD6rA== - dependencies: - hoist-non-react-statics "^3.3.0" - intl-format-cache "^2.0.5" - intl-messageformat "^2.1.0" - intl-relativeformat "^2.1.0" - invariant "^2.1.1" - -react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.6: - 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@^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@^18.2.0: - version "18.3.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" - integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== - -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-markdown@5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-5.0.3.tgz#41040ea7a9324b564b328fb81dd6c04f2a5373ac" - integrity sha512-jDWOc1AvWn0WahpjW6NK64mtx6cwjM4iSsLHJPNBqoAgGOVoIdJMqaKX4++plhOtdd4JksdqzlDibgPx6B/M2w== - dependencies: - "@types/mdast" "^3.0.3" - "@types/unist" "^2.0.3" - html-to-react "^1.3.4" - mdast-add-list-metadata "1.0.1" - prop-types "^15.7.2" - react-is "^16.8.6" - remark-parse "^9.0.0" - unified "^9.0.0" - unist-util-visit "^2.0.0" - xtend "^4.0.1" - -react-query@^3.39.3: - version "3.39.3" - resolved "https://registry.yarnpkg.com/react-query/-/react-query-3.39.3.tgz#4cea7127c6c26bdea2de5fb63e51044330b03f35" - integrity sha512-nLfLz7GiohKTJDuT4us4X3h/8unOh+00MLb2yJoGTPjxKs2bc1iDhkNx2bd5MKklXnOD3NrVZ+J2UXujA5In4g== - dependencies: - "@babel/runtime" "^7.5.5" - broadcast-channel "^3.4.1" - match-sorter "^6.0.2" - -react-redux@^7.2.0: - version "7.2.9" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.9.tgz#09488fbb9416a4efe3735b7235055442b042481d" - integrity sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ== - dependencies: - "@babel/runtime" "^7.15.4" - "@types/react-redux" "^7.1.20" - hoist-non-react-statics "^3.3.2" - loose-envify "^1.4.0" - prop-types "^15.7.2" - react-is "^17.0.2" - -react-refresh@0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.9.0.tgz#71863337adc3e5c2f8a6bfddd12ae3bfe32aafbf" - integrity sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ== - -react-resize-detector@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/react-resize-detector/-/react-resize-detector-2.3.0.tgz#57bad1ae26a28a62a2ddb678ba6ffdf8fa2b599c" - integrity sha512-oCAddEWWeFWYH5FAcHdBYcZjAw9fMzRUK9sWSx6WvSSOPVRxcHd5zTIGy/mOus+AhN/u6T4TMiWxvq79PywnJQ== - dependencies: - lodash.debounce "^4.0.8" - lodash.throttle "^4.1.1" - prop-types "^15.6.0" - resize-observer-polyfill "^1.5.0" - -react-router-dom@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.2.0.tgz#9e65a4d0c45e13289e66c7b17c7e175d0ea15662" - integrity sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA== - dependencies: - "@babel/runtime" "^7.1.2" - history "^4.9.0" - loose-envify "^1.3.1" - prop-types "^15.6.2" - react-router "5.2.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - -react-router@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.2.0.tgz#424e75641ca8747fbf76e5ecca69781aa37ea293" - integrity sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw== - dependencies: - "@babel/runtime" "^7.1.2" - history "^4.9.0" - hoist-non-react-statics "^3.1.0" - loose-envify "^1.3.1" - mini-create-react-context "^0.4.0" - path-to-regexp "^1.7.0" - prop-types "^15.6.2" - react-is "^16.6.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - -react-smooth@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/react-smooth/-/react-smooth-1.0.6.tgz#18b964f123f7bca099e078324338cd8739346d0a" - integrity sha512-B2vL4trGpNSMSOzFiAul9kFAsxTukL9Wyy9EXtkQy3GJr6sZqW9e1nShdVOJ3hRYamPZ94O17r3Q0bjSw3UYtg== - dependencies: - lodash "~4.17.4" - prop-types "^15.6.0" - raf "^3.4.0" - react-transition-group "^2.5.0" - -react-transition-group@^2.5.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-transition-group@^4.4.5: - version "4.4.5" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" - integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== - dependencies: - "@babel/runtime" "^7.5.5" - dom-helpers "^5.0.1" - loose-envify "^1.4.0" - prop-types "^15.6.2" - -react@17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - integrity sha512-1orxQfbWGUiTn9XsPlChs6rLie/AV9jwZTGmu2NZw/CUDJQchXJFYE0Fq5j7+n558T1JhDWLdhyd1Zj+wLY//w== - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - integrity sha512-eFIBOPW7FGjzBuk3hdXEuNSiTZS/xEMlH49HxMyzb0hyPfu4EhVjT2DH32K1hSSmVq4sebAWnZuuY5auISUTGA== - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -readable-stream@^1.0.33: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.3.6, readable-stream@^2.3.8, readable-stream@~2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -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.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -recharts-scale@^0.4.2: - 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@1.8.5: - version "1.8.5" - resolved "https://registry.yarnpkg.com/recharts/-/recharts-1.8.5.tgz#ca94a3395550946334a802e35004ceb2583fdb12" - integrity sha512-tM9mprJbXVEBxjM7zHsIy6Cc41oO/pVYqyAsOHLxlJrbNBuLs0PHB3iys2M+RqCF0//k8nJtZF6X6swSkWY3tg== - dependencies: - classnames "^2.2.5" - core-js "^2.6.10" - d3-interpolate "^1.3.0" - d3-scale "^2.1.0" - d3-shape "^1.2.0" - lodash "^4.17.5" - prop-types "^15.6.0" - react-resize-detector "^2.3.0" - react-smooth "^1.0.5" - recharts-scale "^0.4.2" - reduce-css-calc "^1.3.0" - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== - dependencies: - resolve "^1.1.6" - -rechoir@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" - integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== - dependencies: - resolve "^1.9.0" - -redent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" - integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== - dependencies: - indent-string "^4.0.0" - strip-indent "^3.0.0" - -redeyed@~2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-2.1.1.tgz#8984b5815d99cb220469c99eeeffe38913e6cc0b" - integrity sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ== - dependencies: - esprima "~4.0.0" - -reduce-css-calc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" - integrity sha512-0dVfwYVOlf/LBA2ec4OwQ6p3X9mYxn/wOl2xTcLwjnPYrkgEfPx3VI4eGCH3rQLlPISG5v9I9bkZosKsNRTRKA== - dependencies: - balanced-match "^0.4.2" - math-expression-evaluator "^1.2.14" - reduce-function-call "^1.0.1" - -reduce-function-call@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.3.tgz#60350f7fb252c0a67eb10fd4694d16909971300f" - integrity sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ== - dependencies: - balanced-match "^1.0.0" - -redux@^4.0.0, redux@^4.0.4: - version "4.2.1" - resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.1.tgz#c08f4306826c49b5e9dc901dee0452ea8fce6197" - integrity sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w== - dependencies: - "@babel/runtime" "^7.9.2" - -regenerate-unicode-properties@^10.1.0: - version "10.1.1" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" - integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== - dependencies: - regenerate "^1.4.2" - -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== - -regenerator-runtime@^0.13.4: - version "0.13.11" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" - integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== - -regenerator-runtime@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== - -regenerator-transform@^0.15.2: - version "0.15.2" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" - integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== - dependencies: - "@babel/runtime" "^7.8.4" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexp.prototype.flags@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" - integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== - dependencies: - call-bind "^1.0.6" - define-properties "^1.2.1" - es-errors "^1.3.0" - set-function-name "^2.0.1" - -regexpp@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -regexpu-core@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" - integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== - dependencies: - "@babel/regjsgen" "^0.8.0" - regenerate "^1.4.2" - regenerate-unicode-properties "^10.1.0" - regjsparser "^0.9.1" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.1.0" - -regjsparser@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" - integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== - dependencies: - jsesc "~0.5.0" - -relateurl@^0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== - -remark-parse@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-9.0.0.tgz#4d20a299665880e4f4af5d90b7c7b8a935853640" - integrity sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw== - dependencies: - mdast-util-from-markdown "^0.8.0" - -remove-accents@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.5.0.tgz#77991f37ba212afba162e375b627631315bed687" - integrity sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A== - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== - -renderkid@^2.0.4: - version "2.0.7" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.7.tgz#464f276a6bdcee606f4a15993f9b29fc74ca8609" - integrity sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ== - dependencies: - css-select "^4.1.3" - dom-converter "^0.2.0" - htmlparser2 "^6.1.0" - lodash "^4.17.21" - strip-ansi "^3.0.1" - -repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -requireindex@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.2.0.tgz#3463cdb22ee151902635aa6c9535d4de9c2ef1ef" - integrity sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - -reselect@^4.0.0: - version "4.1.8" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.8.tgz#3f5dc671ea168dccdeb3e141236f69f02eaec524" - integrity sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ== - -resize-observer-polyfill@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" - integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve-pathname@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" - integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== - -resolve-protobuf-schema@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz#9ca9a9e69cf192bbdaf1006ec1973948aa4a3758" - integrity sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ== - dependencies: - protocol-buffers-schema "^3.3.1" - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== - -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.19.0, resolve@^1.22.4, resolve@^1.9.0: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -responselike@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" - integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== - dependencies: - lowercase-keys "^2.0.0" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - -retry@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" - integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rifm@^0.12.1: - version "0.12.1" - resolved "https://registry.yarnpkg.com/rifm/-/rifm-0.12.1.tgz#8fa77f45b7f1cda2a0068787ac821f0593967ac4" - integrity sha512-OGA1Bitg/dSJtI/c4dh90svzaUPt228kzFsUkJbtA2c964IqEAwWXeL9ZJi86xWv3j5SMqRvGULl7bA6cK0Bvg== - -rimraf@2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -ripple-address-codec@^4.1.1, ripple-address-codec@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/ripple-address-codec/-/ripple-address-codec-4.3.1.tgz#68fbaf646bb8567f70743af7f1ce4479f73efbf6" - integrity sha512-Qa3+9wKVvpL/xYtT6+wANsn0A1QcC5CT6IMZbRJZ/1lGt7gmwIfsrCuz1X0+LCEO7zgb+3UT1I1dc0k/5dwKQQ== - dependencies: - base-x "^3.0.9" - create-hash "^1.1.2" - -ripple-binary-codec@^1.1.3: - version "1.11.0" - resolved "https://registry.yarnpkg.com/ripple-binary-codec/-/ripple-binary-codec-1.11.0.tgz#d99c848c51a19746b738785001fb7208704bfe30" - integrity sha512-g7+gs3T+NfoeW6vIq5dcN0CkIT4t/zwRzFxz8X2RzfbrWRnewPUKqQbmBgs05tXLX5NuWPaneiaAVpFpYBcdfw== - dependencies: - assert "^2.0.0" - big-integer "^1.6.48" - buffer "6.0.3" - create-hash "^1.2.0" - decimal.js "^10.2.0" - ripple-address-codec "^4.3.1" - -ripple-keypairs@^1.0.3: - version "1.3.1" - resolved "https://registry.yarnpkg.com/ripple-keypairs/-/ripple-keypairs-1.3.1.tgz#7fa531df36b138134afb53555a87d7f5eb465b2e" - integrity sha512-dmPlraWKJciFJxHcoubDahGnoIalG5e/BtV6HNDUs7wLXmtnLMHt6w4ed9R8MTL2zNrVPiIdI/HCtMMo0Tm7JQ== - dependencies: - bn.js "^5.1.1" - brorand "^1.0.5" - elliptic "^6.5.4" - hash.js "^1.0.3" - ripple-address-codec "^4.3.1" - -ripple-lib-transactionparser@0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/ripple-lib-transactionparser/-/ripple-lib-transactionparser-0.8.2.tgz#7aaad3ba1e1aeee1d5bcff32334a7a838f834dce" - integrity sha512-1teosQLjYHLyOQrKUQfYyMjDR3MAq/Ga+MJuLUfpBMypl4LZB4bEoMcmG99/+WVTEiZOezJmH9iCSvm/MyxD+g== - dependencies: - bignumber.js "^9.0.0" - lodash "^4.17.15" - -ripple-lib@^1.10.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/ripple-lib/-/ripple-lib-1.10.1.tgz#9c353702792b25465cdb269265d6f5bb27b1471b" - integrity sha512-OQk+Syl2JfxKxV2KuF/kBMtnh012I5tNnziP3G4WDGCGSIAgeqkOgkR59IQ0YDNrs1YW8GbApxrdMSRi/QClcA== - dependencies: - "@types/lodash" "^4.14.136" - "@types/ws" "^7.2.0" - bignumber.js "^9.0.0" - https-proxy-agent "^5.0.0" - jsonschema "1.2.2" - lodash "^4.17.4" - ripple-address-codec "^4.1.1" - ripple-binary-codec "^1.1.3" - ripple-keypairs "^1.0.3" - ripple-lib-transactionparser "0.8.2" - ws "^7.2.0" - -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - -run-async@^2.4.0, run-async@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-parallel@^1.1.2, run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rxjs@6: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - -rxjs@^7.2.0, rxjs@^7.5.4, rxjs@^7.5.5, rxjs@^7.8.1: - version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.0" - -safe-array-concat@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" - integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== - dependencies: - call-bind "^1.0.7" - get-intrinsic "^1.2.4" - has-symbols "^1.0.3" - isarray "^2.0.5" - -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-regex-test@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" - integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-regex "^1.1.4" - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== - dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - -sass-graph@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-4.0.1.tgz#2ff8ca477224d694055bf4093f414cf6cfad1d2e" - integrity sha512-5YCfmGBmxoIRYHnKK2AKzrAkCoQ8ozO+iumT8K4tXJXRVCPf+7s1/9KxTSW3Rbvf+7Y7b4FR3mWyLnQr3PHocA== - dependencies: - glob "^7.0.0" - lodash "^4.17.11" - scss-tokenizer "^0.4.3" - yargs "^17.2.1" - -sass-loader@11.0.1: - version "11.0.1" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-11.0.1.tgz#8672f896593466573b904f47693e0695368e38c9" - integrity sha512-Vp1LcP4slTsTNLEiDkTcm8zGN/XYYrZz2BZybQbliWA8eXveqA/AxsEjllQTpJbg2MzCsx/qNO48sHdZtOaxTw== - dependencies: - klona "^2.0.4" - neo-async "^2.6.2" - -sax@~1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - -scheduler@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" - integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -schema-utils@^2.2.0, schema-utils@^2.6.5, schema-utils@^2.6.6: - version "2.7.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" - integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== - dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" - ajv-keywords "^3.5.2" - -schema-utils@^3.0.0, schema-utils@^3.1.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" - integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" - integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== - dependencies: - "@types/json-schema" "^7.0.9" - ajv "^8.9.0" - ajv-formats "^2.1.1" - ajv-keywords "^5.1.0" - -scss-tokenizer@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.4.3.tgz#1058400ee7d814d71049c29923d2b25e61dc026c" - integrity sha512-raKLgf1LI5QMQnG+RxHz6oK0sL3x3I4FN2UDLqgLOGO8hodECNnNh5BXn7fAyBxrA8zVzdQizQ6XjNJQ+uBwMw== - dependencies: - js-base64 "^2.4.9" - source-map "^0.7.3" - -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== - -selfsigned@^2.1.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.4.1.tgz#560d90565442a3ed35b674034cec4e95dceb4ae0" - integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q== - dependencies: - "@types/node-forge" "^1.3.0" - node-forge "^1" - -"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@7.3.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== - -semver@7.6.0: - version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - -semver@^6.0.0, semver@^6.2.0, semver@^6.3.0, semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4: - version "7.6.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" - integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== - -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serialize-javascript@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - dependencies: - randombytes "^2.1.0" - -serialize-javascript@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea" - integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg== - dependencies: - randombytes "^2.1.0" - -serialize-javascript@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" - integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== - dependencies: - randombytes "^2.1.0" - -serve-index@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -servie@^4.3.3: - version "4.3.3" - resolved "https://registry.yarnpkg.com/servie/-/servie-4.3.3.tgz#4a9ffed6842cd0523003ad0ae9c0c8079f37718f" - integrity sha512-b0IrY3b1gVMsWvJppCf19g1p3JSnS0hQi6xu4Hi40CIhf0Lx8pQHcvBL+xunShpmOiQzg1NOia812NAWdSaShw== - dependencies: - "@servie/events" "^1.0.0" - byte-length "^1.0.2" - ts-expect "^1.1.0" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -set-function-length@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - -set-function-name@^2.0.1, set-function-name@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" - integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.2" - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@~1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@^1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" - integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== - -shelljs@0.8.4: - version "0.8.4" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" - integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - -shelljs@^0.8.4: - version "0.8.5" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" - integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== - -side-channel@^1.0.4, side-channel@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" - -signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" - integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== - dependencies: - decompress-response "^6.0.0" - once "^1.3.1" - simple-concat "^1.0.0" - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -sockjs@^0.3.24: - version "0.3.24" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" - integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== - dependencies: - faye-websocket "^0.11.3" - uuid "^8.3.2" - websocket-driver "^0.7.4" - -socks-proxy-agent@6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz#e664e8f1aaf4e1fb3df945f09e3d94f911137f87" - integrity sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew== - dependencies: - agent-base "^6.0.2" - debug "^4.3.1" - socks "^2.6.1" - -socks-proxy-agent@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" - integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks-proxy-agent@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" - integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks@^2.6.1, socks@^2.6.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5" - integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw== - dependencies: - ip-address "^9.0.5" - smart-buffer "^4.2.0" - -sonic-forest@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sonic-forest/-/sonic-forest-1.0.3.tgz#81363af60017daba39b794fce24627dc412563cb" - integrity sha512-dtwajos6IWMEWXdEbW1IkEkyL2gztCAgDplRIX+OT5aRKnEd5e7r7YCxRgXZdhRP1FBdOBf8axeTPhzDv8T4wQ== - dependencies: - tree-dump "^1.0.0" - -source-list-map@^2.0.0, source-list-map@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - -source-map-js@^1.0.2, source-map-js@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" - integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== - -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.5.16, source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== - -source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@^0.7.3, source-map@^0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - -spawn-command@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2.tgz#9544e1a43ca045f8531aac1a48cb29bdae62338e" - integrity sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ== - -spdx-correct@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" - integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" - integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.18" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz#22aa922dcf2f2885a6494a261f2d8b75345d0326" - integrity sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ== - -spdy-transport@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" - integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== - dependencies: - debug "^4.1.0" - detect-node "^2.0.4" - hpack.js "^2.1.6" - obuf "^1.1.2" - readable-stream "^3.0.6" - wbuf "^1.7.3" - -spdy@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" - integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== - dependencies: - debug "^4.1.0" - handle-thing "^2.0.0" - http-deceiver "^1.2.7" - select-hose "^2.0.0" - spdy-transport "^3.0.0" - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -sprintf-js@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" - integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -ssri@^8.0.0, ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - -ssri@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" - integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== - dependencies: - minipass "^3.1.1" - -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== - -stack-utils@^2.0.2: - version "2.0.6" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" - integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== - dependencies: - escape-string-regexp "^2.0.0" - -stackframe@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" - integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -"statuses@>= 1.4.0 < 2": - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== - -stdout-stream@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de" - integrity sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA== - dependencies: - readable-stream "^2.0.1" - -stoppable@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/stoppable/-/stoppable-1.1.0.tgz#32da568e83ea488b08e4d7ea2c3bcc9d75015d5b" - integrity sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw== - -stream-browserify@3.0.0, stream-browserify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f" - integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA== - dependencies: - inherits "~2.0.4" - readable-stream "^3.5.0" - -string-length@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" - integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== - dependencies: - char-regex "^1.0.2" - strip-ansi "^6.0.0" - -string-natural-compare@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" - integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== - -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string.prototype.matchall@^4.0.2: - version "4.0.11" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a" - integrity sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.7" - regexp.prototype.flags "^1.5.2" - set-function-name "^2.0.2" - side-channel "^1.0.6" - -string.prototype.trim@^1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" - integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.0" - es-object-atoms "^1.0.0" - -string.prototype.trimend@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" - integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -string.prototype.trimstart@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" - integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - -strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - -strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -style-loader@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-2.0.0.tgz#9669602fd4690740eaaec137799a03addbbc393c" - integrity sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -stylis@4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" - integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== - -supports-color@8.1.1, supports-color@^8.0.0, supports-color@^8.1.0, supports-color@^8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.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== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.0.0, supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-hyperlinks@^2.0.0, supports-hyperlinks@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" - integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -svg-parser@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" - integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== - -svgo@^1.2.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" - integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== - dependencies: - chalk "^2.4.1" - coa "^2.0.2" - css-select "^2.0.0" - css-select-base-adapter "^0.1.1" - css-tree "1.0.0-alpha.37" - csso "^4.0.2" - js-yaml "^3.13.1" - mkdirp "~0.5.1" - object.values "^1.1.0" - sax "~1.2.4" - stable "^0.1.8" - unquote "~1.1.1" - util.promisify "~1.0.0" - -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - -table@^5.4.6: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - -table@^6.0.4: - version "6.8.2" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.2.tgz#c5504ccf201213fa227248bdc8c5569716ac6c58" - integrity sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - -tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -tar-fs@^2.0.0, tar-fs@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" - -tar-stream@^2.1.0, tar-stream@^2.1.4: - 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.0.2, tar@^6.1.11, tar@^6.1.2: - version "6.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" - integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - -terser-webpack-plugin@^5.1.1: - version "5.3.10" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" - integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== - dependencies: - "@jridgewell/trace-mapping" "^0.3.20" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.1" - terser "^5.26.0" - -terser@^4.6.3: - version "4.8.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.1.tgz#a00e5634562de2239fd404c649051bf6fc21144f" - integrity sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw== - dependencies: - commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" - -terser@^5.26.0: - version "5.31.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.1.tgz#735de3c987dd671e95190e6b98cfe2f07f3cf0d4" - integrity sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg== - dependencies: - "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" - commander "^2.20.0" - source-map-support "~0.5.20" - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -thingies@^1.20.0: - version "1.21.0" - resolved "https://registry.yarnpkg.com/thingies/-/thingies-1.21.0.tgz#e80fbe58fd6fdaaab8fad9b67bd0a5c943c445c1" - integrity sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g== - -throat@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" - integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== - -through@^2.3.6, through@^2.3.8: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -throwback@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/throwback/-/throwback-4.1.0.tgz#421aac7ba9eff473105385ac4a2b0130d4b0a59c" - integrity sha512-dLFe8bU8SeH0xeqeKL7BNo8XoPC/o91nz9/ooeplZPiso+DZukhoyZcSz9TFnUNScm+cA9qjU1m1853M6sPOng== - -thunky@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" - integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== - -tiny-invariant@^1.0.2, tiny-invariant@^1.0.6: - version "1.3.3" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" - integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== - -tiny-secp256k1@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/tiny-secp256k1/-/tiny-secp256k1-1.1.6.tgz#7e224d2bee8ab8283f284e40e6b4acb74ffe047c" - integrity sha512-FmqJZGduTyvsr2cF3375fqGHUovSwDi/QytexX1Se4BPuPZpTE5Ftp5fg+EFSuEf3lhZqgCRjEG3ydUQ/aNiwA== - dependencies: - bindings "^1.3.0" - bn.js "^4.11.8" - create-hmac "^1.1.7" - elliptic "^6.4.0" - nan "^2.13.2" - -tiny-warning@^1.0.0, tiny-warning@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" - integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== - -tinycolor2@1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803" - integrity sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA== - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tmp@^0.2.1: - version "0.2.3" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" - integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== - -tmpl@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== - dependencies: - kind-of "^3.0.2" - -to-readable-stream@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-2.1.0.tgz#82880316121bea662cdc226adb30addb50cb06e8" - integrity sha512-o3Qa6DGg1CEXshSdvWNX2sN4QHqg03SPq7U6jPXRahlQdl5dK8oXjkU/2/sGrnOZKeGV1zLSO8qPwyKklPPE7w== - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -toggle-selection@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" - integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -tough-cookie@^4.0.0, tough-cookie@^4.1.3: - version "4.1.4" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" - integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" - -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== - dependencies: - punycode "^2.1.1" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -"traverse@>=0.3.0 <0.4": - version "0.3.9" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" - integrity sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ== - -tree-dump@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tree-dump/-/tree-dump-1.0.1.tgz#b448758da7495580e6b7830d6b7834fca4c45b96" - integrity sha512-WCkcRBVPSlHHq1dc/px9iOfqklvzCbdRwvlNfxGZsrHqf6aZttfPrd7DJTt6oR10dwUfpFFQeVTkPbBIZxX/YA== - -tree-kill@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" - integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== - -trezor-connect-flow@Emurgo/trezor-connect-flow#92d6d8c8faef25c0ea1d481aa1ecb4ba77ce539c: - version "1.0.0" - resolved "https://codeload.github.com/Emurgo/trezor-connect-flow/tar.gz/92d6d8c8faef25c0ea1d481aa1ecb4ba77ce539c" - dependencies: - "@trezor/connect-web" "9.1.1" - -trim-newlines@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" - integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== - -trough@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" - integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== - -"true-case-path@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-2.2.1.tgz#c5bf04a5bbec3fd118be4084461b3a27c4d796bf" - integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q== - -ts-expect@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/ts-expect/-/ts-expect-1.3.0.tgz#3f8d3966e0e22b5e2bb88337eb99db6816a4c1cf" - integrity sha512-e4g0EJtAjk64xgnFPD6kTBUtpnMVzDrMb12N1YZV0VvSlhnVT3SGxiYTLdGy8Q5cYHOIC/FAHmZ10eGrAguicQ== - -ts-loader@^9.5.1: - version "9.5.1" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.5.1.tgz#63d5912a86312f1fbe32cef0859fb8b2193d9b89" - integrity sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg== - dependencies: - chalk "^4.1.0" - enhanced-resolve "^5.0.0" - micromatch "^4.0.0" - semver "^7.3.4" - source-map "^0.7.4" - -tsconfig-paths@^3.9.0: - version "3.15.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" - integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^1, tslib@^1.14.1, tslib@^1.9.0, tslib@^1.9.3: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.4.1, tslib@^2.6.1, tslib@^2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" - integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.10.0.tgz#7f06b2b9fbfc581068d1341ffabd0349ceafc642" - integrity sha512-EUV9jo4sffrwlg8s0zDhP0T2WD3pru5Xi0+HTE3zTUmBaZNhfkite9PdSJwdXLwPVW0jnAHT56pZHIOYckPEiw== - -type-fest@^0.18.0: - version "0.18.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" - integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typed-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" - integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - is-typed-array "^1.1.13" - -typed-array-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" - integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== - dependencies: - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" - -typed-array-byte-offset@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" - integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" - -typed-array-length@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" - integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== - dependencies: - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" - possible-typed-array-names "^1.0.0" - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typeforce@^1.11.5, typeforce@^1.18.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/typeforce/-/typeforce-1.18.0.tgz#d7416a2c5845e085034d70fcc5b6cc4a90edbfdc" - integrity sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g== - -typescript-compiler@^1.4.1-2: - version "1.4.1-2" - resolved "https://registry.yarnpkg.com/typescript-compiler/-/typescript-compiler-1.4.1-2.tgz#ba4f7db22d91534a1929d90009dce161eb72fd3f" - integrity sha512-EMopKmoAEJqA4XXRFGOb7eSBhmQMbBahW6P1Koayeatp0b4AW2q/bBqYWkpG7QVQc9HGQUiS4trx2ZHcnAaZUg== - -typescript@^3.9.7: - version "3.9.10" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8" - integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== - -typescript@^5.4.5: - version "5.4.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" - integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== - -typescript@~4.4.4: - version "4.4.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.4.tgz#2cd01a1a1f160704d3101fd5a58ff0f9fcb8030c" - integrity sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA== - -u2f-api@0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/u2f-api/-/u2f-api-0.2.7.tgz#17bf196b242f6bf72353d9858e6a7566cc192720" - integrity sha512-fqLNg8vpvLOD5J/z4B6wpPg4Lvowz1nJ9xdHcCzdUPKcFE/qNCceV2gNZxSJd5vhAZemHr/K/hbzVA0zxB5mkg== - -ua-parser-js@1.0.37: - version "1.0.37" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.37.tgz#b5dc7b163a5c1f0c510b08446aed4da92c46373f" - integrity sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ== - -ua-parser-js@^1.0.35: - version "1.0.38" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.38.tgz#66bb0c4c0e322fe48edfe6d446df6042e62f25e2" - integrity sha512-Aq5ppTOfvrCMgAPneW1HfWj66Xi7XL+/mIy996R1/CLS/rcyJQm6QZdsKrUeivDFQ+Oc9Wyuwor8Ze8peEoUoQ== - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - -underscore.string@~2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.4.0.tgz#8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b" - integrity sha512-yxkabuCaIBnzfIvX3kBxQqCs0ar/bfJwDnFEHJUm/ZrRVhT3IItdRF5cZjARLzEnyQYtIUhsZ2LG2j3HidFOFQ== - -underscore@~1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" - integrity sha512-cp0oQQyZhUM1kpJDLdGO1jPZHgS/MpzoWYfe9+CM2h/QGDZlqwT2T3YGukuBdaNJ/CAPoeyAZRRHz8JFo176vA== - -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== - -unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" - integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== - dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" - -unicode-match-property-value-ecmascript@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" - integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== - -unicode-property-aliases-ecmascript@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" - integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== - -unified@^9.0.0: - version "9.2.2" - resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975" - integrity sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ== - dependencies: - bail "^1.0.0" - extend "^3.0.0" - is-buffer "^2.0.0" - is-plain-obj "^2.0.0" - trough "^1.0.0" - vfile "^4.0.0" - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA== - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-filename@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" - integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== - dependencies: - unique-slug "^3.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -unique-slug@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" - integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== - dependencies: - imurmurhash "^0.1.4" - -unist-util-is@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797" - integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== - -unist-util-stringify-position@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" - integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== - dependencies: - "@types/unist" "^2.0.2" - -unist-util-visit-parents@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-1.1.2.tgz#f6e3afee8bdbf961c0e6f028ea3c0480028c3d06" - integrity sha512-yvo+MMLjEwdc3RhhPYSximset7rwjMrdt9E41Smmvg25UQIenzrN83cRnF1JMzoMi9zZOQeYXHSDf7p+IQkW3Q== - -unist-util-visit-parents@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6" - integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^4.0.0" - -unist-util-visit@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" - integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^4.0.0" - unist-util-visit-parents "^3.0.0" - -universal-user-agent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-4.0.1.tgz#fd8d6cb773a679a709e967ef8288a31fcc03e557" - integrity sha512-LnST3ebHwVL2aNe4mejI9IQh2HfZ1RLo8Io2HugSif8ekzD1TlWpHpColOB/eh8JHMLkGH3Akqf040I+4ylNxg== - dependencies: - os-name "^3.1.0" - -universal-user-agent@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.1.tgz#15f20f55da3c930c57bddbf1734c6654d5fd35aa" - integrity sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ== - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== - -unload@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/unload/-/unload-2.2.0.tgz#ccc88fdcad345faa06a92039ec0f80b488880ef7" - integrity sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA== - dependencies: - "@babel/runtime" "^7.6.2" - detect-node "^2.0.4" - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -unquote@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - integrity sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg== - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -unused-webpack-plugin@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/unused-webpack-plugin/-/unused-webpack-plugin-2.4.0.tgz#c81acf882822e0b6298c4d33e2b0225bc8fcac1a" - integrity sha512-v/9lL+ICYVJodolusinh7j+Lj51Quj6erA5YiBl5W0L19BAZ29H+88l9GCdWl3bZEb6BowGX2Ig8CMvxKzqhwQ== - dependencies: - chalk "^2.1.0" - deglob "^3.1.0" - -unzipper@^0.10.8: - version "0.10.14" - resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.10.14.tgz#d2b33c977714da0fbc0f82774ad35470a7c962b1" - integrity sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g== - dependencies: - big-integer "^1.6.17" - binary "~0.3.0" - bluebird "~3.4.1" - buffer-indexof-polyfill "~1.0.0" - duplexer2 "~0.1.4" - fstream "^1.0.12" - graceful-fs "^4.2.2" - listenercount "~1.0.1" - readable-stream "~2.3.6" - setimmediate "~1.0.4" - -update-browserslist-db@^1.0.13: - version "1.0.16" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz#f6d489ed90fb2f07d67784eb3f53d7891f736356" - integrity sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ== - dependencies: - escalade "^3.1.2" - picocolors "^1.0.1" - -uri-js@^4.2.2, uri-js@^4.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== - -url-loader@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" - integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== - dependencies: - loader-utils "^2.0.0" - mime-types "^2.1.27" - schema-utils "^3.0.0" - -url-parse@^1.5.3: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -usb@2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/usb/-/usb-2.9.0.tgz#8ae3b175f93bee559400bff33491eee63406b6a2" - integrity sha512-G0I/fPgfHUzWH8xo2KkDxTTFruUWfppgSFJ+bQxz/kVY2x15EQ/XDB7dqD1G432G4gBG4jYQuF3U7j/orSs5nw== - dependencies: - "@types/w3c-web-usb" "^1.0.6" - node-addon-api "^6.0.0" - node-gyp-build "^4.5.0" - -usb@^2.9.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/usb/-/usb-2.13.0.tgz#521d11244cbe991a3f247c770821635abdcc9c7f" - integrity sha512-pTNKyxD1DfC1DYu8kFcIdpE8f33e0c2Sbmmi0HEs28HTVC555uocvYR1g5DDv4CBibacCh4BqRyYZJylN4mBbw== - dependencies: - "@types/w3c-web-usb" "^1.0.6" - node-addon-api "^8.0.0" - node-gyp-build "^4.5.0" - -use-memo-one@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/use-memo-one/-/use-memo-one-1.1.3.tgz#2fd2e43a2169eabc7496960ace8c79efef975e99" - integrity sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ== - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -util.promisify@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" - integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.2" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.0" - -util@0.12.5, util@^0.12.5: - version "0.12.5" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" - integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - which-typed-array "^1.1.2" - -utila@~0.4: - version "0.4.0" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -uuid@^8.3.0, uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -uuid@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" - integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== - -v8-compile-cache@^2.0.3, v8-compile-cache@^2.2.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz#cdada8bec61e15865f05d097c5f4fd30e94dc128" - integrity sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw== - -v8-to-istanbul@^7.0.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz#30898d1a7fa0c84d225a2c1434fb958f290883c1" - integrity sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" - -v8flags@^3.1.1: - version "3.2.0" - resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656" - integrity sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg== - dependencies: - homedir-polyfill "^1.0.1" - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -value-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" - integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== - -varuint-bitcoin@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/varuint-bitcoin/-/varuint-bitcoin-1.1.2.tgz#e76c138249d06138b480d4c5b40ef53693e24e92" - integrity sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw== - dependencies: - safe-buffer "^5.1.1" - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -vfile-message@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" - integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== - dependencies: - "@types/unist" "^2.0.0" - unist-util-stringify-position "^2.0.0" - -vfile@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624" - integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA== - dependencies: - "@types/unist" "^2.0.0" - is-buffer "^2.0.0" - unist-util-stringify-position "^2.0.0" - vfile-message "^2.0.0" - -vue-parser@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/vue-parser/-/vue-parser-1.1.6.tgz#3063c8431795664ebe429c23b5506899706e6355" - integrity sha512-v3/R7PLbaFVF/c8IIzWs1HgRpT2gN0dLRkaLIT5q+zJGVgmhN4VuZJF4Y9N4hFtFjS4B1EHxAOP6/tzqM4Ug2g== - dependencies: - parse5 "^3.0.3" - -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== - dependencies: - xml-name-validator "^3.0.0" - -walker@^1.0.7, walker@~1.0.5: - version "1.0.8" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== - dependencies: - makeerror "1.0.12" - -watchpack@^2.0.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.1.tgz#29308f2cac150fa8e4c92f90e0ec954a9fed7fff" - integrity sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - -wbuf@^1.1.0, wbuf@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" - integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== - dependencies: - minimalistic-assert "^1.0.0" - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== - dependencies: - defaults "^1.0.3" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - -webpack-cli@4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.5.0.tgz#b5213b84adf6e1f5de6391334c9fa53a48850466" - integrity sha512-wXg/ef6Ibstl2f50mnkcHblRPN/P9J4Nlod5Hg9HGFgSeF8rsqDGHJeVe4aR26q9l62TUJi6vmvC2Qz96YJw1Q== - dependencies: - "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^1.0.1" - "@webpack-cli/info" "^1.2.2" - "@webpack-cli/serve" "^1.3.0" - colorette "^1.2.1" - commander "^7.0.0" - enquirer "^2.3.6" - execa "^5.0.0" - fastest-levenshtein "^1.0.12" - import-local "^3.0.2" - interpret "^2.2.0" - rechoir "^0.7.0" - v8-compile-cache "^2.2.0" - webpack-merge "^5.7.3" - -webpack-dev-middleware@*: - version "7.2.1" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-7.2.1.tgz#2af00538b6e4eda05f5afdd5d711dbebc05958f7" - integrity sha512-hRLz+jPQXo999Nx9fXVdKlg/aehsw1ajA9skAneGmT03xwmyuhvF93p6HUKKbWhXdcERtGTzUCtIQr+2IQegrA== - dependencies: - colorette "^2.0.10" - memfs "^4.6.0" - mime-types "^2.1.31" - on-finished "^2.4.1" - range-parser "^1.2.1" - schema-utils "^4.0.0" - -webpack-dev-middleware@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-4.1.0.tgz#f0c1f12ff4cd855b3b5eec89ee0f69bcc5336364" - integrity sha512-mpa/FY+DiBu5+r5JUIyTCYWRfkWgyA3/OOE9lwfzV9S70A4vJYLsVRKj5rMFEsezBroy2FmPyQ8oBRVW8QmK1A== - dependencies: - colorette "^1.2.1" - mem "^8.0.0" - memfs "^3.2.0" - mime-types "^2.1.28" - range-parser "^1.2.1" - schema-utils "^3.0.0" - -webpack-dev-middleware@^5.3.4: - version "5.3.4" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz#eb7b39281cbce10e104eb2b8bf2b63fce49a3517" - integrity sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q== - dependencies: - colorette "^2.0.10" - memfs "^3.4.3" - mime-types "^2.1.31" - range-parser "^1.2.1" - schema-utils "^4.0.0" - -webpack-dev-server@^4.9.3: - version "4.15.2" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz#9e0c70a42a012560860adb186986da1248333173" - integrity sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g== - 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/serve-static" "^1.13.10" - "@types/sockjs" "^0.3.33" - "@types/ws" "^8.5.5" - ansi-html-community "^0.0.8" - bonjour-service "^1.0.11" - chokidar "^3.5.3" - colorette "^2.0.10" - compression "^1.7.4" - connect-history-api-fallback "^2.0.0" - default-gateway "^6.0.3" - express "^4.17.3" - graceful-fs "^4.2.6" - html-entities "^2.3.2" - http-proxy-middleware "^2.0.3" - ipaddr.js "^2.0.1" - launch-editor "^2.6.0" - open "^8.0.9" - p-retry "^4.5.0" - rimraf "^3.0.2" - schema-utils "^4.0.0" - selfsigned "^2.1.1" - serve-index "^1.9.1" - sockjs "^0.3.24" - spdy "^4.0.2" - webpack-dev-middleware "^5.3.4" - ws "^8.13.0" - -webpack-hot-middleware@2.25.0: - version "2.25.0" - resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.25.0.tgz#4528a0a63ec37f8f8ef565cf9e534d57d09fe706" - integrity sha512-xs5dPOrGPCzuRXNi8F6rwhawWvQQkeli5Ro48PRuQh8pYPCPmNnltP9itiUPT4xI8oW+y0m59lyyeQk54s5VgA== - dependencies: - ansi-html "0.0.7" - html-entities "^1.2.0" - querystring "^0.2.0" - strip-ansi "^3.0.0" - -webpack-hot-middleware@^2.12.2: - version "2.26.1" - resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.26.1.tgz#87214f1e3f9f3acab9271fef9e6ed7b637d719c0" - integrity sha512-khZGfAeJx6I8K9zKohEWWYN6KDlVw2DHownoe+6Vtwj1LP9WFgegXnVMSkZ/dBEBtXFwrkkydsaPFlB7f8wU2A== - dependencies: - ansi-html-community "0.0.8" - html-entities "^2.1.0" - strip-ansi "^6.0.0" - -"webpack-httpolyglot-server@git+https://github.com/Emurgo/webpack-httpolyglot-server.git": - version "0.3.0" - resolved "git+https://github.com/Emurgo/webpack-httpolyglot-server.git#ce520ad87d48bb5ae0121ca97f6c93cbb18f0f27" - dependencies: - express "^4.14.0" - httpolyglot "^0.1.1" - lodash.omit "^4.5.0" - webpack-dev-middleware "*" - webpack-hot-middleware "^2.12.2" - -webpack-merge@^5.7.3: - version "5.10.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.10.0.tgz#a3ad5d773241e9c682803abf628d4cd62b8a4177" - integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA== - dependencies: - clone-deep "^4.0.1" - flat "^5.0.2" - wildcard "^2.0.0" - -webpack-sources@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack-sources@^2.1.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.1.tgz#570de0af163949fe272233c2cefe1b56f74511fd" - integrity sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA== - dependencies: - source-list-map "^2.0.1" - source-map "^0.6.1" - -webpack@5.23.0: - version "5.23.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.23.0.tgz#9ed57e9a54b267b3549899271ad780cddc6ee316" - integrity sha512-RC6dwDuRxiU75F8XC4H08NtzUrMfufw5LDnO8dTtaKU2+fszEdySCgZhNwSBBn516iNaJbQI7T7OPHIgCwcJmg== - dependencies: - "@types/eslint-scope" "^3.7.0" - "@types/estree" "^0.0.46" - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/wasm-edit" "1.11.0" - "@webassemblyjs/wasm-parser" "1.11.0" - acorn "^8.0.4" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.7.0" - es-module-lexer "^0.3.26" - eslint-scope "^5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.4" - json-parse-better-errors "^1.0.2" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.0.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.1.1" - watchpack "^2.0.0" - webpack-sources "^2.1.1" - -websocket-driver@>=0.5.1, websocket-driver@^0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" - integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== - -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -whatwg-url@^8.0.0, whatwg-url@^8.5.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== - dependencies: - lodash "^4.7.0" - tr46 "^2.1.0" - webidl-conversions "^6.1.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-module@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" - integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== - -which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.2: - version "1.1.15" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" - integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.2" - -which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" - -wif@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/wif/-/wif-2.0.6.tgz#08d3f52056c66679299726fade0d432ae74b4704" - integrity sha512-HIanZn1zmduSF+BQhkE+YXIbEiH0xPr1012QbFEGB0xsKqJii0/SqJjyn8dFv6y36kOznMgMB+LGcbZTJ1xACQ== - dependencies: - bs58check "<3.0.0" - -wildcard@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" - integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== - -windows-release@^3.1.0: - version "3.3.3" - resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.3.3.tgz#1c10027c7225743eec6b89df160d64c2e0293999" - integrity sha512-OSOGH1QYiW5yVor9TtmXKQvt2vjQqbYS+DqmsZw+r7xDwLXEeT3JGW0ZppFmHx4diyXmxt238KFR3N9jzevBRg== - dependencies: - execa "^1.0.0" - -word-wrap@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" - integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== - -workerpool@6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" - integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== - -wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -ws@7.5.9, ws@^7.2.0, ws@^7.4.6: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -ws@^8.13.0: - version "8.17.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.0.tgz#d145d18eca2ed25aaf791a183903f7be5e295fea" - integrity sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow== - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - -xtend@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^20.2.2, yargs-parser@^20.2.3: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs-unparser@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" - integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== - dependencies: - camelcase "^6.0.0" - decamelize "^4.0.0" - flat "^5.0.2" - is-plain-obj "^2.1.0" - -yargs@16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yargs@^15.1.0, yargs@^15.4.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" - -yargs@^17.2.1, yargs@^17.7.2: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - 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.1.1" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -zip-stream@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-2.1.3.tgz#26cc4bdb93641a8590dd07112e1f77af1758865b" - integrity sha512-EkXc2JGcKhO5N5aZ7TmuNo45budRaFGHOmz24wtJR7znbNqDPmdZtUauKX6et8KAVseAMBOyWJqEpXcHTBsh7Q== - dependencies: - archiver-utils "^2.1.0" - compress-commons "^2.1.1" - readable-stream "^3.4.0" - -zod@^3.22.1, zod@^3.22.2: - version "3.23.8" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d" - integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g== From 6fa1af1143914034de505d4fec3365aef27559f2 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Fri, 14 Jun 2024 16:19:19 +0300 Subject: [PATCH 148/464] fix object --- .../UI/features/governace/module/GovernanceContextProvider.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx index 85b430dc04..0566d8a54d 100644 --- a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx @@ -52,7 +52,7 @@ export const GovernanceContextProvider = ({ children, currentWallet }: Governanc oldBackendUrl: String(backendService), newBackendUrl: String(backendService), networkId: networkId, - wasm: RustModule.CrossCsl.init, + wasmFactory: RustModule.CrossCsl.init, }); const governanceStatus = await govApi.getAccountState(skey, skey); From 99c410a4b982facbdfc10bd43f4c6c0800f649d6 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Fri, 14 Jun 2024 19:01:05 +0300 Subject: [PATCH 149/464] add backend zero endpoint --- .../UI/features/governace/common/helpers.ts | 2 + .../module/GovernanceContextProvider.tsx | 4 +- .../storage/database/prepackaged/networks.js | 142 ++++------ .../lib/storage/database/primitives/tables.js | 245 +++++++----------- .../wallet/staking/StakingPageContent.js | 42 ++- .../app/stores/toplevel/DelegationStore.js | 27 +- packages/yoroi-extension/package.json | 2 +- 7 files changed, 188 insertions(+), 276 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/governace/common/helpers.ts b/packages/yoroi-extension/app/UI/features/governace/common/helpers.ts index 3515a22a0f..3c94a962af 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/helpers.ts +++ b/packages/yoroi-extension/app/UI/features/governace/common/helpers.ts @@ -48,11 +48,13 @@ export const createCurrrentWalletInfo = (stores: any) => { const networkInfo = selectedWallet.getParent().getNetworkInfo(); const networkId = networkInfo.NetworkId; const backendService = selectedWallet.getParent().getNetworkInfo().Backend.BackendService; + const backendServiceZero = selectedWallet.getParent().getNetworkInfo().Backend.BackendServiceZero; return { currentPool: walletCurrentPoolInfo, networkId, walletId: currentWalletId, selectedWallet: selectedWallet, backendService, + backendServiceZero, }; }; diff --git a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx index 0566d8a54d..1c4e7a6a04 100644 --- a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx @@ -29,7 +29,7 @@ export const GovernanceContextProvider = ({ children, currentWallet }: Governanc const [stakingKeyHash, setStakingKeyHash] = React.useState(null); const [stakingKeyHex, setStakingKeyHex] = React.useState(null); - const { walletId, networkId, currentPool, selectedWallet, backendService } = currentWallet; + const { walletId, networkId, currentPool, selectedWallet, backendService, backendServiceZero } = currentWallet; const governanceManager = useGovernanceManagerMaker(walletId, networkId); React.useEffect(() => { @@ -50,7 +50,7 @@ export const GovernanceContextProvider = ({ children, currentWallet }: Governanc const govApi = new GovernanceApi({ oldBackendUrl: String(backendService), - newBackendUrl: String(backendService), + newBackendUrl: String(backendServiceZero), networkId: networkId, wasmFactory: RustModule.CrossCsl.init, }); diff --git a/packages/yoroi-extension/app/api/ada/lib/storage/database/prepackaged/networks.js b/packages/yoroi-extension/app/api/ada/lib/storage/database/prepackaged/networks.js index de1bc2d118..e0e5c0c0eb 100644 --- a/packages/yoroi-extension/app/api/ada/lib/storage/database/prepackaged/networks.js +++ b/packages/yoroi-extension/app/api/ada/lib/storage/database/prepackaged/networks.js @@ -1,16 +1,9 @@ // @flow -import { - CoinTypes, -} from '../../../../../../config/numbersConfig'; -import type { - NetworkRow, - CardanoHaskellBaseConfig, - CardanoHaskellConfig, - TokenInsert, -} from '../primitives/tables'; -import { PRIMARY_ASSET_CONSTANTS } from '../primitives/enums'; +import { CoinTypes } from '../../../../../../config/numbersConfig'; import environment from '../../../../../../environment'; +import { PRIMARY_ASSET_CONSTANTS } from '../primitives/enums'; +import type { CardanoHaskellBaseConfig, CardanoHaskellConfig, NetworkRow, TokenInsert } from '../primitives/tables'; export const CardanoForks = Object.freeze({ Haskell: 0, @@ -21,11 +14,9 @@ export const networks = Object.freeze({ NetworkId: 0, NetworkName: 'Cardano Mainnet', Backend: { - BackendService: environment.isTest() - ? 'http://localhost:21000' - : 'https://api.yoroiwallet.com', - TokenInfoService: - 'https://cdn.yoroiwallet.com', + BackendService: environment.isTest() ? 'http://localhost:21000' : 'https://api.yoroiwallet.com', + TokenInfoService: 'https://cdn.yoroiwallet.com', + BackendServiceZero: 'https://yoroi-backend-zero-mainnet.emurgornd.com', }, BaseConfig: ([ Object.freeze({ @@ -49,7 +40,7 @@ export const networks = Object.freeze({ CoinsPerUtxoWord: '34482', PoolDeposit: '500000000', KeyDeposit: '2000000', - }) + }), ]: CardanoHaskellBaseConfig), CoinType: CoinTypes.CARDANO, Fork: CardanoForks.Haskell, @@ -59,11 +50,8 @@ export const networks = Object.freeze({ NetworkId: 3_00, NetworkName: 'Cardano Legacy Testnet', Backend: { - BackendService: environment.isTest() - ? 'http://localhost:21000' - : 'https://testnet-backend.yoroiwallet.com', - TokenInfoService: - 'https://stage-cdn.yoroiwallet.com', + BackendService: environment.isTest() ? 'http://localhost:21000' : 'https://testnet-backend.yoroiwallet.com', + TokenInfoService: 'https://stage-cdn.yoroiwallet.com', }, BaseConfig: ([ Object.freeze({ @@ -87,7 +75,7 @@ export const networks = Object.freeze({ MinimumUtxoVal: '1000000', PoolDeposit: '500000000', KeyDeposit: '2000000', - }) + }), ]: CardanoHaskellBaseConfig), CoinType: CoinTypes.CARDANO, Fork: CardanoForks.Haskell, @@ -96,11 +84,9 @@ export const networks = Object.freeze({ NetworkId: 2_50, NetworkName: 'Cardano Preprod Testnet', Backend: { - BackendService: environment.isTest() - ? 'http://localhost:21000' - : 'https://preprod-backend.yoroiwallet.com', - TokenInfoService: - 'https://stage-cdn.yoroiwallet.com', + BackendService: environment.isTest() ? 'http://localhost:21000' : 'https://preprod-backend.yoroiwallet.com', + TokenInfoService: 'https://stage-cdn.yoroiwallet.com', + BackendServiceZero: 'https://yoroi-backend-zero-preprod.emurgornd.com', }, BaseConfig: ([ Object.freeze({ @@ -124,7 +110,7 @@ export const networks = Object.freeze({ MinimumUtxoVal: '1000000', PoolDeposit: '500000000', KeyDeposit: '2000000', - }) + }), ]: CardanoHaskellBaseConfig), CoinType: CoinTypes.CARDANO, Fork: CardanoForks.Haskell, @@ -133,11 +119,9 @@ export const networks = Object.freeze({ NetworkId: 3_50, NetworkName: 'Cardano Preview Testnet', Backend: { - BackendService: environment.isTest() - ? 'http://localhost:21000' - : 'https://preview-backend.emurgornd.com', - TokenInfoService: - 'https://stage-cdn.yoroiwallet.com', + BackendService: environment.isTest() ? 'http://localhost:21000' : 'https://preview-backend.emurgornd.com', + TokenInfoService: 'https://stage-cdn.yoroiwallet.com', + BackendServiceZero: 'https://yoroi-backend-zero-previes.emurgornd.com', }, BaseConfig: ([ Object.freeze({ @@ -161,7 +145,7 @@ export const networks = Object.freeze({ MinimumUtxoVal: '1000000', PoolDeposit: '500000000', KeyDeposit: '2000000', - }) + }), ]: CardanoHaskellBaseConfig), CoinType: CoinTypes.CARDANO, Fork: CardanoForks.Haskell, @@ -170,11 +154,9 @@ export const networks = Object.freeze({ NetworkId: 4_50, NetworkName: 'Cardano Sancho Testnet', Backend: { - BackendService: environment.isTest() - ? 'http://localhost:21000' - : 'https://sanchonet-backend.yoroiwallet.com', - TokenInfoService: - 'https://stage-cdn.yoroiwallet.com', + BackendService: environment.isTest() ? 'http://localhost:21000' : 'https://sanchonet-backend.yoroiwallet.com', + TokenInfoService: 'https://stage-cdn.yoroiwallet.com', + BackendServiceZero: 'https://yoroi-backend-zero-sanchonet.emurgornd.com', }, BaseConfig: ([ Object.freeze({ @@ -198,77 +180,67 @@ export const networks = Object.freeze({ MinimumUtxoVal: '1000000', PoolDeposit: '500000000', KeyDeposit: '2000000', - }) + }), ]: CardanoHaskellBaseConfig), CoinType: CoinTypes.CARDANO, Fork: CardanoForks.Haskell, }: NetworkRow), }); -export function isTestnet( - network: $ReadOnly, -): boolean { - return network.NetworkId === networks.CardanoTestnet.NetworkId - || network.NetworkId === networks.CardanoPreprodTestnet.NetworkId - || network.NetworkId === networks.CardanoPreviewTestnet.NetworkId - || network.NetworkId === networks.CardanoSanchoTestnet.NetworkId; - +export function isTestnet(network: $ReadOnly): boolean { + return ( + network.NetworkId === networks.CardanoTestnet.NetworkId || + network.NetworkId === networks.CardanoPreprodTestnet.NetworkId || + network.NetworkId === networks.CardanoPreviewTestnet.NetworkId || + network.NetworkId === networks.CardanoSanchoTestnet.NetworkId + ); } // LEGACY -export function isCardanoHaskell( - network: $ReadOnly, -): boolean { - return network.CoinType === CoinTypes.CARDANO && - network.Fork === CardanoForks.Haskell; - +export function isCardanoHaskell(network: $ReadOnly): boolean { + return network.CoinType === CoinTypes.CARDANO && network.Fork === CardanoForks.Haskell; } -export function getCardanoHaskellBaseConfig( - network: $ReadOnly, -): CardanoHaskellBaseConfig { +export function getCardanoHaskellBaseConfig(network: $ReadOnly): CardanoHaskellBaseConfig { if (!isCardanoHaskell(network)) throw new Error(`Incorrect network type ${JSON.stringify(network)}`); return (network.BaseConfig: any); // cast to return type } - export function cardanoHaskellConfigCombine(config: $ReadOnlyArray): CardanoHaskellConfig { // $FlowIgnore[incompatible-exact] return (config.reduce((acc, next) => Object.assign(acc, next), {}): CardanoHaskellConfig); } -export function getCardanoHaskellBaseConfigCombined( - network: $ReadOnly, -): CardanoHaskellConfig { - return cardanoHaskellConfigCombine(getCardanoHaskellBaseConfig(network)) +export function getCardanoHaskellBaseConfigCombined(network: $ReadOnly): CardanoHaskellConfig { + return cardanoHaskellConfigCombine(getCardanoHaskellBaseConfig(network)); } -export const defaultAssets: Array< - $Diff -> = Object.keys(networks) +export const defaultAssets: Array<$Diff> = Object.keys(networks) .map(key => networks[key]) .flatMap(network => { if (isCardanoHaskell(network)) { - return [{ - NetworkId: network.NetworkId, - Identifier: PRIMARY_ASSET_CONSTANTS.Cardano, - IsDefault: true, - IsNFT: false, - Metadata: { - type: 'Cardano', - policyId: PRIMARY_ASSET_CONSTANTS.Cardano, - assetName: PRIMARY_ASSET_CONSTANTS.Cardano, - ticker: - (network === networks.CardanoTestnet - || network === networks.CardanoPreprodTestnet - || network === networks.CardanoPreviewTestnet - || network === networks.CardanoSanchoTestnet) - ? 'TADA' - : 'ADA', - longName: null, - numberOfDecimals: 6, - } - }]; + return [ + { + NetworkId: network.NetworkId, + Identifier: PRIMARY_ASSET_CONSTANTS.Cardano, + IsDefault: true, + IsNFT: false, + Metadata: { + type: 'Cardano', + policyId: PRIMARY_ASSET_CONSTANTS.Cardano, + assetName: PRIMARY_ASSET_CONSTANTS.Cardano, + ticker: + network === networks.CardanoTestnet || + network === networks.CardanoPreprodTestnet || + network === networks.CardanoPreviewTestnet || + network === networks.CardanoSanchoTestnet + ? 'TADA' + : 'ADA', + longName: null, + numberOfDecimals: 6, + }, + }, + ]; } throw new Error(`Missing default asset for network type ${JSON.stringify(network)}`); }); diff --git a/packages/yoroi-extension/app/api/ada/lib/storage/database/primitives/tables.js b/packages/yoroi-extension/app/api/ada/lib/storage/database/primitives/tables.js index fe81482ea1..41bda1adcb 100644 --- a/packages/yoroi-extension/app/api/ada/lib/storage/database/primitives/tables.js +++ b/packages/yoroi-extension/app/api/ada/lib/storage/database/primitives/tables.js @@ -1,15 +1,9 @@ // @flow -import { Type, ConstraintAction, ConstraintTiming } from 'lovefield'; import type { lf$schema$Builder } from 'lovefield'; -import type { - TxStatusCodesType, - CertificateRelationType, - CoreAddressT, -} from './enums'; -import typeof { CertificateKind } from '@emurgo/cardano-serialization-lib-browser/cardano_serialization_lib'; -import type { KeyKindType } from '../../../cardanoCrypto/keys/types'; -import type { CoinTypesT } from '../../../../../../config/numbersConfig'; +import { ConstraintAction, ConstraintTiming, Type } from 'lovefield'; + +import type { CertificateKind } from '@emurgo/cardano-serialization-lib-browser/cardano_serialization_lib'; export type CommonBaseConfig = {| /** @@ -25,10 +19,10 @@ export type CommonBaseConfig = {| export type CardanoHaskellByronBaseConfig = {| ...CommonBaseConfig, /* - * Legacy byron addresses contained a network id inside of its attributes - * This network id was a 32-bit number, but the bech32 ID is smaller - * Therefore, the Byron network ID is only used to generate legacy addresses - */ + * Legacy byron addresses contained a network id inside of its attributes + * This network id was a 32-bit number, but the bech32 ID is smaller + * Therefore, the Byron network ID is only used to generate legacy addresses + */ +ByronNetworkId: number, +GenesisDate: string, +SlotsPerEpoch: number, @@ -43,22 +37,21 @@ export type CardanoHaskellShelleyBaseConfig = {| +LinearFee: {| +coefficient: string, +constant: string, - |}; + |}, +MinimumUtxoVal: string, +CoinsPerUtxoWord: string, +PoolDeposit: string, +KeyDeposit: string, |}; -export type CardanoHaskellBaseConfig = [ - $ReadOnly, - $ReadOnly -]; +export type CardanoHaskellBaseConfig = [$ReadOnly, $ReadOnly]; // unfortunate hack to get around the fact tuple spreading is broken in Flow -export type CardanoHaskellConfig = $ReadOnly, - ...$ElementType, -|}>>; +export type CardanoHaskellConfig = $ReadOnly< + InexactSubset<{| + ...$ElementType, + ...$ElementType, + |}> +>; export type NetworkInsert = {| NetworkId: number, @@ -67,6 +60,7 @@ export type NetworkInsert = {| Backend: {| BackendService?: string, TokenInfoService?: string, + BackendServiceZero?: string, |}, /** * Starting configuration for the wallet. @@ -100,7 +94,7 @@ export const NetworkSchema: {| Backend: 'Backend', BaseConfig: 'BaseConfig', Fork: 'Fork', - } + }, }; export type KeyInsert = {| @@ -124,7 +118,7 @@ export const KeySchema: {| Hash: 'Hash', IsEncrypted: 'IsEncrypted', PasswordLastUpdate: 'PasswordLastUpdate', - } + }, }; export type AddressInsert = {| @@ -148,7 +142,7 @@ export const AddressSchema: {| Type: 'Type', Hash: 'Hash', IsUsed: 'IsUsed', - } + }, }; export type EncryptionMetaInsert = {| @@ -176,7 +170,7 @@ export const EncryptionMetaSchema: {| TransactionSeed: 'TransactionSeed', BlockSeed: 'BlockSeed', TokenSeed: 'TokenSeed', - } + }, }; export type KeyDerivationInsert = {| @@ -208,7 +202,7 @@ export const KeyDerivationSchema: {| PublicKeyId: 'PublicKeyId', Parent: 'Parent', Index: 'Index', - } + }, }; export type BlockInsert = {| @@ -237,11 +231,11 @@ export const BlockSchema: {| Digest: 'Digest', Hash: 'Hash', BlockTime: 'BlockTime', - } + }, }; export type DbBlock = {| - +block: $ReadOnly; + +block: $ReadOnly, |}; export const TransactionType = Object.freeze({ @@ -281,9 +275,7 @@ export type CardanoShelleyTransactionInsert = {| ...TransactionInsertBase, |}; -export type TransactionInsert = - CardanoByronTransactionInsert | - CardanoShelleyTransactionInsert; +export type TransactionInsert = CardanoByronTransactionInsert | CardanoShelleyTransactionInsert; export type TransactionRow = {| TransactionId: number, @@ -306,7 +298,7 @@ export const TransactionSchema: {| Status: 'Status', ErrorMessage: 'ErrorMessage', Extra: 'Extra', - } + }, }; export type CertificatePart = {| @@ -336,7 +328,7 @@ export const CertificateSchema: {| Ordinal: 'Ordinal', Kind: 'Kind', Payload: 'Payload', - } + }, }; export type CertificateAddressInsert = {| CertificateId: number, @@ -358,7 +350,7 @@ export const CertificateAddressSchema: {| CertificateId: 'CertificateId', AddressId: 'AddressId', Relation: 'Relation', - } + }, }; export type CanonicalAddressInsert = {| @@ -387,7 +379,7 @@ export const CanonicalAddressSchema: {| properties: { CanonicalAddressId: 'CanonicalAddressId', KeyDerivationId: 'KeyDerivationId', - } + }, }; export type AddressMappingInsert = {| @@ -414,7 +406,7 @@ export const AddressMappingSchema: {| * We can't make the "KeyDerivationId" nullable because you can't create an index on a nullable */ AddressId: 'AddressId', - } + }, }; export type NFTMetadata = {| @@ -428,7 +420,7 @@ export type NFTMetadata = {| name?: ?string, mediaType?: ?string, src?: ?(string | Array), - |}> + |}>, |}; export type CardanoAssetMintMetadata = {| @@ -438,10 +430,10 @@ export type CardanoAssetMintMetadata = {| [key: string]: {| version?: ?string, [policyID: string]: {| - [assetNameHex: string]: NFTMetadata - |} - |} -|} + [assetNameHex: string]: NFTMetadata, + |}, + |}, +|}; export type CommonMetadata = {| numberOfDecimals: number, @@ -459,7 +451,7 @@ export type TokenMetadata = {| // empty string for ADA +assetName: string, ...CommonMetadata, - +assetMintMetadata?: Array + +assetMintMetadata?: Array, |}; export type TokenInsert = {| @@ -471,15 +463,17 @@ export type TokenInsert = {| * for Cardano, this is policyId || assetName * Note: we don't use null for the primary token of the chain * As some blockchains have multiple primary tokens - */ + */ Identifier: string, IsNFT?: boolean, Metadata: TokenMetadata, |}; -export type TokenUpsertWithDigest = TokenInsert | {| - TokenId?: ?number, - ...TokenInsert, -|}; +export type TokenUpsertWithDigest = + | TokenInsert + | {| + TokenId?: ?number, + ...TokenInsert, + |}; export type TokenUpsert = $Diff; export type TokenRow = {| TokenId: number, @@ -498,7 +492,7 @@ export const TokenSchema: {| Digest: 'Digest', Identifier: 'Identifier', Metadata: 'Metadata', - } + }, }; export type TokenListInsert = {| @@ -525,7 +519,7 @@ export const TokenListSchema: {| ListId: 'ListId', TokenId: 'TokenId', Amount: 'Amount', - } + }, }; export type DbTransaction = {| @@ -540,12 +534,13 @@ export type DbTokenInfo = {| Identifier: string, NetworkId: number, |}>, - |}> + |}>, |}; export const populatePrimitivesDb = (schemaBuilder: lf$schema$Builder) => { // Network Table - schemaBuilder.createTable(NetworkSchema.name) + schemaBuilder + .createTable(NetworkSchema.name) .addColumn(NetworkSchema.properties.NetworkId, Type.INTEGER) .addColumn(NetworkSchema.properties.NetworkName, Type.STRING) .addColumn(NetworkSchema.properties.CoinType, Type.NUMBER) @@ -557,71 +552,56 @@ export const populatePrimitivesDb = (schemaBuilder: lf$schema$Builder) => { * since we may want to support users adding custom networks eventually * so we need custom user networks to live in a different ID range than pre-built networks * so that if we add any new premade-network, we can just hardcode an ID without conflict - */ - ([NetworkSchema.properties.NetworkId]: Array), + */ + ([NetworkSchema.properties.NetworkId]: Array) ); // Key Table - schemaBuilder.createTable(KeySchema.name) + schemaBuilder + .createTable(KeySchema.name) .addColumn(KeySchema.properties.KeyId, Type.INTEGER) .addColumn(KeySchema.properties.Type, Type.INTEGER) .addColumn(KeySchema.properties.Hash, Type.STRING) .addColumn(KeySchema.properties.IsEncrypted, Type.BOOLEAN) .addColumn(KeySchema.properties.PasswordLastUpdate, Type.DATE_TIME) - .addPrimaryKey( - ([KeySchema.properties.KeyId]: Array), - true, - ) - .addNullable(([ - KeySchema.properties.PasswordLastUpdate, - ])); + .addPrimaryKey(([KeySchema.properties.KeyId]: Array), true) + .addNullable([KeySchema.properties.PasswordLastUpdate]); // Address Table - schemaBuilder.createTable(AddressSchema.name) + schemaBuilder + .createTable(AddressSchema.name) .addColumn(AddressSchema.properties.AddressId, Type.INTEGER) .addColumn(AddressSchema.properties.Digest, Type.NUMBER) .addColumn(AddressSchema.properties.Type, Type.NUMBER) .addColumn(AddressSchema.properties.Hash, Type.STRING) .addColumn(AddressSchema.properties.IsUsed, Type.BOOLEAN) - .addPrimaryKey( - ([AddressSchema.properties.AddressId]: Array), - true, - ) + .addPrimaryKey(([AddressSchema.properties.AddressId]: Array), true) .addIndex( 'Address_Digest_Index', ([AddressSchema.properties.Digest]: Array), false // not unique. There is a (very small) chance of collisions ) - .addIndex( - 'Address_Type_Index', - ([AddressSchema.properties.Type]: Array), - false - ); - + .addIndex('Address_Type_Index', ([AddressSchema.properties.Type]: Array), false); // EncryptionMeta Table - schemaBuilder.createTable(EncryptionMetaSchema.name) + schemaBuilder + .createTable(EncryptionMetaSchema.name) .addColumn(EncryptionMetaSchema.properties.EncryptionMetaId, Type.INTEGER) .addColumn(EncryptionMetaSchema.properties.AddressSeed, Type.INTEGER) .addColumn(EncryptionMetaSchema.properties.TransactionSeed, Type.INTEGER) .addColumn(EncryptionMetaSchema.properties.BlockSeed, Type.INTEGER) .addColumn(EncryptionMetaSchema.properties.TokenSeed, Type.INTEGER) - .addPrimaryKey( - ([EncryptionMetaSchema.properties.EncryptionMetaId]: Array), - false, - ); + .addPrimaryKey(([EncryptionMetaSchema.properties.EncryptionMetaId]: Array), false); // KeyDerivation Table - schemaBuilder.createTable(KeyDerivationSchema.name) + schemaBuilder + .createTable(KeyDerivationSchema.name) .addColumn(KeyDerivationSchema.properties.KeyDerivationId, Type.INTEGER) .addColumn(KeyDerivationSchema.properties.PrivateKeyId, Type.INTEGER) .addColumn(KeyDerivationSchema.properties.PublicKeyId, Type.INTEGER) .addColumn(KeyDerivationSchema.properties.Parent, Type.INTEGER) .addColumn(KeyDerivationSchema.properties.Index, Type.INTEGER) - .addPrimaryKey( - ([KeyDerivationSchema.properties.KeyDerivationId]: Array), - true - ) + .addPrimaryKey(([KeyDerivationSchema.properties.KeyDerivationId]: Array), true) .addForeignKey('KeyDerivation_Parent', { local: KeyDerivationSchema.properties.Parent, ref: `${KeyDerivationSchema.name}.${KeyDerivationSchema.properties.KeyDerivationId}`, @@ -634,7 +614,7 @@ export const populatePrimitivesDb = (schemaBuilder: lf$schema$Builder) => { }) .addForeignKey('KeyDerivation_PublicKeyId', { local: KeyDerivationSchema.properties.PublicKeyId, - ref: `${KeySchema.name}.${KeySchema.properties.KeyId}` + ref: `${KeySchema.name}.${KeySchema.properties.KeyId}`, }) .addNullable([ KeyDerivationSchema.properties.PrivateKeyId, @@ -643,29 +623,25 @@ export const populatePrimitivesDb = (schemaBuilder: lf$schema$Builder) => { KeyDerivationSchema.properties.Index, ]); - schemaBuilder.createTable(BlockSchema.name) + schemaBuilder + .createTable(BlockSchema.name) .addColumn(BlockSchema.properties.BlockId, Type.INTEGER) .addColumn(BlockSchema.properties.SlotNum, Type.INTEGER) .addColumn(BlockSchema.properties.Height, Type.INTEGER) .addColumn(BlockSchema.properties.Digest, Type.NUMBER) .addColumn(BlockSchema.properties.Hash, Type.STRING) .addColumn(BlockSchema.properties.BlockTime, Type.DATE_TIME) - .addPrimaryKey( - ([BlockSchema.properties.BlockId]: Array), - true, - ) + .addPrimaryKey(([BlockSchema.properties.BlockId]: Array), true) .addIndex( 'Block_Digest_Index', ([BlockSchema.properties.Digest]: Array), false // not unique. There is a (very small) chance of collisions - ).addIndex( - 'Block_Height_Index', - ([BlockSchema.properties.Height]: Array), - false - );; + ) + .addIndex('Block_Height_Index', ([BlockSchema.properties.Height]: Array), false); // Transaction table - schemaBuilder.createTable(TransactionSchema.name) + schemaBuilder + .createTable(TransactionSchema.name) .addColumn(TransactionSchema.properties.TransactionId, Type.INTEGER) .addColumn(TransactionSchema.properties.Type, Type.INTEGER) .addColumn(TransactionSchema.properties.Digest, Type.NUMBER) @@ -676,13 +652,10 @@ export const populatePrimitivesDb = (schemaBuilder: lf$schema$Builder) => { .addColumn(TransactionSchema.properties.Status, Type.INTEGER) .addColumn(TransactionSchema.properties.ErrorMessage, Type.STRING) .addColumn(TransactionSchema.properties.Extra, Type.OBJECT) - .addPrimaryKey( - ([TransactionSchema.properties.TransactionId]: Array), - true, - ) + .addPrimaryKey(([TransactionSchema.properties.TransactionId]: Array), true) .addForeignKey('Transaction_Block', { local: TransactionSchema.properties.BlockId, - ref: `${BlockSchema.name}.${BlockSchema.properties.BlockId}` + ref: `${BlockSchema.name}.${BlockSchema.properties.BlockId}`, }) .addNullable([ TransactionSchema.properties.BlockId, @@ -696,32 +669,24 @@ export const populatePrimitivesDb = (schemaBuilder: lf$schema$Builder) => { false // not unique. There is a (very small) chance of collisions ); // CanonicalAddress - schemaBuilder.createTable(CanonicalAddressSchema.name) + schemaBuilder + .createTable(CanonicalAddressSchema.name) .addColumn(CanonicalAddressSchema.properties.CanonicalAddressId, Type.INTEGER) .addColumn(CanonicalAddressSchema.properties.KeyDerivationId, Type.INTEGER) - .addPrimaryKey( - ([CanonicalAddressSchema.properties.CanonicalAddressId]: Array), - true - ) + .addPrimaryKey(([CanonicalAddressSchema.properties.CanonicalAddressId]: Array), true) .addForeignKey('CanonicalAddress_KeyDerivation', { local: CanonicalAddressSchema.properties.KeyDerivationId, ref: `${KeyDerivationSchema.name}.${KeyDerivationSchema.properties.KeyDerivationId}`, action: ConstraintAction.CASCADE, }) - .addIndex( - 'CanonicalAddress_KeyDerivation_Index', - ([CanonicalAddressSchema.properties.KeyDerivationId]: Array), - true - ); + .addIndex('CanonicalAddress_KeyDerivation_Index', ([CanonicalAddressSchema.properties.KeyDerivationId]: Array), true); // AddressMapping - schemaBuilder.createTable(AddressMappingSchema.name) + schemaBuilder + .createTable(AddressMappingSchema.name) .addColumn(AddressMappingSchema.properties.AddressMappingId, Type.INTEGER) .addColumn(AddressMappingSchema.properties.KeyDerivationId, Type.INTEGER) .addColumn(AddressMappingSchema.properties.AddressId, Type.INTEGER) - .addPrimaryKey( - ([AddressMappingSchema.properties.AddressMappingId]: Array), - true - ) + .addPrimaryKey(([AddressMappingSchema.properties.AddressMappingId]: Array), true) .addForeignKey('AddressMapping_KeyDerivation', { local: AddressMappingSchema.properties.KeyDerivationId, ref: `${KeyDerivationSchema.name}.${KeyDerivationSchema.properties.KeyDerivationId}`, @@ -732,23 +697,17 @@ export const populatePrimitivesDb = (schemaBuilder: lf$schema$Builder) => { ref: `${AddressSchema.name}.${AddressSchema.properties.AddressId}`, action: ConstraintAction.CASCADE, }) - .addIndex( - 'AddressMapping_KeyDerivation_Index', - ([AddressMappingSchema.properties.KeyDerivationId]: Array), - false - ); + .addIndex('AddressMapping_KeyDerivation_Index', ([AddressMappingSchema.properties.KeyDerivationId]: Array), false); // Certificate Table - schemaBuilder.createTable(CertificateSchema.name) + schemaBuilder + .createTable(CertificateSchema.name) .addColumn(CertificateSchema.properties.CertificateId, Type.INTEGER) .addColumn(CertificateSchema.properties.TransactionId, Type.INTEGER) .addColumn(CertificateSchema.properties.Ordinal, Type.INTEGER) .addColumn(CertificateSchema.properties.Kind, Type.INTEGER) .addColumn(CertificateSchema.properties.Payload, Type.STRING) - .addPrimaryKey( - ([CertificateSchema.properties.CertificateId]: Array), - true - ) + .addPrimaryKey(([CertificateSchema.properties.CertificateId]: Array), true) .addForeignKey('Certificate_Transaction', { local: CertificateSchema.properties.TransactionId, ref: `${TransactionSchema.name}.${TransactionSchema.properties.TransactionId}`, @@ -761,15 +720,13 @@ export const populatePrimitivesDb = (schemaBuilder: lf$schema$Builder) => { ); // CertificateAddress Table - schemaBuilder.createTable(CertificateAddressSchema.name) + schemaBuilder + .createTable(CertificateAddressSchema.name) .addColumn(CertificateAddressSchema.properties.CertificateAddressId, Type.INTEGER) .addColumn(CertificateAddressSchema.properties.CertificateId, Type.INTEGER) .addColumn(CertificateAddressSchema.properties.AddressId, Type.INTEGER) .addColumn(CertificateAddressSchema.properties.Relation, Type.INTEGER) - .addPrimaryKey( - ([CertificateAddressSchema.properties.CertificateAddressId]: Array), - true - ) + .addPrimaryKey(([CertificateAddressSchema.properties.CertificateAddressId]: Array), true) .addForeignKey('CertificateAddress_Certificate', { local: CertificateAddressSchema.properties.CertificateId, ref: `${CertificateSchema.name}.${CertificateSchema.properties.CertificateId}`, @@ -779,19 +736,12 @@ export const populatePrimitivesDb = (schemaBuilder: lf$schema$Builder) => { local: CertificateAddressSchema.properties.AddressId, ref: `${AddressSchema.name}.${AddressSchema.properties.AddressId}`, }) - .addIndex( - 'CertificateAddress_Certificate_Index', - ([CertificateAddressSchema.properties.CertificateId]: Array), - false - ) - .addIndex( - 'Address_Transaction_Index', - ([CertificateAddressSchema.properties.AddressId]: Array), - false - ); + .addIndex('CertificateAddress_Certificate_Index', ([CertificateAddressSchema.properties.CertificateId]: Array), false) + .addIndex('Address_Transaction_Index', ([CertificateAddressSchema.properties.AddressId]: Array), false); // Token Table - schemaBuilder.createTable(TokenSchema.name) + schemaBuilder + .createTable(TokenSchema.name) .addColumn(TokenSchema.properties.TokenId, Type.INTEGER) .addColumn(TokenSchema.properties.NetworkId, Type.INTEGER) .addColumn(TokenSchema.properties.IsDefault, Type.BOOLEAN) @@ -799,10 +749,7 @@ export const populatePrimitivesDb = (schemaBuilder: lf$schema$Builder) => { .addColumn(TokenSchema.properties.Identifier, Type.STRING) .addColumn(TokenSchema.properties.Digest, Type.NUMBER) .addColumn(TokenSchema.properties.Metadata, Type.OBJECT) - .addPrimaryKey( - ([TokenSchema.properties.TokenId]: Array), - true - ) + .addPrimaryKey(([TokenSchema.properties.TokenId]: Array), true) .addForeignKey('Token_Network', { local: TokenSchema.properties.NetworkId, ref: `${NetworkSchema.name}.${NetworkSchema.properties.NetworkId}`, @@ -819,16 +766,14 @@ export const populatePrimitivesDb = (schemaBuilder: lf$schema$Builder) => { ); // TokenList Table - schemaBuilder.createTable(TokenListSchema.name) + schemaBuilder + .createTable(TokenListSchema.name) .addColumn(TokenListSchema.properties.TokenListItemId, Type.INTEGER) .addColumn(TokenListSchema.properties.ListId, Type.INTEGER) .addColumn(TokenListSchema.properties.TokenId, Type.INTEGER) .addColumn(TokenListSchema.properties.Amount, Type.STRING) - .addPrimaryKey( - ([TokenListSchema.properties.TokenListItemId]: Array), - true - ) + .addPrimaryKey(([TokenListSchema.properties.TokenListItemId]: Array), true) .addForeignKey('TokenList_Token', { local: TokenListSchema.properties.TokenId, ref: `${TokenSchema.name}.${TokenSchema.properties.TokenId}`, diff --git a/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js b/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js index b9cf6e00c0..219bd4be3f 100644 --- a/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js +++ b/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js @@ -1,37 +1,33 @@ // @flow -import type { ComponentType, Node } from 'react'; +import { observer } from 'mobx-react'; +import moment from 'moment'; +import type { Node } from 'react'; import { Component } from 'react'; -import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; import { intlShape } from 'react-intl'; -import type { StoresAndActionsProps } from '../../../types/injectedProps.types'; -import type { LayoutComponentMap } from '../../../styles/context/layout'; -import { withLayout } from '../../../styles/context/layout'; import type { ConfigType } from '../../../../config/config-types'; -import type { TokenEntry } from '../../../api/common/lib/MultiToken'; -import { observer } from 'mobx-react'; -import moment from 'moment'; +import { withLayout } from '../../../styles/context/layout'; -import globalMessages from '../../../i18n/global-messages'; +import { Box, styled } from '@mui/system'; import { PublicDeriver } from '../../../api/ada/lib/storage/models/PublicDeriver/index'; -import WalletEmptyBanner from '../WalletEmptyBanner'; import BuySellDialog from '../../../components/buySell/BuySellDialog'; -import CardanoStakingPage from './CardanoStakingPage'; -import { Box, styled } from '@mui/system'; -import SummaryCard from '../../../components/wallet/staking/dashboard-revamp/SummaryCard'; +import DelegatedStakePoolCard from '../../../components/wallet/staking/dashboard-revamp/DelegatedStakePoolCard'; import EpochProgressWrapper from '../../../components/wallet/staking/dashboard-revamp/EpochProgressWrapper'; import OverviewModal from '../../../components/wallet/staking/dashboard-revamp/OverviewDialog'; +import RewardHistoryDialog from '../../../components/wallet/staking/dashboard-revamp/RewardHistoryDialog'; +import SummaryCard from '../../../components/wallet/staking/dashboard-revamp/SummaryCard'; +import { compose, maybe, noop } from '../../../coreUtils'; +import globalMessages from '../../../i18n/global-messages'; import { genLookupOrFail } from '../../../stores/stateless/tokenHelpers'; -import UnmangleTxDialogContainer from '../../transfer/UnmangleTxDialogContainer'; -import DeregisterDialogContainer from '../../transfer/DeregisterDialogContainer'; +import { formatLovelacesHumanReadableShort, roundOneDecimal, roundTwoDecimal } from '../../../utils/formatters'; +import { generateGraphData } from '../../../utils/graph'; import { calculateAndFormatValue } from '../../../utils/unit-of-account'; +import DeregisterDialogContainer from '../../transfer/DeregisterDialogContainer'; +import UnmangleTxDialogContainer from '../../transfer/UnmangleTxDialogContainer'; import WithdrawalTxDialogContainer from '../../transfer/WithdrawalTxDialogContainer'; -import { generateGraphData } from '../../../utils/graph'; -import RewardHistoryDialog from '../../../components/wallet/staking/dashboard-revamp/RewardHistoryDialog'; -import DelegatedStakePoolCard from '../../../components/wallet/staking/dashboard-revamp/DelegatedStakePoolCard'; -import WithdrawRewardsDialog from './WithdrawRewardsDialog'; -import { formatLovelacesHumanReadableShort, roundOneDecimal, roundTwoDecimal } from '../../../utils/formatters'; +import WalletEmptyBanner from '../WalletEmptyBanner'; import { GovernanceParticipateDialog } from '../dialogs/GovernanceParticipateDialog'; -import { compose, maybe, noop } from '../../../coreUtils'; +import CardanoStakingPage from './CardanoStakingPage'; +import WithdrawRewardsDialog from './WithdrawRewardsDialog'; // populated by ConfigWebpackPlugin declare var CONFIG: ConfigType; @@ -198,7 +194,7 @@ class StakingPageContent extends Component { if (delegationRequests == null) { throw new Error(`${nameof(StakingPageContent)} opened for non-reward wallet`); } - stores.delegation.checkGovernanceStatus(); + stores.delegation.checkGovernanceStatus(publicDeriver); const balance = stores.transactions.getBalance(publicDeriver); const isWalletWithNoFunds = balance != null && balance.getDefaultEntry().amount.isZero(); @@ -210,7 +206,7 @@ class StakingPageContent extends Component { const currentlyDelegating = stores.delegation.isCurrentlyDelegating(publicDeriver); const delegatedUtxo = stores.delegation.getDelegatedUtxoBalance(publicDeriver); const delegatedRewards = stores.delegation.getRewardBalanceOrZero(publicDeriver); - const isParticipatingToGovernance = stores.delegation.isParticipatingToGovernance; + const isParticipatingToGovernance = stores.delegation.governanceStatus; return ( diff --git a/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js b/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js index 0279165da0..d99108f086 100644 --- a/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js +++ b/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js @@ -18,6 +18,7 @@ import LocalizedRequest from '../lib/LocalizedRequest'; import type { MangledAmountsResponse } from '../stateless/mangledAddresses'; import { RustModule } from '../../api/ada/lib/cardanoCrypto/rustLoader'; +import { unwrapStakingKey } from '../../api/ada/lib/storage/bridge/utils'; import { environment } from '../../environment'; export type DelegationRequests = {| @@ -62,10 +63,10 @@ export default class DelegationStore extends Store { show: 'closed', shouldUpdatePool: false, }; - @observable stakingKeyHash: ?string = null; + @observable governanceStatus: any = null; - @action setStagingKeyHash: any => void = (stakingHash: PoolTransitionModal) => { - this.stakingKeyHash = stakingHash; + @action setGovernanceStatus: any => void = (status: any) => { + this.governanceStatus = status; }; @action setPoolTransitionConfig: any => void = (config: PoolTransitionModal) => { @@ -257,7 +258,7 @@ export default class DelegationStore extends Store { }); }; - getStakingKeyAndState: (PublicDeriver) => any = async publicDeriver => { + checkGovernanceStatus: (PublicDeriver) => any = async publicDeriver => { try { const withStakingKey = asGetStakingKey(publicDeriver); if (withStakingKey == null) { @@ -269,24 +270,20 @@ export default class DelegationStore extends Store { const stakingKeyResp = await withStakingKey.getStakingKey(); - this.setStagingKeyHash(stakingKeyResp.addr.Hash); + const skey = unwrapStakingKey(stakingKeyResp.addr.Hash).to_keyhash()?.to_hex(); + const backendService = publicDeriver.getParent().getNetworkInfo().Backend.BackendService; - console.log('stakingKeyResp.addr.Hash', stakingKeyResp.addr.Hash); + const backendServiceZero = publicDeriver.getParent().getNetworkInfo().Backend.BackendServiceZero; const govApi = new GovernanceApi({ oldBackendUrl: String(backendService), - newBackendUrl: String(backendService), + newBackendUrl: String(backendServiceZero), networkId: networkId, - wasm: RustModule.CrossCsl.init('global'), + wasmFactory: RustModule.CrossCsl.init, }); - return await stakingKeyResp.addr.Hash; - // console.log('govApi', govApi); - // return 'BLABLALALALA'; - - // const stakingState = await govApi.getAccountState(stakingKeyResp.addr.Hash, stakingKeyResp.addr.Hash); - - // console.log('@@@@@@@@@stakingState', stakingState); + const governanceStatus = await govApi.getAccountState(skey, skey); + this.setGovernanceStatus(governanceStatus); } catch (e) {} }; diff --git a/packages/yoroi-extension/package.json b/packages/yoroi-extension/package.json index 9db2312544..6a7b479405 100644 --- a/packages/yoroi-extension/package.json +++ b/packages/yoroi-extension/package.json @@ -153,7 +153,7 @@ "@emurgo/cip4-js": "1.0.5", "@emurgo/cross-csl-browser": "4.4.0", "@emurgo/yoroi-eutxo-txs": "0.0.2-alpha.8", - "@emurgo/yoroi-lib": "0.15.6-alpha.1", + "@emurgo/yoroi-lib": "0.15.6-alpha.2", "@ledgerhq/hw-transport-u2f": "5.36.0-deprecated", "@ledgerhq/hw-transport-webauthn": "5.36.0-deprecated", "@ledgerhq/hw-transport-webhid": "5.51.1", From ed6c31f517bf5eb1e2f6b2250fcca12263cd2e55 Mon Sep 17 00:00:00 2001 From: yushi Date: Sat, 15 Jun 2024 01:19:14 +0800 Subject: [PATCH 150/464] lint --- .../yoroi-extension/app/components/buySell/BuySellDialog.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/components/buySell/BuySellDialog.js b/packages/yoroi-extension/app/components/buySell/BuySellDialog.js index 100d4a3d48..72eeb2a1f6 100644 --- a/packages/yoroi-extension/app/components/buySell/BuySellDialog.js +++ b/packages/yoroi-extension/app/components/buySell/BuySellDialog.js @@ -447,7 +447,7 @@ export default class BuySellDialog extends Component { return ( } onClose={dismissUrlGenerationError} > From af9d799c9da0d618e414ba3433989c4e3d2ab7ee Mon Sep 17 00:00:00 2001 From: yushi Date: Fri, 14 Jun 2024 08:54:00 +0800 Subject: [PATCH 151/464] disable selling ADA --- .../app/components/buySell/BuySellDialog.js | 35 ------------------- 1 file changed, 35 deletions(-) diff --git a/packages/yoroi-extension/app/components/buySell/BuySellDialog.js b/packages/yoroi-extension/app/components/buySell/BuySellDialog.js index 72eeb2a1f6..27595b6206 100644 --- a/packages/yoroi-extension/app/components/buySell/BuySellDialog.js +++ b/packages/yoroi-extension/app/components/buySell/BuySellDialog.js @@ -11,8 +11,6 @@ import DialogCloseButton from '../widgets/DialogCloseButton'; import globalMessages from '../../i18n/global-messages'; import { Box } from '@mui/material'; import { styled } from '@mui/material/styles'; -import Tab, { tabClasses } from '@mui/material/Tab'; -import Tabs, { tabsClasses } from '@mui/material/Tabs'; import TextField from '@mui/material/TextField'; import InputAdornment from '@mui/material/InputAdornment'; import BigNumber from 'bignumber.js'; @@ -97,24 +95,6 @@ const MINIMUM_BUY_ADA = new BigNumber('100'); const MINIMUM_SELL_ADA = new BigNumber('1'); const EXCHANGE_CALLBACK_URL = 'https://ramp-redirect.yoroiwallet.com/yoroi-extension-exchange-callback.html'; -const TabItem = styled(Tab)({ - position: 'relative', - borderRadius: '8px', - textAlign: 'center', - transition: 'all .5s', - padding: '10px 15px', - color: '#555555', - height: 'auto', - margin: '10px 0', - float: 'none', - fontSize: '12px', - fontWeight: '500', - [`&.${tabClasses.selected}, &.${tabClasses.root}:hover`]: { - color: '#555555', - backgroundColor: '#dce0e9', - }, -}); - const ProviderRow = styled(Box)({ display: 'flex', flexDirection: 'row', @@ -480,21 +460,6 @@ export default class BuySellDialog extends Component { styleOverride={{ width: '648px' }} styleFlags={{ contentNoTopPadding: true }} > - this.setState({ isBuying: !state.isBuying, inputError: null, })} - sx={{ - width: '100%', - [`& .${tabsClasses.indicator}`]: { - display: 'none', - }, - boxShadow: 'none', - }} - > - - - - {this.renderBuySell()} ); From b586114c58af1309c0d318aee1e67ecc40e3dfeb Mon Sep 17 00:00:00 2001 From: yushi Date: Sat, 15 Jun 2024 01:20:23 +0800 Subject: [PATCH 152/464] enable selling ADA for dev and nightly --- .../app/components/buySell/BuySellDialog.js | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/packages/yoroi-extension/app/components/buySell/BuySellDialog.js b/packages/yoroi-extension/app/components/buySell/BuySellDialog.js index 27595b6206..3502fa1e10 100644 --- a/packages/yoroi-extension/app/components/buySell/BuySellDialog.js +++ b/packages/yoroi-extension/app/components/buySell/BuySellDialog.js @@ -11,6 +11,8 @@ import DialogCloseButton from '../widgets/DialogCloseButton'; import globalMessages from '../../i18n/global-messages'; import { Box } from '@mui/material'; import { styled } from '@mui/material/styles'; +import Tab, { tabClasses } from '@mui/material/Tab'; +import Tabs, { tabsClasses } from '@mui/material/Tabs'; import TextField from '@mui/material/TextField'; import InputAdornment from '@mui/material/InputAdornment'; import BigNumber from 'bignumber.js'; @@ -21,6 +23,7 @@ import { ReactComponent as InfoIcon } from '../../assets/images/info-icon-revamp import { ReactComponent as YoroiIcon } from '../../assets/images/yoroi-logo-shape-blue.inline.svg'; import { ReactComponent as FailIcon } from '../../assets/images/service-unavailable-error.svg'; import { exchangeApiMaker, exchangeManagerMaker } from '@yoroi/exchange' +import environment from '../../environment'; declare var chrome; @@ -95,6 +98,24 @@ const MINIMUM_BUY_ADA = new BigNumber('100'); const MINIMUM_SELL_ADA = new BigNumber('1'); const EXCHANGE_CALLBACK_URL = 'https://ramp-redirect.yoroiwallet.com/yoroi-extension-exchange-callback.html'; +const TabItem = styled(Tab)({ + position: 'relative', + borderRadius: '8px', + textAlign: 'center', + transition: 'all .5s', + padding: '10px 15px', + color: '#555555', + height: 'auto', + margin: '10px 0', + float: 'none', + fontSize: '12px', + fontWeight: '500', + [`&.${tabClasses.selected}, &.${tabClasses.root}:hover`]: { + color: '#555555', + backgroundColor: '#dce0e9', + }, +}); + const ProviderRow = styled(Box)({ display: 'flex', flexDirection: 'row', @@ -460,6 +481,22 @@ export default class BuySellDialog extends Component { styleOverride={{ width: '648px' }} styleFlags={{ contentNoTopPadding: true }} > + {environment.isDev() && !environment.isNightly() && ( + this.setState({ isBuying: !state.isBuying })} + sx={{ + width: '100%', + [`& .${tabsClasses.indicator}`]: { + display: 'none', + }, + boxShadow: 'none', + }} + > + + + + )} {this.renderBuySell()} ); From 3cef417ffd46c0e719b2d82775fb344b1ae60b86 Mon Sep 17 00:00:00 2001 From: yushi Date: Sat, 15 Jun 2024 12:21:11 +0800 Subject: [PATCH 153/464] fix --- .../yoroi-extension/app/components/buySell/BuySellDialog.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/components/buySell/BuySellDialog.js b/packages/yoroi-extension/app/components/buySell/BuySellDialog.js index 3502fa1e10..c48ad2ef19 100644 --- a/packages/yoroi-extension/app/components/buySell/BuySellDialog.js +++ b/packages/yoroi-extension/app/components/buySell/BuySellDialog.js @@ -484,7 +484,7 @@ export default class BuySellDialog extends Component { {environment.isDev() && !environment.isNightly() && ( this.setState({ isBuying: !state.isBuying })} + onChange={() => this.setState({ isBuying: !state.isBuying, inputError: null, })} sx={{ width: '100%', [`& .${tabsClasses.indicator}`]: { From b4e2906c99304402e17e8a3aac762d6159993100 Mon Sep 17 00:00:00 2001 From: yushi Date: Sat, 15 Jun 2024 12:38:12 +0800 Subject: [PATCH 154/464] fix button and dialog title text --- .../app/components/buySell/BuySellDialog.js | 8 ++++++-- .../app/components/topbar/BuySellAdaButton.js | 9 +++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/packages/yoroi-extension/app/components/buySell/BuySellDialog.js b/packages/yoroi-extension/app/components/buySell/BuySellDialog.js index c48ad2ef19..ec9ff2446b 100644 --- a/packages/yoroi-extension/app/components/buySell/BuySellDialog.js +++ b/packages/yoroi-extension/app/components/buySell/BuySellDialog.js @@ -198,6 +198,10 @@ const ErrorPopoutContent = styled(Box)({ const URL_GENERATION_LONG_LOADING_TIMEOUT = 2 * 1000; const URL_GENERATION_TIMEOUT = 30 * 1000; +const dialogTitle = (environment.isDev() || environment.isNightly()) ? + messages.dialogTitle : + globalMessages.buyAda; + @observer export default class BuySellDialog extends Component { static contextTypes: {| intl: $npm$ReactIntl$IntlFormat |} = { @@ -464,7 +468,7 @@ export default class BuySellDialog extends Component { return ( } @@ -481,7 +485,7 @@ export default class BuySellDialog extends Component { styleOverride={{ width: '648px' }} styleFlags={{ contentNoTopPadding: true }} > - {environment.isDev() && !environment.isNightly() && ( + {environment.isDev() || environment.isNightly() && ( this.setState({ isBuying: !state.isBuying, inputError: null, })} diff --git a/packages/yoroi-extension/app/components/topbar/BuySellAdaButton.js b/packages/yoroi-extension/app/components/topbar/BuySellAdaButton.js index 726e07719d..c399c4eb33 100644 --- a/packages/yoroi-extension/app/components/topbar/BuySellAdaButton.js +++ b/packages/yoroi-extension/app/components/topbar/BuySellAdaButton.js @@ -8,6 +8,7 @@ import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; import { intlShape } from 'react-intl'; import { withLayout } from '../../styles/context/layout'; import type { LayoutComponentMap } from '../../styles/context/layout'; +import environment from '../../environment'; type Props = {| +onBuySellClick: void => void, @@ -17,6 +18,10 @@ type InjectedProps = {| +renderLayoutComponent: LayoutComponentMap => Node, |}; +const buttonText = (environment.isDev() || environment.isNightly()) ? + globalMessages.buySellAda : + globalMessages.buyAda; + @observer class BuySellAdaButton extends Component { static contextTypes: {| intl: $npm$ReactIntl$IntlFormat |} = { @@ -33,7 +38,7 @@ class BuySellAdaButton extends Component { className="secondary" onClick={() => this.props.onBuySellClick()} > - {intl.formatMessage(globalMessages.buyAda)} + {intl.formatMessage(buttonText)} ); @@ -46,7 +51,7 @@ class BuySellAdaButton extends Component { variant="secondary" onClick={() => this.props.onBuySellClick()} > - {intl.formatMessage(globalMessages.buySellAda)} + {intl.formatMessage(buttonText)} ); From 782e7fff39010909b853c24e89820a55ded2656a Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Mon, 17 Jun 2024 08:57:32 +0700 Subject: [PATCH 155/464] fix typo --- packages/yoroi-extension/app/Routes.js | 1 - packages/yoroi-extension/app/UI/components/Chip.tsx | 2 +- .../features/portfolio/useCases/Dapps/OrderTable.tsx | 12 ++++++------ .../portfolio/useCases/Dapps/PortfolioDapps.tsx | 2 +- .../portfolio/useCases/TokenDetails/TokenDetails.tsx | 2 +- 5 files changed, 9 insertions(+), 10 deletions(-) diff --git a/packages/yoroi-extension/app/Routes.js b/packages/yoroi-extension/app/Routes.js index 5c389a086e..094fa489e7 100644 --- a/packages/yoroi-extension/app/Routes.js +++ b/packages/yoroi-extension/app/Routes.js @@ -29,7 +29,6 @@ import RestoreWalletPage, { RestoreWalletPagePromise } from './containers/wallet // New UI pages import { GovernanceContextProvider } from './UI/features/governace/module/GovernanceContextProvider'; import { createCurrrentWalletInfo } from './UI/features/governace/common/helpers'; -import { GovernanceContextProvider } from './UI/features/governace/module/GovernanceContextProvider'; import GovernanceDelegationFormPage from './UI/pages/Governance/GovernanceDelegationFormPage'; import GovernanceStatusPage from './UI/pages/Governance/GovernanceStatusPage'; import GovernanceTransactionFailedPage from './UI/pages/Governance/GovernanceTransactionFailedPage'; diff --git a/packages/yoroi-extension/app/UI/components/Chip.tsx b/packages/yoroi-extension/app/UI/components/Chip.tsx index b10636f58b..6fb0db1563 100644 --- a/packages/yoroi-extension/app/UI/components/Chip.tsx +++ b/packages/yoroi-extension/app/UI/components/Chip.tsx @@ -36,7 +36,7 @@ export const Chip = ({ label, type, sx, ...props }: Props): JSX.Element => { label={label} {...props} sx={{ - minWidth: '63px', + minWidth: '61px', height: '20px', padding: '2px 6px !important', borderRadius: '20px', diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.tsx b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.tsx index 083a219cbf..b91d93bbef 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/OrderTable.tsx @@ -111,7 +111,7 @@ const OrderTable = ({ data, isLoading }: Props): JSX.Element => { '& td': { border: 0 }, }} > - + { - + { - + {row.assetPrice} - + {row.assetAmount} - + chrome.tabs.create({ @@ -192,7 +192,7 @@ const OrderTable = ({ data, isLoading }: Props): JSX.Element => { - + {formatNumber(row.totalValue)} {row.firstToken.name} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.tsx b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.tsx index 617acf1da1..7be830bcde 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.tsx @@ -120,7 +120,7 @@ const PortfolioDapps = ({ data }: Props) => { onClick={() => handleChangeTab(button.id)} sx={(theme: any) => ({ height: '2.5rem', - width: '9rem', + minWidth: '9rem', textTransform: 'none', color: theme.palette.ds.gray_cmax, padding: `${theme.spacing(1)} !important`, diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.tsx b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.tsx index f0ac487034..bd81526534 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.tsx @@ -93,7 +93,7 @@ const TokenDetails = ({ tokenInfo }: Props): JSX.Element => { }} > - + {strings.backToPortfolio} From 7b1ebf68ab21a5346fbc9d288b211bb7a24b687e Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Mon, 17 Jun 2024 09:16:58 +0700 Subject: [PATCH 156/464] removed unused file and update performance menu --- .../portfolio/common/components/Menu.tsx | 37 +++++++++++++++++++ .../common/components/PortfolioMenu.tsx | 33 ++--------------- .../TokenDetails/TokenDetailChart.tsx | 2 +- .../useCases/TokenDetails/TokenDetails.tsx | 12 ++---- .../images/sidebar/revamp/assets.inline.svg | 1 - 5 files changed, 44 insertions(+), 41 deletions(-) create mode 100644 packages/yoroi-extension/app/UI/features/portfolio/common/components/Menu.tsx delete mode 100644 packages/yoroi-extension/app/assets/images/sidebar/revamp/assets.inline.svg diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/components/Menu.tsx b/packages/yoroi-extension/app/UI/features/portfolio/common/components/Menu.tsx new file mode 100644 index 0000000000..8177462f6a --- /dev/null +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/components/Menu.tsx @@ -0,0 +1,37 @@ +import { Box, Stack, Typography } from '@mui/material'; +import { useTheme } from '@mui/material'; +import React from 'react'; + +const Menu = ({ options, onItemClick, isActiveItem }) => { + const theme: any = useTheme(); + + return ( + + {options.map(option => ( + onItemClick(option.route)} + sx={{ + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + borderBottom: '3px solid', + borderColor: isActiveItem(option.route) ? 'ds.primary_c500' : 'transparent', + '&:hover': { + cursor: 'pointer', + }, + }} + > + + {option.label} + + + ))} + + ); +}; + +export default Menu; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.tsx b/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.tsx index 09e9f1fa53..1668b84f31 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioMenu.tsx @@ -3,15 +3,14 @@ import { ROUTES } from '../../../../../routes-config'; import { useStrings } from '../hooks/useStrings'; import mockData from '../mockData'; import { SubMenuOption } from '../types'; -import { Box, Stack, Typography, useTheme } from '@mui/material'; +import Menu from './Menu'; interface Props { onItemClick: (itemId: string) => void; isActiveItem: (itemId: string) => boolean; } -const PortfolioMenu = ({ onItemClick, isActiveItem }: Props): JSX.Element => { - const theme: any = useTheme(); +const PortfolioMenu = (props: Props): JSX.Element => { const strings = useStrings(); const portfolioOptions: SubMenuOption[] = [ @@ -27,33 +26,7 @@ const PortfolioMenu = ({ onItemClick, isActiveItem }: Props): JSX.Element => { }, ]; - return ( - - {portfolioOptions.map(option => ( - onItemClick(option.route)} - sx={{ - display: 'flex', - justifyContent: 'center', - alignItems: 'center', - borderBottom: '3px solid', - borderColor: isActiveItem(option.route) ? 'ds.primary_c500' : 'transparent', - '&:hover': { - cursor: 'pointer', - }, - }} - > - - {option.label} - - - ))} - - ); + return ; }; export default PortfolioMenu; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.tsx b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.tsx index e35829fc1c..81fd7f5b5b 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.tsx @@ -37,7 +37,7 @@ interface Props { } const TokenDetailChart = ({ isLoading, tokenInfo, isAda }: Props): JSX.Element => { - const chartHeight = isAda ? 156 : 241; + const chartHeight = isAda ? 163 : 257; const theme: any = useTheme(); const strings = useStrings(); const { unitOfAccount } = usePortfolio(); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.tsx b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.tsx index bd81526534..31657fb55f 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.tsx @@ -1,12 +1,10 @@ import React, { useEffect, useState } from 'react'; import { Box, Divider, Stack, Typography } from '@mui/material'; import { ReactComponent as BackIcon } from '../../../../../assets/images/assets-page/back-arrow.inline.svg'; -import { styled } from '@mui/material/styles'; +import { styled, useTheme } from '@mui/material/styles'; import { Skeleton, Card } from '../../../../components'; import TransactionTable from './TransactionTable'; import TokenDetailChart from './TokenDetailChart'; -import SubMenu from '../../../../../components/topbar/SubMenu'; -import { useTheme } from '@mui/material/styles'; import { useNavigateTo } from '../../common/hooks/useNavigateTo'; import { useStrings } from '../../common/hooks/useStrings'; import TokenDetailPerformance from './TokenDetailPerformance'; @@ -16,6 +14,7 @@ import { SubMenuOption, TokenType } from '../../common/types/index'; import NavigationButton from '../../common/components/NavigationButton'; import mockData from '../../common/mockData'; import { formatNumber } from '../../common/helpers/formatHelper'; +import Menu from '../../common/components/Menu'; const Header = styled(Box)({ display: 'flex', @@ -150,12 +149,7 @@ const TokenDetails = ({ tokenInfo }: Props): JSX.Element => { - setSelectedTab(route)} - isActiveItem={isActiveItem} - locationId="token-details" - /> + setSelectedTab(route)} isActiveItem={isActiveItem} /> diff --git a/packages/yoroi-extension/app/assets/images/sidebar/revamp/assets.inline.svg b/packages/yoroi-extension/app/assets/images/sidebar/revamp/assets.inline.svg deleted file mode 100644 index fd5644d3bb..0000000000 --- a/packages/yoroi-extension/app/assets/images/sidebar/revamp/assets.inline.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file From 14196a0001de6a89acf9effb4c28e741f54bcee2 Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Mon, 17 Jun 2024 09:51:45 +0700 Subject: [PATCH 157/464] update chart UI --- .../UI/features/portfolio/common/hooks/useChart.tsx | 11 +++++++++-- .../portfolio/useCases/Dapps/PortfolioDapps.tsx | 2 +- .../useCases/TokenDetails/TokenDetailChart.tsx | 1 - 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useChart.tsx b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useChart.tsx index 1a58ab1207..9a6049640a 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useChart.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/hooks/useChart.tsx @@ -35,9 +35,16 @@ const useChart = (data: IChartData) => { payload: { value: number }; }): React.SVGProps => { return ( - + {payload.value.toFixed(1)} - + ); }; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.tsx b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.tsx index 7be830bcde..1d7832ca0c 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.tsx @@ -113,7 +113,7 @@ const PortfolioDapps = ({ data }: Props) => { } /> - + {buttonProps.map(button => ( + ))} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.tsx b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.tsx index 7292cd45ef..a9af9d190d 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.tsx @@ -37,7 +37,7 @@ interface Props { } const TokenDetailChart = ({ isLoading, tokenInfo, isAda }: Props): JSX.Element => { - const chartHeight = isAda ? 163 : 257; + const chartHeight = isAda ? 152 : 254; const theme: any = useTheme(); const strings = useStrings(); const { unitOfAccount } = usePortfolio(); diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.tsx b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.tsx index 316bba42cf..8d5dbaa370 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailPerformance.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { Box, Stack, Typography } from '@mui/material'; +import { Stack, Typography } from '@mui/material'; import { useTheme } from '@mui/material/styles'; import { useStrings } from '../../common/hooks/useStrings'; import { usePortfolio } from '../../module/PortfolioContextProvider'; @@ -23,12 +23,15 @@ const TokenDetailPerformance = ({ tokenInfo, isLoading }: Props): JSX.Element => const strings = useStrings(); const { unitOfAccount } = usePortfolio(); - const performanceItemList = [ + const firstPerformanceItemList = [ { id: 'tokenPriceChange', type: PerformanceItemType.FIAT, label: strings.tokenPriceChange }, { id: 'tokenPrice', type: PerformanceItemType.FIAT, label: strings.tokenPrice }, { id: 'marketCap', type: PerformanceItemType.FIAT, label: strings.marketCap }, { id: 'volumn', type: PerformanceItemType.FIAT, label: strings['24hVolumn'] }, { id: 'rank', type: PerformanceItemType.RANK, label: strings.rank }, + ]; + + const secondPerformanceItemList = [ { id: 'circulating', type: PerformanceItemType.TOKEN, label: strings.circulating }, { id: 'totalSupply', type: PerformanceItemType.TOKEN, label: strings.totalSupply }, { id: 'maxSupply', type: PerformanceItemType.TOKEN, label: strings.maxSupply }, @@ -37,12 +40,12 @@ const TokenDetailPerformance = ({ tokenInfo, isLoading }: Props): JSX.Element => ]; return ( - + {strings.marketData} - {performanceItemList.map((item, index) => ( + {firstPerformanceItemList.map((item, index) => ( ))} - + + {secondPerformanceItemList.map((item, index) => ( + + {item.label} + {isLoading ? ( + + ) : ( + + {tokenInfo?.performance[index]?.value ? ( + <> + {item.type === PerformanceItemType.RANK && '#'} + {formatNumber(tokenInfo?.performance[index]?.value as number)}{' '} + {item.type === PerformanceItemType.FIAT && unitOfAccount} + {item.type === PerformanceItemType.TOKEN && tokenInfo?.name} + + ) : ( + '--' + )} + + )} + + ))} + + ); }; diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.tsx b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.tsx index 8422915592..3311e86c3a 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TransactionTable.tsx @@ -74,13 +74,14 @@ const TransactionTable = ({ history, tokenName }: { history: TransactionItemType > - {headCells.map(({ id, align, label }) => ( - + {headCells.map(({ id, align, label }, index) => ( + {label} ))} + @@ -124,7 +125,7 @@ const TransactionHistoryItem = ({ index, row, theme, strings, unitOfAccount, hea return ( - + ) : null} - + + setIsExpanded(!isExpanded)} + style={{ + marginTop: isExpanded ? 0 : theme.spacing(1), + cursor: 'pointer', + transition: 'all ease 0.3s', + transform: isExpanded ? 'rotate(0deg)' : 'rotate(-180deg)', + }} + /> + ); }; From 19b58f3a7ffdef55b0bde1361bdf6a1ab5e0a621 Mon Sep 17 00:00:00 2001 From: ndnghiadn Date: Wed, 19 Jun 2024 16:22:58 +0700 Subject: [PATCH 164/464] fix fiat pair unit display --- .../portfolio/common/components/PortfolioHeader.tsx | 9 +++++---- .../features/portfolio/useCases/Dapps/PortfolioDapps.tsx | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioHeader.tsx b/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioHeader.tsx index 12cca30311..2511cc4845 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioHeader.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioHeader.tsx @@ -40,11 +40,11 @@ const PortfolioHeader = ({ balance, setKeyword, isLoading, tooltipTitle }: Props ) : ( - {isAdaMainUnit ? formatNumber(balance.ada) : formatNumber(balance.usd)} + {isAdaMainUnit ? formatNumber(balance.usd) : formatNumber(balance.ada)} )} - {isAdaMainUnit ? settingFiatPairUnit.currency || 'USD' : 'ADA'} + {isAdaMainUnit ? 'ADA' : unitOfAccount} - {isAdaMainUnit ? '/ADA' : `/${unitOfAccount}`} + {isAdaMainUnit ? (settingFiatPairUnit.currency ? `/${settingFiatPairUnit.currency}` : '/USD') : '/ADA'} @@ -67,7 +67,8 @@ const PortfolioHeader = ({ balance, setKeyword, isLoading, tooltipTitle }: Props ) : ( - {isAdaMainUnit ? formatNumber(balance.usd) : formatNumber(balance.ada)} {isAdaMainUnit ? 'ADA' : unitOfAccount} + {isAdaMainUnit ? formatNumber(balance.ada) : formatNumber(balance.usd)}{' '} + {isAdaMainUnit ? settingFiatPairUnit.currency || 'USD' : 'ADA'} )} {isLoading ? ( diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.tsx b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.tsx index 173fd1b3bb..10923f3912 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/Dapps/PortfolioDapps.tsx @@ -1,4 +1,4 @@ -import { Stack, Button, Typography, Box } from '@mui/material'; +import { Stack, Typography, Box } from '@mui/material'; import React, { useEffect, useState } from 'react'; import { useTheme } from '@mui/material/styles'; import LiquidityTable from './LiquidityTable'; From f664c9b8b348c610e8f1a2b3d3e60bff77a9009a Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Wed, 19 Jun 2024 12:35:10 +0300 Subject: [PATCH 165/464] moved the fetching of the swap pools into an effect --- .../swap/asset-swap/CreateSwapOrder.js | 34 +------------------ .../context/swap-form/SwapFormProvider.js | 23 +++++++++---- 2 files changed, 18 insertions(+), 39 deletions(-) diff --git a/packages/yoroi-extension/app/containers/swap/asset-swap/CreateSwapOrder.js b/packages/yoroi-extension/app/containers/swap/asset-swap/CreateSwapOrder.js index 20f689f51b..e40ad94472 100644 --- a/packages/yoroi-extension/app/containers/swap/asset-swap/CreateSwapOrder.js +++ b/packages/yoroi-extension/app/containers/swap/asset-swap/CreateSwapOrder.js @@ -17,8 +17,6 @@ import { TopActions } from './actions/TopActions'; import { MiddleActions } from './actions/MiddleActions'; import { EditSlippage } from './actions/EditSlippage'; import { useSwapForm } from '../context/swap-form'; -import { runInAction } from 'mobx'; -import type { State } from '../context/swap-form/types'; type Props = {| slippageValue: string, @@ -29,25 +27,6 @@ type Props = {| priceImpactState: ?PriceImpact, |}; -function updatePoolsIfNeeded( - tokenA: string, - tokenB: string, - state: State, - api: {| byPair: ({| tokenA: string, tokenB: string |}) => Promise |}, - submit: T => void) { - if (tokenA != null && tokenB != null && tokenA !== tokenB) { - const pair = `${tokenA}:${tokenB}`; - if (pair !== state.value) { - runInAction(() => { - state.update(pair); - }); - api.byPair({ tokenA, tokenB }) - .then(pools => submit(pools)) - .catch(err => console.warn(`Failed to fetch pools for pair: ${pair}`, err)); - } - } -} - export const CreateSwapOrder = ({ slippageValue, onSetNewSlippage, @@ -60,19 +39,16 @@ export const CreateSwapOrder = ({ const [prevSelectedPoolId, setPrevSelectedPoolId] = useState(undefined); const { - pools, orderData: { - amounts: { sell, buy }, type: orderType, selectedPoolCalculation, }, // unsignedTxChanged, sellTokenInfoChanged, buyTokenInfoChanged, - poolPairsChanged, } = useSwap(); - const { onChangeLimitPrice, selectedPairState } = useSwapForm(); + const { onChangeLimitPrice } = useSwapForm(); const resetLimitPrice = () => { onChangeLimitPrice(''); @@ -86,14 +62,6 @@ export const CreateSwapOrder = ({ } } - updatePoolsIfNeeded( - sell.tokenId, - buy.tokenId, - selectedPairState, - pools.list, - poolPairsChanged, - ); - return ( <> { const draft = { ...state }; @@ -148,9 +150,20 @@ export default function SwapFormProvider({ swapStore, children }: Props): Node { }); } }, []); + // on unmount useEffect(() => () => actions.resetSwapForm(), []); + // on token pair changes + useEffect(() => { + if (sellTokenId != null && buyTokenId != null && sellTokenId !== buyTokenId) { + console.log('fetching pools for pair: ', sellTokenId, buyTokenId); + pools.list.byPair({ tokenA: sellTokenId, tokenB: buyTokenId }) + .then(pools => poolPairsChanged(pools)) + .catch(err => console.error(`Failed to fetch pools for pair: ${sellTokenId}/${buyTokenId}`, err)); + } + }, [sellTokenId, buyTokenId]); + const clearErrors = useCallback(() => { if (swapFormState.sellQuantity.error != null) actions.sellAmountErrorChanged(null); if (swapFormState.buyQuantity.error != null) actions.buyAmountErrorChanged(null); @@ -226,7 +239,6 @@ export default function SwapFormProvider({ swapStore, children }: Props): Node { [actions, clearErrors, orderData.tokens.priceDenomination, limitPriceChanged, numberLocale] ); - const selectedPairState = StateWrap(useState(null)); const sellFocusState = StateWrap(useState(false)); const buyFocusState = StateWrap(useState(false)); const limitPriceFocusState = StateWrap(useState(false)); @@ -278,7 +290,6 @@ export default function SwapFormProvider({ swapStore, children }: Props): Node { const allActions = { ...actions, - selectedPairState, sellFocusState, buyFocusState, limitPriceFocusState, From 0f8d3d273ec0ed4aac2dee8dba1f79d9e8e2b216 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Wed, 19 Jun 2024 13:14:12 +0300 Subject: [PATCH 166/464] token metadata batch fetching fix --- .../app/components/swap/SelectAssetDialog.js | 9 ++++++--- .../app/containers/swap/asset-swap/CreateSwapOrder.js | 6 ++++-- .../app/containers/swap/asset-swap/SwapPage.js | 5 ++++- .../asset-swap/edit-buy-amount/SelectBuyTokenFromList.js | 6 +++--- .../edit-sell-amount/SelectSellTokenFromList.js | 6 +++--- .../swap/context/swap-form/SwapFormProvider.js | 2 +- .../app/stores/toplevel/TokenInfoStore.js | 8 ++++++++ 7 files changed, 29 insertions(+), 13 deletions(-) diff --git a/packages/yoroi-extension/app/components/swap/SelectAssetDialog.js b/packages/yoroi-extension/app/components/swap/SelectAssetDialog.js index 5154a897c2..fa1ab44637 100644 --- a/packages/yoroi-extension/app/components/swap/SelectAssetDialog.js +++ b/packages/yoroi-extension/app/components/swap/SelectAssetDialog.js @@ -28,7 +28,7 @@ type Props = {| onAssetSelected: any => void, onClose: void => void, defaultTokenInfo: RemoteTokenInfo, - getTokenInfo: string => Promise, + getTokenInfoBatch: Array => { [string]: Promise }, |}; export default function SelectAssetDialog({ @@ -37,7 +37,7 @@ export default function SelectAssetDialog({ onAssetSelected, onClose, defaultTokenInfo, - getTokenInfo, + getTokenInfoBatch, }: Props): React$Node { const [searchTerm, setSearchTerm] = useState(''); @@ -55,6 +55,9 @@ export default function SelectAssetDialog({ .includes(searchTerm.toLowerCase()); }) || []; + const metadataPromiseMap: { [string]: Promise } = + getTokenInfoBatch(filteredAssets.map(a => a.id)) + return ( metadataPromiseMap[id]} /> ); })} diff --git a/packages/yoroi-extension/app/containers/swap/asset-swap/CreateSwapOrder.js b/packages/yoroi-extension/app/containers/swap/asset-swap/CreateSwapOrder.js index e40ad94472..f675e981fc 100644 --- a/packages/yoroi-extension/app/containers/swap/asset-swap/CreateSwapOrder.js +++ b/packages/yoroi-extension/app/containers/swap/asset-swap/CreateSwapOrder.js @@ -24,6 +24,7 @@ type Props = {| swapStore: SwapStore, defaultTokenInfo: RemoteTokenInfo, getTokenInfo: string => Promise, + getTokenInfoBatch: Array => { [string]: Promise }, priceImpactState: ?PriceImpact, |}; @@ -33,6 +34,7 @@ export const CreateSwapOrder = ({ swapStore, defaultTokenInfo, getTokenInfo, + getTokenInfoBatch, priceImpactState, }: Props): React$Node => { const [openedDialog, setOpenedDialog] = useState(''); @@ -119,7 +121,7 @@ export const CreateSwapOrder = ({ sellTokenInfoChanged(val); }} defaultTokenInfo={defaultTokenInfo} - getTokenInfo={getTokenInfo} + getTokenInfoBatch={getTokenInfoBatch} /> )} {openedDialog === 'to' && ( @@ -131,7 +133,7 @@ export const CreateSwapOrder = ({ buyTokenInfoChanged(val); }} defaultTokenInfo={defaultTokenInfo} - getTokenInfo={getTokenInfo} + getTokenInfoBatch={getTokenInfoBatch} /> )} {openedDialog === 'slippage' && ( diff --git a/packages/yoroi-extension/app/containers/swap/asset-swap/SwapPage.js b/packages/yoroi-extension/app/containers/swap/asset-swap/SwapPage.js index cecf998770..5249a67914 100644 --- a/packages/yoroi-extension/app/containers/swap/asset-swap/SwapPage.js +++ b/packages/yoroi-extension/app/containers/swap/asset-swap/SwapPage.js @@ -88,8 +88,10 @@ function SwapPage(props: StoresAndActionsProps): Node { const defaultTokenInfo = props.stores.tokenInfoStore.getDefaultTokenInfoSummary( network.NetworkId ); + const getTokenInfoBatch: Array => { [string]: Promise } = ids => + props.stores.tokenInfoStore.fetchMissingAndGetLocalOrRemoteMetadata(network, ids); const getTokenInfo: string => Promise = id => - props.stores.tokenInfoStore.getLocalOrRemoteMetadata(network, id); + getTokenInfoBatch([id])[id].then(res => res ?? {}); const disclaimerFlag = props.stores.substores.ada.swapStore.swapDisclaimerAcceptanceFlag; @@ -323,6 +325,7 @@ function SwapPage(props: StoresAndActionsProps): Node { onSetNewSlippage={onSetNewSlippage} defaultTokenInfo={defaultTokenInfo} getTokenInfo={getTokenInfo} + getTokenInfoBatch={getTokenInfoBatch} priceImpactState={priceImpactState} /> )} diff --git a/packages/yoroi-extension/app/containers/swap/asset-swap/edit-buy-amount/SelectBuyTokenFromList.js b/packages/yoroi-extension/app/containers/swap/asset-swap/edit-buy-amount/SelectBuyTokenFromList.js index aad847d842..0efba0d0b7 100644 --- a/packages/yoroi-extension/app/containers/swap/asset-swap/edit-buy-amount/SelectBuyTokenFromList.js +++ b/packages/yoroi-extension/app/containers/swap/asset-swap/edit-buy-amount/SelectBuyTokenFromList.js @@ -12,10 +12,10 @@ type Props = {| onClose(): void, onTokenInfoChanged: * => void, defaultTokenInfo: RemoteTokenInfo, - getTokenInfo: string => Promise, + getTokenInfoBatch: Array => { [string]: Promise }, |}; -export default function SelectBuyTokenFromList({ store, onClose, onTokenInfoChanged, defaultTokenInfo, getTokenInfo }: Props): Node { +export default function SelectBuyTokenFromList({ store, onClose, onTokenInfoChanged, defaultTokenInfo, getTokenInfoBatch }: Props): Node { const { sellQuantity: { isTouched: isSellTouched }, buyQuantity: { isTouched: isBuyTouched }, @@ -67,7 +67,7 @@ export default function SelectBuyTokenFromList({ store, onClose, onTokenInfoChan onAssetSelected={handleAssetSelected} onClose={onClose} defaultTokenInfo={defaultTokenInfo} - getTokenInfo={getTokenInfo} + getTokenInfoBatch={getTokenInfoBatch} /> ); } diff --git a/packages/yoroi-extension/app/containers/swap/asset-swap/edit-sell-amount/SelectSellTokenFromList.js b/packages/yoroi-extension/app/containers/swap/asset-swap/edit-sell-amount/SelectSellTokenFromList.js index 2a6cc0fc00..770000ae23 100644 --- a/packages/yoroi-extension/app/containers/swap/asset-swap/edit-sell-amount/SelectSellTokenFromList.js +++ b/packages/yoroi-extension/app/containers/swap/asset-swap/edit-sell-amount/SelectSellTokenFromList.js @@ -12,10 +12,10 @@ type Props = {| onClose(): void, onTokenInfoChanged: * => void, defaultTokenInfo: RemoteTokenInfo, - getTokenInfo: string => Promise, + getTokenInfoBatch: Array => { [string]: Promise }, |}; -export default function SelectSellTokenFromList({ store, onClose, onTokenInfoChanged, defaultTokenInfo, getTokenInfo }: Props): Node { +export default function SelectSellTokenFromList({ store, onClose, onTokenInfoChanged, defaultTokenInfo, getTokenInfoBatch }: Props): Node { const { onlyVerifiedTokens } = useSwapTokensOnlyVerified(); const assets = store.assets; const walletVerifiedAssets = useMemo(() => { @@ -62,7 +62,7 @@ export default function SelectSellTokenFromList({ store, onClose, onTokenInfoCha onAssetSelected={handleAssetSelected} onClose={onClose} defaultTokenInfo={defaultTokenInfo} - getTokenInfo={getTokenInfo} + getTokenInfoBatch={getTokenInfoBatch} /> ); } diff --git a/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js b/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js index 7055241bfa..c65e3854c7 100644 --- a/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js +++ b/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js @@ -159,7 +159,7 @@ export default function SwapFormProvider({ swapStore, children }: Props): Node { if (sellTokenId != null && buyTokenId != null && sellTokenId !== buyTokenId) { console.log('fetching pools for pair: ', sellTokenId, buyTokenId); pools.list.byPair({ tokenA: sellTokenId, tokenB: buyTokenId }) - .then(pools => poolPairsChanged(pools)) + .then(poolsArray => poolPairsChanged(poolsArray)) .catch(err => console.error(`Failed to fetch pools for pair: ${sellTokenId}/${buyTokenId}`, err)); } }, [sellTokenId, buyTokenId]); diff --git a/packages/yoroi-extension/app/stores/toplevel/TokenInfoStore.js b/packages/yoroi-extension/app/stores/toplevel/TokenInfoStore.js index d560054b3e..8e1cb7f7f3 100644 --- a/packages/yoroi-extension/app/stores/toplevel/TokenInfoStore.js +++ b/packages/yoroi-extension/app/stores/toplevel/TokenInfoStore.js @@ -84,6 +84,14 @@ export default class TokenInfoStore< return { name: undefined, ticker: undefined, decimals: undefined, logo: undefined }; } + fetchMissingAndGetLocalOrRemoteMetadata(network: $ReadOnly, tokenIds: Array): { [string]: Promise } { + const fetchPromise = this.fetchMissingTokenInfo(network.NetworkId, tokenIds); + return tokenIds.reduce((res, id) => { + res[id] = fetchPromise.then(() => this.getLocalOrRemoteMetadata(network, id)); + return res; + }, {}); + } + fetchMissingTokenInfo: (networkId: number, tokenIds: Array) => Promise = async ( networkId, tokenIds From d65e1ed4f56fda1f6ca0d188a56754112942cc59 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Wed, 19 Jun 2024 13:59:04 +0300 Subject: [PATCH 167/464] lint fix --- .../app/containers/swap/context/swap-form/SwapFormProvider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js b/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js index 7055241bfa..c65e3854c7 100644 --- a/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js +++ b/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js @@ -159,7 +159,7 @@ export default function SwapFormProvider({ swapStore, children }: Props): Node { if (sellTokenId != null && buyTokenId != null && sellTokenId !== buyTokenId) { console.log('fetching pools for pair: ', sellTokenId, buyTokenId); pools.list.byPair({ tokenA: sellTokenId, tokenB: buyTokenId }) - .then(pools => poolPairsChanged(pools)) + .then(poolsArray => poolPairsChanged(poolsArray)) .catch(err => console.error(`Failed to fetch pools for pair: ${sellTokenId}/${buyTokenId}`, err)); } }, [sellTokenId, buyTokenId]); From 0aedc4172719e39e45757cbcbae0d12243d7eb03 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Wed, 19 Jun 2024 14:18:17 +0300 Subject: [PATCH 168/464] removed console log --- .../app/containers/swap/context/swap-form/SwapFormProvider.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js b/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js index c65e3854c7..716491085a 100644 --- a/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js +++ b/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js @@ -157,7 +157,6 @@ export default function SwapFormProvider({ swapStore, children }: Props): Node { // on token pair changes useEffect(() => { if (sellTokenId != null && buyTokenId != null && sellTokenId !== buyTokenId) { - console.log('fetching pools for pair: ', sellTokenId, buyTokenId); pools.list.byPair({ tokenA: sellTokenId, tokenB: buyTokenId }) .then(poolsArray => poolPairsChanged(poolsArray)) .catch(err => console.error(`Failed to fetch pools for pair: ${sellTokenId}/${buyTokenId}`, err)); From 68deef03451177cda3c86cdd035a656a0d2c1a89 Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Wed, 19 Jun 2024 14:25:58 +0100 Subject: [PATCH 169/464] New translations en-us.json (Hungarian) --- packages/yoroi-extension/app/i18n/locales/hu-HU.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/yoroi-extension/app/i18n/locales/hu-HU.json b/packages/yoroi-extension/app/i18n/locales/hu-HU.json index d64a32da61..2ccb0ce494 100644 --- a/packages/yoroi-extension/app/i18n/locales/hu-HU.json +++ b/packages/yoroi-extension/app/i18n/locales/hu-HU.json @@ -50,8 +50,11 @@ "buysell.dialog.currentBalance": "Current balance: {amount} ADA", "buysell.dialog.disclaimer": "Disclaimer", "buysell.dialog.disclaimerText": "Yoroi Wallet utilizes third-party web3 on-and-off ramp solutions for direct Fiat-ADA exchanges. By clicking \"Proceed,\" you acknowledge that you will be redirected to our partner's website, where you may need to accept their terms and conditions. Please note, the third party web3 solution may have limitations based on your location and financial institution.", + "buysell.dialog.error.dialog.title": "url generation", "buysell.dialog.error.minimum": "Minimum {amount} ADA required", "buysell.dialog.error.not.enough": "Not enough balance", + "buysell.dialog.fail.text": "This service is currently unavailable. Please try again later.", + "buysell.dialog.longloading.text": "We are redirecting you outside Yoroi. Please wait.", "buysell.dialog.proceed": "PROCEED", "buysell.dialog.provider": "Provider", "buysell.dialog.providerFee": "Provider fee", @@ -949,6 +952,8 @@ "wallet.transaction.type.stakeKeyRegistered": "Staking key registered", "wallet.transaction.withdraw": "Withdraw", "wallet.transaction.withdrawalsLabel": "Withdrawals", + "wallet.transactions.success.button.exchange": "Go to the exchange page", + "wallet.transactions.success.sell": "Transaction has been submitted", "wallet.transfer.deregister.deregister": "Deregister", "wallet.transfer.deregister.keep": "Keep registered", "wallet.transfer.deregister.line1": "When withdrawing rewards, you also have the option to deregister the staking key", From 91017f1f7ed518e71dc6f3ac7fb4b38619a1b446 Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Wed, 19 Jun 2024 14:25:59 +0100 Subject: [PATCH 170/464] New translations en-us.json (Vietnamese) --- packages/yoroi-extension/app/i18n/locales/vi-VN.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/yoroi-extension/app/i18n/locales/vi-VN.json b/packages/yoroi-extension/app/i18n/locales/vi-VN.json index 97176e5b74..c7e0fdb300 100644 --- a/packages/yoroi-extension/app/i18n/locales/vi-VN.json +++ b/packages/yoroi-extension/app/i18n/locales/vi-VN.json @@ -50,8 +50,11 @@ "buysell.dialog.currentBalance": "Current balance: {amount} ADA", "buysell.dialog.disclaimer": "Disclaimer", "buysell.dialog.disclaimerText": "Yoroi Wallet utilizes third-party web3 on-and-off ramp solutions for direct Fiat-ADA exchanges. By clicking \"Proceed,\" you acknowledge that you will be redirected to our partner's website, where you may need to accept their terms and conditions. Please note, the third party web3 solution may have limitations based on your location and financial institution.", + "buysell.dialog.error.dialog.title": "url generation", "buysell.dialog.error.minimum": "Minimum {amount} ADA required", "buysell.dialog.error.not.enough": "Not enough balance", + "buysell.dialog.fail.text": "This service is currently unavailable. Please try again later.", + "buysell.dialog.longloading.text": "We are redirecting you outside Yoroi. Please wait.", "buysell.dialog.proceed": "PROCEED", "buysell.dialog.provider": "Provider", "buysell.dialog.providerFee": "Provider fee", @@ -949,6 +952,8 @@ "wallet.transaction.type.stakeKeyRegistered": "Đăng ký khóa đặt cược", "wallet.transaction.withdraw": "Rút", "wallet.transaction.withdrawalsLabel": "Rút", + "wallet.transactions.success.button.exchange": "Go to the exchange page", + "wallet.transactions.success.sell": "Transaction has been submitted", "wallet.transfer.deregister.deregister": "Hủy đăng ký", "wallet.transfer.deregister.keep": "Giữ đăng ký", "wallet.transfer.deregister.line1": "Khi rút phần thưởng, bạn cũng có tùy chọn hủy đăng ký đặt cược", From cbaeea8d46a6c26281ea544aa11ef0ba1542be9a Mon Sep 17 00:00:00 2001 From: hoangdevnull Date: Thu, 20 Jun 2024 14:24:28 +0700 Subject: [PATCH 171/464] feat: perfect pixel some ui components --- .../portfolio/common/components/PortfolioHeader.tsx | 4 ++-- .../portfolio/useCases/TokenDetails/TokenDetailChart.tsx | 8 ++++++-- .../portfolio/useCases/TokenDetails/TokenDetails.tsx | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioHeader.tsx b/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioHeader.tsx index 2511cc4845..990f461f9f 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioHeader.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/common/components/PortfolioHeader.tsx @@ -1,5 +1,5 @@ import React, { useState } from 'react'; -import { Stack, Typography } from '@mui/material'; +import { Box, Stack, Typography } from '@mui/material'; import { useTheme } from '@mui/material/styles'; import { useStrings } from '../hooks/useStrings'; import { usePortfolio } from '../../module/PortfolioContextProvider'; @@ -77,7 +77,7 @@ const PortfolioHeader = ({ balance, setKeyword, isLoading, tooltipTitle }: Props ) : ( - + {tooltipTitle}} placement="right"> 0 ? ChipTypes.ACTIVE : balance.percents < 0 ? ChipTypes.INACTIVE : ChipTypes.DISABLED} diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.tsx b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.tsx index a9af9d190d..fd6ffae2bd 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetailChart.tsx @@ -37,7 +37,7 @@ interface Props { } const TokenDetailChart = ({ isLoading, tokenInfo, isAda }: Props): JSX.Element => { - const chartHeight = isAda ? 152 : 254; + const chartHeight = isAda ? 153 : 257; const theme: any = useTheme(); const strings = useStrings(); const { unitOfAccount } = usePortfolio(); @@ -76,7 +76,11 @@ const TokenDetailChart = ({ isLoading, tokenInfo, isAda }: Props): JSX.Element = }; return ( - + {isFetching ? ( diff --git a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.tsx b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.tsx index 0fa24fb66b..b773a6773e 100644 --- a/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.tsx +++ b/packages/yoroi-extension/app/UI/features/portfolio/useCases/TokenDetails/TokenDetails.tsx @@ -150,7 +150,7 @@ const TokenDetails = ({ tokenInfo }: Props): JSX.Element => { setSelectedTab(route)} isActiveItem={isActiveItem} /> - + {selectedTab === subMenuOptions[0]?.route ? ( From 814bc1dba69651dbabe2f3059347f2e05e1a5d78 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Thu, 20 Jun 2024 18:41:09 +0300 Subject: [PATCH 172/464] removed state-updating logic from component render. Moved it to be an effect --- .../swap/asset-swap/CreateSwapOrder.js | 19 ++----------------- .../context/swap-form/SwapFormProvider.js | 18 +++++++++++------- 2 files changed, 13 insertions(+), 24 deletions(-) diff --git a/packages/yoroi-extension/app/containers/swap/asset-swap/CreateSwapOrder.js b/packages/yoroi-extension/app/containers/swap/asset-swap/CreateSwapOrder.js index f675e981fc..a7e1af3996 100644 --- a/packages/yoroi-extension/app/containers/swap/asset-swap/CreateSwapOrder.js +++ b/packages/yoroi-extension/app/containers/swap/asset-swap/CreateSwapOrder.js @@ -38,32 +38,17 @@ export const CreateSwapOrder = ({ priceImpactState, }: Props): React$Node => { const [openedDialog, setOpenedDialog] = useState(''); - const [prevSelectedPoolId, setPrevSelectedPoolId] = useState(undefined); const { orderData: { type: orderType, - selectedPoolCalculation, }, - // unsignedTxChanged, sellTokenInfoChanged, buyTokenInfoChanged, } = useSwap(); const { onChangeLimitPrice } = useSwapForm(); - const resetLimitPrice = () => { - onChangeLimitPrice(''); - }; - - if (orderType === 'market') { - const selectedPoolId = selectedPoolCalculation?.pool.poolId; - if (selectedPoolId !== prevSelectedPoolId) { - setPrevSelectedPoolId(selectedPoolId); - resetLimitPrice(); - } - } - return ( <> setOpenedDialog('')} onTokenInfoChanged={val => { - resetLimitPrice(); + onChangeLimitPrice(); sellTokenInfoChanged(val); }} defaultTokenInfo={defaultTokenInfo} @@ -129,7 +114,7 @@ export const CreateSwapOrder = ({ store={swapStore} onClose={() => setOpenedDialog('')} onTokenInfoChanged={val => { - resetLimitPrice(); + onChangeLimitPrice(); buyTokenInfoChanged(val); }} defaultTokenInfo={defaultTokenInfo} diff --git a/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js b/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js index 716491085a..03f57e2ee7 100644 --- a/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js +++ b/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js @@ -10,6 +10,7 @@ import { Quantities } from '../../../../utils/quantities'; import SwapStore from '../../../../stores/ada/SwapStore'; import { defaultSwapFormState } from './DefaultSwapFormState'; import { PRICE_PRECISION } from '../../../../components/swap/common'; +import { runInAction } from 'mobx'; // const PRECISION = 14; type Props = {| @@ -208,10 +209,6 @@ export default function SwapFormProvider({ swapStore, children }: Props): Node { actions.buyInputValueChanged(input); }; - const limitPriceUpdateHandler = ({ input }) => { - actions.limitPriceInputValueChanged(input); - }; - const onChangeSellQuantity = useCallback( baseSwapFieldChangeHandler(swapFormState.sellTokenInfo, sellUpdateHandler), [sellQuantityChanged, actions, clearErrors] @@ -223,7 +220,7 @@ export default function SwapFormProvider({ swapStore, children }: Props): Node { ); const onChangeLimitPrice = useCallback( - text => { + (text = '') => { const [formattedPrice, price] = Quantities.parseFromText( text, orderData.tokens.priceDenomination, @@ -238,6 +235,13 @@ export default function SwapFormProvider({ swapStore, children }: Props): Node { [actions, clearErrors, orderData.tokens.priceDenomination, limitPriceChanged, numberLocale] ); + // on selected best pool changes + useEffect(() => { + if (orderData.type === 'market') { + onChangeLimitPrice(); + } + }, [orderData.selectedPoolCalculation?.pool.poolId]); + const sellFocusState = StateWrap(useState(false)); const buyFocusState = StateWrap(useState(false)); const limitPriceFocusState = StateWrap(useState(false)); @@ -266,7 +270,7 @@ export default function SwapFormProvider({ swapStore, children }: Props): Node { PRICE_PRECISION ); - limitPriceUpdateHandler({ input: formatted }); + actions.limitPriceInputValueChanged(formatted); } else if (orderData.type === 'market') { const formatted = Quantities.format( orderData.selectedPoolCalculation?.prices.market ?? Quantities.zero, @@ -274,7 +278,7 @@ export default function SwapFormProvider({ swapStore, children }: Props): Node { PRICE_PRECISION ); - limitPriceUpdateHandler({ input: formatted }); + actions.limitPriceInputValueChanged(formatted); } }, [ orderData.tokens.priceDenomination, From 460d46b291b64b985eddf75c14ae154514b4d188 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Thu, 20 Jun 2024 18:56:25 +0300 Subject: [PATCH 173/464] lint fix --- .../app/containers/swap/context/swap-form/SwapFormProvider.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js b/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js index 03f57e2ee7..73541f3dbb 100644 --- a/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js +++ b/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js @@ -10,7 +10,6 @@ import { Quantities } from '../../../../utils/quantities'; import SwapStore from '../../../../stores/ada/SwapStore'; import { defaultSwapFormState } from './DefaultSwapFormState'; import { PRICE_PRECISION } from '../../../../components/swap/common'; -import { runInAction } from 'mobx'; // const PRECISION = 14; type Props = {| From 897b60530ec253cb7fc21069de611b9481a808f3 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Fri, 21 Jun 2024 14:05:49 +0300 Subject: [PATCH 174/464] removed corsproxy usage in swap --- .../yoroi-extension/app/components/swap/SelectAssetDialog.js | 5 ++--- packages/yoroi-extension/app/components/swap/SwapInput.js | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/packages/yoroi-extension/app/components/swap/SelectAssetDialog.js b/packages/yoroi-extension/app/components/swap/SelectAssetDialog.js index fa1ab44637..cdd531fc4f 100644 --- a/packages/yoroi-extension/app/components/swap/SelectAssetDialog.js +++ b/packages/yoroi-extension/app/components/swap/SelectAssetDialog.js @@ -12,7 +12,6 @@ import adaTokenImage from '../../assets/images/ada.inline.svg'; import defaultTokenImage from '../../assets/images/revamp/asset-default.inline.svg'; import Dialog from '../widgets/Dialog'; import Table from '../common/table/Table'; -import { urlResolveForIpfsAndCorsproxy } from '../../coreUtils'; import type { RemoteTokenInfo } from '../../api/ada/lib/state-fetch/types'; import { PriceImpactColored, PriceImpactIcon } from './PriceImpact'; import { InfoTooltip } from '../widgets/InfoTooltip'; @@ -190,7 +189,7 @@ export const AssetAndAmountRow = ({ const isFrom = type === 'from'; - const { name = null, image = '', fingerprint: address, id, amount: assetAmount, ticker } = asset; + const { name = null, fingerprint: address, id, amount: assetAmount, ticker } = asset; const priceNotChanged = Number(priceChange100.replace('-', '').replace('%', '')) === 0; const priceIncreased = priceChange100 && priceChange100.charAt(0) !== '-'; const priceChange24h = priceChange100.replace('-', '') || '0%'; @@ -211,7 +210,7 @@ export const AssetAndAmountRow = ({ const imgSrc = ticker === defaultTokenInfo.ticker ? adaTokenImage - : remoteTokenLogo ?? urlResolveForIpfsAndCorsproxy(image) ?? defaultTokenImage; + : remoteTokenLogo ?? defaultTokenImage; const amount = displayAmount ?? assetAmount; diff --git a/packages/yoroi-extension/app/components/swap/SwapInput.js b/packages/yoroi-extension/app/components/swap/SwapInput.js index 8c946a5708..ee6552c62c 100644 --- a/packages/yoroi-extension/app/components/swap/SwapInput.js +++ b/packages/yoroi-extension/app/components/swap/SwapInput.js @@ -5,7 +5,6 @@ import { Box, Typography } from '@mui/material'; import { ReactComponent as ChevronDownIcon } from '../../assets/images/revamp/icons/chevron-down.inline.svg'; import adaTokenImage from '../../assets/images/ada.inline.svg'; import defaultTokenImage from '../../assets/images/revamp/token-default.inline.svg'; -import { urlResolveForIpfsAndCorsproxy } from '../../coreUtils'; import type { RemoteTokenInfo } from '../../api/ada/lib/state-fetch/types'; import type { State } from '../../containers/swap/context/swap-form/types'; import { useEffect, useState } from 'react'; @@ -38,7 +37,7 @@ export default function SwapInput({ focusState, }: Props): Node { const [remoteTokenLogo, setRemoteTokenLogo] = useState(null); - const { id, amount: quantity = undefined, image, ticker } = tokenInfo || {}; + const { id, amount: quantity = undefined, ticker } = tokenInfo || {}; const handleChange = e => { if (!disabled && value !== quantity) { @@ -66,7 +65,7 @@ export default function SwapInput({ const imgSrc = ticker === defaultTokenInfo.ticker ? adaTokenImage - : remoteTokenLogo ?? urlResolveForIpfsAndCorsproxy(image) ?? defaultTokenImage; + : remoteTokenLogo ?? defaultTokenImage; return ( From 7b68494d76a17244f4e83e032debd3d04c01f9fd Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Fri, 21 Jun 2024 14:18:01 +0300 Subject: [PATCH 175/464] fixed logger --- packages/yoroi-extension/app/api/common/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/api/common/index.js b/packages/yoroi-extension/app/api/common/index.js index 632966c652..5d5e7b363d 100644 --- a/packages/yoroi-extension/app/api/common/index.js +++ b/packages/yoroi-extension/app/api/common/index.js @@ -241,7 +241,7 @@ export default class CommonApi { try { const newAddress = await request.popFunc(); - Logger.info(`${nameof(CommonApi)}::${nameof(this.createAddress)} success: ` + stringifyData(newAddress)); + Logger.debug(`${nameof(CommonApi)}::${nameof(this.createAddress)} success: ` + stringifyData(newAddress)); return newAddress; } catch (error) { Logger.error(`${nameof(CommonApi)}::${nameof(this.createAddress)} error: ` + stringifyError(error)); From b23948454b90b619acdda5004a37b270ecce1a7d Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Fri, 21 Jun 2024 15:47:24 +0300 Subject: [PATCH 176/464] swap form provider fixes --- .../context/swap-form/SwapFormProvider.js | 87 +++++++++---------- 1 file changed, 39 insertions(+), 48 deletions(-) diff --git a/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js b/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js index 73541f3dbb..fe3c5275ce 100644 --- a/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js +++ b/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js @@ -35,6 +35,7 @@ export default function SwapFormProvider({ swapStore, children }: Props): Node { const { quantity: sellQuantity, tokenId: sellTokenId } = orderData.amounts.sell; const { quantity: buyQuantity, tokenId: buyTokenId } = orderData.amounts.buy; + const { priceDenomination } = orderData.tokens; const swapFormReducer = (state: SwapFormState, action: SwapFormAction) => { const draft = { ...state }; @@ -171,13 +172,14 @@ export default function SwapFormProvider({ swapStore, children }: Props): Node { const baseSwapFieldChangeHandler = ( tokenInfo: any, handler: ({| input: string, quantity: string |}) => void - ) => (text: string) => { + ) => (text: string = '') => { if (tokenInfo.tokenId === '') { // empty input return; } const decimals = tokenInfo.decimals ?? 0; - const [input, quantity] = Quantities.parseFromText(text, decimals, numberLocale); + const precision = tokenInfo.precision ?? decimals; + const [input, quantity] = Quantities.parseFromText(text, decimals, numberLocale, precision); clearErrors(); handler({ quantity, input: text === '' ? '' : input }); }; @@ -193,7 +195,7 @@ export default function SwapFormProvider({ swapStore, children }: Props): Node { const [, availableQuantity] = Quantities.parseFromText( sellAvailableAmount, decimals, - numberLocale + numberLocale, ); if (Quantities.isGreaterThan(quantity, availableQuantity)) { actions.sellAmountErrorChanged('Not enough balance'); @@ -208,6 +210,13 @@ export default function SwapFormProvider({ swapStore, children }: Props): Node { actions.buyInputValueChanged(input); }; + const limitUpdateHandler = ({ input, quantity }) => { + if (quantity !== orderData.limitPrice) { + limitPriceChanged(quantity); + } + actions.limitPriceInputValueChanged(input); + }; + const onChangeSellQuantity = useCallback( baseSwapFieldChangeHandler(swapFormState.sellTokenInfo, sellUpdateHandler), [sellQuantityChanged, actions, clearErrors] @@ -219,33 +228,21 @@ export default function SwapFormProvider({ swapStore, children }: Props): Node { ); const onChangeLimitPrice = useCallback( - (text = '') => { - const [formattedPrice, price] = Quantities.parseFromText( - text, - orderData.tokens.priceDenomination, - numberLocale, - PRICE_PRECISION - ); - actions.limitPriceInputValueChanged(formattedPrice); - limitPriceChanged(price); - - clearErrors(); - }, - [actions, clearErrors, orderData.tokens.priceDenomination, limitPriceChanged, numberLocale] + baseSwapFieldChangeHandler( + { tokenId: 'priceDenomination', decimals: priceDenomination, precision: PRICE_PRECISION }, + limitUpdateHandler, + ), + [limitPriceChanged, actions, clearErrors, priceDenomination] ); - // on selected best pool changes - useEffect(() => { - if (orderData.type === 'market') { - onChangeLimitPrice(); - } - }, [orderData.selectedPoolCalculation?.pool.poolId]); - const sellFocusState = StateWrap(useState(false)); const buyFocusState = StateWrap(useState(false)); const limitPriceFocusState = StateWrap(useState(false)); - const updateSellInput = useCallback(() => { + /** + * On sell quantity changes + */ + useEffect(() => { if (swapFormState.sellQuantity.isTouched && !sellFocusState.value) { const decimals = swapFormState.sellTokenInfo.decimals ?? 0; const formatted = Quantities.format(sellQuantity, decimals); @@ -253,7 +250,10 @@ export default function SwapFormProvider({ swapStore, children }: Props): Node { } }, [sellQuantity, swapFormState.sellTokenInfo.decimals, swapFormState.sellQuantity.isTouched]); - const updateBuyInput = useCallback(() => { + /** + * On buy quantity changes + */ + useEffect(() => { if (swapFormState.buyQuantity.isTouched && !buyFocusState.value) { const decimals = swapFormState.buyTokenInfo.decimals ?? 0; const formatted = Quantities.format(buyQuantity, decimals); @@ -261,35 +261,26 @@ export default function SwapFormProvider({ swapStore, children }: Props): Node { } }, [buyQuantity, swapFormState.buyTokenInfo.decimals, swapFormState.buyQuantity.isTouched]); - const updateLimitPrice = useCallback(() => { - if (orderData.type === 'limit' && !limitPriceFocusState.value) { - const formatted = Quantities.format( - orderData.limitPrice ?? Quantities.zero, - orderData.tokens.priceDenomination, - PRICE_PRECISION - ); - - actions.limitPriceInputValueChanged(formatted); - } else if (orderData.type === 'market') { - const formatted = Quantities.format( - orderData.selectedPoolCalculation?.prices.market ?? Quantities.zero, - orderData.tokens.priceDenomination, - PRICE_PRECISION - ); - - actions.limitPriceInputValueChanged(formatted); - } + /** + * Limit price updater + */ + useEffect(() => { + const isLimit = orderData.type === 'limit'; + if (isLimit && limitPriceFocusState.value) return; + const quantity = (isLimit ? orderData.limitPrice : orderData.selectedPoolCalculation?.prices.market) ?? Quantities.zero; + actions.limitPriceInputValueChanged(Quantities.format( + quantity, + priceDenomination, + PRICE_PRECISION + )); }, [ - orderData.tokens.priceDenomination, + priceDenomination, orderData.limitPrice, orderData.selectedPoolCalculation?.prices.market, + orderData.selectedPoolCalculation?.pool.poolId, orderData.type, ]); - useEffect(updateSellInput, [updateSellInput]); - useEffect(updateBuyInput, [updateBuyInput]); - useEffect(updateLimitPrice, [updateLimitPrice]); - const allActions = { ...actions, sellFocusState, From 1024de3b28fe885403e6391d7c2851b470bc60ad Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Fri, 21 Jun 2024 15:57:43 +0300 Subject: [PATCH 177/464] swap form provider fixes --- .../containers/swap/context/swap-form/SwapFormProvider.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js b/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js index fe3c5275ce..2d09f15de1 100644 --- a/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js +++ b/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js @@ -268,11 +268,8 @@ export default function SwapFormProvider({ swapStore, children }: Props): Node { const isLimit = orderData.type === 'limit'; if (isLimit && limitPriceFocusState.value) return; const quantity = (isLimit ? orderData.limitPrice : orderData.selectedPoolCalculation?.prices.market) ?? Quantities.zero; - actions.limitPriceInputValueChanged(Quantities.format( - quantity, - priceDenomination, - PRICE_PRECISION - )); + const formatted = Quantities.format(quantity, priceDenomination, PRICE_PRECISION); + limitUpdateHandler({ input: formatted, quantity: orderData.limitPrice }); }, [ priceDenomination, orderData.limitPrice, From b4c2d1f7e8aeaa931a14d69177abac11e81d0f77 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Fri, 21 Jun 2024 19:22:31 +0300 Subject: [PATCH 178/464] trying to come up with a better hook for orders --- .../app/containers/swap/hooks.js | 68 +++++++++++++++++++ .../app/containers/swap/orders/OrdersPage.js | 13 ++-- 2 files changed, 76 insertions(+), 5 deletions(-) diff --git a/packages/yoroi-extension/app/containers/swap/hooks.js b/packages/yoroi-extension/app/containers/swap/hooks.js index 2a6c4d8df6..eec179f22d 100644 --- a/packages/yoroi-extension/app/containers/swap/hooks.js +++ b/packages/yoroi-extension/app/containers/swap/hooks.js @@ -8,6 +8,7 @@ import { import { Quantities } from '../../utils/quantities'; import { useSwapForm } from './context/swap-form'; import type { RemoteTokenInfo } from '../../api/ada/lib/state-fetch/types'; +import { useQuery } from 'react-query'; export function useSwapFeeDisplay( defaultTokenInfo: RemoteTokenInfo @@ -141,3 +142,70 @@ export function useRichCompletedOrders(): any { return []; } } + +export function useRichOrders(): {| openOrders: Array, completedOrders: Array |} { + const {order, tokens, stakingKey} = useSwap() + + const verifiedTokensMapQuery = useQuery({ + suspense: true, + queryKey: ['useSwapTokensOnlyVerified'], + queryFn: () => tokens.list.onlyVerified() + .then(tokens => tokens.reduce((map, t) => ({ ...map, [t.id]: t }), {})) + .catch(e => { + console.error('Failed to load verified tokens!', e); + throw e; + }), + }); + + const openOrdersQuery = useQuery({ + suspense: true, + queryKey: ['useSwapOrdersByStatusOpen', stakingKey], + queryFn: () => order.list.byStatusOpen().catch(e => { + console.error('Failed to load open orders!', e); + throw e; + }), + }); + + const completedOrdersQuery = useQuery({ + suspense: true, + queryKey: ['useSwapOrdersByStatusCompleted', stakingKey], + queryFn: () => order.list.byStatusCompleted().catch(e => { + console.error('Failed to load completed orders!', e); + throw e; + }), + }); + + let openOrders = []; + let completedOrders = []; + const tokensMap = verifiedTokensMapQuery.data; + if (tokensMap && openOrdersQuery.data) { + console.log('recalc open orders'); + openOrders = openOrdersQuery.data.map(o => { + const fromToken = tokensMap[o.from.tokenId]; + const toToken = tokensMap[o.to.tokenId]; + return { + utxo: o.utxo, + from: { quantity: o.from.quantity, token: fromToken }, + to: { quantity: o.to.quantity, token: toToken }, + batcherFee: o.batcherFee, + valueAttached: o.valueAttached, + deposit: o.deposit, + provider: o.provider, + sender: o.sender, + }; + }); + } + if (tokensMap && completedOrdersQuery.data) { + console.log('recalc completed orders'); + completedOrders = completedOrdersQuery.data.map(o => { + const fromToken = tokensMap[o.from.tokenId]; + const toToken = tokensMap[o.to.tokenId]; + return { + txHash: o.txHash, + from: { quantity: o.from.quantity, token: fromToken }, + to: { quantity: o.to.quantity, token: toToken }, + }; + }); + } + return { openOrders, completedOrders }; +} diff --git a/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js b/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js index 388a1a96d2..5377f4530d 100644 --- a/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js +++ b/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js @@ -6,7 +6,7 @@ import Table from '../../../components/common/table/Table'; import CancelSwapOrderDialog from '../../../components/swap/CancelOrderDialog'; import AssetPair from '../../../components/common/assets/AssetPair'; import Tabs from '../../../components/common/tabs/Tabs'; -import { useRichCompletedOrders, useRichOpenOrders } from '../hooks'; +import { useRichCompletedOrders, useRichOpenOrders, useRichOrders } from '../hooks'; import type { StoresAndActionsProps } from '../../../types/injectedProps.types'; import { SwapPoolLabel } from '../../../components/swap/SwapPoolComponents'; import ExplorableHashContainer from '../../widgets/ExplorableHashContainer'; @@ -195,7 +195,7 @@ function mapCompletedOrder(order: any, defaultTokenInfo: RemoteTokenInfo): Mappe export default function SwapOrdersPage(props: StoresAndActionsProps): Node { const { - order: { cancel: swapCancelOrder }, + order: orderApi, } = useSwap(); const [showCompletedOrders, setShowCompletedOrders] = useState(false); @@ -218,8 +218,11 @@ export default function SwapOrdersPage(props: StoresAndActionsProps): Node { props.stores.explorers.selectedExplorer.get(network.NetworkId) ?? fail('No explorer for wallet network'); - const openOrders = useRichOpenOrders().map(o => mapOpenOrder(o, defaultTokenInfo)); - const completedOrders = useRichCompletedOrders().map(o => mapCompletedOrder(o, defaultTokenInfo)); + // const openOrders = useRichOpenOrders().map(o => mapOpenOrder(o, defaultTokenInfo)); + // const completedOrders = useRichCompletedOrders().map(o => mapCompletedOrder(o, defaultTokenInfo)); + let { openOrders, completedOrders } = useRichOrders(); + openOrders = openOrders.map(o => mapOpenOrder(o, defaultTokenInfo)); + completedOrders = completedOrders.map(o => mapCompletedOrder(o, defaultTokenInfo)); const txHashes = [...openOrders, ...completedOrders].map(o => o.txId); noop(props.stores.substores.ada.swapStore.fetchTransactionTimestamps({ wallet, txHashes })); @@ -270,7 +273,7 @@ export default function SwapOrdersPage(props: StoresAndActionsProps): Node { throw new Error('Cannot cancel a completed order (sender == null)'); } try { - const cancelTxCbor = await swapCancelOrder({ + const cancelTxCbor = await orderApi.cancel({ address: addressBech32ToHex(sender), utxos: { order: order.utxo, From b91dbc879dafe80b71ccff7d4eb9ef3ebf0565e4 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Sat, 22 Jun 2024 17:01:12 +0300 Subject: [PATCH 179/464] refactored queries for swap orders --- .../app/components/swap/CancelOrderDialog.js | 2 +- .../app/containers/swap/hooks.js | 140 --------------- .../app/containers/swap/orders/OrdersPage.js | 127 +------------- .../app/containers/swap/orders/hooks.js | 159 ++++++++++++++++++ .../app/containers/swap/orders/util.js | 51 ++++++ .../app/stores/ada/SwapStore.js | 1 + 6 files changed, 218 insertions(+), 262 deletions(-) create mode 100644 packages/yoroi-extension/app/containers/swap/orders/hooks.js create mode 100644 packages/yoroi-extension/app/containers/swap/orders/util.js diff --git a/packages/yoroi-extension/app/components/swap/CancelOrderDialog.js b/packages/yoroi-extension/app/components/swap/CancelOrderDialog.js index 61c3f629f6..233e2aab34 100644 --- a/packages/yoroi-extension/app/components/swap/CancelOrderDialog.js +++ b/packages/yoroi-extension/app/components/swap/CancelOrderDialog.js @@ -6,7 +6,6 @@ import TextField from '../common/TextField'; import type { RemoteTokenInfo } from '../../api/ada/lib/state-fetch/types'; import LoadingSpinner from '../widgets/LoadingSpinner'; import { useState } from 'react'; -import type { FormattedTokenValue } from '../../containers/swap/orders/OrdersPage'; import { WrongPassphraseError } from '../../api/ada/lib/cardanoCrypto/cryptoErrors'; import { stringifyError } from '../../utils/logging'; import { InfoTooltip } from '../widgets/InfoTooltip'; @@ -16,6 +15,7 @@ import type { TokenLookupKey } from '../../api/common/lib/MultiToken'; import type { TokenRow } from '../../api/ada/lib/storage/database/primitives/tables'; import { SelectedExplorer } from '../../domain/SelectedExplorer'; import type LocalizableError from '../../i18n/LocalizableError'; +import type { FormattedTokenValue } from '../../containers/swap/orders/util'; type Props = {| order: any, diff --git a/packages/yoroi-extension/app/containers/swap/hooks.js b/packages/yoroi-extension/app/containers/swap/hooks.js index eec179f22d..cf059361fc 100644 --- a/packages/yoroi-extension/app/containers/swap/hooks.js +++ b/packages/yoroi-extension/app/containers/swap/hooks.js @@ -1,14 +1,10 @@ //@flow import { useSwap, - useSwapOrdersByStatusCompleted, - useSwapOrdersByStatusOpen, - useSwapTokensOnlyVerified, } from '@yoroi/swap'; import { Quantities } from '../../utils/quantities'; import { useSwapForm } from './context/swap-form'; import type { RemoteTokenInfo } from '../../api/ada/lib/state-fetch/types'; -import { useQuery } from 'react-query'; export function useSwapFeeDisplay( defaultTokenInfo: RemoteTokenInfo @@ -73,139 +69,3 @@ export function useSwapFeeDisplay( formattedFee, }; } - -export function useRichOpenOrders(): any { - let openOrders = []; - try { - openOrders = useSwapOrdersByStatusOpen(); - } catch (e) { - console.warn('useRichCompletedOrders.useSwapOrdersByStatusOpen', e); - } - let onlyVerifiedTokens = []; - try { - const res = useSwapTokensOnlyVerified(); - onlyVerifiedTokens = res.onlyVerifiedTokens; - } catch (e) { - console.warn('useRichCompletedOrders.useSwapTokensOnlyVerified', e); - } - if ((openOrders?.length || 0) === 0 || (onlyVerifiedTokens?.length || 0) === 0) return []; - try { - const tokensMap = onlyVerifiedTokens.reduce((map, t) => ({ ...map, [t.id]: t }), {}); - return openOrders.map(o => { - const fromToken = tokensMap[o.from.tokenId]; - const toToken = tokensMap[o.to.tokenId]; - return { - utxo: o.utxo, - from: { quantity: o.from.quantity, token: fromToken }, - to: { quantity: o.to.quantity, token: toToken }, - batcherFee: o.batcherFee, - valueAttached: o.valueAttached, - deposit: o.deposit, - provider: o.provider, - sender: o.sender, - }; - }); - } catch (e) { - console.warn('useRichOpenOrders', e); - return []; - } -} - -export function useRichCompletedOrders(): any { - let completedOrders = []; - try { - completedOrders = useSwapOrdersByStatusCompleted(); - } catch (e) { - console.warn('useRichCompletedOrders.useSwapOrdersByStatusCompleted', e); - } - let onlyVerifiedTokens = []; - try { - const res = useSwapTokensOnlyVerified(); - onlyVerifiedTokens = res.onlyVerifiedTokens; - } catch (e) { - console.warn('useRichCompletedOrders.useSwapTokensOnlyVerified', e); - } - if ((completedOrders?.length || 0) === 0 || (onlyVerifiedTokens?.length || 0) === 0) return []; - try { - const tokensMap = onlyVerifiedTokens.reduce((map, t) => ({ ...map, [t.id]: t }), {}); - return completedOrders.map(o => { - const fromToken = tokensMap[o.from.tokenId]; - const toToken = tokensMap[o.to.tokenId]; - return { - txHash: o.txHash, - from: { quantity: o.from.quantity, token: fromToken }, - to: { quantity: o.to.quantity, token: toToken }, - }; - }); - } catch (e) { - console.warn('useRichCompletedOrders', e); - return []; - } -} - -export function useRichOrders(): {| openOrders: Array, completedOrders: Array |} { - const {order, tokens, stakingKey} = useSwap() - - const verifiedTokensMapQuery = useQuery({ - suspense: true, - queryKey: ['useSwapTokensOnlyVerified'], - queryFn: () => tokens.list.onlyVerified() - .then(tokens => tokens.reduce((map, t) => ({ ...map, [t.id]: t }), {})) - .catch(e => { - console.error('Failed to load verified tokens!', e); - throw e; - }), - }); - - const openOrdersQuery = useQuery({ - suspense: true, - queryKey: ['useSwapOrdersByStatusOpen', stakingKey], - queryFn: () => order.list.byStatusOpen().catch(e => { - console.error('Failed to load open orders!', e); - throw e; - }), - }); - - const completedOrdersQuery = useQuery({ - suspense: true, - queryKey: ['useSwapOrdersByStatusCompleted', stakingKey], - queryFn: () => order.list.byStatusCompleted().catch(e => { - console.error('Failed to load completed orders!', e); - throw e; - }), - }); - - let openOrders = []; - let completedOrders = []; - const tokensMap = verifiedTokensMapQuery.data; - if (tokensMap && openOrdersQuery.data) { - console.log('recalc open orders'); - openOrders = openOrdersQuery.data.map(o => { - const fromToken = tokensMap[o.from.tokenId]; - const toToken = tokensMap[o.to.tokenId]; - return { - utxo: o.utxo, - from: { quantity: o.from.quantity, token: fromToken }, - to: { quantity: o.to.quantity, token: toToken }, - batcherFee: o.batcherFee, - valueAttached: o.valueAttached, - deposit: o.deposit, - provider: o.provider, - sender: o.sender, - }; - }); - } - if (tokensMap && completedOrdersQuery.data) { - console.log('recalc completed orders'); - completedOrders = completedOrdersQuery.data.map(o => { - const fromToken = tokensMap[o.from.tokenId]; - const toToken = tokensMap[o.to.tokenId]; - return { - txHash: o.txHash, - from: { quantity: o.from.quantity, token: fromToken }, - to: { quantity: o.to.quantity, token: toToken }, - }; - }); - } - return { openOrders, completedOrders }; -} diff --git a/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js b/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js index 5377f4530d..3dfdae5897 100644 --- a/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js +++ b/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js @@ -6,26 +6,25 @@ import Table from '../../../components/common/table/Table'; import CancelSwapOrderDialog from '../../../components/swap/CancelOrderDialog'; import AssetPair from '../../../components/common/assets/AssetPair'; import Tabs from '../../../components/common/tabs/Tabs'; -import { useRichCompletedOrders, useRichOpenOrders, useRichOrders } from '../hooks'; +import type { MappedOrder } from './hooks'; +import { useRichOrders } from './hooks'; import type { StoresAndActionsProps } from '../../../types/injectedProps.types'; import { SwapPoolLabel } from '../../../components/swap/SwapPoolComponents'; import ExplorableHashContainer from '../../widgets/ExplorableHashContainer'; import { truncateAddressShort } from '../../../utils/formatters'; import { Quantities } from '../../../utils/quantities'; -import { PRICE_PRECISION } from '../../../components/swap/common'; import { fail, forceNonNull, maybe, noop } from '../../../coreUtils'; import type { RemoteTokenInfo } from '../../../api/ada/lib/state-fetch/types'; import { useSwap } from '@yoroi/swap'; import { addressBech32ToHex } from '../../../api/ada/lib/cardanoCrypto/utils'; -import { - getTransactionFeeFromCbor, - getTransactionTotalOutputFromCbor, -} from '../../../api/ada/transactions/utils'; +import { getTransactionFeeFromCbor, getTransactionTotalOutputFromCbor, } from '../../../api/ada/transactions/utils'; import { SelectedExplorer } from '../../../domain/SelectedExplorer'; import type { CardanoConnectorSignRequest } from '../../../connector/types'; import { genLookupOrFail } from '../../../stores/stateless/tokenHelpers'; import moment from 'moment'; import { signTransactionHex } from '../../../api/ada/transactions/signTransactionHex'; +import { createFormattedTokenValues } from './util'; +import type { FormattedTokenValue } from './util'; type ColumnContext = {| completedOrders: boolean, @@ -83,116 +82,6 @@ const orderColumns: Array = [ }, ]; -export type FormattedTokenValue = {| - value: string, - formattedValue: string, - ticker: string, -|}; - -function createFormattedTokenValues({ - entries, - order, - defaultTokenInfo, -}: {| - entries: Array<{| id: string, amount: string |}>, - order: any, - defaultTokenInfo: RemoteTokenInfo, -|}): Array { - const tokenAmountMap = entries.reduce( - (map, v) => ({ ...map, [v.id]: Quantities.sum([map[v.id] ?? '0', v.amount]) }), - {} - ); - const ptDecimals = forceNonNull(defaultTokenInfo.decimals); - // $FlowIgnore[prop-missing] - const defaultTokenValue = tokenAmountMap[''] ?? tokenAmountMap['.'] ?? '0'; - const formattedTokenValues = [ - { - value: defaultTokenValue, - formattedValue: Quantities.format(defaultTokenValue, ptDecimals, ptDecimals), - ticker: defaultTokenInfo.ticker ?? '-', - }, - ]; - [order.from.token, order.to.token].forEach(t => { - if (t.id !== '' && t.id !== '.') { - maybe(tokenAmountMap[t.id], v => { - const formattedValue = Quantities.format(v, t.decimals, t.decimals); - formattedTokenValues.push({ - value: v, - formattedValue, - ticker: t.ticker ?? '-', - }); - }); - } - }); - return formattedTokenValues; -} - -function mapOrderAssets( - order: any, - defaultTokenInfo: RemoteTokenInfo -): {| - price: string, - amount: string, - totalValues: ?Array, - from: any, - to: any, -|} { - const price = Quantities.quotient(order.from.quantity, order.to.quantity); - const fromDecimals = order.from.token?.decimals ?? 0; - const toDecimals = order.to.token?.decimals ?? 0; - const priceDenomination = fromDecimals - toDecimals; - const formattedPrice = Quantities.format(price, priceDenomination, PRICE_PRECISION); - const formattedToQuantity = Quantities.format( - order.to.quantity, - toDecimals, - toDecimals - ); - const formattedAttachedValues = maybe(order.valueAttached, val => - createFormattedTokenValues({ - entries: val.map(({ token: id, amount }) => ({ id, amount })), - order, - defaultTokenInfo, - }) - ); - return { - price: formattedPrice, - amount: formattedToQuantity, - totalValues: formattedAttachedValues, - from: order.from, - to: order.to, - }; -} - -type MappedOrder = {| - txId: string, - utxo?: string, - sender?: string, - provider?: string, - price: string, - amount: string, - totalValues: ?Array, - from: any, - to: any, -|}; - -function mapOpenOrder(order: any, defaultTokenInfo: RemoteTokenInfo): MappedOrder { - const txId = order.utxo.split('#')[0]; - return { - txId, - utxo: order.utxo, - sender: order.sender, - provider: order.provider, - ...mapOrderAssets(order, defaultTokenInfo), - }; -} - -function mapCompletedOrder(order: any, defaultTokenInfo: RemoteTokenInfo): MappedOrder { - return { - txId: order.txHash, - ...mapOrderAssets(order, defaultTokenInfo), - }; -} - export default function SwapOrdersPage(props: StoresAndActionsProps): Node { const { order: orderApi, @@ -218,11 +107,7 @@ export default function SwapOrdersPage(props: StoresAndActionsProps): Node { props.stores.explorers.selectedExplorer.get(network.NetworkId) ?? fail('No explorer for wallet network'); - // const openOrders = useRichOpenOrders().map(o => mapOpenOrder(o, defaultTokenInfo)); - // const completedOrders = useRichCompletedOrders().map(o => mapCompletedOrder(o, defaultTokenInfo)); - let { openOrders, completedOrders } = useRichOrders(); - openOrders = openOrders.map(o => mapOpenOrder(o, defaultTokenInfo)); - completedOrders = completedOrders.map(o => mapCompletedOrder(o, defaultTokenInfo)); + let { openOrders, completedOrders } = useRichOrders(defaultTokenInfo); const txHashes = [...openOrders, ...completedOrders].map(o => o.txId); noop(props.stores.substores.ada.swapStore.fetchTransactionTimestamps({ wallet, txHashes })); diff --git a/packages/yoroi-extension/app/containers/swap/orders/hooks.js b/packages/yoroi-extension/app/containers/swap/orders/hooks.js new file mode 100644 index 0000000000..713c52f9ea --- /dev/null +++ b/packages/yoroi-extension/app/containers/swap/orders/hooks.js @@ -0,0 +1,159 @@ +//@flow +import { useSwap, } from '@yoroi/swap'; +import { useQuery } from 'react-query'; +import { useEffect, useState } from 'react'; +import type { RemoteTokenInfo } from '../../../api/ada/lib/state-fetch/types'; +import { Quantities } from '../../../utils/quantities'; +import { PRICE_PRECISION } from '../../../components/swap/common'; +import { maybe } from '../../../coreUtils'; +import type { FormattedTokenValue } from './util'; +import { createFormattedTokenValues } from './util'; + +function mapOrderAssets( + order: any, + defaultTokenInfo: RemoteTokenInfo +): {| + price: string, + amount: string, + totalValues: ?Array, + from: any, + to: any, +|} { + const price = Quantities.quotient(order.from.quantity, order.to.quantity); + const fromDecimals = order.from.token?.decimals ?? 0; + const toDecimals = order.to.token?.decimals ?? 0; + const priceDenomination = fromDecimals - toDecimals; + const formattedPrice = Quantities.format(price, priceDenomination, PRICE_PRECISION); + const formattedToQuantity = Quantities.format( + order.to.quantity, + toDecimals, + toDecimals + ); + const formattedAttachedValues = maybe(order.valueAttached, val => + createFormattedTokenValues({ + entries: val.map(({ + token: id, + amount + }) => ({ + id, + amount + })), + order, + defaultTokenInfo, + }) + ); + return { + price: formattedPrice, + amount: formattedToQuantity, + totalValues: formattedAttachedValues, + from: order.from, + to: order.to, + }; +} + +export type MappedOrder = {| + txId: string, + utxo?: string, + sender?: string, + provider?: string, + price: string, + amount: string, + totalValues: ?Array, + from: any, + to: any, +|}; + +function mapOpenOrder(order: any, defaultTokenInfo: RemoteTokenInfo): MappedOrder { + const txId = order.utxo.split('#')[0]; + return { + txId, + utxo: order.utxo, + sender: order.sender, + provider: order.provider, + ...mapOrderAssets(order, defaultTokenInfo), + }; +} + +function mapCompletedOrder(order: any, defaultTokenInfo: RemoteTokenInfo): MappedOrder { + return { + txId: order.txHash, + ...mapOrderAssets(order, defaultTokenInfo), + }; +} + +export function useRichOrders( + defaultTokenInfo: RemoteTokenInfo +): {| openOrders: Array, completedOrders: Array |} { + const {order, tokens, stakingKey} = useSwap() + + const { data: tokensMap } = useQuery({ + suspense: true, + queryKey: ['useSwapTokensOnlyVerified'], + queryFn: () => tokens.list.onlyVerified() + .then(tokensArray => tokensArray.reduce((map, t) => ({ ...map, [t.id]: t }), {})) + .catch(e => { + console.error('Failed to load verified tokens!', e); + throw e; + }), + }); + + const { data: openOrdersData } = useQuery({ + suspense: true, + queryKey: ['useSwapOrdersByStatusOpen', stakingKey], + queryFn: () => order.list.byStatusOpen().catch(e => { + console.error('Failed to load open orders!', e); + throw e; + }), + }); + + const { data: completedOrdersData } = useQuery({ + suspense: true, + queryKey: ['useSwapOrdersByStatusCompleted', stakingKey], + queryFn: () => order.list.byStatusCompleted().catch(e => { + console.error('Failed to load completed orders!', e); + throw e; + }), + }); + + const [openOrders, setOpenOrders] = useState>([]); + const [completedOrders, setCompletedOrders] = useState>([]); + + useEffect(() => { + if (tokensMap && openOrdersData) { + setOpenOrders( + openOrdersData.map(o => { + const fromToken = tokensMap[o.from.tokenId]; + const toToken = tokensMap[o.to.tokenId]; + return { + utxo: o.utxo, + from: { quantity: o.from.quantity, token: fromToken }, + to: { quantity: o.to.quantity, token: toToken }, + batcherFee: o.batcherFee, + valueAttached: o.valueAttached, + deposit: o.deposit, + provider: o.provider, + sender: o.sender, + }; + }).map(o => mapOpenOrder(o, defaultTokenInfo)) + ); + } + }, [tokensMap, openOrdersData]); + + useEffect(() => { + if (tokensMap && completedOrdersData) { + setCompletedOrders( + completedOrdersData.map(o => { + const fromToken = tokensMap[o.from.tokenId]; + const toToken = tokensMap[o.to.tokenId]; + return { + txHash: o.txHash, + from: { quantity: o.from.quantity, token: fromToken }, + to: { quantity: o.to.quantity, token: toToken }, + }; + }).map(o => mapCompletedOrder(o, defaultTokenInfo)) + ); + } + }, [tokensMap, completedOrdersData]) + + return { openOrders, completedOrders }; +} diff --git a/packages/yoroi-extension/app/containers/swap/orders/util.js b/packages/yoroi-extension/app/containers/swap/orders/util.js new file mode 100644 index 0000000000..6c9467f391 --- /dev/null +++ b/packages/yoroi-extension/app/containers/swap/orders/util.js @@ -0,0 +1,51 @@ +// @flow +import type { RemoteTokenInfo } from '../../../api/ada/lib/state-fetch/types'; +import { Quantities } from '../../../utils/quantities'; +import { forceNonNull, maybe } from '../../../coreUtils'; + +export type FormattedTokenValue = {| + value: string, + formattedValue: string, + ticker: string, +|}; + +export function createFormattedTokenValues({ + entries, + order, + defaultTokenInfo, +}: {| + entries: Array<{| id: string, amount: string |}>, + order: any, + defaultTokenInfo: RemoteTokenInfo, +|}): Array { + const tokenAmountMap = entries.reduce( + (map, v) => ({ + ...map, + [v.id]: Quantities.sum([map[v.id] ?? '0', v.amount]) + }), + {} + ); + const ptDecimals = forceNonNull(defaultTokenInfo.decimals); + // $FlowIgnore[prop-missing] + const defaultTokenValue = tokenAmountMap[''] ?? tokenAmountMap['.'] ?? '0'; + const formattedTokenValues = [ + { + value: defaultTokenValue, + formattedValue: Quantities.format(defaultTokenValue, ptDecimals, ptDecimals), + ticker: defaultTokenInfo.ticker ?? '-', + }, + ]; + [order.from.token, order.to.token].forEach(t => { + if (t.id !== '' && t.id !== '.') { + maybe(tokenAmountMap[t.id], v => { + const formattedValue = Quantities.format(v, t.decimals, t.decimals); + formattedTokenValues.push({ + value: v, + formattedValue, + ticker: t.ticker ?? '-', + }); + }); + } + }); + return formattedTokenValues; +} \ No newline at end of file diff --git a/packages/yoroi-extension/app/stores/ada/SwapStore.js b/packages/yoroi-extension/app/stores/ada/SwapStore.js index d538ac620d..a266779076 100644 --- a/packages/yoroi-extension/app/stores/ada/SwapStore.js +++ b/packages/yoroi-extension/app/stores/ada/SwapStore.js @@ -233,6 +233,7 @@ export default class SwapStore extends Store { wallet, txHashes, }) => { + console.log('fetchTransactionTimestamps'); const existingSet = new Set(Object.keys(this.transactionTimestamps)); const filteredTxHashes = txHashes.filter(x => !existingSet.has(x.toLowerCase())); if (filteredTxHashes.length === 0) { From 5ade6e05fa4c0ff24e6e983f64d9cd1645d4c0a5 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Sat, 22 Jun 2024 21:24:27 +0300 Subject: [PATCH 180/464] moved swap orders timestamp fetching along with orders themselves; refactored swap order history mapping functions --- .../app/containers/swap/orders/OrdersPage.js | 29 ++--- .../app/containers/swap/orders/hooks.js | 117 ++++++++++-------- .../app/containers/swap/orders/util.js | 10 +- .../app/stores/ada/SwapStore.js | 21 ++-- 4 files changed, 93 insertions(+), 84 deletions(-) diff --git a/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js b/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js index 3dfdae5897..7b5db97f39 100644 --- a/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js +++ b/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js @@ -13,7 +13,7 @@ import { SwapPoolLabel } from '../../../components/swap/SwapPoolComponents'; import ExplorableHashContainer from '../../widgets/ExplorableHashContainer'; import { truncateAddressShort } from '../../../utils/formatters'; import { Quantities } from '../../../utils/quantities'; -import { fail, forceNonNull, maybe, noop } from '../../../coreUtils'; +import { fail, forceNonNull, maybe } from '../../../coreUtils'; import type { RemoteTokenInfo } from '../../../api/ada/lib/state-fetch/types'; import { useSwap } from '@yoroi/swap'; import { addressBech32ToHex } from '../../../api/ada/lib/cardanoCrypto/utils'; @@ -96,31 +96,31 @@ export default function SwapOrdersPage(props: StoresAndActionsProps): Node { isSubmitting?: boolean, |}>(null); - const wallet = props.stores.wallets.selectedOrFail; + const { wallets, tokenInfoStore, explorers, substores: { ada: { swapStore } } } = props.stores; + + const wallet = wallets.selectedOrFail; const network = wallet.getParent().getNetworkInfo(); const walletVariant = wallet.getParent().getWalletVariant(); - const defaultTokenInfo = props.stores.tokenInfoStore.getDefaultTokenInfoSummary( + const defaultTokenInfo = tokenInfoStore.getDefaultTokenInfoSummary( network.NetworkId ); const selectedExplorer = - props.stores.explorers.selectedExplorer.get(network.NetworkId) ?? + explorers.selectedExplorer.get(network.NetworkId) ?? fail('No explorer for wallet network'); - let { openOrders, completedOrders } = useRichOrders(defaultTokenInfo); - - const txHashes = [...openOrders, ...completedOrders].map(o => o.txId); - noop(props.stores.substores.ada.swapStore.fetchTransactionTimestamps({ wallet, txHashes })); + const fetchTransactionTimestamps = txHashes => swapStore.fetchTransactionTimestamps({ wallet, txHashes }); + let { openOrders, completedOrders, transactionTimestamps } = useRichOrders(defaultTokenInfo, fetchTransactionTimestamps); const txHashToRenderedTimestamp: string => string = txHash => { - const date = props.stores.substores.ada.swapStore.transactionTimestamps[txHash]; + const date = transactionTimestamps[txHash]; return date == null ? '-' : moment(date).format('MMM D, YYYY H:mm'); }; const handleCancelRequest = async order => { setCancellationState({ order, tx: null }); try { - let utxoHex = await props.stores.substores.ada.swapStore.getCollateralUtxoHexForCancel({ + let utxoHex = await swapStore.getCollateralUtxoHexForCancel({ wallet, }); let collateralReorgTxHex: ?string = null; @@ -130,7 +130,7 @@ export default function SwapOrdersPage(props: StoresAndActionsProps): Node { unsignedTxHex, txData, collateralUtxoHex, - } = await props.stores.substores.ada.swapStore.createCollateralReorgForCancel({ wallet }); + } = await swapStore.createCollateralReorgForCancel({ wallet }); collateralReorgTxHex = unsignedTxHex; collateralReorgTxData = txData; utxoHex = collateralUtxoHex; @@ -174,7 +174,8 @@ export default function SwapOrdersPage(props: StoresAndActionsProps): Node { id: e.identifier, amount: e.amount.toString(), })), - order, + from: order.from, + to: order.to, defaultTokenInfo, }); const formattedFeeValue = Quantities.format( @@ -246,7 +247,7 @@ export default function SwapOrdersPage(props: StoresAndActionsProps): Node { signedCollateralReorgTx != null ? [signedCollateralReorgTx, signedCancelTx] : [signedCancelTx]; - await props.stores.substores.ada.swapStore.executeTransactionHexes({ + await swapStore.executeTransactionHexes({ wallet, signedTransactionHexes, }); @@ -328,7 +329,7 @@ export default function SwapOrdersPage(props: StoresAndActionsProps): Node { onCancelOrder={handleCancelConfirm} onDialogClose={() => setCancellationState(null)} defaultTokenInfo={defaultTokenInfo} - getTokenInfo={genLookupOrFail(props.stores.tokenInfoStore.tokenInfo)} + getTokenInfo={genLookupOrFail(tokenInfoStore.tokenInfo)} selectedExplorer={selectedExplorer} submissionError={null} walletType={walletVariant} diff --git a/packages/yoroi-extension/app/containers/swap/orders/hooks.js b/packages/yoroi-extension/app/containers/swap/orders/hooks.js index 713c52f9ea..a38b437532 100644 --- a/packages/yoroi-extension/app/containers/swap/orders/hooks.js +++ b/packages/yoroi-extension/app/containers/swap/orders/hooks.js @@ -6,11 +6,13 @@ import type { RemoteTokenInfo } from '../../../api/ada/lib/state-fetch/types'; import { Quantities } from '../../../utils/quantities'; import { PRICE_PRECISION } from '../../../components/swap/common'; import { maybe } from '../../../coreUtils'; -import type { FormattedTokenValue } from './util'; +import type { FormattedTokenValue, OrderAsset } from './util'; import { createFormattedTokenValues } from './util'; function mapOrderAssets( - order: any, + from: OrderAsset, + to: OrderAsset, + valueAttached: ?any, defaultTokenInfo: RemoteTokenInfo ): {| price: string, @@ -19,26 +21,21 @@ function mapOrderAssets( from: any, to: any, |} { - const price = Quantities.quotient(order.from.quantity, order.to.quantity); - const fromDecimals = order.from.token?.decimals ?? 0; - const toDecimals = order.to.token?.decimals ?? 0; + const price = Quantities.quotient(from.quantity, from.quantity); + const fromDecimals = from.token?.decimals ?? 0; + const toDecimals = to.token?.decimals ?? 0; const priceDenomination = fromDecimals - toDecimals; const formattedPrice = Quantities.format(price, priceDenomination, PRICE_PRECISION); const formattedToQuantity = Quantities.format( - order.to.quantity, + to.quantity, toDecimals, toDecimals ); - const formattedAttachedValues = maybe(order.valueAttached, val => + const formattedAttachedValues = maybe(valueAttached, val => createFormattedTokenValues({ - entries: val.map(({ - token: id, - amount - }) => ({ - id, - amount - })), - order, + entries: val.map(({ token: id, amount }) => ({ id, amount })), + from, + to, defaultTokenInfo, }) ); @@ -46,8 +43,8 @@ function mapOrderAssets( price: formattedPrice, amount: formattedToQuantity, totalValues: formattedAttachedValues, - from: order.from, - to: order.to, + from, + to, }; } @@ -63,29 +60,19 @@ export type MappedOrder = {| to: any, |}; -function mapOpenOrder(order: any, defaultTokenInfo: RemoteTokenInfo): MappedOrder { - const txId = order.utxo.split('#')[0]; - return { - txId, - utxo: order.utxo, - sender: order.sender, - provider: order.provider, - ...mapOrderAssets(order, defaultTokenInfo), - }; -} - -function mapCompletedOrder(order: any, defaultTokenInfo: RemoteTokenInfo): MappedOrder { - return { - txId: order.txHash, - ...mapOrderAssets(order, defaultTokenInfo), - }; -} - export function useRichOrders( - defaultTokenInfo: RemoteTokenInfo -): {| openOrders: Array, completedOrders: Array |} { + defaultTokenInfo: RemoteTokenInfo, + fetchTransactionTimestamps: (Array) => Promise<{ [string]: Date }>, +): {| + openOrders: Array, + completedOrders: Array, + transactionTimestamps: { [string]: Date }, +|} { const {order, tokens, stakingKey} = useSwap() + /** + * Fetch verified tokens list converted to map + */ const { data: tokensMap } = useQuery({ suspense: true, queryKey: ['useSwapTokensOnlyVerified'], @@ -97,8 +84,10 @@ export function useRichOrders( }), }); + /** + * Fetch open orders + */ const { data: openOrdersData } = useQuery({ - suspense: true, queryKey: ['useSwapOrdersByStatusOpen', stakingKey], queryFn: () => order.list.byStatusOpen().catch(e => { console.error('Failed to load open orders!', e); @@ -106,8 +95,10 @@ export function useRichOrders( }), }); + /** + * Fetch completed orders + */ const { data: completedOrdersData } = useQuery({ - suspense: true, queryKey: ['useSwapOrdersByStatusCompleted', stakingKey], queryFn: () => order.list.byStatusCompleted().catch(e => { console.error('Failed to load completed orders!', e); @@ -117,43 +108,63 @@ export function useRichOrders( const [openOrders, setOpenOrders] = useState>([]); const [completedOrders, setCompletedOrders] = useState>([]); + const [transactionTimestamps, setTransactionTimestamps] = useState<{ [string]: Date }>({}); + /** + * Filter open orders by verified tokens when both are fetched + */ useEffect(() => { if (tokensMap && openOrdersData) { setOpenOrders( openOrdersData.map(o => { - const fromToken = tokensMap[o.from.tokenId]; - const toToken = tokensMap[o.to.tokenId]; + const txId = (o.utxo.split('#')[0]); + const from = { quantity: o.from.quantity, token: tokensMap[o.from.tokenId] }; + const to = { quantity: o.to.quantity, token: tokensMap[o.to.tokenId] }; return { + txId: txId.toLowerCase(), utxo: o.utxo, - from: { quantity: o.from.quantity, token: fromToken }, - to: { quantity: o.to.quantity, token: toToken }, batcherFee: o.batcherFee, - valueAttached: o.valueAttached, deposit: o.deposit, provider: o.provider, sender: o.sender, + ...mapOrderAssets(from, to, o.valueAttached, defaultTokenInfo), }; - }).map(o => mapOpenOrder(o, defaultTokenInfo)) + }) ); } }, [tokensMap, openOrdersData]); + /** + * Filter completed orders by verified tokens when both are fetched + */ useEffect(() => { if (tokensMap && completedOrdersData) { setCompletedOrders( completedOrdersData.map(o => { - const fromToken = tokensMap[o.from.tokenId]; - const toToken = tokensMap[o.to.tokenId]; + const from = { quantity: o.from.quantity, token: tokensMap[o.from.tokenId] }; + const to = { quantity: o.to.quantity, token: tokensMap[o.to.tokenId] }; return { - txHash: o.txHash, - from: { quantity: o.from.quantity, token: fromToken }, - to: { quantity: o.to.quantity, token: toToken }, + txId: o.txHash.toLowerCase(), + ...mapOrderAssets(from, to, null, defaultTokenInfo), }; - }).map(o => mapCompletedOrder(o, defaultTokenInfo)) + }) ); } - }, [tokensMap, completedOrdersData]) + }, [tokensMap, completedOrdersData]); + + /** + * Fetch missing transaction timestamps any time open or completed orders change + */ + useEffect(() => { + const txHashes = [...openOrders, ...completedOrders].map(o => o.txId); + const existingSet = new Set(Object.keys(transactionTimestamps)); + const filteredTxHashes = txHashes.filter(x => !existingSet.has(x)); + if (filteredTxHashes.length === 0) return; + fetchTransactionTimestamps(filteredTxHashes).then(newTimestamps => { + setTransactionTimestamps(state => ({ ...state, ...newTimestamps })); + return null; + }).catch(e => console.error('Failed to load transaction timestamps!', e)); + }, [openOrders, completedOrders]); - return { openOrders, completedOrders }; + return { openOrders, completedOrders, transactionTimestamps }; } diff --git a/packages/yoroi-extension/app/containers/swap/orders/util.js b/packages/yoroi-extension/app/containers/swap/orders/util.js index 6c9467f391..7f590dd2e7 100644 --- a/packages/yoroi-extension/app/containers/swap/orders/util.js +++ b/packages/yoroi-extension/app/containers/swap/orders/util.js @@ -9,13 +9,17 @@ export type FormattedTokenValue = {| ticker: string, |}; +export type OrderAsset = {| token: {| id: string, decimals: number, ticker: ?string |}, quantity: string |}; + export function createFormattedTokenValues({ entries, - order, + from, + to, defaultTokenInfo, }: {| entries: Array<{| id: string, amount: string |}>, - order: any, + from: OrderAsset, + to: OrderAsset, defaultTokenInfo: RemoteTokenInfo, |}): Array { const tokenAmountMap = entries.reduce( @@ -35,7 +39,7 @@ export function createFormattedTokenValues({ ticker: defaultTokenInfo.ticker ?? '-', }, ]; - [order.from.token, order.to.token].forEach(t => { + [from.token, to.token].forEach(t => { if (t.id !== '' && t.id !== '.') { maybe(tokenAmountMap[t.id], v => { const formattedValue = Quantities.format(v, t.decimals, t.decimals); diff --git a/packages/yoroi-extension/app/stores/ada/SwapStore.js b/packages/yoroi-extension/app/stores/ada/SwapStore.js index a266779076..7e493b0a83 100644 --- a/packages/yoroi-extension/app/stores/ada/SwapStore.js +++ b/packages/yoroi-extension/app/stores/ada/SwapStore.js @@ -3,7 +3,7 @@ import Store from '../base/Store'; import type { ActionsMap } from '../../actions'; import type { StoresMap } from '../index'; -import { action, computed, observable, runInAction } from 'mobx'; +import { action, computed, observable } from 'mobx'; import type { StorageField } from '../../api/localStorage'; import { createStorageFlag, loadSubmittedTransactions } from '../../api/localStorage'; import { PublicDeriver } from '../../api/ada/lib/storage/models/PublicDeriver'; @@ -38,7 +38,6 @@ const FRONTEND_FEE_ADDRESS_PREPROD = export default class SwapStore extends Store { @observable orderStep: number = 0; - @observable transactionTimestamps: { [string]: Date } = {}; swapDisclaimerAcceptanceFlag: StorageField = createStorageFlag( 'SwapStore.swapDisclaimerAcceptanceFlag', @@ -229,27 +228,21 @@ export default class SwapStore extends Store { fetchTransactionTimestamps: ({| wallet: PublicDeriver<>, txHashes: Array, - |}) => Promise = async ({ + |}) => Promise<{ [string]: Date }> = async ({ wallet, txHashes, }) => { - console.log('fetchTransactionTimestamps'); - const existingSet = new Set(Object.keys(this.transactionTimestamps)); - const filteredTxHashes = txHashes.filter(x => !existingSet.has(x.toLowerCase())); - if (filteredTxHashes.length === 0) { - return; + if (txHashes.length === 0) { + return {}; } const network = wallet.getParent().getNetworkInfo(); const globalSlotMap: { [string]: string } = await this.stores.substores.ada.stateFetchStore.fetcher - .getTransactionSlotsByHashes({ network, txHashes: filteredTxHashes }); + .getTransactionSlotsByHashes({ network, txHashes }); const timeCalcRequests = this.stores.substores.ada.time.getTimeCalcRequests(wallet); const { toRealTime } = timeCalcRequests.requests; const slotToTimestamp: string => Date = s => toRealTime({ absoluteSlotNum: Number(s) }); - runInAction(() => { - for (const [tx,slot] of listEntries(globalSlotMap)) { - this.transactionTimestamps[tx.toLowerCase()] = slotToTimestamp(slot); - } - }); + return listEntries(globalSlotMap).reduce((res, [tx,slot]) => + ({ ...res, [tx.toLowerCase()]: slotToTimestamp(slot) }), ({}: { [string]: Date })) } } From aa1d51bbf6f0089272b40119f738e0eae83ff343 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Sat, 22 Jun 2024 21:24:39 +0300 Subject: [PATCH 181/464] render list key fix --- .../yoroi-extension/app/components/swap/CancelOrderDialog.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/yoroi-extension/app/components/swap/CancelOrderDialog.js b/packages/yoroi-extension/app/components/swap/CancelOrderDialog.js index 233e2aab34..77d03a7177 100644 --- a/packages/yoroi-extension/app/components/swap/CancelOrderDialog.js +++ b/packages/yoroi-extension/app/components/swap/CancelOrderDialog.js @@ -102,9 +102,9 @@ export default function CancelSwapOrderDialog({ > {transactionParams ? ( transactionParams.returnValues.map((v, index) => ( - <> + {index > 0 && ' +'} {v.formattedValue} {v.ticker} - + )) ) : ( From 5a297d3c74cd1e3e7aea85b4b3e2da235f84248b Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Sat, 22 Jun 2024 23:28:52 +0300 Subject: [PATCH 182/464] comments fixed --- packages/yoroi-extension/app/containers/swap/orders/hooks.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/yoroi-extension/app/containers/swap/orders/hooks.js b/packages/yoroi-extension/app/containers/swap/orders/hooks.js index a38b437532..10beafa823 100644 --- a/packages/yoroi-extension/app/containers/swap/orders/hooks.js +++ b/packages/yoroi-extension/app/containers/swap/orders/hooks.js @@ -111,7 +111,7 @@ export function useRichOrders( const [transactionTimestamps, setTransactionTimestamps] = useState<{ [string]: Date }>({}); /** - * Filter open orders by verified tokens when both are fetched + * Map open orders with verified tokens when both are fetched */ useEffect(() => { if (tokensMap && openOrdersData) { @@ -135,7 +135,7 @@ export function useRichOrders( }, [tokensMap, openOrdersData]); /** - * Filter completed orders by verified tokens when both are fetched + * Map completed orders with verified tokens when both are fetched */ useEffect(() => { if (tokensMap && completedOrdersData) { From c3162165e7a9cfead181f3726fe9d8b332c0d425 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Sun, 23 Jun 2024 17:45:04 +0300 Subject: [PATCH 183/464] updated workflows --- .github/workflows/e2e-tests-dapp.yml | 162 ------------- .github/workflows/e2e-tests-ext.yml | 161 ------------- .github/workflows/e2e-tests.yml | 347 +++++++++++++++++++++++++++ 3 files changed, 347 insertions(+), 323 deletions(-) delete mode 100644 .github/workflows/e2e-tests-dapp.yml delete mode 100644 .github/workflows/e2e-tests-ext.yml create mode 100644 .github/workflows/e2e-tests.yml diff --git a/.github/workflows/e2e-tests-dapp.yml b/.github/workflows/e2e-tests-dapp.yml deleted file mode 100644 index 38cdb29c2a..0000000000 --- a/.github/workflows/e2e-tests-dapp.yml +++ /dev/null @@ -1,162 +0,0 @@ -name: E2E DApp tests - -on: - workflow_dispatch: - pull_request: - types: [opened, ready_for_review] - pull_request_review: - types: [submitted] - -jobs: - General: - if: github.event.review && (github.event.review.state == 'approved' || contains(github.event.review.body, '/check') || contains(github.event.review.body, '/dapp-general')) - runs-on: macos-14 - strategy: - matrix: - browser: ["chrome"] - fail-fast: false - - steps: - - uses: actions/checkout@v4 - - - name: distutils hack - run: brew install python-setuptools - - - name: Forcefully update the Chrome browser - if: matrix.browser=='chrome' - run: brew update && brew upgrade --cask google-chrome - - - name: Forcefully install Firefox for Developers browser - if: matrix.browser=='firefox' - run: | - brew update - brew tap homebrew/cask-versions && brew install --cask firefox-developer-edition - echo "FIREFOX_BIN=/Applications/Firefox Developer Edition.app/Contents/MacOS/firefox-bin" >> $GITHUB_ENV - - - name: Read .nvmrc - id: nvm - run: echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_OUTPUT - - - name: Setup node - uses: actions/setup-node@v4 - with: - node-version: "${{ steps.nvm.outputs.NVMRC }}" - - - name: - Cache extension node modules - # https://docs.github.com/en/actions/guides/caching-dependencies-to-speed-up-workflows - uses: actions/cache@v4 - env: - cache-name: cache-yoroi-extension-node-modules - with: - # It is recommended to cache the NPM cache (~/.npm) instead of node_modules. - # https://github.com/actions/cache/blob/main/examples.md#node---npm - # But we put node version into the cache key and cache node_modules. - path: packages/yoroi-extension/node_modules - key: ${{ runner.os }}-build-${{ env.cache-name }}-node-${{ steps.nvm.outputs.NVMRC }}-${{ hashFiles('packages/yoroi-extension/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-build-${{ env.cache-name }}- - ${{ runner.os }}-build- - ${{ runner.os }}- - - - name: npm install - run: | - . install-all.sh - - - name: Build the test mainnet version - working-directory: ./packages/yoroi-extension - run: npm run test:build:mainnet - - - name: Run tests - working-directory: ./packages/e2e-tests - env: - FIRST_SMOKE_TEST_WALLET: ${{ secrets.FIRST_SMOKE_TEST_WALLET }} - SECOND_STATIC_TEST_WALLET: ${{ secrets.SECOND_STATIC_TEST_WALLET }} - SECOND_SMOKE_TEST_WALLET: ${{ secrets.SECOND_SMOKE_TEST_WALLET }} - SECOND_SMOKE_TEST_WALLET_FF: ${{ secrets.SECOND_SMOKE_TEST_WALLET_FF }} - run: npm run test:${{ matrix.browser }}:dapp - - - name: Archive tests screenshots and logs - if: ${{ failure() }} - uses: actions/upload-artifact@v4 - with: - name: testRunsData_E2E_tests_${{ matrix.browser }} - path: | - ./packages/e2e-tests/mochawesome-report - ./packages/e2e-tests/testRunsData_${{ matrix.browser }} - - Failing: - if: github.event.review && contains(github.event.review.body, '/dapp-failing') - runs-on: macos-14 - strategy: - matrix: - browser: ['chrome'] - fail-fast: false - - steps: - - uses: actions/checkout@v4 - - - name: distutils hack - run: brew install python-setuptools - - - name: Forcefully update the Chrome browser - if: matrix.browser=='chrome' - run: brew update && brew upgrade --cask google-chrome - - - name: Forcefully install Firefox for Developers browser - if: matrix.browser=='firefox' - run: | - brew update - brew tap homebrew/cask-versions && brew install --cask firefox-developer-edition - echo "FIREFOX_BIN=/Applications/Firefox Developer Edition.app/Contents/MacOS/firefox-bin" >> $GITHUB_ENV - - - name: Read .nvmrc - id: nvm - run: echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_OUTPUT - - - name: Setup node - uses: actions/setup-node@v4 - with: - node-version: '${{ steps.nvm.outputs.NVMRC }}' - - - name: Cache extension node modules - # https://docs.github.com/en/actions/guides/caching-dependencies-to-speed-up-workflows - uses: actions/cache@v4 - env: - cache-name: cache-yoroi-extension-node-modules - with: - # https://github.com/actions/cache/blob/main/examples.md#node---npm - # It is recommended to cache the NPM cache (~/.npm) instead of node_modules. - # But we put node version into the cache key and cache node_modules. - path: packages/yoroi-extension/node_modules - key: ${{ runner.os }}-build-${{ env.cache-name }}-node-${{ steps.nvm.outputs.NVMRC }}-${{ hashFiles('packages/yoroi-extension/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-build-${{ env.cache-name }}- - ${{ runner.os }}-build- - ${{ runner.os }}- - - - name: npm install - run: | - . install-all.sh - - - name: Build the test mainnet version - working-directory: ./packages/yoroi-extension - run: npm run test:build:mainnet - - - name: Run tests - working-directory: ./packages/e2e-tests - env: - FIRST_SMOKE_TEST_WALLET: ${{ secrets.FIRST_SMOKE_TEST_WALLET }} - SECOND_STATIC_TEST_WALLET: ${{ secrets.SECOND_STATIC_TEST_WALLET }} - SECOND_SMOKE_TEST_WALLET: ${{ secrets.SECOND_SMOKE_TEST_WALLET }} - SECOND_SMOKE_TEST_WALLET_FF: ${{ secrets.SECOND_SMOKE_TEST_WALLET_FF }} - run: npm run test:${{ matrix.browser }}:dapp:bl - - - name: Archive tests screenshots and logs - if: ${{ failure() }} - uses: actions/upload-artifact@v4 - with: - name: testRunsData_E2E_tests_${{ matrix.browser }} - path: | - ./packages/e2e-tests/mochawesome-report - ./packages/e2e-tests/testRunsData_${{ matrix.browser }} diff --git a/.github/workflows/e2e-tests-ext.yml b/.github/workflows/e2e-tests-ext.yml deleted file mode 100644 index ac798239b2..0000000000 --- a/.github/workflows/e2e-tests-ext.yml +++ /dev/null @@ -1,161 +0,0 @@ -name: E2E Ext tests - -on: - workflow_dispatch: - pull_request: - types: [opened, ready_for_review] - pull_request_review: - types: [submitted] - -jobs: - General: - if: github.event.review && (github.event.review.state == 'approved' || contains(github.event.review.body, '/check') || contains(github.event.review.body, '/ext-general')) - runs-on: macos-14 - strategy: - matrix: - browser: ["chrome"] - fail-fast: false - - steps: - - uses: actions/checkout@v4 - - - name: distutils hack - run: brew install python-setuptools - - - name: Forcefully update the Chrome browser - if: matrix.browser=='chrome' - run: brew update && brew upgrade --cask google-chrome - - - name: Forcefully install Firefox for Developers browser - if: matrix.browser=='firefox' - run: | - brew update - brew tap homebrew/cask-versions && brew install --cask firefox-developer-edition - echo "FIREFOX_BIN=/Applications/Firefox Developer Edition.app/Contents/MacOS/firefox-bin" >> $GITHUB_ENV - - - name: Read .nvmrc - id: nvm - run: echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_OUTPUT - - - name: Setup node - uses: actions/setup-node@v4 - with: - node-version: "${{ steps.nvm.outputs.NVMRC }}" - - - name: Cache extension node modules - # https://docs.github.com/en/actions/guides/caching-dependencies-to-speed-up-workflows - uses: actions/cache@v4 - env: - cache-name: cache-yoroi-extension-node-modules - with: - # https://github.com/actions/cache/blob/main/examples.md#node---npm - # It is recommended to cache the NPM cache (~/.npm) instead of node_modules. - # But we put node version into the cache key and cache node_modules. - path: packages/yoroi-extension/node_modules - key: ${{ runner.os }}-build-${{ env.cache-name }}-node-${{ steps.nvm.outputs.NVMRC }}-${{ hashFiles('packages/yoroi-extension/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-build-${{ env.cache-name }}- - ${{ runner.os }}-build- - ${{ runner.os }}- - - - name: npm install - run: | - . install-all.sh - - - name: Build the test mainnet version - working-directory: ./packages/yoroi-extension - run: npm run test:build:mainnet - - - name: Run tests - working-directory: ./packages/e2e-tests - env: - FIRST_SMOKE_TEST_WALLET: ${{ secrets.FIRST_SMOKE_TEST_WALLET }} - SECOND_STATIC_TEST_WALLET: ${{ secrets.SECOND_STATIC_TEST_WALLET }} - SECOND_SMOKE_TEST_WALLET: ${{ secrets.SECOND_SMOKE_TEST_WALLET }} - SECOND_SMOKE_TEST_WALLET_FF: ${{ secrets.SECOND_SMOKE_TEST_WALLET_FF }} - run: npm run test:${{ matrix.browser }} - - - name: Archive tests screenshots and logs - if: ${{ failure() }} - uses: actions/upload-artifact@v4 - with: - name: testRunsData_E2E_tests_${{ matrix.browser }} - path: | - ./packages/e2e-tests/mochawesome-report - ./packages/e2e-tests/testRunsData_${{ matrix.browser }} - - Failing: - if: github.event.review && contains(github.event.review.body, '/ext-failing') - runs-on: macos-14 - strategy: - matrix: - browser: ["chrome"] - fail-fast: false - - steps: - - uses: actions/checkout@v4 - - - name: distutils hack - run: brew install python-setuptools - - - name: Forcefully update the Chrome browser - if: matrix.browser=='chrome' - run: brew update && brew upgrade --cask google-chrome - - - name: Forcefully install Firefox for Developers browser - if: matrix.browser=='firefox' - run: | - brew update - brew tap homebrew/cask-versions && brew install --cask firefox-developer-edition - echo "FIREFOX_BIN=/Applications/Firefox Developer Edition.app/Contents/MacOS/firefox-bin" >> $GITHUB_ENV - - - name: Read .nvmrc - id: nvm - run: echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_OUTPUT - - - name: Setup node - uses: actions/setup-node@v4 - with: - node-version: "${{ steps.nvm.outputs.NVMRC }}" - - - name: Cache extension node modules - # https://docs.github.com/en/actions/guides/caching-dependencies-to-speed-up-workflows - uses: actions/cache@v4 - env: - cache-name: cache-yoroi-extension-node-modules - with: - # https://github.com/actions/cache/blob/main/examples.md#node---npm - # It is recommended to cache the NPM cache (~/.npm) instead of node_modules. - # But we put node version into the cache key and cache node_modules. - path: packages/yoroi-extension/node_modules - key: ${{ runner.os }}-build-${{ env.cache-name }}-node-${{ steps.nvm.outputs.NVMRC }}-${{ hashFiles('packages/yoroi-extension/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-build-${{ env.cache-name }}- - ${{ runner.os }}-build- - ${{ runner.os }}- - - - name: npm install - run: | - . install-all.sh - - - name: Build the test mainnet version - working-directory: ./packages/yoroi-extension - run: npm run test:build:mainnet - - - name: Run tests - working-directory: ./packages/e2e-tests - env: - FIRST_SMOKE_TEST_WALLET: ${{ secrets.FIRST_SMOKE_TEST_WALLET }} - SECOND_STATIC_TEST_WALLET: ${{ secrets.SECOND_STATIC_TEST_WALLET }} - SECOND_SMOKE_TEST_WALLET: ${{ secrets.SECOND_SMOKE_TEST_WALLET }} - SECOND_SMOKE_TEST_WALLET_FF: ${{ secrets.SECOND_SMOKE_TEST_WALLET_FF }} - run: npm run test:${{ matrix.browser }}:bl - - - name: Archive tests screenshots and logs - if: ${{ failure() }} - uses: actions/upload-artifact@v4 - with: - name: testRunsData_E2E_tests_${{ matrix.browser }} - path: | - ./packages/e2e-tests/mochawesome-report - ./packages/e2e-tests/testRunsData_${{ matrix.browser }} diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml new file mode 100644 index 0000000000..e11ff6d600 --- /dev/null +++ b/.github/workflows/e2e-tests.yml @@ -0,0 +1,347 @@ +name: E2E tests + +on: + workflow_dispatch: + pull_request: + types: [opened, ready_for_review] + pull_request_review: + types: [submitted] + +jobs: + Build-Extension: + if: github.event.review && (github.event.review.state == 'approved' || contains(github.event.review.body, '/check') || contains(github.event.review.body, '/ext-general') || contains(github.event.review.body, '/ext-failing') || contains(github.event.review.body, '/dapp-general')) + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Read .nvmrc + id: nvm + run: echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_OUTPUT + + - name: Setup node + uses: actions/setup-node@v4 + with: + node-version: "${{ steps.nvm.outputs.NVMRC }}" + + - name: Install packages + run: | + . install-all.sh + + - name: Build the test mainnet version + working-directory: ./packages/yoroi-extension + run: npm run test:build:mainnet + + - name: Archive built app + uses: actions/upload-artifact@v4 + with: + name: builtApp + path: | + ./packages/yoroi-extension/Yoroi-test.crx + ./packages/yoroi-extension/Yoroi.xpi + retention-days: 1 + overwrite: true + + Ext-General: + if: github.event.review && (github.event.review.state == 'approved' || contains(github.event.review.body, '/check') || contains(github.event.review.body, '/ext-general')) + runs-on: macos-latest + needs: Build-Extension + strategy: + matrix: + browser: ["chrome"] + fail-fast: false + + steps: + - uses: actions/checkout@v4 + + - name: Forcefully update the Chrome browser + if: matrix.browser=='chrome' + run: brew update && brew upgrade --cask google-chrome + + - name: Forcefully install Firefox for Developers browser + if: matrix.browser=='firefox' + run: | + brew update + brew tap homebrew/cask-versions && brew install --cask firefox-developer-edition + echo "FIREFOX_BIN=/Applications/Firefox Developer Edition.app/Contents/MacOS/firefox-bin" >> $GITHUB_ENV + + - name: Read .nvmrc + id: nvm + run: echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_OUTPUT + + - name: Setup node + uses: actions/setup-node@v4 + with: + node-version: "${{ steps.nvm.outputs.NVMRC }}" + + - name: Cache extension node modules + # https://docs.github.com/en/actions/guides/caching-dependencies-to-speed-up-workflows + uses: actions/cache@v4 + env: + cache-name: cache-yoroi-extension-node-modules + with: + # https://github.com/actions/cache/blob/main/examples.md#node---npm + # It is recommended to cache the NPM cache (~/.npm) instead of node_modules. + # But we put node version into the cache key and cache node_modules. + path: packages/yoroi-extension/node_modules + key: ${{ runner.os }}-build-${{ env.cache-name }}-node-${{ steps.nvm.outputs.NVMRC }}-${{ hashFiles('packages/yoroi-extension/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + + - name: Install packages + working-directory: ./packages/e2e-tests + run: npm install + + - name: Download app + uses: actions/download-artifact@v4 + with: + name: builtApp + path: ./packages/yoroi-extension + + - name: Run tests + working-directory: ./packages/e2e-tests + env: + FIRST_SMOKE_TEST_WALLET: ${{ secrets.FIRST_SMOKE_TEST_WALLET }} + SECOND_STATIC_TEST_WALLET: ${{ secrets.SECOND_STATIC_TEST_WALLET }} + SECOND_SMOKE_TEST_WALLET: ${{ secrets.SECOND_SMOKE_TEST_WALLET }} + SECOND_SMOKE_TEST_WALLET_FF: ${{ secrets.SECOND_SMOKE_TEST_WALLET_FF }} + run: npm run test:${{ matrix.browser }} + + - name: Archive tests screenshots and logs + if: ${{ failure() }} + uses: actions/upload-artifact@v4 + with: + name: testRunsData_E2E_tests_ext_general_${{ matrix.browser }} + path: | + ./packages/e2e-tests/mochawesome-report + ./packages/e2e-tests/testRunsData_${{ matrix.browser }} + + Ext-Failing: + if: github.event.review && contains(github.event.review.body, '/ext-failing') + runs-on: macos-latest + needs: Build-Extension + strategy: + matrix: + browser: ["chrome"] + fail-fast: false + + steps: + - uses: actions/checkout@v4 + + - name: Forcefully update the Chrome browser + if: matrix.browser=='chrome' + run: brew update && brew upgrade --cask google-chrome + + - name: Forcefully install Firefox for Developers browser + if: matrix.browser=='firefox' + run: | + brew update + brew tap homebrew/cask-versions && brew install --cask firefox-developer-edition + echo "FIREFOX_BIN=/Applications/Firefox Developer Edition.app/Contents/MacOS/firefox-bin" >> $GITHUB_ENV + + - name: Read .nvmrc + id: nvm + run: echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_OUTPUT + + - name: Setup node + uses: actions/setup-node@v4 + with: + node-version: "${{ steps.nvm.outputs.NVMRC }}" + + - name: Install packages + working-directory: ./packages/e2e-tests + run: npm install + + - name: Cache e2e-tests node modules + # https://docs.github.com/en/actions/guides/caching-dependencies-to-speed-up-workflows + uses: actions/cache@v4 + env: + cache-name: cache-yoroi-e2e-tests-node-modules + with: + # https://github.com/actions/cache/blob/main/examples.md#node---npm + # It is recommended to cache the NPM cache (~/.npm) instead of node_modules. + # But we put node version into the cache key and cache node_modules. + path: packages/e2e-tests/node_modules + key: ${{ runner.os }}-build-${{ env.cache-name }}-node-${{ steps.nvm.outputs.NVMRC }}-${{ hashFiles('packages/e2e-tests/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + + - name: Download app + uses: actions/download-artifact@v4 + with: + name: builtApp + path: ./packages/yoroi-extension + + - name: Run tests + working-directory: ./packages/e2e-tests + env: + FIRST_SMOKE_TEST_WALLET: ${{ secrets.FIRST_SMOKE_TEST_WALLET }} + SECOND_STATIC_TEST_WALLET: ${{ secrets.SECOND_STATIC_TEST_WALLET }} + SECOND_SMOKE_TEST_WALLET: ${{ secrets.SECOND_SMOKE_TEST_WALLET }} + SECOND_SMOKE_TEST_WALLET_FF: ${{ secrets.SECOND_SMOKE_TEST_WALLET_FF }} + run: npm run test:${{ matrix.browser }}:bl + + - name: Archive tests screenshots and logs + if: ${{ failure() }} + uses: actions/upload-artifact@v4 + with: + name: testRunsData_E2E_tests_ext_failing_${{ matrix.browser }} + path: | + ./packages/e2e-tests/mochawesome-report + ./packages/e2e-tests/testRunsData_${{ matrix.browser }} + + DApp-General: + if: github.event.review && (github.event.review.state == 'approved' || contains(github.event.review.body, '/check') || contains(github.event.review.body, '/dapp-general')) + runs-on: macos-latest + needs: Build-Extension + strategy: + matrix: + browser: ["chrome"] + fail-fast: false + + steps: + - uses: actions/checkout@v4 + + - name: Forcefully update the Chrome browser + if: matrix.browser=='chrome' + run: brew update && brew upgrade --cask google-chrome + + - name: Forcefully install Firefox for Developers browser + if: matrix.browser=='firefox' + run: | + brew update + brew tap homebrew/cask-versions && brew install --cask firefox-developer-edition + echo "FIREFOX_BIN=/Applications/Firefox Developer Edition.app/Contents/MacOS/firefox-bin" >> $GITHUB_ENV + + - name: Read .nvmrc + id: nvm + run: echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_OUTPUT + + - name: Setup node + uses: actions/setup-node@v4 + with: + node-version: "${{ steps.nvm.outputs.NVMRC }}" + + - name: Install packages + working-directory: ./packages/e2e-tests + run: npm install + + - name: Cache e2e-tests node modules + # https://docs.github.com/en/actions/guides/caching-dependencies-to-speed-up-workflows + uses: actions/cache@v4 + env: + cache-name: cache-yoroi-e2e-tests-node-modules + with: + # It is recommended to cache the NPM cache (~/.npm) instead of node_modules. + # https://github.com/actions/cache/blob/main/examples.md#node---npm + # But we put node version into the cache key and cache node_modules. + path: packages/e2e-tests/node_modules + key: ${{ runner.os }}-build-${{ env.cache-name }}-node-${{ steps.nvm.outputs.NVMRC }}-${{ hashFiles('packages/e2e-tests/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + + - name: Download app + uses: actions/download-artifact@v4 + with: + name: builtApp + path: ./packages/yoroi-extension + + - name: Run tests + working-directory: ./packages/e2e-tests + env: + FIRST_SMOKE_TEST_WALLET: ${{ secrets.FIRST_SMOKE_TEST_WALLET }} + SECOND_STATIC_TEST_WALLET: ${{ secrets.SECOND_STATIC_TEST_WALLET }} + SECOND_SMOKE_TEST_WALLET: ${{ secrets.SECOND_SMOKE_TEST_WALLET }} + SECOND_SMOKE_TEST_WALLET_FF: ${{ secrets.SECOND_SMOKE_TEST_WALLET_FF }} + run: npm run test:${{ matrix.browser }}:dapp + + - name: Archive tests screenshots and logs + if: ${{ failure() }} + uses: actions/upload-artifact@v4 + with: + name: testRunsData_E2E_tests_dapp_general_${{ matrix.browser }} + path: | + ./packages/e2e-tests/mochawesome-report + ./packages/e2e-tests/testRunsData_${{ matrix.browser }} + + DApp-Failing: + if: github.event.review && contains(github.event.review.body, '/dapp-failing') + runs-on: macos-latest + needs: Build-Extension + strategy: + matrix: + browser: ['chrome'] + fail-fast: false + + steps: + - uses: actions/checkout@v4 + + - name: Forcefully update the Chrome browser + if: matrix.browser=='chrome' + run: brew update && brew upgrade --cask google-chrome + + - name: Forcefully install Firefox for Developers browser + if: matrix.browser=='firefox' + run: | + brew update + brew tap homebrew/cask-versions && brew install --cask firefox-developer-edition + echo "FIREFOX_BIN=/Applications/Firefox Developer Edition.app/Contents/MacOS/firefox-bin" >> $GITHUB_ENV + + - name: Read .nvmrc + id: nvm + run: echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_OUTPUT + + - name: Setup node + uses: actions/setup-node@v4 + with: + node-version: '${{ steps.nvm.outputs.NVMRC }}' + + - name: Install packages + working-directory: ./packages/e2e-tests + run: npm install + + - name: Cache e2e-tests node modules + # https://docs.github.com/en/actions/guides/caching-dependencies-to-speed-up-workflows + uses: actions/cache@v4 + env: + cache-name: cache-yoroi-e2e-tests-node-modules + with: + # https://github.com/actions/cache/blob/main/examples.md#node---npm + # It is recommended to cache the NPM cache (~/.npm) instead of node_modules. + # But we put node version into the cache key and cache node_modules. + path: packages/yoroi-extension/node_modules + key: ${{ runner.os }}-build-${{ env.cache-name }}-node-${{ steps.nvm.outputs.NVMRC }}-${{ hashFiles('packages/e2e-tests/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + + - name: Download app + uses: actions/download-artifact@v4 + with: + name: builtApp + path: ./packages/yoroi-extension + + - name: Run tests + working-directory: ./packages/e2e-tests + env: + FIRST_SMOKE_TEST_WALLET: ${{ secrets.FIRST_SMOKE_TEST_WALLET }} + SECOND_STATIC_TEST_WALLET: ${{ secrets.SECOND_STATIC_TEST_WALLET }} + SECOND_SMOKE_TEST_WALLET: ${{ secrets.SECOND_SMOKE_TEST_WALLET }} + SECOND_SMOKE_TEST_WALLET_FF: ${{ secrets.SECOND_SMOKE_TEST_WALLET_FF }} + run: npm run test:${{ matrix.browser }}:dapp:bl + + - name: Archive tests screenshots and logs + if: ${{ failure() }} + uses: actions/upload-artifact@v4 + with: + name: testRunsData_E2E_tests_dapp_failing_${{ matrix.browser }} + path: | + ./packages/e2e-tests/mochawesome-report + ./packages/e2e-tests/testRunsData_${{ matrix.browser }} From 76105d9ee29b7f29fa79fbeb2b630951fe97b73e Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Sun, 23 Jun 2024 18:05:08 +0300 Subject: [PATCH 184/464] packages updated --- packages/e2e-tests/package-lock.json | 100 ++++++++++++++++++++++++--- packages/e2e-tests/package.json | 9 +-- 2 files changed, 97 insertions(+), 12 deletions(-) diff --git a/packages/e2e-tests/package-lock.json b/packages/e2e-tests/package-lock.json index a7d90bf5fe..16d3da0e07 100644 --- a/packages/e2e-tests/package-lock.json +++ b/packages/e2e-tests/package-lock.json @@ -38,10 +38,11 @@ "ws": "^8.14.2" }, "devDependencies": { - "@emurgo/cardano-serialization-lib-nodejs": "^11.5.0", + "@emurgo/cardano-serialization-lib-nodejs": "^12.0.0-alpha.26", "bignumber.js": "^9.1.2", "chai": "^4.3.10", - "chromedriver": "^123.0.4", + "chromedriver": "^126.0.3", + "cross-env": "^7.0.3", "json-server": "^0.17.4", "mocha": "^10.2.0", "mochawesome": "^7.1.3", @@ -51,9 +52,9 @@ } }, "node_modules/@emurgo/cardano-serialization-lib-nodejs": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/@emurgo/cardano-serialization-lib-nodejs/-/cardano-serialization-lib-nodejs-11.5.0.tgz", - "integrity": "sha512-IlVABlRgo9XaTR1NunwZpWcxnfEv04ba2l1vkUz4S1W7Jt36F4CtffP+jPeqBZGnAe+fnUwo0XjIJC3ZTNToNQ==", + "version": "12.0.0-alpha.32", + "resolved": "https://registry.npmjs.org/@emurgo/cardano-serialization-lib-nodejs/-/cardano-serialization-lib-nodejs-12.0.0-alpha.32.tgz", + "integrity": "sha512-HykivQs8K4f2KNRcXFw+D91llAxZhu1neKPVYwyWe6nYZPW/9Tn1A9p602ceGmF0LxIeiJBg0GYOufAA5yVsUQ==", "dev": true }, "node_modules/@testim/chrome-version": { @@ -449,9 +450,9 @@ } }, "node_modules/chromedriver": { - "version": "123.0.4", - "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-123.0.4.tgz", - "integrity": "sha512-3Yi7y7q35kkSAOTbRisiww/SL2w+DqafDPAaUShpSuLMmPaOvHQR0i3bm2/33QBiQ8fUb1J/MzppzVL6IDqvhA==", + "version": "126.0.3", + "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-126.0.3.tgz", + "integrity": "sha512-4o+ZK8926/8lqIlnnvcljCHV88Z8IguEMB5PInOiS9/Lb6cyeZSj2Uvz+ky1Jgyw2Bn7qCLJFfbUslaWnvUUbg==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -647,6 +648,38 @@ "node": ">= 0.10" } }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/data-uri-to-buffer": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", @@ -1613,6 +1646,12 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, "node_modules/jju": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", @@ -2360,6 +2399,15 @@ "node": ">=0.10.0" } }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -2762,6 +2810,27 @@ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/side-channel": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", @@ -3085,6 +3154,21 @@ "node": ">= 0.8" } }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/workerpool": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", diff --git a/packages/e2e-tests/package.json b/packages/e2e-tests/package.json index 3a2d18e4e8..9357838ab9 100644 --- a/packages/e2e-tests/package.json +++ b/packages/e2e-tests/package.json @@ -23,10 +23,10 @@ "test:base:one": "npm run test:clean:logs && mocha --require $npm_package_config_hooksPath $npm_package_config_testPathGeneral -g", "test:hw:base:one": "npm run test:clean:logs && mocha --require $npm_package_config_hooksPath $npm_package_config_testPathHW -g", "test:dapp:base:one": "npm run test:clean:logs && mocha --require $npm_package_config_hooksPath $npm_package_config_testPathDApp -g", - "test:chrome": "env TARGETBROWSER=chrome npm run test:base:sequintel", + "test:chrome": "env TARGETBROWSER=chrome HEADLESS=true npm run test:base:sequintel", "test:chrome:bl": "env TARGETBROWSER=chrome npm run test:base:sequintel:bl", "test:chrome:hw": "env TARGETBROWSER=chrome npm run test:hw:base:sequintel", - "test:chrome:dapp": "env TARGETBROWSER=chrome npm run test:dapp:base:sequintel", + "test:chrome:dapp": "cross-env TARGETBROWSER=chrome HEADLESS=true npm run test:dapp:base:sequintel", "test:chrome:dapp:bl": "env TARGETBROWSER=chrome npm run test:dapp:base:sequintel:bl", "test:chrome:parallel": "env TARGETBROWSER=chrome npm run test:base:parallel", "test:chrome:one": "env TARGETBROWSER=chrome npm run test:base:one", @@ -44,10 +44,11 @@ "author": "Denis Nebytov (denis@emurgo.io)", "license": "ISC", "devDependencies": { - "@emurgo/cardano-serialization-lib-nodejs": "^11.5.0", + "@emurgo/cardano-serialization-lib-nodejs": "^12.0.0-alpha.26", "bignumber.js": "^9.1.2", "chai": "^4.3.10", - "chromedriver": "^123.0.4", + "chromedriver": "^126.0.3", + "cross-env": "^7.0.3", "json-server": "^0.17.4", "mocha": "^10.2.0", "mochawesome": "^7.1.3", From 2d2c1eb6ae2da200694cf5d250b5637566a19eb3 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Sun, 23 Jun 2024 18:05:27 +0300 Subject: [PATCH 185/464] ban test --- .../dapp/dAppGetCollateralNoPopUp.test.js | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) rename packages/e2e-tests/test/{ => blacklist}/dapp/dAppGetCollateralNoPopUp.test.js (84%) diff --git a/packages/e2e-tests/test/dapp/dAppGetCollateralNoPopUp.test.js b/packages/e2e-tests/test/blacklist/dapp/dAppGetCollateralNoPopUp.test.js similarity index 84% rename from packages/e2e-tests/test/dapp/dAppGetCollateralNoPopUp.test.js rename to packages/e2e-tests/test/blacklist/dapp/dAppGetCollateralNoPopUp.test.js index ba1bb56901..03891840cc 100644 --- a/packages/e2e-tests/test/dapp/dAppGetCollateralNoPopUp.test.js +++ b/packages/e2e-tests/test/blacklist/dapp/dAppGetCollateralNoPopUp.test.js @@ -1,16 +1,16 @@ -import BasePage from '../../pages/basepage.js'; -import { customAfterEach, customBeforeNestedDAppTest } from '../../utils/customHooks.js'; -import { getSpendableWallet } from '../../utils/testWallets.js'; +import BasePage from '../../../pages/basepage.js'; +import { customAfterEach, customBeforeNestedDAppTest } from '../../../utils/customHooks.js'; +import { getSpendableWallet } from '../../../utils/testWallets.js'; import { expect } from 'chai'; -import { getTestLogger } from '../../utils/utils.js'; -import { oneMinute } from '../../helpers/timeConstants.js'; -import { restoreWallet } from '../../helpers/restoreWalletHelper.js'; -import { WindowManager, mockDAppName } from '../../helpers/windowManager.js'; -import { getMockServer, mockDAppUrl } from '../../helpers/mock-dApp-webpage/mockServer.js'; -import { MockDAppWebpage } from '../../helpers/mock-dApp-webpage/mockedDApp.js'; -import { connectNonAuth } from '../../helpers/mock-dApp-webpage/dAppHelper.js'; -import { adaInLovelaces } from '../../helpers/constants.js'; -import driversPoolsManager from '../../utils/driversPool.js'; +import { getTestLogger } from '../../../utils/utils.js'; +import { oneMinute } from '../../../helpers/timeConstants.js'; +import { restoreWallet } from '../../../helpers/restoreWalletHelper.js'; +import { WindowManager, mockDAppName } from '../../../helpers/windowManager.js'; +import { getMockServer, mockDAppUrl } from '../../../helpers/mock-dApp-webpage/mockServer.js'; +import { MockDAppWebpage } from '../../../helpers/mock-dApp-webpage/mockedDApp.js'; +import { connectNonAuth } from '../../../helpers/mock-dApp-webpage/dAppHelper.js'; +import { adaInLovelaces } from '../../../helpers/constants.js'; +import driversPoolsManager from '../../../utils/driversPool.js'; describe('dApp, getCollateral, no popup, positive', function () { this.timeout(2 * oneMinute); From b92dbbc3baffc9b19c44303d21095dce070fb061 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Sun, 23 Jun 2024 18:05:36 +0300 Subject: [PATCH 186/464] fixes --- packages/e2e-tests/helpers/constants.js | 1 + .../helpers/mock-dApp-webpage/dAppTxHelper.js | 55 ++++++------------- .../helpers/mock-dApp-webpage/mockedDApp.js | 4 +- .../mock-dApp-webpage/networkConfig.js | 11 ++++ .../e2e-tests/pages/dapp/dAppBase.page.js | 1 + .../walletTab/walletTransactions.page.js | 52 +++++++++++------- .../e2e-tests/pages/walletCommonBase.page.js | 4 +- .../e2e-tests/test/08_downloadingLogs.test.js | 2 +- .../test/12_loadingAllTransactions.test.js | 6 +- packages/e2e-tests/utils/driverBootstrap.js | 29 +++++----- packages/e2e-tests/utils/driversPool.js | 46 +++++++++++----- packages/e2e-tests/utils/hooks.mjs | 3 +- packages/e2e-tests/utils/testWallets.js | 2 +- 13 files changed, 117 insertions(+), 99 deletions(-) create mode 100644 packages/e2e-tests/helpers/mock-dApp-webpage/networkConfig.js diff --git a/packages/e2e-tests/helpers/constants.js b/packages/e2e-tests/helpers/constants.js index 4a56dfd62d..a73d8b6c18 100644 --- a/packages/e2e-tests/helpers/constants.js +++ b/packages/e2e-tests/helpers/constants.js @@ -47,6 +47,7 @@ export const getTestString = (basePart, stringLength, withCapitals) => { return __genString(stringLength, basePart, withCapitals); }; +export const DRIVERS_AMOUNT = 1; export const chromeExtIdUrl = `chrome-extension://bdlknlffjjmjckcldekkbejaogpkjphg`; export const firefoxExtensionId = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'; export const firefoxExtIdUrl = `moz-extension://${firefoxExtensionId}`; diff --git a/packages/e2e-tests/helpers/mock-dApp-webpage/dAppTxHelper.js b/packages/e2e-tests/helpers/mock-dApp-webpage/dAppTxHelper.js index 45530220ad..44feb139fe 100644 --- a/packages/e2e-tests/helpers/mock-dApp-webpage/dAppTxHelper.js +++ b/packages/e2e-tests/helpers/mock-dApp-webpage/dAppTxHelper.js @@ -1,37 +1,5 @@ -import BigNumber from 'bignumber.js'; import * as CSL from '@emurgo/cardano-serialization-lib-nodejs'; - -export function getTtl() { - const fullConfig = [ - { - StartAt: 0, - ChainNetworkId: '0', - ByronNetworkId: 1097911063, - GenesisDate: '1563999616000', - SlotsPerEpoch: 21600, - SlotDuration: 20, - }, - { - StartAt: 74, - SlotsPerEpoch: 432000, - SlotDuration: 1, - PerEpochPercentageReward: 69344, - LinearFee: { - coefficient: '44', - constant: '155381', - }, - MinimumUtxoVal: '1000000', - PoolDeposit: '500000000', - KeyDeposit: '2000000', - }, - ]; - const defaultTtlOffset = 7200; - const absSlotNumber = new BigNumber( - TimeUtils.timeToAbsoluteSlot(fullConfig, new Date(1649261533360)) - ); - - return absSlotNumber.plus(defaultTtlOffset).toNumber(); -} +import { protocolParams } from './networkConfig.js'; export function bytesToHex(bytes) { return Buffer.from(bytes).toString('hex'); @@ -64,18 +32,27 @@ export const toInt = number => CSL.Int.new_i32(number); export const getTxBuilder = () => { return CSL.TransactionBuilder.new( CSL.TransactionBuilderConfigBuilder.new() - .fee_algo(CSL.LinearFee.new(CSL.BigNum.from_str('44'), CSL.BigNum.from_str('155381'))) - .coins_per_utxo_word(CSL.BigNum.from_str('34482')) - .pool_deposit(CSL.BigNum.from_str('500000000')) - .key_deposit(CSL.BigNum.from_str('2000000')) + .fee_algo( + CSL.LinearFee.new( + CSL.BigNum.from_str(protocolParams.linearFee.minFeeA), + CSL.BigNum.from_str(protocolParams.linearFee.minFeeB) + ) + ) + .pool_deposit(CSL.BigNum.from_str(protocolParams.poolDeposit)) + .key_deposit(CSL.BigNum.from_str(protocolParams.keyDeposit)) + .coins_per_utxo_byte( + CSL.BigNum.from_str( + Math.floor(parseFloat(protocolParams.coinsPerUtxoWord) / 8).toString(10) + ) + ) + .max_value_size(protocolParams.maxValueSize) + .max_tx_size(protocolParams.maxTxSize) .ex_unit_prices( CSL.ExUnitPrices.new( CSL.UnitInterval.new(CSL.BigNum.from_str('577'), CSL.BigNum.from_str('10000')), CSL.UnitInterval.new(CSL.BigNum.from_str('721'), CSL.BigNum.from_str('10000000')) ) ) - .max_value_size(5000) - .max_tx_size(16384) .build() ); }; diff --git a/packages/e2e-tests/helpers/mock-dApp-webpage/mockedDApp.js b/packages/e2e-tests/helpers/mock-dApp-webpage/mockedDApp.js index 0d9c3b9b4b..c448530bbc 100644 --- a/packages/e2e-tests/helpers/mock-dApp-webpage/mockedDApp.js +++ b/packages/e2e-tests/helpers/mock-dApp-webpage/mockedDApp.js @@ -307,9 +307,7 @@ export class MockDAppWebpage { `MockDApp::requestSigningTx Requesting signing the transaction: amount="${amount}", toAddress="${toAddress}"` ); - // the correct way is to request UTxOs for a required amount - // but currently we have this bug https://emurgo.atlassian.net/browse/YOEXT-932 - const UTXOsreposne = await this.getUTXOs(undefined, false); + const UTXOsreposne = await this.getUTXOs(amount, false); this.logger.info( `MockDApp::requestSigningTx The UTXOsreposne: ${JSON.stringify(UTXOsreposne, null, 2)}` ); diff --git a/packages/e2e-tests/helpers/mock-dApp-webpage/networkConfig.js b/packages/e2e-tests/helpers/mock-dApp-webpage/networkConfig.js new file mode 100644 index 0000000000..319b27469f --- /dev/null +++ b/packages/e2e-tests/helpers/mock-dApp-webpage/networkConfig.js @@ -0,0 +1,11 @@ +export const protocolParams = Object.freeze({ + linearFee: { + minFeeA: '44', + minFeeB: '155381', + }, + coinsPerUtxoWord: '34482', + poolDeposit: '500000000', + keyDeposit: '2000000', + maxValueSize: 5000, + maxTxSize: 16384, +}); diff --git a/packages/e2e-tests/pages/dapp/dAppBase.page.js b/packages/e2e-tests/pages/dapp/dAppBase.page.js index b621e9e9d5..53aa0905c2 100644 --- a/packages/e2e-tests/pages/dapp/dAppBase.page.js +++ b/packages/e2e-tests/pages/dapp/dAppBase.page.js @@ -15,6 +15,7 @@ class DAppBase extends BasePage { const windowTitle = await this.driver.getTitle(); const result = windowTitle === popupConnectorWindowTitle; this.logger.info(`DAppBase::connectorPopUpIsDisplayed pop-up window is displayed: ${result}`); + await this.driver.manage().window().maximize(); return result; } diff --git a/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js b/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js index 61b4426444..6b0c1c51c2 100644 --- a/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js +++ b/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js @@ -4,7 +4,6 @@ import { quarterSecond, twoSeconds, } from '../../../helpers/timeConstants.js'; -import BasePage from '../../basepage.js'; import WalletTab from './walletTab.page.js'; import ExportTransactionsModal from './transactionsModals/exportTransactionModal.page.js'; import { convertPrettyDateToNormal, convertPrettyTimeToNormal } from '../../../utils/utils.js'; @@ -350,29 +349,42 @@ export class TransactionsSubTab extends WalletTab { return loaderIsNotDisplayed; } - async downloadAllTxs() { - this.logger.info(`TransactionsSubTab::downloadAllTxs is called`); - while (true) { - const showMoreIsDisplayed = this.showMoreBtnIsDisplayed(); - const loaderIsDisplayed = this.loaderIsDisplayed(); - if (!(await showMoreIsDisplayed) && !(await loaderIsDisplayed)) { - break; - } - if (await showMoreIsDisplayed) { - await this.scrollIntoView(this.showMoreTxsButtonLocator); - await this.click(this.showMoreTxsButtonLocator); - await this.sleep(quarterSecond); - continue; + async _loadMore() { + const showMoreIsDisplayed = this.showMoreBtnIsDisplayed(); + const loaderIsDisplayed = this.loaderIsDisplayed(); + if (!(await showMoreIsDisplayed) && !(await loaderIsDisplayed)) { + return false; + } + if (await showMoreIsDisplayed) { + await this.scrollIntoView(this.showMoreTxsButtonLocator); + await this.click(this.showMoreTxsButtonLocator); + await this.sleep(quarterSecond); + return true; + } + if (await loaderIsDisplayed) { + await this.scrollIntoView(this.txsLoaderSpinnerLocator); + const result = await this.waitLoaderIsNotDisplayed(fiveSeconds, quarterSecond); + if (!result) { + throw new Error(`Transactions are still loading after ${fiveSeconds / 1000} seconds`); } - if (await loaderIsDisplayed) { - await this.scrollIntoView(this.txsLoaderSpinnerLocator); - const result = await this.waitLoaderIsNotDisplayed(fiveSeconds, quarterSecond); - if (!result) { - throw new Error(`Transactions are still loading after ${fiveSeconds / 1000} seconds`); - } + } + } + async loadMoreTxs(amountOfLoads = 1) { + this.logger.info(`TransactionsSubTab::loadMoreTxs is called. Amount of loads ${amountOfLoads}`); + for (let tryNumber = 0; tryNumber < amountOfLoads; tryNumber++) { + const canLoadMore = await this._loadMore(); + if (!canLoadMore) { + break; } } } + async downloadAllTxs() { + this.logger.info(`TransactionsSubTab::downloadAllTxs is called`); + let canLoadMore = true; + while (canLoadMore) { + canLoadMore = await this._loadMore(); + } + } async __getAddrsLinks(groupIndex, txIndex, addrsAmount, getLocatorFunc) { this.logger.info(`TransactionsSubTab::__getAddrsLinks is called`); const links = []; diff --git a/packages/e2e-tests/pages/walletCommonBase.page.js b/packages/e2e-tests/pages/walletCommonBase.page.js index f0270b2bba..774e413732 100644 --- a/packages/e2e-tests/pages/walletCommonBase.page.js +++ b/packages/e2e-tests/pages/walletCommonBase.page.js @@ -125,8 +125,8 @@ class WalletCommonBase extends BasePage { const rawBalanceText = await walletBalanceElem.getText(); const adaBalance = Number(rawBalanceText.split(' ')[0]); - await this.waitForElement(this.walletFiatBalanceTextLocator); - const rawFiatBalanceText = await this.getText(this.walletFiatBalanceTextLocator); + const walletFiatBalanceElem = await this.waitForElement(this.walletFiatBalanceTextLocator); + const rawFiatBalanceText = await walletFiatBalanceElem.getText(); const [fiatBalanceStr, fiatCurrency] = rawFiatBalanceText.split(' '); const fiatBalance = fiatBalanceStr === '-' ? 0 : Number(fiatBalanceStr); diff --git a/packages/e2e-tests/test/08_downloadingLogs.test.js b/packages/e2e-tests/test/08_downloadingLogs.test.js index 32bfbfb285..5e3f78ac35 100644 --- a/packages/e2e-tests/test/08_downloadingLogs.test.js +++ b/packages/e2e-tests/test/08_downloadingLogs.test.js @@ -61,7 +61,7 @@ describe('Downloading logs for support', function () { expect(allDownloadedFiles.length).to.equal(1); // check file name const fileName = allDownloadedFiles[0]; - expect(fileName).to.match(/(\d+.)+\d+T(\d+.)+\d+\+\d+.\d+-yoroi\.log/gi); + expect(fileName).to.match(/(\d+.?)+yoroi\.log/gi); // check downloaded file is not empty const fileContent = getDownloadedFileContent(fileName); expect(fileContent, 'Support log file is empty').to.not.be.empty; diff --git a/packages/e2e-tests/test/12_loadingAllTransactions.test.js b/packages/e2e-tests/test/12_loadingAllTransactions.test.js index 08c219b2ca..8d185c0f96 100644 --- a/packages/e2e-tests/test/12_loadingAllTransactions.test.js +++ b/packages/e2e-tests/test/12_loadingAllTransactions.test.js @@ -10,7 +10,7 @@ import driversPoolsManager from '../utils/driversPool.js'; const testWallet = getSpendableWallet(); -describe('Loading all txs', function () { +describe('Show more txs 5 times', function () { this.timeout(5 * oneMinute); let webdriver = null; let logger = null; @@ -34,9 +34,9 @@ describe('Loading all txs', function () { expect(displayedTxsAmount, 'Incorrect amount of txs is displayed').to.equal(20); }); - it('Load all txs and check amount', async function () { + it('Load txs and check amount', async function () { const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.downloadAllTxs(); + await transactionsPage.loadMoreTxs(5); const displayedTxsAmount = await transactionsPage.getAmountOfTxs(); expect(displayedTxsAmount, 'The amount of txs is different from expected').to.be.at.least( testWallet.minTxs diff --git a/packages/e2e-tests/utils/driverBootstrap.js b/packages/e2e-tests/utils/driverBootstrap.js index 7b65532541..bc5a3fbebc 100644 --- a/packages/e2e-tests/utils/driverBootstrap.js +++ b/packages/e2e-tests/utils/driverBootstrap.js @@ -45,8 +45,8 @@ const getBraveBuilder = () => { '--disable-gpu', // Disables GPU hardware acceleration. If software renderer is not in place, then the GPU process won't launch '--disable-dev-shm-usage', // The /dev/shm partition is too small in certain VM environments, causing Chrome to fail or crash '--disable-setuid-sandbox', // Disable the setuid sandbox (Linux only) - '--start-maximized', // Starts the browser maximized, regardless of any previous settings - '--headless=new', // Runs the browser in the headless mode + '--start-maximized' // Starts the browser maximized, regardless of any previous settings + // '--headless=new' // Runs the browser in the headless mode ) .addExtensions(path.resolve(__extensionDir, 'Yoroi-test.crx')) ); @@ -54,22 +54,21 @@ const getBraveBuilder = () => { const getChromeBuilder = () => { const downloadsDir = getDownloadsDir(); + const chromeOpts = new chrome.Options() + .addExtensions(path.resolve(__extensionDir, 'Yoroi-test.crx')) + .addArguments('--disable-dev-shm-usage') + .addArguments('--no-sandbox') + .addArguments('--disable-gpu') + .addArguments('--disable-setuid-sandbox') + .addArguments('--start-maximized') + .setUserPreferences({ 'download.default_directory': downloadsDir }); + if (process.env.HEADLESS) { + chromeOpts.addArguments('--headless=new') + } return new Builder() .forBrowser(TargetBrowser.Chrome) .setLoggingPrefs(prefs) - .setChromeOptions( - new chrome.Options() - .addExtensions(path.resolve(__extensionDir, 'Yoroi-test.crx')) - .addArguments( - '--no-sandbox', - '--disable-gpu', - '--disable-dev-shm-usage', - '--disable-setuid-sandbox', - '--start-maximized', - // '--headless=new', // Runs the browser in the headless mode - ) - .setUserPreferences({ 'download.default_directory': downloadsDir }) - ); + .setChromeOptions(chromeOpts); }; const getFirefoxBuilder = () => { diff --git a/packages/e2e-tests/utils/driversPool.js b/packages/e2e-tests/utils/driversPool.js index 028fe67915..294eb0147b 100644 --- a/packages/e2e-tests/utils/driversPool.js +++ b/packages/e2e-tests/utils/driversPool.js @@ -7,6 +7,7 @@ import { defaultWaitTimeout } from '../helpers/timeConstants.js'; let instance = null; let poolOfDrivers = []; +let driverGlobalCounter = 0; class DriversManager { constructor() { @@ -15,9 +16,11 @@ class DriversManager { } instance = this; + this.logger = getTestLogger(`DriversManager_${Date.now()}`, 'DriversManager'); } buildDriver() { + this.logger.info(`DriversManager::buildDriver Building a new driver`); const driver = getBuilder().build(); driver.manage().setTimeouts({ implicit: defaultWaitTimeout }); if (getTargetBrowser() === TargetBrowser.FF) { @@ -28,44 +31,59 @@ class DriversManager { addNewDriverToPool() { const newDriver = this.buildDriver(); - poolOfDrivers.push(newDriver); + driverGlobalCounter++; + const driverObject = { + driver: newDriver, + driverId: driverGlobalCounter, + }; + poolOfDrivers.push(driverObject); - return newDriver; + this.logger.info( + `DriversManager::addNewDriverToPool A new driver is added. Driver ID: ${driverGlobalCounter}` + ); + return driverObject; } createPoolOfDrivers(driversAmount) { + this.logger.info( + `DriversManager::createPoolOfDrivers. Creating pool of driver. Drivers amount ${driversAmount}` + ); for (let index = 0; index < driversAmount; index++) { this.addNewDriverToPool(); } } - async prepareExtension(driver) { - const logger = getTestLogger(`DriversManager_${Date.now()}`, 'DriversManager'); - const basePage = new BasePage(driver, logger); + async prepareExtension(driverObject) { + this.logger.info(`DriversManager::prepareExtension driver ID ${driverObject.driverId}`); + const logger = getTestLogger(`DriversManager_Page_${Date.now()}`, 'DriversManager'); + const basePage = new BasePage(driverObject.driver, logger); await basePage.goToExtension(); - const initialStepsPage = new InitialStepsPage(driver, logger); + const initialStepsPage = new InitialStepsPage(driverObject.driver, logger); return initialStepsPage.skipInitialSteps(); } prepareExtensions() { const prepExtPromisesArr = []; - for (const driver of poolOfDrivers) { - prepExtPromisesArr.push(this.prepareExtension(driver)); + this.logger.info(`DriversManager::prepareExtensions Amount of drivers ${poolOfDrivers.length}`); + for (const driverObject of poolOfDrivers) { + prepExtPromisesArr.push(this.prepareExtension(driverObject)); } Promise.all(prepExtPromisesArr); } getDriverFromPool() { - const driver = poolOfDrivers.shift(); - const newDriver = this.addNewDriverToPool(); - this.prepareExtension(newDriver); + const driverObject = poolOfDrivers.shift(); + this.logger.info(`DriversManager::getDriverFromPool Returning driver ${driverObject.driverId}`); + const newDriverObject = this.addNewDriverToPool(); + this.prepareExtension(newDriverObject); - return driver; + return driverObject.driver; } async closeAllUnused() { - for (const driver of poolOfDrivers) { - await driver.quit(); + for (const driverObject of poolOfDrivers) { + this.logger.info(`DriversManager::closeAllUnused. Closing driver ${driverObject.driverId}`); + await driverObject.driver.quit(); } } } diff --git a/packages/e2e-tests/utils/hooks.mjs b/packages/e2e-tests/utils/hooks.mjs index ae1ec30fcb..8a4fcf2ebf 100644 --- a/packages/e2e-tests/utils/hooks.mjs +++ b/packages/e2e-tests/utils/hooks.mjs @@ -1,10 +1,11 @@ import driversPoolsManager from './driversPool.js'; import { defaultWaitTimeout } from '../helpers/timeConstants.js'; +import { DRIVERS_AMOUNT } from '../helpers/constants.js'; export const mochaHooks = { beforeAll(done) { this.timeout(defaultWaitTimeout); - driversPoolsManager.createPoolOfDrivers(2); + driversPoolsManager.createPoolOfDrivers(DRIVERS_AMOUNT); driversPoolsManager.prepareExtensions(); done(); }, diff --git a/packages/e2e-tests/utils/testWallets.js b/packages/e2e-tests/utils/testWallets.js index 01639cc364..0a385aba99 100644 --- a/packages/e2e-tests/utils/testWallets.js +++ b/packages/e2e-tests/utils/testWallets.js @@ -19,7 +19,7 @@ export const testWallet3 = Object.freeze({ name: 'TW_Chrome', plate: 'XZHD-1651', mnemonic: process.env.SECOND_SMOKE_TEST_WALLET, - minTxs: 250, + minTxs: 104, }); export const testWallet4 = Object.freeze({ name: 'TW_FF', From b34de3e02d1fec9d913c5ac308eab8eb3dd4c50d Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Sun, 23 Jun 2024 19:57:27 +0300 Subject: [PATCH 187/464] useMemo --- .../app/containers/swap/orders/hooks.js | 85 +++++++++---------- packages/yoroi-extension/app/reactUtils.js | 36 ++++++++ 2 files changed, 76 insertions(+), 45 deletions(-) create mode 100644 packages/yoroi-extension/app/reactUtils.js diff --git a/packages/yoroi-extension/app/containers/swap/orders/hooks.js b/packages/yoroi-extension/app/containers/swap/orders/hooks.js index 10beafa823..b2312a70bf 100644 --- a/packages/yoroi-extension/app/containers/swap/orders/hooks.js +++ b/packages/yoroi-extension/app/containers/swap/orders/hooks.js @@ -1,13 +1,14 @@ //@flow import { useSwap, } from '@yoroi/swap'; import { useQuery } from 'react-query'; -import { useEffect, useState } from 'react'; +import { useMemo } from 'react'; import type { RemoteTokenInfo } from '../../../api/ada/lib/state-fetch/types'; import { Quantities } from '../../../utils/quantities'; import { PRICE_PRECISION } from '../../../components/swap/common'; -import { maybe } from '../../../coreUtils'; +import { maybe} from '../../../coreUtils'; import type { FormattedTokenValue, OrderAsset } from './util'; import { createFormattedTokenValues } from './util'; +import { useAsyncMemo } from '../../../reactUtils'; function mapOrderAssets( from: OrderAsset, @@ -106,65 +107,59 @@ export function useRichOrders( }), }); - const [openOrders, setOpenOrders] = useState>([]); - const [completedOrders, setCompletedOrders] = useState>([]); - const [transactionTimestamps, setTransactionTimestamps] = useState<{ [string]: Date }>({}); - /** * Map open orders with verified tokens when both are fetched */ - useEffect(() => { - if (tokensMap && openOrdersData) { - setOpenOrders( - openOrdersData.map(o => { - const txId = (o.utxo.split('#')[0]); - const from = { quantity: o.from.quantity, token: tokensMap[o.from.tokenId] }; - const to = { quantity: o.to.quantity, token: tokensMap[o.to.tokenId] }; - return { - txId: txId.toLowerCase(), - utxo: o.utxo, - batcherFee: o.batcherFee, - deposit: o.deposit, - provider: o.provider, - sender: o.sender, - ...mapOrderAssets(from, to, o.valueAttached, defaultTokenInfo), - }; - }) - ); - } + const openOrders: Array = useMemo(() => { + if (!tokensMap || !openOrdersData) return []; + return openOrdersData.map(o => { + const txId = (o.utxo.split('#')[0]); + const from = { quantity: o.from.quantity, token: tokensMap[o.from.tokenId] }; + const to = { quantity: o.to.quantity, token: tokensMap[o.to.tokenId] }; + return { + txId: txId.toLowerCase(), + utxo: o.utxo, + batcherFee: o.batcherFee, + deposit: o.deposit, + provider: o.provider, + sender: o.sender, + ...mapOrderAssets(from, to, o.valueAttached, defaultTokenInfo), + }; + }); }, [tokensMap, openOrdersData]); /** * Map completed orders with verified tokens when both are fetched */ - useEffect(() => { - if (tokensMap && completedOrdersData) { - setCompletedOrders( - completedOrdersData.map(o => { - const from = { quantity: o.from.quantity, token: tokensMap[o.from.tokenId] }; - const to = { quantity: o.to.quantity, token: tokensMap[o.to.tokenId] }; - return { - txId: o.txHash.toLowerCase(), - ...mapOrderAssets(from, to, null, defaultTokenInfo), - }; - }) - ); - } + const completedOrders: Array = useMemo(() => { + if (!tokensMap || !completedOrdersData) return []; + return completedOrdersData.map(o => { + const from = { quantity: o.from.quantity, token: tokensMap[o.from.tokenId] }; + const to = { quantity: o.to.quantity, token: tokensMap[o.to.tokenId] }; + return { + txId: o.txHash.toLowerCase(), + ...mapOrderAssets(from, to, null, defaultTokenInfo), + }; + }); }, [tokensMap, completedOrdersData]); /** * Fetch missing transaction timestamps any time open or completed orders change */ - useEffect(() => { + const transactionTimestamps = useAsyncMemo<{ [string]: Date }>(async () => { const txHashes = [...openOrders, ...completedOrders].map(o => o.txId); const existingSet = new Set(Object.keys(transactionTimestamps)); const filteredTxHashes = txHashes.filter(x => !existingSet.has(x)); - if (filteredTxHashes.length === 0) return; - fetchTransactionTimestamps(filteredTxHashes).then(newTimestamps => { - setTransactionTimestamps(state => ({ ...state, ...newTimestamps })); - return null; - }).catch(e => console.error('Failed to load transaction timestamps!', e)); - }, [openOrders, completedOrders]); + if (filteredTxHashes.length > 0) { + try { + const newTimestamps = await fetchTransactionTimestamps(filteredTxHashes); + return state => ({ ...state, ...newTimestamps }); + } catch (e) { + console.error('Failed to load transaction timestamps!', e); + } + } + return useAsyncMemo.void; + }, [openOrders, completedOrders], {}); return { openOrders, completedOrders, transactionTimestamps }; } diff --git a/packages/yoroi-extension/app/reactUtils.js b/packages/yoroi-extension/app/reactUtils.js new file mode 100644 index 0000000000..592b515602 --- /dev/null +++ b/packages/yoroi-extension/app/reactUtils.js @@ -0,0 +1,36 @@ +// @flow +import { useEffect, useState } from 'react'; + +/** + * Similar to `useMemo` hook but allows async functions. + * The result of the producer function will be sent straight into a React state updater, + * so it can be either a new value directly or an updater function that accepts the previous state. + * + * @param create - the async producer function, returns a promise of: either the new version of the value or an updater function + * @param inputs - effect inputs to react to + * @param defaultValue - the value which will be returned until the async resolves + * @return {T} - returns the supplied default value until the producer function resolves and then returns whatever it has done to the state + */ +export function useAsyncMemo(create: () => Promise T)>, inputs: any, defaultValue: T): T { + const [res, setRes] = useState(defaultValue); + useEffect(() => { + create().then(res => { + if (res === useAsyncMemo.void) { + // ignore the void return + // just a tiny optimisation + } else { + // update the state + setRes(res); + } + return null; + }); + }, inputs) + return res; +} + +/** + * The value that can be returned when the result of the async producer function in the `useAsyncMemo` should not change the existing value. + * + * This is just an identity function which means the existing React state will be preserved. + */ +useAsyncMemo.void = (x: T): T => x; \ No newline at end of file From 59d31d70480658595aa7ce732c981b9069cd2df6 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Sun, 23 Jun 2024 21:42:55 +0300 Subject: [PATCH 188/464] ubuntu runner for extension tests --- .github/workflows/e2e-tests.yml | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index e11ff6d600..17824cb94c 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -44,7 +44,7 @@ jobs: Ext-General: if: github.event.review && (github.event.review.state == 'approved' || contains(github.event.review.body, '/check') || contains(github.event.review.body, '/ext-general')) - runs-on: macos-latest + runs-on: ubuntu-latest needs: Build-Extension strategy: matrix: @@ -56,14 +56,19 @@ jobs: - name: Forcefully update the Chrome browser if: matrix.browser=='chrome' - run: brew update && brew upgrade --cask google-chrome + run: | + wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - + sudo sh -c 'echo "deb [arch=amd64] https://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' + sudo apt-get update + sudo apt-get --only-upgrade install google-chrome-stable - - name: Forcefully install Firefox for Developers browser + - name: Install Firefox Developer Edition if: matrix.browser=='firefox' run: | - brew update - brew tap homebrew/cask-versions && brew install --cask firefox-developer-edition - echo "FIREFOX_BIN=/Applications/Firefox Developer Edition.app/Contents/MacOS/firefox-bin" >> $GITHUB_ENV + wget -c "https://download.mozilla.org/?product=firefox-devedition-latest-ssl&os=linux64&lang=en-US" -O - | sudo tar -xj -C /opt + sudo rm -rf /opt/firefoxdev + sudo mv /opt/firefox /opt/firefoxdev + echo "FIREFOX_BIN=/opt/firefoxdev/firefox-bin" >> $GITHUB_ENV - name: Read .nvmrc id: nvm @@ -100,6 +105,14 @@ jobs: name: builtApp path: ./packages/yoroi-extension + - name: Install ChromeDriver + uses: nanasess/setup-chromedriver@v2 + + - name: Run Xvfb + run: | + export DISPLAY=:99 + sudo Xvfb -ac :99 -screen 0 1920x1080x24 > /dev/null 2>&1 & + - name: Run tests working-directory: ./packages/e2e-tests env: From 521502175b77b02c9a724c5c32c7c704a63f4e84 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Sun, 23 Jun 2024 21:57:23 +0300 Subject: [PATCH 189/464] updated command --- packages/e2e-tests/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/e2e-tests/package.json b/packages/e2e-tests/package.json index 9357838ab9..4a0e7ebbef 100644 --- a/packages/e2e-tests/package.json +++ b/packages/e2e-tests/package.json @@ -23,7 +23,7 @@ "test:base:one": "npm run test:clean:logs && mocha --require $npm_package_config_hooksPath $npm_package_config_testPathGeneral -g", "test:hw:base:one": "npm run test:clean:logs && mocha --require $npm_package_config_hooksPath $npm_package_config_testPathHW -g", "test:dapp:base:one": "npm run test:clean:logs && mocha --require $npm_package_config_hooksPath $npm_package_config_testPathDApp -g", - "test:chrome": "env TARGETBROWSER=chrome HEADLESS=true npm run test:base:sequintel", + "test:chrome": "env TARGETBROWSER=chrome npm run test:base:sequintel", "test:chrome:bl": "env TARGETBROWSER=chrome npm run test:base:sequintel:bl", "test:chrome:hw": "env TARGETBROWSER=chrome npm run test:hw:base:sequintel", "test:chrome:dapp": "cross-env TARGETBROWSER=chrome HEADLESS=true npm run test:dapp:base:sequintel", From 96278c04b327e9f7450eb777fb1b43dd047b64da Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Sun, 23 Jun 2024 22:05:20 +0300 Subject: [PATCH 190/464] headless --- packages/e2e-tests/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/e2e-tests/package.json b/packages/e2e-tests/package.json index 4a0e7ebbef..ded9c8879a 100644 --- a/packages/e2e-tests/package.json +++ b/packages/e2e-tests/package.json @@ -23,7 +23,7 @@ "test:base:one": "npm run test:clean:logs && mocha --require $npm_package_config_hooksPath $npm_package_config_testPathGeneral -g", "test:hw:base:one": "npm run test:clean:logs && mocha --require $npm_package_config_hooksPath $npm_package_config_testPathHW -g", "test:dapp:base:one": "npm run test:clean:logs && mocha --require $npm_package_config_hooksPath $npm_package_config_testPathDApp -g", - "test:chrome": "env TARGETBROWSER=chrome npm run test:base:sequintel", + "test:chrome": "cross-env TARGETBROWSER=chrome HEADLESS=true npm run test:base:sequintel", "test:chrome:bl": "env TARGETBROWSER=chrome npm run test:base:sequintel:bl", "test:chrome:hw": "env TARGETBROWSER=chrome npm run test:hw:base:sequintel", "test:chrome:dapp": "cross-env TARGETBROWSER=chrome HEADLESS=true npm run test:dapp:base:sequintel", From e5580a389fed6f616483849e81a9ea9be48f8263 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Sun, 23 Jun 2024 22:41:42 +0300 Subject: [PATCH 191/464] starting workarond for ubuntu --- .../exportTransactionModal.page.js | 12 +++++++++++- packages/e2e-tests/utils/utils.js | 4 ++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/exportTransactionModal.page.js b/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/exportTransactionModal.page.js index 16861820c3..19c38a3a23 100644 --- a/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/exportTransactionModal.page.js +++ b/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/exportTransactionModal.page.js @@ -1,5 +1,6 @@ import BasePage from '../../../basepage.js'; import { twoSeconds, quarterSecond } from '../../../../helpers/timeConstants.js'; +import { isHeadless, isLinux } from '../../../../utils/utils.js'; class ExportTransactionsModal extends BasePage { // locators @@ -40,6 +41,10 @@ class ExportTransactionsModal extends BasePage { locator: '.ErrorBlock_component', method: 'css', }; + exportUbuntuPenIconButtonLocator = { + locator: '.MuiPickersToolbar-penIconButton', + method: 'css', + } // methods async isDisplayed() { this.logger.info(`ExportTransactionsModal::isDisplayed is called`); @@ -60,7 +65,12 @@ class ExportTransactionsModal extends BasePage { async setStartDate(dateString) { this.logger.info(`ExportTransactionsModal::setStartDate is called`); await this.click(this.exportStartDateInputLocator); - await this.input(this.exportStartDateInputLocator, dateString); + if (isLinux() && isHeadless()) { + await this.waitForElement(this.exportUbuntuPenIconButtonLocator); + await this.click(this.exportUbuntuPenIconButtonLocator); + } else { + await this.input(this.exportStartDateInputLocator, dateString); + } } async checkStartDateErrorMsg() { this.logger.info(`ExportTransactionsModal::checkStartDateErrorMsg is called`); diff --git a/packages/e2e-tests/utils/utils.js b/packages/e2e-tests/utils/utils.js index 691cceece1..0a7c6bebae 100644 --- a/packages/e2e-tests/utils/utils.js +++ b/packages/e2e-tests/utils/utils.js @@ -43,6 +43,10 @@ export const isFirefox = () => getTargetBrowser() === TargetBrowser.FF; export const isChrome = () => getTargetBrowser() === TargetBrowser.Chrome; export const isBrave = () => getTargetBrowser() === TargetBrowser.Brave; +export const getCurrentOS = () => process.platform; +export const isLinux = () => getCurrentOS() === 'linux'; +export const isHeadless = () => process.env.HEADLESS === true; + export const createTestRunDataDir = testSuiteName => { const clearedTestSuiteName = testSuiteName.replace(/[ |,]/gi, '_'); const testsDataDir = testRunDir(getTargetBrowser()); From 4b6e843899fbe3588e8786b072c5d69f77e3c9c8 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Mon, 24 Jun 2024 01:16:23 +0300 Subject: [PATCH 192/464] fix ubuntu export --- .../exportTransactionModal.page.js | 36 +++++++++++++++++-- .../test/09_exportTransactions.test.js | 2 +- packages/e2e-tests/utils/utils.js | 2 +- 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/exportTransactionModal.page.js b/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/exportTransactionModal.page.js index 19c38a3a23..2fc19d94bd 100644 --- a/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/exportTransactionModal.page.js +++ b/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/exportTransactionModal.page.js @@ -41,10 +41,23 @@ class ExportTransactionsModal extends BasePage { locator: '.ErrorBlock_component', method: 'css', }; + // locators only for headless ubuntu exportUbuntuPenIconButtonLocator = { locator: '.MuiPickersToolbar-penIconButton', method: 'css', } + exportUbuntuClickInputLocator = { + locator: '.MuiInputBase-formControl', + method: 'css', + } + exportUbuntuDateInputLocator = { + locator: '.MuiOutlinedInput-input', + method: 'css', + } + exportUbuntuOkButtonLocator = { + locator: 'div.MuiDialogActions-root > button:nth-child(2)', + method: 'css', + } // methods async isDisplayed() { this.logger.info(`ExportTransactionsModal::isDisplayed is called`); @@ -62,12 +75,25 @@ class ExportTransactionsModal extends BasePage { return false; } } + async _ubuntuHeadlessSetDate(dateString){ + await this.waitForElement(this.exportUbuntuPenIconButtonLocator); + await this.click(this.exportUbuntuPenIconButtonLocator); + + const allForms = await this.findElements(this.exportUbuntuClickInputLocator); + const lastForm = allForms[allForms.length - 1]; + await lastForm.click(); + + const allInputs = await this.findElements(this.exportUbuntuDateInputLocator); + const lastInput = allInputs[allInputs.length - 1]; + await this.inputElem(lastInput, dateString); + + await this.click(this.exportUbuntuOkButtonLocator); + } async setStartDate(dateString) { this.logger.info(`ExportTransactionsModal::setStartDate is called`); await this.click(this.exportStartDateInputLocator); if (isLinux() && isHeadless()) { - await this.waitForElement(this.exportUbuntuPenIconButtonLocator); - await this.click(this.exportUbuntuPenIconButtonLocator); + await this._ubuntuHeadlessSetDate(dateString); } else { await this.input(this.exportStartDateInputLocator, dateString); } @@ -79,7 +105,11 @@ class ExportTransactionsModal extends BasePage { async setEndDate(dateString) { this.logger.info(`ExportTransactionsModal::setEndDate is called`); await this.click(this.exportEndDateInputLocator); - await this.input(this.exportEndDateInputLocator, dateString); + if (isLinux() && isHeadless()) { + await this._ubuntuHeadlessSetDate(dateString); + } else { + await this.input(this.exportEndDateInputLocator, dateString); + } } async checkEndDateErrorMsg() { this.logger.info(`ExportTransactionsModal::checkEndDateErrorMsg is called`); diff --git a/packages/e2e-tests/test/09_exportTransactions.test.js b/packages/e2e-tests/test/09_exportTransactions.test.js index 2ad1b05d3e..29171b0af6 100644 --- a/packages/e2e-tests/test/09_exportTransactions.test.js +++ b/packages/e2e-tests/test/09_exportTransactions.test.js @@ -16,7 +16,7 @@ import driversPoolsManager from '../utils/driversPool.js'; import { compareExportedTxsAndDisplayedTxs } from '../helpers/customChecks.js'; import AddNewWallet from '../pages/addNewWallet.page.js'; -describe('Export transactions', function () { +describe('Export transactions, positive', function () { this.timeout(2 * oneMinute); let webdriver = null; let logger = null; diff --git a/packages/e2e-tests/utils/utils.js b/packages/e2e-tests/utils/utils.js index 0a7c6bebae..cb1a0c9cd3 100644 --- a/packages/e2e-tests/utils/utils.js +++ b/packages/e2e-tests/utils/utils.js @@ -45,7 +45,7 @@ export const isBrave = () => getTargetBrowser() === TargetBrowser.Brave; export const getCurrentOS = () => process.platform; export const isLinux = () => getCurrentOS() === 'linux'; -export const isHeadless = () => process.env.HEADLESS === true; +export const isHeadless = () => process.env.HEADLESS === 'true'; export const createTestRunDataDir = testSuiteName => { const clearedTestSuiteName = testSuiteName.replace(/[ |,]/gi, '_'); From ed755a9464d9584cd4a87fef80a3ec8fe75a7ff9 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Mon, 24 Jun 2024 01:26:50 +0300 Subject: [PATCH 193/464] minor update for an export negative case --- .../test/10_exportTxsNegative.test.js | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/packages/e2e-tests/test/10_exportTxsNegative.test.js b/packages/e2e-tests/test/10_exportTxsNegative.test.js index 9a6207c570..692db095a3 100644 --- a/packages/e2e-tests/test/10_exportTxsNegative.test.js +++ b/packages/e2e-tests/test/10_exportTxsNegative.test.js @@ -2,7 +2,13 @@ import BasePage from '../pages/basepage.js'; import { customAfterEach } from '../utils/customHooks.js'; import TransactionsSubTab from '../pages/wallet/walletTab/walletTransactions.page.js'; import { expect } from 'chai'; -import { cleanDownloads, getTestLogger, getListOfDownloadedFiles } from '../utils/utils.js'; +import { + cleanDownloads, + getTestLogger, + getListOfDownloadedFiles, + isLinux, + isHeadless, +} from '../utils/utils.js'; import { oneMinute } from '../helpers/timeConstants.js'; import driversPoolsManager from '../utils/driversPool.js'; import { Colors } from '../helpers/constants.js'; @@ -57,10 +63,14 @@ describe('Export transactions, negative cases', function () { const exportDialog = new TransactionsSubTab(webdriver, logger).getExportDialog(); const btnEnabled = await exportDialog.exportButtonIsEnabled(); expect(btnEnabled, 'The export button is enabled').to.be.false; - const startInputColor = await exportDialog.getStartDateInputBorderColor(); - expect(startInputColor, 'Start date input is not higlighted').to.equal(Colors.errorRed); - const endInputColor = await exportDialog.getEndDateInputBorderColor(); - expect(endInputColor, 'End date input is not higlighted').to.equal(Colors.errorRed); + if (isLinux() && isHeadless()) { + console.warn('Color checks are skipped.'); + } else { + const startInputColor = await exportDialog.getStartDateInputBorderColor(); + expect(startInputColor, 'Start date input is not higlighted').to.equal(Colors.errorRed); + const endInputColor = await exportDialog.getEndDateInputBorderColor(); + expect(endInputColor, 'End date input is not higlighted').to.equal(Colors.errorRed); + } }); }); describe('The end date is earlier then the start date', function () { From 426c74409827fd2550e778eb5ee1bcd2fb3dfaee Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Mon, 24 Jun 2024 01:38:22 +0300 Subject: [PATCH 194/464] fixing editing memo for non-macos --- packages/e2e-tests/pages/basepage.js | 7 ++++++- packages/e2e-tests/utils/utils.js | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/e2e-tests/pages/basepage.js b/packages/e2e-tests/pages/basepage.js index cc6c5493c2..5f37042c66 100644 --- a/packages/e2e-tests/pages/basepage.js +++ b/packages/e2e-tests/pages/basepage.js @@ -8,6 +8,7 @@ import { getSnapshotObjectFromJSON, isFirefox, isChrome, + isMacOS, } from '../utils/utils.js'; import { getExtensionUrl } from '../utils/driverBootstrap.js'; import { @@ -185,7 +186,11 @@ class BasePage { async clearInputAll(locator) { this.logger.info(`BasePage::clearInputAll is called. Locator: ${JSON.stringify(locator)}`); const input = await this.findElement(locator); - await input.sendKeys(Key.chord(Key.COMMAND, 'a')); + if (isMacOS()) { + await input.sendKeys(Key.chord(Key.COMMAND, 'a')); + } else { + await input.sendKeys(Key.chord(Key.CONTROL, 'a')); + } await this.sleep(200); await input.sendKeys(Key.NULL); await input.sendKeys(Key.BACK_SPACE); diff --git a/packages/e2e-tests/utils/utils.js b/packages/e2e-tests/utils/utils.js index cb1a0c9cd3..f5023d99d2 100644 --- a/packages/e2e-tests/utils/utils.js +++ b/packages/e2e-tests/utils/utils.js @@ -45,6 +45,7 @@ export const isBrave = () => getTargetBrowser() === TargetBrowser.Brave; export const getCurrentOS = () => process.platform; export const isLinux = () => getCurrentOS() === 'linux'; +export const isMacOS = () => getCurrentOS() === 'darwin'; export const isHeadless = () => process.env.HEADLESS === 'true'; export const createTestRunDataDir = testSuiteName => { From 0b3f29f866a9c50993ea51ca965c6584652cab01 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Mon, 24 Jun 2024 10:47:47 +0300 Subject: [PATCH 195/464] fixing swap reacting to asset inputs --- .../containers/swap/context/swap-form/SwapFormProvider.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js b/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js index 2d09f15de1..7dca1bba4e 100644 --- a/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js +++ b/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js @@ -101,6 +101,11 @@ export default function SwapFormProvider({ swapStore, children }: Props): Node { ...defaultSwapFormState, }); + const { + sellQuantity: { isTouched: sellTouched }, + buyQuantity: { isTouched: buyTouched }, + } = swapFormState; + const actions = { sellTouched: (token?: AssetAmount) => dispatch({ type: SwapFormActionTypeValues.SellTouched, token }), @@ -162,7 +167,7 @@ export default function SwapFormProvider({ swapStore, children }: Props): Node { .then(poolsArray => poolPairsChanged(poolsArray)) .catch(err => console.error(`Failed to fetch pools for pair: ${sellTokenId}/${buyTokenId}`, err)); } - }, [sellTokenId, buyTokenId]); + }, [sellTokenId, buyTokenId, sellTouched, buyTouched]); const clearErrors = useCallback(() => { if (swapFormState.sellQuantity.error != null) actions.sellAmountErrorChanged(null); From 4efd5db15db6816e16539efb5b3818a653c9de98 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Mon, 24 Jun 2024 15:12:43 +0300 Subject: [PATCH 196/464] fixed asset updating effects in swap form --- .../containers/swap/asset-swap/SwapPage.js | 3 +- .../context/swap-form/SwapFormProvider.js | 50 +++++++++++-------- 2 files changed, 32 insertions(+), 21 deletions(-) diff --git a/packages/yoroi-extension/app/containers/swap/asset-swap/SwapPage.js b/packages/yoroi-extension/app/containers/swap/asset-swap/SwapPage.js index 5249a67914..ff084aa017 100644 --- a/packages/yoroi-extension/app/containers/swap/asset-swap/SwapPage.js +++ b/packages/yoroi-extension/app/containers/swap/asset-swap/SwapPage.js @@ -47,7 +47,7 @@ function SwapPage(props: StoresAndActionsProps): Node { }, frontendFeeTiersChanged, } = useSwap(); - const { sellTokenInfo, buyTokenInfo } = useSwapForm(); + const { sellTokenInfo, buyTokenInfo, resetSwapForm } = useSwapForm(); const isMarketOrder = orderType === 'market'; const impact = isMarketOrder ? Number(selectedPoolCalculation?.prices.priceImpact ?? 0) : 0; @@ -239,6 +239,7 @@ function SwapPage(props: StoresAndActionsProps): Node { refreshWallet: () => props.stores.wallets.refreshWalletFromRemote(wallet), }); setOrderStepValue(2); + resetSwapForm(); } catch (e) { handleTransactionError(e); } finally { diff --git a/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js b/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js index 7dca1bba4e..fa28429735 100644 --- a/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js +++ b/packages/yoroi-extension/app/containers/swap/context/swap-form/SwapFormProvider.js @@ -102,8 +102,8 @@ export default function SwapFormProvider({ swapStore, children }: Props): Node { }); const { - sellQuantity: { isTouched: sellTouched }, - buyQuantity: { isTouched: buyTouched }, + sellTokenInfo: { ticker: sellTicker }, + buyTokenInfo: { ticker: buyTicker }, } = swapFormState; const actions = { @@ -141,33 +141,43 @@ export default function SwapFormProvider({ swapStore, children }: Props): Node { dispatch({ type: SwapFormActionTypeValues.SellAmountErrorChanged, error }), }; - // on mount + /** + * On mount + */ + useEffect(() => actions.resetSwapForm(), []); + /** + * On unmount + */ + useEffect(() => () => actions.resetSwapForm(), []); + + /** + * On sell asset changes - set default asset in case none is selected + */ useEffect(() => { - // RESET - actions.resetSwapForm(); - // SELECT DEFAULT SELL - const assets = swapStore.assets; - const defaultAsset = assets[0]; - if (defaultAsset != null) { - actions.sellTouched({ ...defaultAsset }); - sellTokenInfoChanged({ - id: defaultAsset.id, - decimals: defaultAsset.decimals, - }); + if (sellTokenId === '' && sellTicker == null) { + // SELECT DEFAULT SELL + const assets = swapStore.assets; + const defaultAsset = assets[0]; + if (defaultAsset != null) { + actions.sellTouched({ ...defaultAsset }); + sellTokenInfoChanged({ + id: defaultAsset.id, + decimals: defaultAsset.decimals, + }); + } } - }, []); - - // on unmount - useEffect(() => () => actions.resetSwapForm(), []); + }, [sellTokenId, sellTicker]); - // on token pair changes + /** + * On token pair changes - fetch pools for pair + */ useEffect(() => { if (sellTokenId != null && buyTokenId != null && sellTokenId !== buyTokenId) { pools.list.byPair({ tokenA: sellTokenId, tokenB: buyTokenId }) .then(poolsArray => poolPairsChanged(poolsArray)) .catch(err => console.error(`Failed to fetch pools for pair: ${sellTokenId}/${buyTokenId}`, err)); } - }, [sellTokenId, buyTokenId, sellTouched, buyTouched]); + }, [sellTokenId, buyTokenId, sellTicker, buyTicker]); const clearErrors = useCallback(() => { if (swapFormState.sellQuantity.error != null) actions.sellAmountErrorChanged(null); From f129fde2d9e9e704656255a0e2a3ab1fb6c7f112 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Mon, 24 Jun 2024 15:21:22 +0300 Subject: [PATCH 197/464] lint fixes --- packages/yoroi-extension/app/reactUtils.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/yoroi-extension/app/reactUtils.js b/packages/yoroi-extension/app/reactUtils.js index 592b515602..f3481bdb37 100644 --- a/packages/yoroi-extension/app/reactUtils.js +++ b/packages/yoroi-extension/app/reactUtils.js @@ -14,16 +14,16 @@ import { useEffect, useState } from 'react'; export function useAsyncMemo(create: () => Promise T)>, inputs: any, defaultValue: T): T { const [res, setRes] = useState(defaultValue); useEffect(() => { - create().then(res => { - if (res === useAsyncMemo.void) { + create().then(r => { + if (r === useAsyncMemo.void) { // ignore the void return // just a tiny optimisation } else { // update the state - setRes(res); + setRes(r); } return null; - }); + }).catch(e => { throw e; }); }, inputs) return res; } From 9a79ea7a732a38d21524fb1600185ad86b8c61fd Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Mon, 24 Jun 2024 16:13:16 +0300 Subject: [PATCH 198/464] minor workflows update --- .github/workflows/e2e-tests.yml | 63 ++++++++++++++++++++++++--------- 1 file changed, 47 insertions(+), 16 deletions(-) diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index 17824cb94c..1678d3e661 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -9,7 +9,15 @@ on: jobs: Build-Extension: - if: github.event.review && (github.event.review.state == 'approved' || contains(github.event.review.body, '/check') || contains(github.event.review.body, '/ext-general') || contains(github.event.review.body, '/ext-failing') || contains(github.event.review.body, '/dapp-general')) + if: github.event.review && + ( + github.event.review.state == 'approved' || + contains(github.event.review.body, '/check') || + contains(github.event.review.body, '/ext-general') || + contains(github.event.review.body, '/ext-failing') || + contains(github.event.review.body, '/dapp-general') || + contains(github.event.review.body, '/dapp-failing') + ) runs-on: ubuntu-latest steps: @@ -43,7 +51,12 @@ jobs: overwrite: true Ext-General: - if: github.event.review && (github.event.review.state == 'approved' || contains(github.event.review.body, '/check') || contains(github.event.review.body, '/ext-general')) + if: github.event.review && + ( + github.event.review.state == 'approved' || + contains(github.event.review.body, '/check') || + contains(github.event.review.body, '/ext-general') + ) runs-on: ubuntu-latest needs: Build-Extension strategy: @@ -79,6 +92,10 @@ jobs: with: node-version: "${{ steps.nvm.outputs.NVMRC }}" + - name: Install packages + working-directory: ./packages/e2e-tests + run: npm install + - name: Cache extension node modules # https://docs.github.com/en/actions/guides/caching-dependencies-to-speed-up-workflows uses: actions/cache@v4 @@ -88,17 +105,13 @@ jobs: # https://github.com/actions/cache/blob/main/examples.md#node---npm # It is recommended to cache the NPM cache (~/.npm) instead of node_modules. # But we put node version into the cache key and cache node_modules. - path: packages/yoroi-extension/node_modules - key: ${{ runner.os }}-build-${{ env.cache-name }}-node-${{ steps.nvm.outputs.NVMRC }}-${{ hashFiles('packages/yoroi-extension/package-lock.json') }} + path: packages/e2e-tests/node_modules + key: ${{ runner.os }}-build-${{ env.cache-name }}-node-${{ steps.nvm.outputs.NVMRC }}-${{ hashFiles('packages/e2e-tests/package-lock.json') }} restore-keys: | ${{ runner.os }}-build-${{ env.cache-name }}- ${{ runner.os }}-build- ${{ runner.os }}- - - name: Install packages - working-directory: ./packages/e2e-tests - run: npm install - - name: Download app uses: actions/download-artifact@v4 with: @@ -133,7 +146,7 @@ jobs: Ext-Failing: if: github.event.review && contains(github.event.review.body, '/ext-failing') - runs-on: macos-latest + runs-on: ubuntu-latest needs: Build-Extension strategy: matrix: @@ -145,14 +158,19 @@ jobs: - name: Forcefully update the Chrome browser if: matrix.browser=='chrome' - run: brew update && brew upgrade --cask google-chrome + run: | + wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - + sudo sh -c 'echo "deb [arch=amd64] https://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' + sudo apt-get update + sudo apt-get --only-upgrade install google-chrome-stable - - name: Forcefully install Firefox for Developers browser + - name: Install Firefox Developer Edition if: matrix.browser=='firefox' run: | - brew update - brew tap homebrew/cask-versions && brew install --cask firefox-developer-edition - echo "FIREFOX_BIN=/Applications/Firefox Developer Edition.app/Contents/MacOS/firefox-bin" >> $GITHUB_ENV + wget -c "https://download.mozilla.org/?product=firefox-devedition-latest-ssl&os=linux64&lang=en-US" -O - | sudo tar -xj -C /opt + sudo rm -rf /opt/firefoxdev + sudo mv /opt/firefox /opt/firefoxdev + echo "FIREFOX_BIN=/opt/firefoxdev/firefox-bin" >> $GITHUB_ENV - name: Read .nvmrc id: nvm @@ -171,7 +189,7 @@ jobs: # https://docs.github.com/en/actions/guides/caching-dependencies-to-speed-up-workflows uses: actions/cache@v4 env: - cache-name: cache-yoroi-e2e-tests-node-modules + cache-name: cache-yoroi-extension-node-modules with: # https://github.com/actions/cache/blob/main/examples.md#node---npm # It is recommended to cache the NPM cache (~/.npm) instead of node_modules. @@ -189,6 +207,14 @@ jobs: name: builtApp path: ./packages/yoroi-extension + - name: Install ChromeDriver + uses: nanasess/setup-chromedriver@v2 + + - name: Run Xvfb + run: | + export DISPLAY=:99 + sudo Xvfb -ac :99 -screen 0 1920x1080x24 > /dev/null 2>&1 & + - name: Run tests working-directory: ./packages/e2e-tests env: @@ -208,7 +234,12 @@ jobs: ./packages/e2e-tests/testRunsData_${{ matrix.browser }} DApp-General: - if: github.event.review && (github.event.review.state == 'approved' || contains(github.event.review.body, '/check') || contains(github.event.review.body, '/dapp-general')) + if: github.event.review && + ( + github.event.review.state == 'approved' || + contains(github.event.review.body, '/check') || + contains(github.event.review.body, '/dapp-general') + ) runs-on: macos-latest needs: Build-Extension strategy: From c17d110b5a6bc1b50a36a8f461dc87df782ac1be Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Mon, 24 Jun 2024 18:41:19 +0300 Subject: [PATCH 199/464] swap input editing fix --- packages/yoroi-extension/app/components/swap/SwapInput.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/components/swap/SwapInput.js b/packages/yoroi-extension/app/components/swap/SwapInput.js index ee6552c62c..ae433227df 100644 --- a/packages/yoroi-extension/app/components/swap/SwapInput.js +++ b/packages/yoroi-extension/app/components/swap/SwapInput.js @@ -40,7 +40,7 @@ export default function SwapInput({ const { id, amount: quantity = undefined, ticker } = tokenInfo || {}; const handleChange = e => { - if (!disabled && value !== quantity) { + if (!disabled) { handleAmountChange(e.target.value); } }; From fb87d4b7e1a809e909d3ea081690454d76fb61df Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Mon, 24 Jun 2024 18:54:03 +0300 Subject: [PATCH 200/464] fix swap input error handling --- .../containers/swap/asset-swap/SwapPage.js | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/packages/yoroi-extension/app/containers/swap/asset-swap/SwapPage.js b/packages/yoroi-extension/app/containers/swap/asset-swap/SwapPage.js index ff084aa017..741669c5b8 100644 --- a/packages/yoroi-extension/app/containers/swap/asset-swap/SwapPage.js +++ b/packages/yoroi-extension/app/containers/swap/asset-swap/SwapPage.js @@ -47,7 +47,13 @@ function SwapPage(props: StoresAndActionsProps): Node { }, frontendFeeTiersChanged, } = useSwap(); - const { sellTokenInfo, buyTokenInfo, resetSwapForm } = useSwapForm(); + const { + sellTokenInfo, + buyTokenInfo, + resetSwapForm, + sellQuantity, + buyQuantity, + } = useSwapForm(); const isMarketOrder = orderType === 'market'; const impact = isMarketOrder ? Number(selectedPoolCalculation?.prices.priceImpact ?? 0) : 0; @@ -71,17 +77,20 @@ function SwapPage(props: StoresAndActionsProps): Node { ); const swapFormCanContinue = - selectedPoolCalculation != null && - sell.quantity !== '0' && - buy.quantity !== '0' && - isValidTickers; + selectedPoolCalculation != null + && sell.quantity !== '0' + && buy.quantity !== '0' + && sellQuantity.error == null + && buyQuantity.error == null + && isValidTickers; const confirmationCanContinue = userPasswordState.value !== '' && signRequest != null; const isButtonLoader = orderStep === 1 && signRequest == null; const isSwapEnabled = - (orderStep === 0 && swapFormCanContinue) || (orderStep === 1 && confirmationCanContinue); + (orderStep === 0 && swapFormCanContinue) + || (orderStep === 1 && confirmationCanContinue); const wallet = props.stores.wallets.selectedOrFail; const network = wallet.getParent().getNetworkInfo(); From af8f0cd4346eb1caed6532c7f6f62eea9047af39 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Mon, 24 Jun 2024 19:00:22 +0300 Subject: [PATCH 201/464] Version bump: 5.2.002 (nightly) --- packages/yoroi-extension/package-lock.json | 4 ++-- packages/yoroi-extension/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/yoroi-extension/package-lock.json b/packages/yoroi-extension/package-lock.json index 8682704c36..2abac3993f 100644 --- a/packages/yoroi-extension/package-lock.json +++ b/packages/yoroi-extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "yoroi", - "version": "5.2.001", + "version": "5.2.002", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "yoroi", - "version": "5.2.001", + "version": "5.2.002", "license": "MIT", "dependencies": { "@amplitude/analytics-browser": "^2.1.3", diff --git a/packages/yoroi-extension/package.json b/packages/yoroi-extension/package.json index b7528dc5b0..d099709fd2 100644 --- a/packages/yoroi-extension/package.json +++ b/packages/yoroi-extension/package.json @@ -1,6 +1,6 @@ { "name": "yoroi", - "version": "5.2.001", + "version": "5.2.002", "description": "Cardano ADA wallet", "scripts": { "dev-mv2": "rimraf dev/ && NODE_OPTIONS=--openssl-legacy-provider babel-node scripts-mv2/build --type=debug --env 'mainnet'", From db504de5c227059fd3f74883433a27f3888a631a Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Mon, 24 Jun 2024 19:03:02 +0300 Subject: [PATCH 202/464] minor changes --- packages/e2e-tests/utils/driversPool.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/e2e-tests/utils/driversPool.js b/packages/e2e-tests/utils/driversPool.js index 294eb0147b..307e3a865e 100644 --- a/packages/e2e-tests/utils/driversPool.js +++ b/packages/e2e-tests/utils/driversPool.js @@ -6,7 +6,7 @@ import InitialStepsPage from '../pages/initialSteps.page.js'; import { defaultWaitTimeout } from '../helpers/timeConstants.js'; let instance = null; -let poolOfDrivers = []; +const poolOfDrivers = []; let driverGlobalCounter = 0; class DriversManager { @@ -29,6 +29,10 @@ class DriversManager { return driver; } + /** + * Adding a new driver to the pool of drivers + * @returns {{driver: ThenableWebDriver, driverId: number}} + */ addNewDriverToPool() { const newDriver = this.buildDriver(); driverGlobalCounter++; @@ -53,6 +57,11 @@ class DriversManager { } } + /** + * Preparing an extension for tests + * @param {{driver: ThenableWebDriver, driverId: number}} driverObject + * @returns + */ async prepareExtension(driverObject) { this.logger.info(`DriversManager::prepareExtension driver ID ${driverObject.driverId}`); const logger = getTestLogger(`DriversManager_Page_${Date.now()}`, 'DriversManager'); From adc11b29d69acefdbe2cee740d226536e1167af4 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 25 Jun 2024 12:46:23 +0300 Subject: [PATCH 203/464] dapp tests. non-headless. ubuntu --- .github/workflows/e2e-tests.yml | 31 ++++++++++++++++++++++--------- packages/e2e-tests/package.json | 2 +- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index 1678d3e661..fc4705726d 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -96,11 +96,11 @@ jobs: working-directory: ./packages/e2e-tests run: npm install - - name: Cache extension node modules + - name: Cache e2e-tests node modules # https://docs.github.com/en/actions/guides/caching-dependencies-to-speed-up-workflows uses: actions/cache@v4 env: - cache-name: cache-yoroi-extension-node-modules + cache-name: cache-e2e-tests-node-modules with: # https://github.com/actions/cache/blob/main/examples.md#node---npm # It is recommended to cache the NPM cache (~/.npm) instead of node_modules. @@ -252,14 +252,19 @@ jobs: - name: Forcefully update the Chrome browser if: matrix.browser=='chrome' - run: brew update && brew upgrade --cask google-chrome + run: | + wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - + sudo sh -c 'echo "deb [arch=amd64] https://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' + sudo apt-get update + sudo apt-get --only-upgrade install google-chrome-stable - - name: Forcefully install Firefox for Developers browser + - name: Install Firefox Developer Edition if: matrix.browser=='firefox' run: | - brew update - brew tap homebrew/cask-versions && brew install --cask firefox-developer-edition - echo "FIREFOX_BIN=/Applications/Firefox Developer Edition.app/Contents/MacOS/firefox-bin" >> $GITHUB_ENV + wget -c "https://download.mozilla.org/?product=firefox-devedition-latest-ssl&os=linux64&lang=en-US" -O - | sudo tar -xj -C /opt + sudo rm -rf /opt/firefoxdev + sudo mv /opt/firefox /opt/firefoxdev + echo "FIREFOX_BIN=/opt/firefoxdev/firefox-bin" >> $GITHUB_ENV - name: Read .nvmrc id: nvm @@ -278,10 +283,10 @@ jobs: # https://docs.github.com/en/actions/guides/caching-dependencies-to-speed-up-workflows uses: actions/cache@v4 env: - cache-name: cache-yoroi-e2e-tests-node-modules + cache-name: cache-e2e-tests-node-modules with: - # It is recommended to cache the NPM cache (~/.npm) instead of node_modules. # https://github.com/actions/cache/blob/main/examples.md#node---npm + # It is recommended to cache the NPM cache (~/.npm) instead of node_modules. # But we put node version into the cache key and cache node_modules. path: packages/e2e-tests/node_modules key: ${{ runner.os }}-build-${{ env.cache-name }}-node-${{ steps.nvm.outputs.NVMRC }}-${{ hashFiles('packages/e2e-tests/package-lock.json') }} @@ -296,6 +301,14 @@ jobs: name: builtApp path: ./packages/yoroi-extension + - name: Install ChromeDriver + uses: nanasess/setup-chromedriver@v2 + + - name: Run Xvfb + run: | + export DISPLAY=:99 + sudo Xvfb -ac :99 -screen 0 1920x1080x24 > /dev/null 2>&1 & + - name: Run tests working-directory: ./packages/e2e-tests env: diff --git a/packages/e2e-tests/package.json b/packages/e2e-tests/package.json index ded9c8879a..c832511b69 100644 --- a/packages/e2e-tests/package.json +++ b/packages/e2e-tests/package.json @@ -26,7 +26,7 @@ "test:chrome": "cross-env TARGETBROWSER=chrome HEADLESS=true npm run test:base:sequintel", "test:chrome:bl": "env TARGETBROWSER=chrome npm run test:base:sequintel:bl", "test:chrome:hw": "env TARGETBROWSER=chrome npm run test:hw:base:sequintel", - "test:chrome:dapp": "cross-env TARGETBROWSER=chrome HEADLESS=true npm run test:dapp:base:sequintel", + "test:chrome:dapp": "env TARGETBROWSER=chrome npm run test:dapp:base:sequintel", "test:chrome:dapp:bl": "env TARGETBROWSER=chrome npm run test:dapp:base:sequintel:bl", "test:chrome:parallel": "env TARGETBROWSER=chrome npm run test:base:parallel", "test:chrome:one": "env TARGETBROWSER=chrome npm run test:base:one", From eed692b6003b0cbb691745d7a2a9885adff0b0aa Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 25 Jun 2024 12:48:10 +0300 Subject: [PATCH 204/464] dapp. non-headless. ubuntu. 2 --- .github/workflows/e2e-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index fc4705726d..b8f1ef0fa3 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -240,7 +240,7 @@ jobs: contains(github.event.review.body, '/check') || contains(github.event.review.body, '/dapp-general') ) - runs-on: macos-latest + runs-on: ubuntu-latest needs: Build-Extension strategy: matrix: From 8e5a90e62b1519821271b91d9c575064308c805d Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 25 Jun 2024 13:14:38 +0300 Subject: [PATCH 205/464] collecting driver logs --- packages/e2e-tests/pages/basepage.js | 12 ++++++++++++ packages/e2e-tests/utils/customHooks.js | 1 + packages/e2e-tests/utils/driverBootstrap.js | 1 + 3 files changed, 14 insertions(+) diff --git a/packages/e2e-tests/pages/basepage.js b/packages/e2e-tests/pages/basepage.js index 5f37042c66..3037e0fe6d 100644 --- a/packages/e2e-tests/pages/basepage.js +++ b/packages/e2e-tests/pages/basepage.js @@ -245,6 +245,18 @@ class BasePage { await writeFile(logsPaths, `[\n${jsonLogs.join(',\n')}\n]`); } } + async getDriverLogs(testSuiteName, logFileName) { + this.logger.info(`BasePage::getDriverLogs is called.`); + const testRundDataDir = createTestRunDataDir(testSuiteName); + const cleanName = logFileName.replace(/ /gi, '_'); + const driverLogsPaths = path.resolve(testRundDataDir, `driver_${cleanName}-log.json`); + const driverLogEntries = await this.driver + .manage() + .logs() + .get(logging.Type.DRIVER, logging.Level.INFO); + const jsonDriverLogs = driverLogEntries.map(l => JSON.stringify(l.toJSON(), null, 2)); + await writeFile(driverLogsPaths, `[\n${jsonDriverLogs.join(',\n')}\n]`); + } async waitForElementLocated(locator) { this.logger.info( `BasePage::waitForElementLocated is called. Value: ${JSON.stringify(locator)}` diff --git a/packages/e2e-tests/utils/customHooks.js b/packages/e2e-tests/utils/customHooks.js index 0b05f1126c..095a1fc3da 100644 --- a/packages/e2e-tests/utils/customHooks.js +++ b/packages/e2e-tests/utils/customHooks.js @@ -16,6 +16,7 @@ export const customAfterEach = async (mochaContext, webdriver, logger) => { basepage.takeSnapshot(mochaContext.test.parent.title, testCaseNameWithNumberInTestSuite); // taking browser console logs basepage.getBrowserLogs(mochaContext.test.parent.title, testCaseNameWithNumberInTestSuite); + basepage.getDriverLogs(mochaContext.test.parent.title, testCaseNameWithNumberInTestSuite); } }; diff --git a/packages/e2e-tests/utils/driverBootstrap.js b/packages/e2e-tests/utils/driverBootstrap.js index bc5a3fbebc..d112d33225 100644 --- a/packages/e2e-tests/utils/driverBootstrap.js +++ b/packages/e2e-tests/utils/driverBootstrap.js @@ -14,6 +14,7 @@ import { getDownloadsDir, getTargetBrowser, isBrave, isChrome, isFirefox } from const prefs = new logging.Preferences(); prefs.setLevel(logging.Type.BROWSER, logging.Level.ALL); +prefs.setLevel(logging.Type.DRIVER, logging.Level.INFO); const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); From a7611b27e4b5a73f681e39a92eb9c62bc6a7b26e Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 25 Jun 2024 13:29:04 +0300 Subject: [PATCH 206/464] different display --- .github/workflows/e2e-tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index b8f1ef0fa3..4ceef647c4 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -306,8 +306,8 @@ jobs: - name: Run Xvfb run: | - export DISPLAY=:99 - sudo Xvfb -ac :99 -screen 0 1920x1080x24 > /dev/null 2>&1 & + export DISPLAY=:1 + sudo Xvfb -ac :1 -screen 0 1920x1080x24 > /dev/null 2>&1 & - name: Run tests working-directory: ./packages/e2e-tests From c2466745dff222703c891da2800459758b50fff8 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 25 Jun 2024 13:59:29 +0300 Subject: [PATCH 207/464] pointing the path to chrome --- .github/workflows/e2e-tests.yml | 4 ++-- packages/e2e-tests/helpers/constants.js | 4 ++++ packages/e2e-tests/utils/driverBootstrap.js | 2 ++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index 4ceef647c4..b8f1ef0fa3 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -306,8 +306,8 @@ jobs: - name: Run Xvfb run: | - export DISPLAY=:1 - sudo Xvfb -ac :1 -screen 0 1920x1080x24 > /dev/null 2>&1 & + export DISPLAY=:99 + sudo Xvfb -ac :99 -screen 0 1920x1080x24 > /dev/null 2>&1 & - name: Run tests working-directory: ./packages/e2e-tests diff --git a/packages/e2e-tests/helpers/constants.js b/packages/e2e-tests/helpers/constants.js index a73d8b6c18..3d78ba1d3f 100644 --- a/packages/e2e-tests/helpers/constants.js +++ b/packages/e2e-tests/helpers/constants.js @@ -1,5 +1,6 @@ import path from 'path'; import { fileURLToPath } from 'url'; +import { isMacOS } from '../utils/utils.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); @@ -56,6 +57,9 @@ export const firefoxBin = process.env.FIREFOX_BIN != null ? process.env.FIREFOX_BIN : '/Applications/Firefox Developer Edition.app/Contents/MacOS/firefox-bin'; +export const chromeBin = isMacOS() + ? '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome' + : '/snap/bin/chromium.chromedriver'; export const TargetBrowser = Object.freeze({ Chrome: 'chrome', Brave: 'brave', diff --git a/packages/e2e-tests/utils/driverBootstrap.js b/packages/e2e-tests/utils/driverBootstrap.js index d112d33225..d7ae5dd9c0 100644 --- a/packages/e2e-tests/utils/driverBootstrap.js +++ b/packages/e2e-tests/utils/driverBootstrap.js @@ -4,6 +4,7 @@ import firefox from 'selenium-webdriver/firefox.js'; import path from 'path'; import { fileURLToPath } from 'url'; import { + chromeBin, chromeExtIdUrl, firefoxBin, firefoxExtIdUrl, @@ -56,6 +57,7 @@ const getBraveBuilder = () => { const getChromeBuilder = () => { const downloadsDir = getDownloadsDir(); const chromeOpts = new chrome.Options() + .setChromeBinaryPath(chromeBin) .addExtensions(path.resolve(__extensionDir, 'Yoroi-test.crx')) .addArguments('--disable-dev-shm-usage') .addArguments('--no-sandbox') From ab7d1581e7722351c81bf61276ecc0aad3dcd67c Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 25 Jun 2024 14:59:38 +0300 Subject: [PATCH 208/464] updated path to chrome --- packages/e2e-tests/helpers/constants.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/e2e-tests/helpers/constants.js b/packages/e2e-tests/helpers/constants.js index 3d78ba1d3f..ea0a23db28 100644 --- a/packages/e2e-tests/helpers/constants.js +++ b/packages/e2e-tests/helpers/constants.js @@ -59,7 +59,7 @@ export const firefoxBin = : '/Applications/Firefox Developer Edition.app/Contents/MacOS/firefox-bin'; export const chromeBin = isMacOS() ? '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome' - : '/snap/bin/chromium.chromedriver'; + : '/user/bin/google-chrome'; export const TargetBrowser = Object.freeze({ Chrome: 'chrome', Brave: 'brave', From 2400922d8408d6b3a5233a2fbb0eda4219fefa5b Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 25 Jun 2024 15:10:36 +0300 Subject: [PATCH 209/464] debugging --- .github/workflows/e2e-tests.yml | 5 +++++ packages/e2e-tests/helpers/constants.js | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index b8f1ef0fa3..cd886a6754 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -309,6 +309,11 @@ jobs: export DISPLAY=:99 sudo Xvfb -ac :99 -screen 0 1920x1080x24 > /dev/null 2>&1 & + - name: Getting info + run: | + which google-chrome + which chromedriver + - name: Run tests working-directory: ./packages/e2e-tests env: diff --git a/packages/e2e-tests/helpers/constants.js b/packages/e2e-tests/helpers/constants.js index ea0a23db28..e7f1d908b5 100644 --- a/packages/e2e-tests/helpers/constants.js +++ b/packages/e2e-tests/helpers/constants.js @@ -59,7 +59,7 @@ export const firefoxBin = : '/Applications/Firefox Developer Edition.app/Contents/MacOS/firefox-bin'; export const chromeBin = isMacOS() ? '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome' - : '/user/bin/google-chrome'; + : '/usr/bin/google-chrome'; export const TargetBrowser = Object.freeze({ Chrome: 'chrome', Brave: 'brave', From 13b010b796b18ed95a836b3f79f7c16a121d052b Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 25 Jun 2024 15:23:34 +0300 Subject: [PATCH 210/464] debug --- packages/e2e-tests/helpers/constants.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/e2e-tests/helpers/constants.js b/packages/e2e-tests/helpers/constants.js index e7f1d908b5..cf28bf61e1 100644 --- a/packages/e2e-tests/helpers/constants.js +++ b/packages/e2e-tests/helpers/constants.js @@ -59,7 +59,7 @@ export const firefoxBin = : '/Applications/Firefox Developer Edition.app/Contents/MacOS/firefox-bin'; export const chromeBin = isMacOS() ? '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome' - : '/usr/bin/google-chrome'; + : '/usr/local/bin/chromedriver'; export const TargetBrowser = Object.freeze({ Chrome: 'chrome', Brave: 'brave', From f2a82c8670bb68c71bf4d38174b1c4416ed6f87c Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 25 Jun 2024 15:36:52 +0300 Subject: [PATCH 211/464] debug --- .github/workflows/e2e-tests.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index cd886a6754..cc6edc1f07 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -301,9 +301,6 @@ jobs: name: builtApp path: ./packages/yoroi-extension - - name: Install ChromeDriver - uses: nanasess/setup-chromedriver@v2 - - name: Run Xvfb run: | export DISPLAY=:99 From feb5c4ff53f15a7870eb0c682d43bdac8ead0d2f Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 25 Jun 2024 15:49:17 +0300 Subject: [PATCH 212/464] debug --- .github/workflows/e2e-tests.yml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index cc6edc1f07..00359c3073 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -306,11 +306,6 @@ jobs: export DISPLAY=:99 sudo Xvfb -ac :99 -screen 0 1920x1080x24 > /dev/null 2>&1 & - - name: Getting info - run: | - which google-chrome - which chromedriver - - name: Run tests working-directory: ./packages/e2e-tests env: @@ -318,7 +313,7 @@ jobs: SECOND_STATIC_TEST_WALLET: ${{ secrets.SECOND_STATIC_TEST_WALLET }} SECOND_SMOKE_TEST_WALLET: ${{ secrets.SECOND_SMOKE_TEST_WALLET }} SECOND_SMOKE_TEST_WALLET_FF: ${{ secrets.SECOND_SMOKE_TEST_WALLET_FF }} - run: npm run test:${{ matrix.browser }}:dapp + run: xvfb-run -a -e /dev/stdout -s "-screen 0 1920x1080x24" npm run test:${{ matrix.browser }}:dapp - name: Archive tests screenshots and logs if: ${{ failure() }} From 2cf4974f81e5af32089007fd9c9215c362f96619 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 25 Jun 2024 16:01:04 +0300 Subject: [PATCH 213/464] removing xvfb-run --- .github/workflows/e2e-tests.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index 00359c3073..a00a09ca44 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -301,11 +301,6 @@ jobs: name: builtApp path: ./packages/yoroi-extension - - name: Run Xvfb - run: | - export DISPLAY=:99 - sudo Xvfb -ac :99 -screen 0 1920x1080x24 > /dev/null 2>&1 & - - name: Run tests working-directory: ./packages/e2e-tests env: From 0bb210a80cf3a1ea4e0311a805108fb8012fccb2 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 25 Jun 2024 16:13:28 +0300 Subject: [PATCH 214/464] run xvfb is returned --- .github/workflows/e2e-tests.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index a00a09ca44..00359c3073 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -301,6 +301,11 @@ jobs: name: builtApp path: ./packages/yoroi-extension + - name: Run Xvfb + run: | + export DISPLAY=:99 + sudo Xvfb -ac :99 -screen 0 1920x1080x24 > /dev/null 2>&1 & + - name: Run tests working-directory: ./packages/e2e-tests env: From 7804659c968f567cd695d20e17228172883c3956 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 25 Jun 2024 16:20:29 +0300 Subject: [PATCH 215/464] minor fixes in workflows --- .github/workflows/e2e-tests.yml | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index 00359c3073..fcb4c8a588 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -36,6 +36,22 @@ jobs: run: | . install-all.sh + - name: Cache yoroi-extension node modules + # https://docs.github.com/en/actions/guides/caching-dependencies-to-speed-up-workflows + uses: actions/cache@v4 + env: + cache-name: cache-yoroi-extension-node-modules + with: + # https://github.com/actions/cache/blob/main/examples.md#node---npm + # It is recommended to cache the NPM cache (~/.npm) instead of node_modules. + # But we put node version into the cache key and cache node_modules. + path: packages/yoroi-extension/node_modules + key: ${{ runner.os }}-build-${{ env.cache-name }}-node-${{ steps.nvm.outputs.NVMRC }}-${{ hashFiles('packages/yoroi-extension/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + - name: Build the test mainnet version working-directory: ./packages/yoroi-extension run: npm run test:build:mainnet @@ -189,7 +205,7 @@ jobs: # https://docs.github.com/en/actions/guides/caching-dependencies-to-speed-up-workflows uses: actions/cache@v4 env: - cache-name: cache-yoroi-extension-node-modules + cache-name: cache-e2e-tests-node-modules with: # https://github.com/actions/cache/blob/main/examples.md#node---npm # It is recommended to cache the NPM cache (~/.npm) instead of node_modules. @@ -369,7 +385,7 @@ jobs: # https://github.com/actions/cache/blob/main/examples.md#node---npm # It is recommended to cache the NPM cache (~/.npm) instead of node_modules. # But we put node version into the cache key and cache node_modules. - path: packages/yoroi-extension/node_modules + path: packages/e2e-tests/node_modules key: ${{ runner.os }}-build-${{ env.cache-name }}-node-${{ steps.nvm.outputs.NVMRC }}-${{ hashFiles('packages/e2e-tests/package-lock.json') }} restore-keys: | ${{ runner.os }}-build-${{ env.cache-name }}- From 1a70abd5577d7616b0146661520e0f6489e8a705 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 25 Jun 2024 16:43:24 +0300 Subject: [PATCH 216/464] using ubuntu for dapp-failing. debug --- .github/workflows/e2e-tests.yml | 42 +++++++++++++++---------- packages/e2e-tests/helpers/constants.js | 2 +- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index fcb4c8a588..00a7b76920 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -68,7 +68,7 @@ jobs: Ext-General: if: github.event.review && - ( + ( github.event.review.state == 'approved' || contains(github.event.review.body, '/check') || contains(github.event.review.body, '/ext-general') @@ -139,8 +139,8 @@ jobs: - name: Run Xvfb run: | - export DISPLAY=:99 - sudo Xvfb -ac :99 -screen 0 1920x1080x24 > /dev/null 2>&1 & + export DISPLAY=:99 + sudo Xvfb -ac :99 -screen 0 1920x1080x24 > /dev/null 2>&1 & - name: Run tests working-directory: ./packages/e2e-tests @@ -228,8 +228,8 @@ jobs: - name: Run Xvfb run: | - export DISPLAY=:99 - sudo Xvfb -ac :99 -screen 0 1920x1080x24 > /dev/null 2>&1 & + export DISPLAY=:99 + sudo Xvfb -ac :99 -screen 0 1920x1080x24 > /dev/null 2>&1 & - name: Run tests working-directory: ./packages/e2e-tests @@ -342,26 +342,31 @@ jobs: DApp-Failing: if: github.event.review && contains(github.event.review.body, '/dapp-failing') - runs-on: macos-latest + runs-on: ubuntu-latest needs: Build-Extension strategy: matrix: - browser: ['chrome'] + browser: ["chrome"] fail-fast: false - + steps: - uses: actions/checkout@v4 - name: Forcefully update the Chrome browser if: matrix.browser=='chrome' - run: brew update && brew upgrade --cask google-chrome + run: | + wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - + sudo sh -c 'echo "deb [arch=amd64] https://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' + sudo apt-get update + sudo apt-get --only-upgrade install google-chrome-stable - - name: Forcefully install Firefox for Developers browser + - name: Install Firefox Developer Edition if: matrix.browser=='firefox' run: | - brew update - brew tap homebrew/cask-versions && brew install --cask firefox-developer-edition - echo "FIREFOX_BIN=/Applications/Firefox Developer Edition.app/Contents/MacOS/firefox-bin" >> $GITHUB_ENV + wget -c "https://download.mozilla.org/?product=firefox-devedition-latest-ssl&os=linux64&lang=en-US" -O - | sudo tar -xj -C /opt + sudo rm -rf /opt/firefoxdev + sudo mv /opt/firefox /opt/firefoxdev + echo "FIREFOX_BIN=/opt/firefoxdev/firefox-bin" >> $GITHUB_ENV - name: Read .nvmrc id: nvm @@ -370,7 +375,7 @@ jobs: - name: Setup node uses: actions/setup-node@v4 with: - node-version: '${{ steps.nvm.outputs.NVMRC }}' + node-version: "${{ steps.nvm.outputs.NVMRC }}" - name: Install packages working-directory: ./packages/e2e-tests @@ -380,7 +385,7 @@ jobs: # https://docs.github.com/en/actions/guides/caching-dependencies-to-speed-up-workflows uses: actions/cache@v4 env: - cache-name: cache-yoroi-e2e-tests-node-modules + cache-name: cache-e2e-tests-node-modules with: # https://github.com/actions/cache/blob/main/examples.md#node---npm # It is recommended to cache the NPM cache (~/.npm) instead of node_modules. @@ -398,6 +403,11 @@ jobs: name: builtApp path: ./packages/yoroi-extension + - name: Run Xvfb + run: | + export DISPLAY=:99 + sudo Xvfb -ac :99 -screen 0 1920x1080x24 > /dev/null 2>&1 & + - name: Run tests working-directory: ./packages/e2e-tests env: @@ -405,7 +415,7 @@ jobs: SECOND_STATIC_TEST_WALLET: ${{ secrets.SECOND_STATIC_TEST_WALLET }} SECOND_SMOKE_TEST_WALLET: ${{ secrets.SECOND_SMOKE_TEST_WALLET }} SECOND_SMOKE_TEST_WALLET_FF: ${{ secrets.SECOND_SMOKE_TEST_WALLET_FF }} - run: npm run test:${{ matrix.browser }}:dapp:bl + run: xvfb-run -a -e /dev/stdout -s "-screen 0 1920x1080x24" npm run test:${{ matrix.browser }}:dapp:bl - name: Archive tests screenshots and logs if: ${{ failure() }} diff --git a/packages/e2e-tests/helpers/constants.js b/packages/e2e-tests/helpers/constants.js index cf28bf61e1..e7f1d908b5 100644 --- a/packages/e2e-tests/helpers/constants.js +++ b/packages/e2e-tests/helpers/constants.js @@ -59,7 +59,7 @@ export const firefoxBin = : '/Applications/Firefox Developer Edition.app/Contents/MacOS/firefox-bin'; export const chromeBin = isMacOS() ? '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome' - : '/usr/local/bin/chromedriver'; + : '/usr/bin/google-chrome'; export const TargetBrowser = Object.freeze({ Chrome: 'chrome', Brave: 'brave', From 6ef9e88875416a7a0497c2cec7854ef543fb3106 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 25 Jun 2024 16:48:48 +0300 Subject: [PATCH 217/464] fix for dapp-test --- packages/e2e-tests/helpers/constants.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/e2e-tests/helpers/constants.js b/packages/e2e-tests/helpers/constants.js index e7f1d908b5..cf28bf61e1 100644 --- a/packages/e2e-tests/helpers/constants.js +++ b/packages/e2e-tests/helpers/constants.js @@ -59,7 +59,7 @@ export const firefoxBin = : '/Applications/Firefox Developer Edition.app/Contents/MacOS/firefox-bin'; export const chromeBin = isMacOS() ? '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome' - : '/usr/bin/google-chrome'; + : '/usr/local/bin/chromedriver'; export const TargetBrowser = Object.freeze({ Chrome: 'chrome', Brave: 'brave', From 09b500f3e424faa7532ba2e4ec608d644ec12dd6 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 25 Jun 2024 16:51:31 +0300 Subject: [PATCH 218/464] checking theory for ext-general --- .github/workflows/e2e-tests.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index 00a7b76920..fd64bd0d5f 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -223,9 +223,6 @@ jobs: name: builtApp path: ./packages/yoroi-extension - - name: Install ChromeDriver - uses: nanasess/setup-chromedriver@v2 - - name: Run Xvfb run: | export DISPLAY=:99 From 42141a77027c731f0614a5e2aed8b9e28f61a830 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 25 Jun 2024 17:05:13 +0300 Subject: [PATCH 219/464] moved up running xvfb --- .github/workflows/e2e-tests.yml | 46 ++++++++++++++++----------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index fd64bd0d5f..071260ba7b 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -83,6 +83,14 @@ jobs: steps: - uses: actions/checkout@v4 + - name: Install ChromeDriver + uses: nanasess/setup-chromedriver@v2 + + - name: Run Xvfb + run: | + export DISPLAY=:99 + sudo Xvfb -ac :99 -screen 0 1920x1080x24 > /dev/null 2>&1 & + - name: Forcefully update the Chrome browser if: matrix.browser=='chrome' run: | @@ -134,14 +142,6 @@ jobs: name: builtApp path: ./packages/yoroi-extension - - name: Install ChromeDriver - uses: nanasess/setup-chromedriver@v2 - - - name: Run Xvfb - run: | - export DISPLAY=:99 - sudo Xvfb -ac :99 -screen 0 1920x1080x24 > /dev/null 2>&1 & - - name: Run tests working-directory: ./packages/e2e-tests env: @@ -172,6 +172,11 @@ jobs: steps: - uses: actions/checkout@v4 + - name: Run Xvfb + run: | + export DISPLAY=:99 + sudo Xvfb -ac :99 -screen 0 1920x1080x24 > /dev/null 2>&1 & + - name: Forcefully update the Chrome browser if: matrix.browser=='chrome' run: | @@ -223,11 +228,6 @@ jobs: name: builtApp path: ./packages/yoroi-extension - - name: Run Xvfb - run: | - export DISPLAY=:99 - sudo Xvfb -ac :99 -screen 0 1920x1080x24 > /dev/null 2>&1 & - - name: Run tests working-directory: ./packages/e2e-tests env: @@ -263,6 +263,11 @@ jobs: steps: - uses: actions/checkout@v4 + - name: Run Xvfb + run: | + export DISPLAY=:99 + sudo Xvfb -ac :99 -screen 0 1920x1080x24 > /dev/null 2>&1 & + - name: Forcefully update the Chrome browser if: matrix.browser=='chrome' run: | @@ -314,11 +319,6 @@ jobs: name: builtApp path: ./packages/yoroi-extension - - name: Run Xvfb - run: | - export DISPLAY=:99 - sudo Xvfb -ac :99 -screen 0 1920x1080x24 > /dev/null 2>&1 & - - name: Run tests working-directory: ./packages/e2e-tests env: @@ -349,6 +349,11 @@ jobs: steps: - uses: actions/checkout@v4 + - name: Run Xvfb + run: | + export DISPLAY=:99 + sudo Xvfb -ac :99 -screen 0 1920x1080x24 > /dev/null 2>&1 & + - name: Forcefully update the Chrome browser if: matrix.browser=='chrome' run: | @@ -400,11 +405,6 @@ jobs: name: builtApp path: ./packages/yoroi-extension - - name: Run Xvfb - run: | - export DISPLAY=:99 - sudo Xvfb -ac :99 -screen 0 1920x1080x24 > /dev/null 2>&1 & - - name: Run tests working-directory: ./packages/e2e-tests env: From 2d483452b24547a8fc2950561a7030a52342482b Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 25 Jun 2024 18:51:27 +0300 Subject: [PATCH 220/464] new try --- .github/workflows/e2e-tests.yml | 69 +++++++++++++-------------------- 1 file changed, 28 insertions(+), 41 deletions(-) diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index 071260ba7b..51e6e52160 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -36,22 +36,6 @@ jobs: run: | . install-all.sh - - name: Cache yoroi-extension node modules - # https://docs.github.com/en/actions/guides/caching-dependencies-to-speed-up-workflows - uses: actions/cache@v4 - env: - cache-name: cache-yoroi-extension-node-modules - with: - # https://github.com/actions/cache/blob/main/examples.md#node---npm - # It is recommended to cache the NPM cache (~/.npm) instead of node_modules. - # But we put node version into the cache key and cache node_modules. - path: packages/yoroi-extension/node_modules - key: ${{ runner.os }}-build-${{ env.cache-name }}-node-${{ steps.nvm.outputs.NVMRC }}-${{ hashFiles('packages/yoroi-extension/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-build-${{ env.cache-name }}- - ${{ runner.os }}-build- - ${{ runner.os }}- - - name: Build the test mainnet version working-directory: ./packages/yoroi-extension run: npm run test:build:mainnet @@ -68,7 +52,7 @@ jobs: Ext-General: if: github.event.review && - ( + ( github.event.review.state == 'approved' || contains(github.event.review.body, '/check') || contains(github.event.review.body, '/ext-general') @@ -83,14 +67,6 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Install ChromeDriver - uses: nanasess/setup-chromedriver@v2 - - - name: Run Xvfb - run: | - export DISPLAY=:99 - sudo Xvfb -ac :99 -screen 0 1920x1080x24 > /dev/null 2>&1 & - - name: Forcefully update the Chrome browser if: matrix.browser=='chrome' run: | @@ -142,6 +118,14 @@ jobs: name: builtApp path: ./packages/yoroi-extension + - name: Install ChromeDriver + uses: nanasess/setup-chromedriver@v2 + + - name: Run Xvfb + run: | + export DISPLAY=:99 + sudo Xvfb -ac :99 -screen 0 1920x1080x24 > /dev/null 2>&1 & + - name: Run tests working-directory: ./packages/e2e-tests env: @@ -172,11 +156,6 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Run Xvfb - run: | - export DISPLAY=:99 - sudo Xvfb -ac :99 -screen 0 1920x1080x24 > /dev/null 2>&1 & - - name: Forcefully update the Chrome browser if: matrix.browser=='chrome' run: | @@ -228,6 +207,14 @@ jobs: name: builtApp path: ./packages/yoroi-extension + - name: Install ChromeDriver + uses: nanasess/setup-chromedriver@v2 + + - name: Run Xvfb + run: | + export DISPLAY=:99 + sudo Xvfb -ac :99 -screen 0 1920x1080x24 > /dev/null 2>&1 & + - name: Run tests working-directory: ./packages/e2e-tests env: @@ -263,11 +250,6 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Run Xvfb - run: | - export DISPLAY=:99 - sudo Xvfb -ac :99 -screen 0 1920x1080x24 > /dev/null 2>&1 & - - name: Forcefully update the Chrome browser if: matrix.browser=='chrome' run: | @@ -319,6 +301,11 @@ jobs: name: builtApp path: ./packages/yoroi-extension + - name: Run Xvfb + run: | + export DISPLAY=:99 + sudo Xvfb -ac :99 -screen 0 1920x1080x24 > /dev/null 2>&1 & + - name: Run tests working-directory: ./packages/e2e-tests env: @@ -345,15 +332,10 @@ jobs: matrix: browser: ["chrome"] fail-fast: false - + steps: - uses: actions/checkout@v4 - - name: Run Xvfb - run: | - export DISPLAY=:99 - sudo Xvfb -ac :99 -screen 0 1920x1080x24 > /dev/null 2>&1 & - - name: Forcefully update the Chrome browser if: matrix.browser=='chrome' run: | @@ -405,6 +387,11 @@ jobs: name: builtApp path: ./packages/yoroi-extension + - name: Run Xvfb + run: | + export DISPLAY=:99 + sudo Xvfb -ac :99 -screen 0 1920x1080x24 > /dev/null 2>&1 & + - name: Run tests working-directory: ./packages/e2e-tests env: From d28acb782c65eeca6dd4e3500bea4a12e757d8a8 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 25 Jun 2024 18:53:49 +0300 Subject: [PATCH 221/464] added semicolon --- packages/e2e-tests/utils/driverBootstrap.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/e2e-tests/utils/driverBootstrap.js b/packages/e2e-tests/utils/driverBootstrap.js index d7ae5dd9c0..f37358f915 100644 --- a/packages/e2e-tests/utils/driverBootstrap.js +++ b/packages/e2e-tests/utils/driverBootstrap.js @@ -66,7 +66,7 @@ const getChromeBuilder = () => { .addArguments('--start-maximized') .setUserPreferences({ 'download.default_directory': downloadsDir }); if (process.env.HEADLESS) { - chromeOpts.addArguments('--headless=new') + chromeOpts.addArguments('--headless=new'); } return new Builder() .forBrowser(TargetBrowser.Chrome) From 923ec5755061ce0233df16ec322d2df6029246f0 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 25 Jun 2024 19:15:56 +0300 Subject: [PATCH 222/464] tweaking settings --- packages/e2e-tests/package.json | 2 +- packages/e2e-tests/utils/driverBootstrap.js | 16 +++++++++++++--- packages/e2e-tests/utils/utils.js | 1 + 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/packages/e2e-tests/package.json b/packages/e2e-tests/package.json index c832511b69..ab72c6d2c0 100644 --- a/packages/e2e-tests/package.json +++ b/packages/e2e-tests/package.json @@ -26,7 +26,7 @@ "test:chrome": "cross-env TARGETBROWSER=chrome HEADLESS=true npm run test:base:sequintel", "test:chrome:bl": "env TARGETBROWSER=chrome npm run test:base:sequintel:bl", "test:chrome:hw": "env TARGETBROWSER=chrome npm run test:hw:base:sequintel", - "test:chrome:dapp": "env TARGETBROWSER=chrome npm run test:dapp:base:sequintel", + "test:chrome:dapp": "cross-env TARGETBROWSER=chrome ISDAPP=true npm run test:dapp:base:sequintel", "test:chrome:dapp:bl": "env TARGETBROWSER=chrome npm run test:dapp:base:sequintel:bl", "test:chrome:parallel": "env TARGETBROWSER=chrome npm run test:base:parallel", "test:chrome:one": "env TARGETBROWSER=chrome npm run test:base:one", diff --git a/packages/e2e-tests/utils/driverBootstrap.js b/packages/e2e-tests/utils/driverBootstrap.js index f37358f915..1558854cf5 100644 --- a/packages/e2e-tests/utils/driverBootstrap.js +++ b/packages/e2e-tests/utils/driverBootstrap.js @@ -11,7 +11,15 @@ import { firefoxUuidMapping, TargetBrowser, } from '../helpers/constants.js'; -import { getDownloadsDir, getTargetBrowser, isBrave, isChrome, isFirefox } from './utils.js'; +import { + getDownloadsDir, + getTargetBrowser, + isBrave, + isChrome, + isDapp, + isFirefox, + isHeadless, +} from './utils.js'; const prefs = new logging.Preferences(); prefs.setLevel(logging.Type.BROWSER, logging.Level.ALL); @@ -57,7 +65,6 @@ const getBraveBuilder = () => { const getChromeBuilder = () => { const downloadsDir = getDownloadsDir(); const chromeOpts = new chrome.Options() - .setChromeBinaryPath(chromeBin) .addExtensions(path.resolve(__extensionDir, 'Yoroi-test.crx')) .addArguments('--disable-dev-shm-usage') .addArguments('--no-sandbox') @@ -65,9 +72,12 @@ const getChromeBuilder = () => { .addArguments('--disable-setuid-sandbox') .addArguments('--start-maximized') .setUserPreferences({ 'download.default_directory': downloadsDir }); - if (process.env.HEADLESS) { + if (isHeadless()) { chromeOpts.addArguments('--headless=new'); } + if (isDapp()) { + chromeOpts.setChromeBinaryPath(chromeBin); + } return new Builder() .forBrowser(TargetBrowser.Chrome) .setLoggingPrefs(prefs) diff --git a/packages/e2e-tests/utils/utils.js b/packages/e2e-tests/utils/utils.js index f5023d99d2..15875ca4b8 100644 --- a/packages/e2e-tests/utils/utils.js +++ b/packages/e2e-tests/utils/utils.js @@ -47,6 +47,7 @@ export const getCurrentOS = () => process.platform; export const isLinux = () => getCurrentOS() === 'linux'; export const isMacOS = () => getCurrentOS() === 'darwin'; export const isHeadless = () => process.env.HEADLESS === 'true'; +export const isDapp = () => process.env.ISDAPP === 'true'; export const createTestRunDataDir = testSuiteName => { const clearedTestSuiteName = testSuiteName.replace(/[ |,]/gi, '_'); From 32a5bb377dafbd2f5b0362ffb13f577379bc7235 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 25 Jun 2024 19:37:49 +0300 Subject: [PATCH 223/464] updated amount of txs --- packages/e2e-tests/utils/testWallets.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/e2e-tests/utils/testWallets.js b/packages/e2e-tests/utils/testWallets.js index 0a385aba99..dacfdcc89c 100644 --- a/packages/e2e-tests/utils/testWallets.js +++ b/packages/e2e-tests/utils/testWallets.js @@ -19,7 +19,7 @@ export const testWallet3 = Object.freeze({ name: 'TW_Chrome', plate: 'XZHD-1651', mnemonic: process.env.SECOND_SMOKE_TEST_WALLET, - minTxs: 104, + minTxs: 100, }); export const testWallet4 = Object.freeze({ name: 'TW_FF', From 78aea2d1f7bb06e0e8933b11a21523e37c605cdc Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 25 Jun 2024 23:37:42 +0300 Subject: [PATCH 224/464] added additional sleep --- .../e2e-tests/pages/wallet/settingsTab/blockchainSubTab.page.js | 1 + .../e2e-tests/pages/wallet/settingsTab/generalSubTab.page.js | 2 ++ 2 files changed, 3 insertions(+) diff --git a/packages/e2e-tests/pages/wallet/settingsTab/blockchainSubTab.page.js b/packages/e2e-tests/pages/wallet/settingsTab/blockchainSubTab.page.js index 60fc68f80f..fb963f4e9b 100644 --- a/packages/e2e-tests/pages/wallet/settingsTab/blockchainSubTab.page.js +++ b/packages/e2e-tests/pages/wallet/settingsTab/blockchainSubTab.page.js @@ -28,6 +28,7 @@ class BlockchainSubTab extends SettingsTab { this.logger.info(`BlockchainSubTab::selectExplorer is called. Explorer: "${explorer}"`); await this.openExplorerSelection(); await this.pickExplorer(explorer); + await this.sleep(200); } } diff --git a/packages/e2e-tests/pages/wallet/settingsTab/generalSubTab.page.js b/packages/e2e-tests/pages/wallet/settingsTab/generalSubTab.page.js index e0f7ace878..5e1dcbc90c 100644 --- a/packages/e2e-tests/pages/wallet/settingsTab/generalSubTab.page.js +++ b/packages/e2e-tests/pages/wallet/settingsTab/generalSubTab.page.js @@ -84,6 +84,7 @@ class GeneralSubTab extends SettingsTab { this.logger.info(`GeneralSubTab::selectLanguage is called. Country code: "${countryCode}"`); await this.openLanguageSelection(); await this.pickLanguage(countryCode); + await this.sleep(200); } async openFiatSelection() { this.logger.info(`GeneralSubTab::openFiatSelection is called`); @@ -100,6 +101,7 @@ class GeneralSubTab extends SettingsTab { this.logger.info(`GeneralSubTab::selectFiat is called. Country code: "${fiatCode}"`); await this.openFiatSelection(); await this.pickFiat(fiatCode); + await this.sleep(200); } async getNetworkText() { this.logger.info(`GeneralSubTab::getNetworkText is called`); From 3969d297a713d234a0c94c5ec59443f43a3e66ce Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 26 Jun 2024 12:41:50 +0300 Subject: [PATCH 225/464] add asset tab back --- packages/yoroi-extension/app/Routes.js | 31 +++++++++++++--- .../images/sidebar/revamp/assets.inline.svg | 1 + .../app/i18n/global-messages.js | 4 +++ .../app/i18n/locales/en-US.json | 1 + .../app/stores/stateless/sidebarCategories.js | 36 +++++++++++-------- 5 files changed, 55 insertions(+), 18 deletions(-) create mode 100644 packages/yoroi-extension/app/assets/images/sidebar/revamp/assets.inline.svg diff --git a/packages/yoroi-extension/app/Routes.js b/packages/yoroi-extension/app/Routes.js index 094fa489e7..72c383221b 100644 --- a/packages/yoroi-extension/app/Routes.js +++ b/packages/yoroi-extension/app/Routes.js @@ -27,16 +27,16 @@ import Wallet from './containers/wallet/Wallet'; import RestoreWalletPage, { RestoreWalletPagePromise } from './containers/wallet/restore/RestoreWalletPage'; // New UI pages -import { GovernanceContextProvider } from './UI/features/governace/module/GovernanceContextProvider'; import { createCurrrentWalletInfo } from './UI/features/governace/common/helpers'; +import { GovernanceContextProvider } from './UI/features/governace/module/GovernanceContextProvider'; +import { PortfolioContextProvider } from './UI/features/portfolio/module/PortfolioContextProvider'; import GovernanceDelegationFormPage from './UI/pages/Governance/GovernanceDelegationFormPage'; import GovernanceStatusPage from './UI/pages/Governance/GovernanceStatusPage'; import GovernanceTransactionFailedPage from './UI/pages/Governance/GovernanceTransactionFailedPage'; -import { PortfolioContextProvider } from './UI/features/portfolio/module/PortfolioContextProvider'; -import PortfolioPage from './UI/pages/portfolio/PortfolioPage'; +import GovernanceTransactionSubmittedPage from './UI/pages/Governance/GovernanceTransactionSubmittedPage'; import PortfolioDappsPage from './UI/pages/portfolio/PortfolioDappsPage'; import PortfolioDetailPage from './UI/pages/portfolio/PortfolioDetailPage'; -import GovernanceTransactionSubmittedPage from './UI/pages/Governance/GovernanceTransactionSubmittedPage'; +import PortfolioPage from './UI/pages/portfolio/PortfolioPage'; // PAGES const LanguageSelectionPagePromise = () => import('./containers/profile/LanguageSelectionPage'); @@ -443,6 +443,21 @@ const NFTsSubPages = (stores, actions) => ( ); +const AssetsSubpages = (stores, actions) => ( + + } + /> + } + /> + +); + const GovernanceSubpages = (stores, actions) => ( + {children} + + ); +} + export function wrapNFTs(assetsProps: StoresAndActionsProps, children: Node): Node { return ( diff --git a/packages/yoroi-extension/app/assets/images/sidebar/revamp/assets.inline.svg b/packages/yoroi-extension/app/assets/images/sidebar/revamp/assets.inline.svg new file mode 100644 index 0000000000..fd5644d3bb --- /dev/null +++ b/packages/yoroi-extension/app/assets/images/sidebar/revamp/assets.inline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/yoroi-extension/app/i18n/global-messages.js b/packages/yoroi-extension/app/i18n/global-messages.js index acdbd4356f..89473394f0 100644 --- a/packages/yoroi-extension/app/i18n/global-messages.js +++ b/packages/yoroi-extension/app/i18n/global-messages.js @@ -690,6 +690,10 @@ const globalMessages: * = defineMessages({ id: 'sidebar.wallets', defaultMessage: '!!!My wallets', }, + sidebarAssets: { + id: 'sidebar.assets', + defaultMessage: '!!!Assets', + }, sidebarSettings: { id: 'sidebar.settings', defaultMessage: '!!!Settings', diff --git a/packages/yoroi-extension/app/i18n/locales/en-US.json b/packages/yoroi-extension/app/i18n/locales/en-US.json index d00af80cc5..91f9219b55 100644 --- a/packages/yoroi-extension/app/i18n/locales/en-US.json +++ b/packages/yoroi-extension/app/i18n/locales/en-US.json @@ -333,6 +333,7 @@ "settings.unitOfAccount.note": "Note: coin price is approximate and may not match the price of any given trading platform. Any transactions based on these price approximates are done at your own risk.", "settings.unitOfAccount.revamp.label": "Select currency", "settings.unitOfAccount.title": "Fiat pairing", + "sidebar.assets": "Assets", "sidebar.portfolio": "Portfolio", "sidebar.faq": "Faq", "sidebar.feedback": "Feedback", diff --git a/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js b/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js index 0aeb57a33f..65b5e16bf5 100644 --- a/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js +++ b/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js @@ -1,24 +1,25 @@ // @flow import type { MessageDescriptor } from 'react-intl'; -import { ROUTES } from '../../routes-config'; -import globalMessages, { connectorMessages } from '../../i18n/global-messages'; +import { isCardanoHaskell } from '../../api/ada/lib/storage/database/prepackaged/networks'; +import { PublicDeriver } from '../../api/ada/lib/storage/models/PublicDeriver'; import { asGetStakingKey } from '../../api/ada/lib/storage/models/PublicDeriver/traits'; +import { ReactComponent as dappConnectorIcon } from '../../assets/images/dapp-connector/dapp-connector.inline.svg'; import { ReactComponent as walletsIcon } from '../../assets/images/sidebar/my_wallets.inline.svg'; +import { ReactComponent as assetsIcon } from '../../assets/images/sidebar/revamp/assets.inline.svg'; +import { ReactComponent as governanceIcon } from '../../assets/images/sidebar/revamp/governance.inline.svg'; +import { ReactComponent as nftsIcon } from '../../assets/images/sidebar/revamp/nfts.inline.svg'; +import { ReactComponent as portfolioIcon } from '../../assets/images/sidebar/revamp/portfolio.inline.svg'; +import { ReactComponent as settingIcon } from '../../assets/images/sidebar/revamp/setting.inline.svg'; +import { ReactComponent as stakingIcon } from '../../assets/images/sidebar/revamp/staking.inline.svg'; +import { ReactComponent as swapIcon } from '../../assets/images/sidebar/revamp/swap.inline.svg'; +import { ReactComponent as votingIcon } from '../../assets/images/sidebar/revamp/voting.inline.svg'; +import { ReactComponent as walletIcon } from '../../assets/images/sidebar/revamp/wallet.inline.svg'; import { ReactComponent as transferIcon } from '../../assets/images/sidebar/transfer_wallets.inline.svg'; import { ReactComponent as settingsIcon } from '../../assets/images/sidebar/wallet-settings-2-ic.inline.svg'; import { ReactComponent as goBackIcon } from '../../assets/images/top-bar/back-arrow-white.inline.svg'; -import { ReactComponent as dappConnectorIcon } from '../../assets/images/dapp-connector/dapp-connector.inline.svg'; -import { ReactComponent as walletIcon } from '../../assets/images/sidebar/revamp/wallet.inline.svg'; -import { ReactComponent as stakingIcon } from '../../assets/images/sidebar/revamp/staking.inline.svg'; -import { ReactComponent as portfolioIcon } from '../../assets/images/sidebar/revamp/portfolio.inline.svg'; -import { ReactComponent as nftsIcon } from '../../assets/images/sidebar/revamp/nfts.inline.svg'; -import { ReactComponent as votingIcon } from '../../assets/images/sidebar/revamp/voting.inline.svg'; -import { ReactComponent as swapIcon } from '../../assets/images/sidebar/revamp/swap.inline.svg'; -import { ReactComponent as settingIcon } from '../../assets/images/sidebar/revamp/setting.inline.svg'; -import { ReactComponent as governanceIcon } from '../../assets/images/sidebar/revamp/governance.inline.svg'; -import { PublicDeriver } from '../../api/ada/lib/storage/models/PublicDeriver'; -import { isCardanoHaskell } from '../../api/ada/lib/storage/database/prepackaged/networks'; import environment from '../../environment'; +import globalMessages, { connectorMessages } from '../../i18n/global-messages'; +import { ROUTES } from '../../routes-config'; export type SidebarCategory = {| +className: string, @@ -132,12 +133,19 @@ export const allCategoriesRevamp: Array = [ label: globalMessages.sidebarSwap, isVisible: ({ selected }) => (environment.isDev() || environment.isNightly()) && !!selected?.isMainnet(), }, + { + className: 'assets', + route: ROUTES.ASSETS.ROOT, + icon: assetsIcon, + label: globalMessages.sidebarAssets, + isVisible: _request => _request.selected !== null, + }, { className: 'portfolio', route: ROUTES.PORTFOLIO.ROOT, icon: portfolioIcon, label: globalMessages.sidebarPortfolio, - isVisible: _request => _request.selected !== null, + isVisible: ({ selected }) => environment.isDev() && selected?.getParent().getNetworkInfo().NetworkId === 250, }, { className: 'nfts', From 92482674d36030fa77708caa36ca5630c7fb4b42 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Wed, 26 Jun 2024 13:58:00 +0300 Subject: [PATCH 226/464] suggested change --- packages/e2e-tests/pages/basepage.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/e2e-tests/pages/basepage.js b/packages/e2e-tests/pages/basepage.js index 3037e0fe6d..681e5cc038 100644 --- a/packages/e2e-tests/pages/basepage.js +++ b/packages/e2e-tests/pages/basepage.js @@ -186,11 +186,7 @@ class BasePage { async clearInputAll(locator) { this.logger.info(`BasePage::clearInputAll is called. Locator: ${JSON.stringify(locator)}`); const input = await this.findElement(locator); - if (isMacOS()) { - await input.sendKeys(Key.chord(Key.COMMAND, 'a')); - } else { - await input.sendKeys(Key.chord(Key.CONTROL, 'a')); - } + await input.sendKeys(Key.chord(isMacOS() ? Key.COMMAND : Key.CONTROL, 'a')); await this.sleep(200); await input.sendKeys(Key.NULL); await input.sendKeys(Key.BACK_SPACE); From eaf01605c69ff3c0f5e648fa673ada683db68514 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 26 Jun 2024 14:06:55 +0300 Subject: [PATCH 227/464] fix alignment --- .../app/components/swap/PriceImpact.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/yoroi-extension/app/components/swap/PriceImpact.js b/packages/yoroi-extension/app/components/swap/PriceImpact.js index c3d0ffcb98..2aabaa0901 100644 --- a/packages/yoroi-extension/app/components/swap/PriceImpact.js +++ b/packages/yoroi-extension/app/components/swap/PriceImpact.js @@ -1,15 +1,14 @@ // @flow -import type { Node } from 'react'; import { Box, Button, Typography } from '@mui/material'; -import Dialog from '../widgets/Dialog'; +import { useSwap } from '@yoroi/swap'; +import type { Node } from 'react'; import { ReactComponent as ErrorTriangleIcon } from '../../assets/images/revamp/error.triangle.svg'; import { ReactComponent as ExclamationCircleIcon } from '../../assets/images/revamp/exclamation.circle.svg'; -import type { PriceImpact } from './types'; -import { useSwap } from '@yoroi/swap'; -import Percent from '../common/Percent'; +import { useSwapForm } from '../../containers/swap/context/swap-form'; import { Quantities } from '../../utils/quantities'; +import Percent from '../common/Percent'; +import Dialog from '../widgets/Dialog'; import { PRICE_PRECISION } from './common'; -import { useSwapForm } from '../../containers/swap/context/swap-form'; function colorsBySeverity(isSevere: boolean) { return isSevere ? { fg: '#FF1351', bg: '#FFF1F5' } : { fg: '#ED8600', bg: '#FDF7E2' }; @@ -52,6 +51,7 @@ export function PriceImpactIcon({ height: sz, marginTop, marginRight, + marginLeft: '-3px', }} > {isSevere ? : } From 85d5aadbd42aaa58e4f66d578a986bcaa223e66a Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 26 Jun 2024 14:10:50 +0300 Subject: [PATCH 228/464] fixed border radius --- .../app/components/common/assets/AssetPair.js | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/packages/yoroi-extension/app/components/common/assets/AssetPair.js b/packages/yoroi-extension/app/components/common/assets/AssetPair.js index 88335642b3..ba8430f0c6 100644 --- a/packages/yoroi-extension/app/components/common/assets/AssetPair.js +++ b/packages/yoroi-extension/app/components/common/assets/AssetPair.js @@ -1,10 +1,8 @@ //@flow import { Box } from '@mui/material'; -import type { AssetAmount } from '../../swap/types'; import adaTokenImage from '../../../assets/images/ada.inline.svg'; -import { urlResolveForIpfsAndCorsproxy } from '../../../coreUtils'; import defaultTokenImage from '../../../assets/images/revamp/token-default.inline.svg'; -import type { RemoteTokenInfo } from '../../../api/ada/lib/state-fetch/types'; +import { urlResolveForIpfsAndCorsproxy } from '../../../coreUtils'; type Props = {| from: AssetAmount, @@ -14,8 +12,9 @@ type Props = {| |}; function tokenImgSrc(token, defaultTokenInfo): string { - return token.ticker === defaultTokenInfo.ticker ? adaTokenImage - : (urlResolveForIpfsAndCorsproxy(token.image) ?? defaultTokenImage); + return token.ticker === defaultTokenInfo.ticker + ? adaTokenImage + : urlResolveForIpfsAndCorsproxy(token.image) ?? defaultTokenImage; } function tokenImg(token, defaultTokenInfo): React$Node { @@ -23,7 +22,11 @@ function tokenImg(token, defaultTokenInfo): React$Node { svg': { width: '100%', height: '100%' } }} + sx={{ + overflowY: 'hidden', + '& > svg': { width: '100%', height: '100%' }, + borderRadius: '4px', + }} > - ) + ); } export default function AssetPair({ from, to, defaultTokenInfo, sx = {} }: Props): React$Node { From a307a6d898205e9fec4e39d249630ffbe43e2d69 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Wed, 26 Jun 2024 14:15:03 +0300 Subject: [PATCH 229/464] minor improvements --- packages/e2e-tests/pages/basepage.js | 3 +-- packages/e2e-tests/pages/newWalletPages/walletDetails.page.js | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/e2e-tests/pages/basepage.js b/packages/e2e-tests/pages/basepage.js index 681e5cc038..6c39702b1b 100644 --- a/packages/e2e-tests/pages/basepage.js +++ b/packages/e2e-tests/pages/basepage.js @@ -262,8 +262,7 @@ class BasePage { } async waitForElement(locator) { this.logger.info(`BasePage::waitForElement is called. Value: ${JSON.stringify(locator)}`); - await this.waitForElementLocated(locator); - const element = await this.findElement(locator); + const element = await this.waitForElementLocated(locator); return await this.driver.wait(until.elementIsVisible(element)); } async waitEnable(locator) { diff --git a/packages/e2e-tests/pages/newWalletPages/walletDetails.page.js b/packages/e2e-tests/pages/newWalletPages/walletDetails.page.js index bfa0744f88..68ec61d55a 100644 --- a/packages/e2e-tests/pages/newWalletPages/walletDetails.page.js +++ b/packages/e2e-tests/pages/newWalletPages/walletDetails.page.js @@ -54,8 +54,8 @@ class WalletDetails extends AddWalletBase { async closeTipsModalWindow() { this.logger.info(`WalletDetails::closeTipsModalWindow is called`); await this.waitForElement(this.tipsModalLocator); - await this.waitForElement(this.tipModalContinueButtonLocator); - await this.click(this.tipModalContinueButtonLocator); + const buttonElem = await this.waitForElement(this.tipModalContinueButtonLocator); + await buttonElem.click(); } async enterWalletName(walletName) { this.logger.info(`WalletDetails::enterWalletName is called`); From 6556d052ec518859ccca3a5370fbf0ac67130304 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 26 Jun 2024 14:33:55 +0300 Subject: [PATCH 230/464] fix table right padding display --- .../app/containers/swap/orders/OrdersPage.js | 63 ++++++++++--------- 1 file changed, 35 insertions(+), 28 deletions(-) diff --git a/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js b/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js index 7b5db97f39..9677fdeb46 100644 --- a/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js +++ b/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js @@ -1,30 +1,30 @@ // @flow +import { Box, Button } from '@mui/material'; +import { useSwap } from '@yoroi/swap'; +import moment from 'moment'; import type { Node } from 'react'; import { useState } from 'react'; -import { Box, Button } from '@mui/material'; -import Table from '../../../components/common/table/Table'; -import CancelSwapOrderDialog from '../../../components/swap/CancelOrderDialog'; +import { addressBech32ToHex } from '../../../api/ada/lib/cardanoCrypto/utils'; +import { signTransactionHex } from '../../../api/ada/transactions/signTransactionHex'; +import { + getTransactionFeeFromCbor, + getTransactionTotalOutputFromCbor, +} from '../../../api/ada/transactions/utils'; import AssetPair from '../../../components/common/assets/AssetPair'; +import Table from '../../../components/common/table/Table'; import Tabs from '../../../components/common/tabs/Tabs'; -import type { MappedOrder } from './hooks'; -import { useRichOrders } from './hooks'; -import type { StoresAndActionsProps } from '../../../types/injectedProps.types'; +import CancelSwapOrderDialog from '../../../components/swap/CancelOrderDialog'; import { SwapPoolLabel } from '../../../components/swap/SwapPoolComponents'; -import ExplorableHashContainer from '../../widgets/ExplorableHashContainer'; -import { truncateAddressShort } from '../../../utils/formatters'; -import { Quantities } from '../../../utils/quantities'; +import type { CardanoConnectorSignRequest } from '../../../connector/types'; import { fail, forceNonNull, maybe } from '../../../coreUtils'; -import type { RemoteTokenInfo } from '../../../api/ada/lib/state-fetch/types'; -import { useSwap } from '@yoroi/swap'; -import { addressBech32ToHex } from '../../../api/ada/lib/cardanoCrypto/utils'; -import { getTransactionFeeFromCbor, getTransactionTotalOutputFromCbor, } from '../../../api/ada/transactions/utils'; import { SelectedExplorer } from '../../../domain/SelectedExplorer'; -import type { CardanoConnectorSignRequest } from '../../../connector/types'; import { genLookupOrFail } from '../../../stores/stateless/tokenHelpers'; -import moment from 'moment'; -import { signTransactionHex } from '../../../api/ada/transactions/signTransactionHex'; +import type { StoresAndActionsProps } from '../../../types/injectedProps.types'; +import { truncateAddressShort } from '../../../utils/formatters'; +import { Quantities } from '../../../utils/quantities'; +import ExplorableHashContainer from '../../widgets/ExplorableHashContainer'; +import { useRichOrders } from './hooks'; import { createFormattedTokenValues } from './util'; -import type { FormattedTokenValue } from './util'; type ColumnContext = {| completedOrders: boolean, @@ -83,9 +83,7 @@ const orderColumns: Array = [ ]; export default function SwapOrdersPage(props: StoresAndActionsProps): Node { - const { - order: orderApi, - } = useSwap(); + const { order: orderApi } = useSwap(); const [showCompletedOrders, setShowCompletedOrders] = useState(false); const [cancellationState, setCancellationState] = useState(null); - const { wallets, tokenInfoStore, explorers, substores: { ada: { swapStore } } } = props.stores; + const { + wallets, + tokenInfoStore, + explorers, + substores: { + ada: { swapStore }, + }, + } = props.stores; const wallet = wallets.selectedOrFail; const network = wallet.getParent().getNetworkInfo(); const walletVariant = wallet.getParent().getWalletVariant(); - const defaultTokenInfo = tokenInfoStore.getDefaultTokenInfoSummary( - network.NetworkId - ); + const defaultTokenInfo = tokenInfoStore.getDefaultTokenInfoSummary(network.NetworkId); const selectedExplorer = - explorers.selectedExplorer.get(network.NetworkId) ?? - fail('No explorer for wallet network'); + explorers.selectedExplorer.get(network.NetworkId) ?? fail('No explorer for wallet network'); - const fetchTransactionTimestamps = txHashes => swapStore.fetchTransactionTimestamps({ wallet, txHashes }); - let { openOrders, completedOrders, transactionTimestamps } = useRichOrders(defaultTokenInfo, fetchTransactionTimestamps); + const fetchTransactionTimestamps = txHashes => + swapStore.fetchTransactionTimestamps({ wallet, txHashes }); + let { openOrders, completedOrders, transactionTimestamps } = useRichOrders( + defaultTokenInfo, + fetchTransactionTimestamps + ); const txHashToRenderedTimestamp: string => string = txHash => { const date = transactionTimestamps[txHash]; @@ -293,6 +299,7 @@ export default function SwapOrdersPage(props: StoresAndActionsProps): Node { columnLeftPaddings={columnLeftPaddings} gridTemplateColumns={gridTemplateColumns} columnGap="0px" + columnRightPaddings={['0px', '0px', '0px', '0px', '0px', '0px', '0px']} > {showCompletedOrders ? completedOrders.map(order => ( From 8162c051d1c44cd278eee9bb8a73ee0fdd9e8869 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Wed, 26 Jun 2024 14:45:44 +0300 Subject: [PATCH 231/464] fixed base method --- packages/e2e-tests/pages/basepage.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/e2e-tests/pages/basepage.js b/packages/e2e-tests/pages/basepage.js index 6c39702b1b..a539a2219c 100644 --- a/packages/e2e-tests/pages/basepage.js +++ b/packages/e2e-tests/pages/basepage.js @@ -326,7 +326,7 @@ class BasePage { const result = await this.customWaiter( async () => { const elemsPresented = await this.findElements(locator); - return elemsPresented === 1; + return elemsPresented.length === 1; }, timeout, repeatPeriod From 5b2953ec7e89305d5d6b237ee55d4a485b030f12 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Wed, 26 Jun 2024 14:45:56 +0300 Subject: [PATCH 232/464] used a new approach --- .../pages/newWalletPages/walletDetails.page.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/e2e-tests/pages/newWalletPages/walletDetails.page.js b/packages/e2e-tests/pages/newWalletPages/walletDetails.page.js index 68ec61d55a..dc1b54c4a0 100644 --- a/packages/e2e-tests/pages/newWalletPages/walletDetails.page.js +++ b/packages/e2e-tests/pages/newWalletPages/walletDetails.page.js @@ -1,4 +1,5 @@ import AddWalletBase from './addWalletBase.page.js'; +import { fiveSeconds, quarterSecond } from '../../helpers/timeConstants.js'; class WalletDetails extends AddWalletBase { defaultMessage = @@ -54,8 +55,16 @@ class WalletDetails extends AddWalletBase { async closeTipsModalWindow() { this.logger.info(`WalletDetails::closeTipsModalWindow is called`); await this.waitForElement(this.tipsModalLocator); - const buttonElem = await this.waitForElement(this.tipModalContinueButtonLocator); - await buttonElem.click(); + const buttonIsPresented = await this.customWaitIsPresented( + this.tipModalContinueButtonLocator, + fiveSeconds, + quarterSecond + ); + if (buttonIsPresented) { + await this.click(this.tipModalContinueButtonLocator); + } else { + throw new Error('New wallet -> Details page -> Tips modal -> The continue button is not found.'); + } } async enterWalletName(walletName) { this.logger.info(`WalletDetails::enterWalletName is called`); From da49c879f0a9e80583a5a08bb9e4376f3e5cfc9a Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 26 Jun 2024 14:52:09 +0300 Subject: [PATCH 233/464] fix wallet submitted screen --- .../images/revamp/tx-submitted.inline.svg | 27 +++++++++++++++++++ .../swap/asset-swap/TxSubmittedStep.js | 11 ++++---- 2 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 packages/yoroi-extension/app/assets/images/revamp/tx-submitted.inline.svg diff --git a/packages/yoroi-extension/app/assets/images/revamp/tx-submitted.inline.svg b/packages/yoroi-extension/app/assets/images/revamp/tx-submitted.inline.svg new file mode 100644 index 0000000000..f53cfa9eec --- /dev/null +++ b/packages/yoroi-extension/app/assets/images/revamp/tx-submitted.inline.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/yoroi-extension/app/containers/swap/asset-swap/TxSubmittedStep.js b/packages/yoroi-extension/app/containers/swap/asset-swap/TxSubmittedStep.js index 306f9457e7..9a594bfb21 100644 --- a/packages/yoroi-extension/app/containers/swap/asset-swap/TxSubmittedStep.js +++ b/packages/yoroi-extension/app/containers/swap/asset-swap/TxSubmittedStep.js @@ -1,8 +1,7 @@ //@flow import { Box, Button, Typography } from '@mui/material'; -import { ReactComponent as TxSuccessfulImage } from '../../../assets/images/revamp/tx-successful.inline.svg'; import { ReactComponent as TxFailureImage } from '../../../assets/images/revamp/tx-failure.inline.svg'; -import type { State } from '../context/swap-form/types'; +import { ReactComponent as TxSuccessfulImage } from '../../../assets/images/revamp/tx-submitted.inline.svg'; type Props = {| txSubmitErrorState: State, @@ -22,9 +21,9 @@ export default function TxSubmittedStep({ flexDirection="column" gap="16px" alignItems="center" - width="400px" + width="404px" mx="auto" - mt="80px" + mt="131px" > {isSuccessful ? : } @@ -33,13 +32,13 @@ export default function TxSubmittedStep({ {isSuccessful - ? 'Your transactions will be displayed both in the list of transaction and Open swap orders' + ? 'Check this transaction in the list of wallet transactions' : 'Your transaction has not been processed properly due to technical issues'} {!isSuccessful && ( From 569ec096e02f8e6faf4572809e47f0fdd9550356 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 26 Jun 2024 15:58:35 +0300 Subject: [PATCH 234/464] fix icon alignment --- .../app/components/widgets/InfoTooltip.js | 11 ++++----- .../swap/asset-swap/ConfirmSwapTransaction.js | 23 ++++++++----------- 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/packages/yoroi-extension/app/components/widgets/InfoTooltip.js b/packages/yoroi-extension/app/components/widgets/InfoTooltip.js index 52c87bfbee..99b8c8e5b3 100644 --- a/packages/yoroi-extension/app/components/widgets/InfoTooltip.js +++ b/packages/yoroi-extension/app/components/widgets/InfoTooltip.js @@ -11,7 +11,7 @@ const STooltip = styled(({ className, ...props }: any) => ( [`& .${tooltipClasses.tooltip}`]: { backgroundColor: theme.palette.grayscale[900], opacity: 0.8, - lineHeight: 22, + lineHeight: 18, fontSize: 14, maxWidth: width, }, @@ -24,13 +24,12 @@ type Props = {| |}; export const InfoTooltip = ({ content, width, children }: Props): React$Node => { - const contentNode = typeof content === 'string' ? ( - {content} - ) : content; + const contentNode = + typeof content === 'string' ? {content} : content; return ( - - {children ?? ()} + + {children ?? } ); diff --git a/packages/yoroi-extension/app/containers/swap/asset-swap/ConfirmSwapTransaction.js b/packages/yoroi-extension/app/containers/swap/asset-swap/ConfirmSwapTransaction.js index 69e68cde9c..58e1ef9b36 100644 --- a/packages/yoroi-extension/app/containers/swap/asset-swap/ConfirmSwapTransaction.js +++ b/packages/yoroi-extension/app/containers/swap/asset-swap/ConfirmSwapTransaction.js @@ -1,27 +1,24 @@ //@flow import { Box, Typography } from '@mui/material'; -import TextField from '../../../components/common/TextField'; -import { useSwapForm } from '../context/swap-form'; -import { AssetAndAmountRow } from '../../../components/swap/SelectAssetDialog'; import { makeLimitOrder, makePossibleMarketOrder, useSwap, useSwapCreateOrder } from '@yoroi/swap'; -import { SwapPoolLabel } from '../../../components/swap/SwapPoolComponents'; -import SwapPoolFullInfo from './edit-pool/PoolFullInfo'; -import { useSwapFeeDisplay } from '../hooks'; -import type { PriceImpact } from '../../../components/swap/types'; -import type { RemoteTokenInfo } from '../../../api/ada/lib/state-fetch/types'; +import { useEffect } from 'react'; +import { IncorrectWalletPasswordError } from '../../../api/common/errors'; +import TextField from '../../../components/common/TextField'; import { FormattedActualPrice, - FormattedMarketPrice, FormattedLimitPrice, + FormattedMarketPrice, PriceImpactBanner, PriceImpactColored, PriceImpactIcon, PriceImpactPercent, } from '../../../components/swap/PriceImpact'; -import type { State } from '../context/swap-form/types'; -import { useEffect } from 'react'; -import { IncorrectWalletPasswordError } from '../../../api/common/errors'; +import { AssetAndAmountRow } from '../../../components/swap/SelectAssetDialog'; +import { SwapPoolLabel } from '../../../components/swap/SwapPoolComponents'; import { InfoTooltip } from '../../../components/widgets/InfoTooltip'; +import { useSwapForm } from '../context/swap-form'; +import { useSwapFeeDisplay } from '../hooks'; +import SwapPoolFullInfo from './edit-pool/PoolFullInfo'; type Props = {| slippageValue: string, @@ -226,7 +223,7 @@ const SummaryRow = ({ col1, children, withInfo = false, infoText = '' }) => ( {col1} {withInfo ? ( - + {infoText}} /> ) : null} From b1d8fb3225b8d5f56ac45fd429f980dc73ac4314 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 26 Jun 2024 16:12:59 +0300 Subject: [PATCH 235/464] fix spacing --- .../app/components/swap/SelectAssetDialog.js | 53 +++++++++---------- .../swap/asset-swap/edit-pool/EditPool.js | 13 ++--- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/packages/yoroi-extension/app/components/swap/SelectAssetDialog.js b/packages/yoroi-extension/app/components/swap/SelectAssetDialog.js index cdd531fc4f..c3871929f8 100644 --- a/packages/yoroi-extension/app/components/swap/SelectAssetDialog.js +++ b/packages/yoroi-extension/app/components/swap/SelectAssetDialog.js @@ -1,20 +1,19 @@ // @flow -import type { AssetAmount, PriceImpact } from './types'; -import { useEffect, useState } from 'react'; import { Box, Typography } from '@mui/material'; -import { ReactComponent as NoAssetsFound } from '../../assets/images/revamp/no-assets-found.inline.svg'; +import { useEffect, useState } from 'react'; +import type { RemoteTokenInfo } from '../../api/ada/lib/state-fetch/types'; +import adaTokenImage from '../../assets/images/ada.inline.svg'; +import defaultTokenImage from '../../assets/images/revamp/asset-default.inline.svg'; +import { ReactComponent as ArrowBottomIcon } from '../../assets/images/revamp/icons/arrow-bottom.inline.svg'; +import { ReactComponent as ArrowTopIcon } from '../../assets/images/revamp/icons/arrow-top.inline.svg'; import { ReactComponent as SearchIcon } from '../../assets/images/revamp/icons/search.inline.svg'; import { ReactComponent as WalletIcon } from '../../assets/images/revamp/icons/wallet.inline.svg'; -import { ReactComponent as ArrowTopIcon } from '../../assets/images/revamp/icons/arrow-top.inline.svg'; -import { ReactComponent as ArrowBottomIcon } from '../../assets/images/revamp/icons/arrow-bottom.inline.svg'; +import { ReactComponent as NoAssetsFound } from '../../assets/images/revamp/no-assets-found.inline.svg'; import { truncateAddressShort } from '../../utils/formatters'; -import adaTokenImage from '../../assets/images/ada.inline.svg'; -import defaultTokenImage from '../../assets/images/revamp/asset-default.inline.svg'; -import Dialog from '../widgets/Dialog'; import Table from '../common/table/Table'; -import type { RemoteTokenInfo } from '../../api/ada/lib/state-fetch/types'; -import { PriceImpactColored, PriceImpactIcon } from './PriceImpact'; +import Dialog from '../widgets/Dialog'; import { InfoTooltip } from '../widgets/InfoTooltip'; +import { PriceImpactColored, PriceImpactIcon } from './PriceImpact'; const fromTemplateColumns = '1fr minmax(auto, 136px)'; const toTemplateColumns = '1fr minmax(auto, 152px) minmax(auto, 136px)'; @@ -27,7 +26,7 @@ type Props = {| onAssetSelected: any => void, onClose: void => void, defaultTokenInfo: RemoteTokenInfo, - getTokenInfoBatch: Array => { [string]: Promise }, + getTokenInfoBatch: (Array) => { [string]: Promise }, |}; export default function SelectAssetDialog({ @@ -54,8 +53,9 @@ export default function SelectAssetDialog({ .includes(searchTerm.toLowerCase()); }) || []; - const metadataPromiseMap: { [string]: Promise } = - getTokenInfoBatch(filteredAssets.map(a => a.id)) + const metadataPromiseMap: { [string]: Promise } = getTokenInfoBatch( + filteredAssets.map(a => a.id) + ); return ( - + {filteredAssets.length} assets {searchTerm ? 'found' : 'available'} @@ -184,7 +184,6 @@ export const AssetAndAmountRow = ({ displayAmount?: ?string, priceImpactState?: ?PriceImpact, |}): React$Node => { - const [remoteTokenLogo, setRemoteTokenLogo] = useState(null); const isFrom = type === 'from'; @@ -196,21 +195,21 @@ export const AssetAndAmountRow = ({ useEffect(() => { if (id != null) { - getTokenInfo(id).then(tokenInfo => { - if (tokenInfo.logo != null) { - setRemoteTokenLogo(`data:image/png;base64,${tokenInfo.logo}`); - } - return null; - }).catch(e => { - console.warn('Failed to resolve remote info for token: ' + id, e); - }); + getTokenInfo(id) + .then(tokenInfo => { + if (tokenInfo.logo != null) { + setRemoteTokenLogo(`data:image/png;base64,${tokenInfo.logo}`); + } + return null; + }) + .catch(e => { + console.warn('Failed to resolve remote info for token: ' + id, e); + }); } - }, [id]) + }, [id]); const imgSrc = - ticker === defaultTokenInfo.ticker - ? adaTokenImage - : remoteTokenLogo ?? defaultTokenImage; + ticker === defaultTokenInfo.ticker ? adaTokenImage : remoteTokenLogo ?? defaultTokenImage; const amount = displayAmount ?? assetAmount; diff --git a/packages/yoroi-extension/app/containers/swap/asset-swap/edit-pool/EditPool.js b/packages/yoroi-extension/app/containers/swap/asset-swap/edit-pool/EditPool.js index 430964ad2e..5ec15df3a7 100644 --- a/packages/yoroi-extension/app/containers/swap/asset-swap/edit-pool/EditPool.js +++ b/packages/yoroi-extension/app/containers/swap/asset-swap/edit-pool/EditPool.js @@ -1,16 +1,15 @@ // @flow -import { useState } from 'react'; import { Box, Typography } from '@mui/material'; -import { ReactComponent as EditIcon } from '../../../../assets/images/revamp/icons/edit.inline.svg'; -import { ReactComponent as ChevronDownIcon } from '../../../../assets/images/revamp/icons/chevron-down.inline.svg'; import { useSwap } from '@yoroi/swap'; import { capitalize } from 'lodash'; +import { useState } from 'react'; +import { ReactComponent as ChevronDownIcon } from '../../../../assets/images/revamp/icons/chevron-down.inline.svg'; +import { ReactComponent as EditIcon } from '../../../../assets/images/revamp/icons/edit.inline.svg'; import { SwapPoolIcon } from '../../../../components/swap/SwapPoolComponents'; -import SwapPoolFullInfo from './PoolFullInfo'; -import { useSwapForm } from '../../context/swap-form'; import { maybe } from '../../../../coreUtils'; +import { useSwapForm } from '../../context/swap-form'; import { useSwapFeeDisplay } from '../../hooks'; -import type { RemoteTokenInfo } from '../../../../api/ada/lib/state-fetch/types'; +import SwapPoolFullInfo from './PoolFullInfo'; type Props = {| +defaultTokenInfo: RemoteTokenInfo, @@ -90,6 +89,8 @@ export default function EditSwapPool({ handleEditPool, defaultTokenInfo }: Props display: 'flex', alignItems: 'center', justifyContent: 'space-between', + marginBottom: '8px', + cursor: 'pointer', }} onClick={handleShowFullInfo} > From d90bf67e6ec837ead4e0d15cb2c008be5f73a2f8 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 26 Jun 2024 17:14:54 +0300 Subject: [PATCH 236/464] fix icon alignment --- packages/yoroi-extension/app/components/swap/PriceImpact.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/components/swap/PriceImpact.js b/packages/yoroi-extension/app/components/swap/PriceImpact.js index 2aabaa0901..f23700dc32 100644 --- a/packages/yoroi-extension/app/components/swap/PriceImpact.js +++ b/packages/yoroi-extension/app/components/swap/PriceImpact.js @@ -37,7 +37,7 @@ export function PriceImpactIcon({ small?: boolean, |}): Node { const sz = `${small ? 16 : 24}px`; - const marginTop = `${small ? -2 : 0}px`; + const marginTop = `${small ? -1 : 0}px`; const marginRight = `6px`; const svgProp = small ? { From 7c106b5cceea7e463f38d46eddf704e9563b7460 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 26 Jun 2024 17:17:10 +0300 Subject: [PATCH 237/464] fix input icon border radius --- .../app/components/swap/SwapInput.js | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/packages/yoroi-extension/app/components/swap/SwapInput.js b/packages/yoroi-extension/app/components/swap/SwapInput.js index ae433227df..e215eba458 100644 --- a/packages/yoroi-extension/app/components/swap/SwapInput.js +++ b/packages/yoroi-extension/app/components/swap/SwapInput.js @@ -1,13 +1,10 @@ // @flow -import type { Node } from 'react'; -import type { AssetAmount } from './types'; import { Box, Typography } from '@mui/material'; -import { ReactComponent as ChevronDownIcon } from '../../assets/images/revamp/icons/chevron-down.inline.svg'; +import type { Node } from 'react'; +import { useEffect, useState } from 'react'; import adaTokenImage from '../../assets/images/ada.inline.svg'; +import { ReactComponent as ChevronDownIcon } from '../../assets/images/revamp/icons/chevron-down.inline.svg'; import defaultTokenImage from '../../assets/images/revamp/token-default.inline.svg'; -import type { RemoteTokenInfo } from '../../api/ada/lib/state-fetch/types'; -import type { State } from '../../containers/swap/context/swap-form/types'; -import { useEffect, useState } from 'react'; type Props = {| label: string, @@ -63,9 +60,7 @@ export default function SwapInput({ }, [id]); const imgSrc = - ticker === defaultTokenInfo.ticker - ? adaTokenImage - : remoteTokenLogo ?? defaultTokenImage; + ticker === defaultTokenInfo.ticker ? adaTokenImage : remoteTokenLogo ?? defaultTokenImage; return ( @@ -128,7 +123,11 @@ export default function SwapInput({ svg': { width: '100%', height: '100%' } }} + sx={{ + overflowY: 'hidden', + '& > svg': { width: '100%', height: '100%' }, + borderRadius: '4px', + }} > Date: Wed, 26 Jun 2024 17:53:55 +0300 Subject: [PATCH 238/464] fix padding on dialog --- .../yoroi-extension/app/components/swap/SelectAssetDialog.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/components/swap/SelectAssetDialog.js b/packages/yoroi-extension/app/components/swap/SelectAssetDialog.js index c3871929f8..bb44e17457 100644 --- a/packages/yoroi-extension/app/components/swap/SelectAssetDialog.js +++ b/packages/yoroi-extension/app/components/swap/SelectAssetDialog.js @@ -107,7 +107,7 @@ export default function SelectAssetDialog({ }} /> - + {filteredAssets.length} assets {searchTerm ? 'found' : 'available'} From 0c5b445cdf4b8efd7227a0d6fc35022f38002d4d Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 26 Jun 2024 18:27:36 +0300 Subject: [PATCH 239/464] fix pool details spaceing --- .../app/containers/swap/asset-swap/edit-pool/EditPool.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/containers/swap/asset-swap/edit-pool/EditPool.js b/packages/yoroi-extension/app/containers/swap/asset-swap/edit-pool/EditPool.js index 5ec15df3a7..5e0141a368 100644 --- a/packages/yoroi-extension/app/containers/swap/asset-swap/edit-pool/EditPool.js +++ b/packages/yoroi-extension/app/containers/swap/asset-swap/edit-pool/EditPool.js @@ -89,7 +89,7 @@ export default function EditSwapPool({ handleEditPool, defaultTokenInfo }: Props display: 'flex', alignItems: 'center', justifyContent: 'space-between', - marginBottom: '8px', + marginBottom: showFullInfo && '8px', cursor: 'pointer', }} onClick={handleShowFullInfo} From 72b9efdee8324cadf29357d99593c11ad8a1d574 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Wed, 26 Jun 2024 19:23:58 +0300 Subject: [PATCH 240/464] Version bump: 5.2.003 (nightly) --- packages/yoroi-extension/package-lock.json | 4 ++-- packages/yoroi-extension/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/yoroi-extension/package-lock.json b/packages/yoroi-extension/package-lock.json index 2abac3993f..5dd509f114 100644 --- a/packages/yoroi-extension/package-lock.json +++ b/packages/yoroi-extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "yoroi", - "version": "5.2.002", + "version": "5.2.003", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "yoroi", - "version": "5.2.002", + "version": "5.2.003", "license": "MIT", "dependencies": { "@amplitude/analytics-browser": "^2.1.3", diff --git a/packages/yoroi-extension/package.json b/packages/yoroi-extension/package.json index d099709fd2..4ea0b16274 100644 --- a/packages/yoroi-extension/package.json +++ b/packages/yoroi-extension/package.json @@ -1,6 +1,6 @@ { "name": "yoroi", - "version": "5.2.002", + "version": "5.2.003", "description": "Cardano ADA wallet", "scripts": { "dev-mv2": "rimraf dev/ && NODE_OPTIONS=--openssl-legacy-provider babel-node scripts-mv2/build --type=debug --env 'mainnet'", From d64a7199fad28f7bd95dd04a0b93251175bfa069 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 26 Jun 2024 19:31:59 +0300 Subject: [PATCH 241/464] fix flow --- packages/e2e-tests/package-lock.json | 8 +- packages/e2e-tests/package.json | 2 +- .../lib/storage/database/primitives/tables.js | 3 +- .../wallet/staking/StakingPageContent.js | 6 +- packages/yoroi-extension/package-lock.json | 682 +++++++++++++----- 5 files changed, 522 insertions(+), 179 deletions(-) diff --git a/packages/e2e-tests/package-lock.json b/packages/e2e-tests/package-lock.json index 16d3da0e07..e9cca01537 100644 --- a/packages/e2e-tests/package-lock.json +++ b/packages/e2e-tests/package-lock.json @@ -41,7 +41,7 @@ "@emurgo/cardano-serialization-lib-nodejs": "^12.0.0-alpha.26", "bignumber.js": "^9.1.2", "chai": "^4.3.10", - "chromedriver": "^126.0.3", + "chromedriver": "^126.0.4", "cross-env": "^7.0.3", "json-server": "^0.17.4", "mocha": "^10.2.0", @@ -450,9 +450,9 @@ } }, "node_modules/chromedriver": { - "version": "126.0.3", - "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-126.0.3.tgz", - "integrity": "sha512-4o+ZK8926/8lqIlnnvcljCHV88Z8IguEMB5PInOiS9/Lb6cyeZSj2Uvz+ky1Jgyw2Bn7qCLJFfbUslaWnvUUbg==", + "version": "126.0.4", + "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-126.0.4.tgz", + "integrity": "sha512-mIdJqdocfN/y9fl5BymIzM9WQLy64x078i5tS1jGFzbFAwXwXrj3zmA86Wf3R/hywPYpWqwXxFGBJHgqZTuGCA==", "dev": true, "hasInstallScript": true, "dependencies": { diff --git a/packages/e2e-tests/package.json b/packages/e2e-tests/package.json index ab72c6d2c0..493d402f7e 100644 --- a/packages/e2e-tests/package.json +++ b/packages/e2e-tests/package.json @@ -47,7 +47,7 @@ "@emurgo/cardano-serialization-lib-nodejs": "^12.0.0-alpha.26", "bignumber.js": "^9.1.2", "chai": "^4.3.10", - "chromedriver": "^126.0.3", + "chromedriver": "^126.0.4", "cross-env": "^7.0.3", "json-server": "^0.17.4", "mocha": "^10.2.0", diff --git a/packages/yoroi-extension/app/api/ada/lib/storage/database/primitives/tables.js b/packages/yoroi-extension/app/api/ada/lib/storage/database/primitives/tables.js index d2aad52267..9a6e7b21cd 100644 --- a/packages/yoroi-extension/app/api/ada/lib/storage/database/primitives/tables.js +++ b/packages/yoroi-extension/app/api/ada/lib/storage/database/primitives/tables.js @@ -2,9 +2,8 @@ import type { lf$schema$Builder } from 'lovefield'; import { ConstraintAction, ConstraintTiming, Type } from 'lovefield'; - -import type { CertificateKind } from '@emurgo/cardano-serialization-lib-browser/cardano_serialization_lib'; import type { CertificateRelationType, CoreAddressT, TxStatusCodesType } from './enums'; +import typeof { CertificateKind } from '@emurgo/cardano-serialization-lib-browser/cardano_serialization_lib'; import type { KeyKindType } from '../../../cardanoCrypto/keys/types'; import type { CoinTypesT } from '../../../../../../config/numbersConfig'; diff --git a/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js b/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js index 9b57bc1209..08a2e2ce0f 100644 --- a/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js +++ b/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js @@ -1,11 +1,15 @@ // @flow import { observer } from 'mobx-react'; import moment from 'moment'; -import type { Node } from 'react'; +import type { ComponentType, Node } from 'react'; import { Component } from 'react'; import { intlShape } from 'react-intl'; import type { ConfigType } from '../../../../config/config-types'; import { withLayout } from '../../../styles/context/layout'; +import type { StoresAndActionsProps } from '../../../types/injectedProps.types'; +import type { LayoutComponentMap } from '../../../styles/context/layout'; +import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; +import type { TokenEntry } from '../../../api/common/lib/MultiToken'; import { Box, styled } from '@mui/system'; import { PublicDeriver } from '../../../api/ada/lib/storage/models/PublicDeriver/index'; diff --git a/packages/yoroi-extension/package-lock.json b/packages/yoroi-extension/package-lock.json index 9a38f501f3..7421003ea0 100644 --- a/packages/yoroi-extension/package-lock.json +++ b/packages/yoroi-extension/package-lock.json @@ -20,7 +20,7 @@ "@emurgo/cip4-js": "1.0.5", "@emurgo/cross-csl-browser": "4.4.0", "@emurgo/yoroi-eutxo-txs": "0.0.2-alpha.8", - "@emurgo/yoroi-lib": "0.15.6-alpha.1", + "@emurgo/yoroi-lib": "0.15.6-alpha.2", "@ledgerhq/hw-transport-u2f": "5.36.0-deprecated", "@ledgerhq/hw-transport-webauthn": "5.36.0-deprecated", "@ledgerhq/hw-transport-webhid": "5.51.1", @@ -83,7 +83,6 @@ "react-router": "5.2.0", "react-router-dom": "5.2.0", "recharts": "1.8.5", - "root": "file:../..", "semver": "7.6.0", "stream-browserify": "3.0.0", "tinycolor2": "1.4.2", @@ -116,10 +115,7 @@ "@emurgo/cardano-serialization-lib-nodejs": "12.0.0-alpha.26", "@emurgo/cross-csl-nodejs": "4.4.0", "@pmmmwh/react-refresh-webpack-plugin": "0.5.11", -<<<<<<< HEAD "@types/chrome": "^0.0.268", -======= ->>>>>>> 565f57c00043a9271497115aa46de5ce16526ef8 "@types/react-intl": "^3.0.0", "@types/react-router-dom": "^5.3.3", "@yoroi/common": "1.5.0", @@ -186,6 +182,8 @@ } }, "../..": { + "name": "root", + "extraneous": true, "devDependencies": { "concurrently": "^7.0.0", "husky": "4.3.8", @@ -260,7 +258,6 @@ "node": ">=12.0.0" } }, -<<<<<<< HEAD "node_modules/@amplitude/ampli/node_modules/fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -294,8 +291,6 @@ "node": ">=8" } }, -======= ->>>>>>> 565f57c00043a9271497115aa46de5ce16526ef8 "node_modules/@amplitude/ampli/node_modules/typescript": { "version": "3.9.10", "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", @@ -309,7 +304,6 @@ "node": ">=4.2.0" } }, -<<<<<<< HEAD "node_modules/@amplitude/ampli/node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -319,8 +313,6 @@ "node": ">= 4.0.0" } }, -======= ->>>>>>> 565f57c00043a9271497115aa46de5ce16526ef8 "node_modules/@amplitude/analytics-browser": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/@amplitude/analytics-browser/-/analytics-browser-2.8.1.tgz", @@ -2771,9 +2763,9 @@ } }, "node_modules/@emurgo/yoroi-lib": { - "version": "0.15.6-alpha.1", - "resolved": "https://registry.npmjs.org/@emurgo/yoroi-lib/-/yoroi-lib-0.15.6-alpha.1.tgz", - "integrity": "sha512-uI3fjgVC17LZ5yRQsCWh6epYISSNdxG9N2rMtD6XsK4YfWFRQoGu9jaBHzKF69mskGYeB7KGyqnCaBGflQqWmA==", + "version": "0.15.6-alpha.2", + "resolved": "https://registry.npmjs.org/@emurgo/yoroi-lib/-/yoroi-lib-0.15.6-alpha.2.tgz", + "integrity": "sha512-onY17cnLROEqQQ4DxpQ4tWoJOXuKO/PlMNFZnNqQxFJldjQxdm6pAOW1kZMWfVuh0vtCtBNVf+CwlJERqvwvDg==", "dependencies": { "@cardano-foundation/ledgerjs-hw-app-cardano": "^6.0.0", "@emurgo/cross-csl-core": "4.4.0", @@ -3952,6 +3944,12 @@ "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-6.12.0.tgz", "integrity": "sha512-ExDoj1QV5eC6TEbMdLUMMk9cfvNKhhv5gXol4SmULRVCx/3iyCPhJ74nsb3S0Vb+/f+XujBEj3vQn5+cwS0fNA==" }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true + }, "node_modules/@mui/base": { "version": "5.0.0-beta.40", "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.40.tgz", @@ -5716,6 +5714,60 @@ "url": "https://opencollective.com/popperjs" } }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, "node_modules/@react-native-async-storage/async-storage": { "version": "1.23.1", "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.23.1.tgz", @@ -5821,6 +5873,12 @@ "node": ">=6" } }, + "node_modules/@servie/events": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@servie/events/-/events-1.0.0.tgz", + "integrity": "sha512-sBSO19KzdrJCM3gdx6eIxV8M9Gxfgg6iDQmH5TIAGaUu+X9VDdsINXJOnoiZ1Kx3TrHdH4bt5UVglkjsEGBcvw==", + "dev": true + }, "node_modules/@sindresorhus/is": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-2.1.1.tgz", @@ -6534,15 +6592,12 @@ "@types/node": "*" } }, -<<<<<<< HEAD "node_modules/@types/har-format": { "version": "1.2.15", "resolved": "https://registry.npmjs.org/@types/har-format/-/har-format-1.2.15.tgz", "integrity": "sha512-RpQH4rXLuvTXKR0zqHq3go0RVXYv/YVqv4TnPH95VbwUxZdQlK1EtcMvQvMpDngHbt13Csh9Z4qT9AbkiQH5BA==", "dev": true }, -======= ->>>>>>> 565f57c00043a9271497115aa46de5ce16526ef8 "node_modules/@types/history": { "version": "4.7.11", "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", @@ -6648,6 +6703,11 @@ "@types/node": "*" } }, + "node_modules/@types/lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-MBIOHVZqVqgfro1euRDWX7OO0fBVUUMrN6Pwm8LQsz8cWhEpihlvR70ENj3f40j58TNxZaWv2ndSkInykNBBJw==" + }, "node_modules/@types/mdast": { "version": "3.0.15", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", @@ -6715,6 +6775,11 @@ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" }, + "node_modules/@types/q": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz", + "integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==" + }, "node_modules/@types/qs": { "version": "6.9.15", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", @@ -6867,16 +6932,35 @@ "@types/node": "*" } }, + "node_modules/@types/tough-cookie": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.11.tgz", + "integrity": "sha512-xtFyCxnfpItBS6wRt6M+be0PzNEP6J/CqTR0mHCf/OzIbbOOh6DQ1MjiyzDrzDctzgYSmRcHH3PBvTO2hYovLg==", + "dev": true + }, "node_modules/@types/unist": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" }, + "node_modules/@types/w3c-web-usb": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@types/w3c-web-usb/-/w3c-web-usb-1.0.10.tgz", + "integrity": "sha512-CHgUI5kTc/QLMP8hODUHhge0D4vx+9UiAwIGiT0sTy/B2XpdX1U5rJt6JSISgr6ikRT7vxV9EVAFeYZqUnl1gQ==" + }, "node_modules/@types/web": { "version": "0.0.100", "resolved": "https://registry.npmjs.org/@types/web/-/web-0.0.100.tgz", "integrity": "sha512-8NDSrDsyF7qv93SQ7aNFk0NqpNb1QEC1meoEZW/+KGMHZWd0WOC2DiT9pVhS5+w5q+u9+2bkBCfUQpe9wbqiPA==" }, + "node_modules/@types/ws": { + "version": "7.4.7", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", + "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/yargs": { "version": "15.0.19", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", @@ -7142,31 +7226,6 @@ "react-query": "^3.39.3" } }, -<<<<<<< HEAD -======= - "node_modules/@yoroi/staking": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@yoroi/staking/-/staking-1.5.1.tgz", - "integrity": "sha512-CgJhPR7rf07QSstwdhPt5C+P8jNuZiqv3s4+ODlj8x60johIl6/5sz2vt+zGcx4R8pzFw1D/pDyFmdw0BDvzlg==", - "dependencies": { - "@emurgo/cip14-js": "^3.0.1", - "bech32": "^2.0.0", - "bip39": "^3.1.0", - "immer": "^10.0.2" - }, - "engines": { - "node": ">= 16.19.0" - }, - "optionalDependencies": { - "@react-native-async-storage/async-storage": "^1.19.3" - }, - "peerDependencies": { - "@react-native-async-storage/async-storage": ">= 1.19.3 <= 1.20.0", - "react": ">= 16.8.0 <= 19.0.0", - "react-query": "^3.39.3" - } - }, ->>>>>>> 565f57c00043a9271497115aa46de5ce16526ef8 "node_modules/@yoroi/staking/node_modules/@emurgo/cip14-js": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@emurgo/cip14-js/-/cip14-js-3.0.1.tgz", @@ -7838,6 +7897,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, "node_modules/asn1.js": { "version": "4.10.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", @@ -7934,6 +8002,15 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", @@ -8709,6 +8786,17 @@ "node": "*" } }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", @@ -8752,6 +8840,39 @@ "resolved": "https://registry.npmjs.org/bitcoin-ops/-/bitcoin-ops-1.4.1.tgz", "integrity": "sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow==" }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "node_modules/blake-hash": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/blake-hash/-/blake-hash-2.0.0.tgz", @@ -8855,8 +8976,7 @@ "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, "node_modules/brace-expansion": { "version": "1.1.11", @@ -9153,6 +9273,21 @@ "node": ">=0.2.0" } }, + "node_modules/byline": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", + "integrity": "sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/byte-length/-/byte-length-1.0.2.tgz", + "integrity": "sha512-ovBpjmsgd/teRmgcPh23d4gJvxDoXtAzEL9xTfMU8Yc2kqCDb7L9jAG0XHl1nzuGl+h3ebCIF1i62UFyA9V/2Q==", + "dev": true + }, "node_modules/bytebuffer": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz", @@ -9551,6 +9686,15 @@ "node": ">=0.8.0" } }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/character-entities": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", @@ -9578,6 +9722,12 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, "node_modules/charenc": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", @@ -9732,6 +9882,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/cli-progress": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz", @@ -9744,6 +9906,18 @@ "node": ">=4" } }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cli-ux": { "version": "5.6.7", "resolved": "https://registry.npmjs.org/cli-ux/-/cli-ux-5.6.7.tgz", @@ -9908,6 +10082,15 @@ "node": ">= 4.0.0" } }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, "node_modules/client-oauth2": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/client-oauth2/-/client-oauth2-4.3.3.tgz", @@ -9945,6 +10128,15 @@ "node": ">=8" } }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -9998,6 +10190,19 @@ "node": ">= 0.12.0" } }, + "node_modules/coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dependencies": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "engines": { + "node": ">= 4.0" + } + }, "node_modules/collect-v8-coverage": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", @@ -10095,6 +10300,57 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/compress-commons": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-2.1.1.tgz", + "integrity": "sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q==", + "dev": true, + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^3.0.1", + "normalize-path": "^3.0.0", + "readable-stream": "^2.3.6" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/compress-commons/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/compress-commons/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/compress-commons/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/compress-commons/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -10492,6 +10748,15 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "dev": true }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/copy-to-clipboard": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", @@ -10690,6 +10955,52 @@ "node": ">=10" } }, + "node_modules/crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dev": true, + "dependencies": { + "buffer": "^5.1.0" + } + }, + "node_modules/crc/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/crc32-stream": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz", + "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==", + "dev": true, + "dependencies": { + "crc": "^3.4.4", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, "node_modules/create-ecdh": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", @@ -10872,6 +11183,53 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + }, + "node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-tree/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -10890,6 +11248,42 @@ "integrity": "sha512-6tun4LoZnj7VN6YeegOVb67KBX/7JJsqvj+pv3ZA7F878/eN33AbGa5b/S/wXxS/tcp8nc40xRUrsPlxIyNUPg==", "dev": true }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "node_modules/csso/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", @@ -11562,6 +11956,31 @@ "node": ">=6.9.0" } }, + "node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, "node_modules/domexception": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", @@ -11608,6 +12027,15 @@ ], "license": "BSD-2-Clause" }, + "node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, "node_modules/dot-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", @@ -11880,10 +12308,7 @@ "version": "5.17.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", -<<<<<<< HEAD "license": "MIT", -======= ->>>>>>> 565f57c00043a9271497115aa46de5ce16526ef8 "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -11907,7 +12332,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, "license": "BSD-2-Clause", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" @@ -12668,10 +13092,7 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-12.1.0.tgz", "integrity": "sha512-Y2fqAfC11TcG/WP3TrI1Gi3p3nc8XJyEOJYHyEPEGI/UAgNx6akxxlX74p7SbAQdLcgASKhj8M0GKvH3vq/+ig==", "dev": true, -<<<<<<< HEAD "license": "MIT", -======= ->>>>>>> 565f57c00043a9271497115aa46de5ce16526ef8 "peerDependencies": { "eslint": ">=5.0.0" } @@ -14940,14 +15361,10 @@ } }, "node_modules/graceful-fs": { -<<<<<<< HEAD "version": "4.2.8", - "license": "ISC" -======= - "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" ->>>>>>> 565f57c00043a9271497115aa46de5ce16526ef8 + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" }, "node_modules/graphql": { "version": "15.8.0", @@ -20511,6 +20928,11 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -20692,14 +21114,10 @@ } }, "node_modules/micromatch": { -<<<<<<< HEAD "version": "4.0.4", - "license": "MIT", -======= - "version": "4.0.7", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", ->>>>>>> 565f57c00043a9271497115aa46de5ce16526ef8 + "license": "MIT", "dependencies": { "braces": "^3.0.1", "picomatch": "^2.2.3" @@ -21996,6 +22414,14 @@ "node": ">=4" } }, + "node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dependencies": { + "boolbase": "~1.0.0" + } + }, "node_modules/nwsapi": { "version": "2.2.0", "dev": true, @@ -23622,6 +24048,16 @@ "bitcoin-ops": "^1.3.0" } }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, "node_modules/qrcode.react": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/qrcode.react/-/qrcode.react-3.1.0.tgz", @@ -24855,6 +25291,19 @@ "lowercase-keys": "^2.0.0" } }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -25007,10 +25456,6 @@ "lodash": "^4.17.15" } }, - "node_modules/root": { - "resolved": "../..", - "link": true - }, "node_modules/rsvp": { "version": "4.8.5", "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", @@ -26923,10 +27368,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", -<<<<<<< HEAD "license": "MIT", -======= ->>>>>>> 565f57c00043a9271497115aa46de5ce16526ef8 "engines": { "node": ">=6" } @@ -27415,105 +27857,6 @@ "dev": true, "license": "MIT" }, - "node_modules/ts-loader": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", - "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4", - "source-map": "^0.7.4" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "typescript": "*", - "webpack": "^5.0.0" - } - }, - "node_modules/ts-loader/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ts-loader/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ts-loader/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ts-loader/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/ts-loader/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ts-loader/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/ts-loader/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ts-loader": { "version": "9.5.1", "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", @@ -27778,10 +28121,7 @@ "version": "5.4.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", -<<<<<<< HEAD "license": "Apache-2.0", -======= ->>>>>>> 565f57c00043a9271497115aa46de5ce16526ef8 "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" From cc06d4cd3b1c64d4ff9045caabeb28dc052b6468 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Thu, 27 Jun 2024 13:30:26 +0300 Subject: [PATCH 242/464] minor change --- packages/e2e-tests/test/dapp/dAppSignTx.test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/e2e-tests/test/dapp/dAppSignTx.test.js b/packages/e2e-tests/test/dapp/dAppSignTx.test.js index a4a3a66c57..3d3db197a4 100644 --- a/packages/e2e-tests/test/dapp/dAppSignTx.test.js +++ b/packages/e2e-tests/test/dapp/dAppSignTx.test.js @@ -59,7 +59,7 @@ describe('dApp, signTx, intrawallet Tx', function () { await mockedDApp.requestUnusedAddresses(); const unusedAddresses = await mockedDApp.getAddresses(); receiverAddr = unusedAddresses.retValue[0]; - const requestedAmount = String(1 * adaInLovelaces); + const requestedAmount = String(2 * adaInLovelaces); // send sign request with 1 ada const { txFee } = await mockedDApp.requestSigningTx(requestedAmount, receiverAddr); expectedFee = txFee; @@ -103,7 +103,7 @@ describe('dApp, signTx, intrawallet Tx', function () { const addrAssets = filteredAddrs[0].assets; expect(addrAssets, 'No tokens for the receiver address').to.be.an('array').that.is.not.empty; const filteredAddrAssets = addrAssets.filter(assetInfo => assetInfo.tokenName === 'ADA'); - expect(filteredAddrAssets.length, 'No ADA token for the receiver address').to.equal(1); + expect(filteredAddrAssets.length, 'No ADA token for the receiver address').to.equal(2); expect( filteredAddrAssets[0].tokenAmount, 'Different amount for the receiver address' From d31a037ab8d90dd1e87df890fd38f904ce8feb4b Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Thu, 27 Jun 2024 15:54:57 +0300 Subject: [PATCH 243/464] update for getting wallet info --- .../e2e-tests/pages/walletCommonBase.page.js | 58 +++++++++++++++---- 1 file changed, 48 insertions(+), 10 deletions(-) diff --git a/packages/e2e-tests/pages/walletCommonBase.page.js b/packages/e2e-tests/pages/walletCommonBase.page.js index 774e413732..5c67cf7a32 100644 --- a/packages/e2e-tests/pages/walletCommonBase.page.js +++ b/packages/e2e-tests/pages/walletCommonBase.page.js @@ -1,4 +1,11 @@ -import { halfSecond, oneMinute, oneSecond, defaultWaitTimeout } from '../helpers/timeConstants.js'; +import { + defaultWaitTimeout, + fiveSeconds, + halfSecond, + oneMinute, + oneSecond, + quarterSecond, +} from '../helpers/timeConstants.js'; import BasePage from './basepage.js'; class WalletCommonBase extends BasePage { @@ -116,19 +123,50 @@ class WalletCommonBase extends BasePage { // functions async getSelectedWalletInfo() { this.logger.info(`WalletCommonBase::getSelectedWalletInfo is called`); + let walletName = ''; + let walletPlate = ''; + let adaBalance = 0; + let fiatBalance = 0; + let fiatBalanceStr = ''; + let fiatCurrency = ''; await this.waitForElement(this.walletNameAndPlateNumberTextLocator); - const rawNameAndPlateText = await this.getText(this.walletNameAndPlateNumberTextLocator); - const [walletName, walletPlate] = rawNameAndPlateText.split('\n'); + const walletNavPanelState = await this.customWaitIsPresented( + this.walletNameAndPlateNumberTextLocator, + fiveSeconds, + quarterSecond + ); + if (walletNavPanelState) { + const rawNameAndPlateText = await this.getText(this.walletNameAndPlateNumberTextLocator); + [walletName, walletPlate] = rawNameAndPlateText.split('\n'); + } else { + throw new Error('Wallet navigation panel is not found'); + } - const walletBalanceElem = await this.waitForElement(this.walletBalanceTextLocator); - const rawBalanceText = await walletBalanceElem.getText(); - const adaBalance = Number(rawBalanceText.split(' ')[0]); + const walletBalanceState = await this.customWaitIsPresented( + this.walletBalanceTextLocator, + fiveSeconds, + quarterSecond + ); + if (walletBalanceState) { + const rawBalanceText = await this.getText(this.walletBalanceTextLocator); + adaBalance = Number(rawBalanceText.split(' ')[0]); + } else { + throw new Error('Wallet balance is not found'); + } - const walletFiatBalanceElem = await this.waitForElement(this.walletFiatBalanceTextLocator); - const rawFiatBalanceText = await walletFiatBalanceElem.getText(); - const [fiatBalanceStr, fiatCurrency] = rawFiatBalanceText.split(' '); - const fiatBalance = fiatBalanceStr === '-' ? 0 : Number(fiatBalanceStr); + const walletFiatBalanceState = await this.customWaitIsPresented( + this.walletFiatBalanceTextLocator, + fiveSeconds, + quarterSecond + ); + if (walletFiatBalanceState) { + const rawFiatBalanceText = await this.getText(this.walletFiatBalanceTextLocator); + [fiatBalanceStr, fiatCurrency] = rawFiatBalanceText.split(' '); + fiatBalance = fiatBalanceStr === '-' ? 0 : Number(fiatBalanceStr); + } else { + throw new Error('Wallet fiat balance is not found'); + } const walletInfo = { name: walletName, From 9369de18702cd7c08163923e68c6508cf9151169 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Thu, 27 Jun 2024 16:11:19 +0300 Subject: [PATCH 244/464] wrong excpeted result --- packages/e2e-tests/test/dapp/dAppSignTx.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/e2e-tests/test/dapp/dAppSignTx.test.js b/packages/e2e-tests/test/dapp/dAppSignTx.test.js index 3d3db197a4..07b9a21fd9 100644 --- a/packages/e2e-tests/test/dapp/dAppSignTx.test.js +++ b/packages/e2e-tests/test/dapp/dAppSignTx.test.js @@ -103,7 +103,7 @@ describe('dApp, signTx, intrawallet Tx', function () { const addrAssets = filteredAddrs[0].assets; expect(addrAssets, 'No tokens for the receiver address').to.be.an('array').that.is.not.empty; const filteredAddrAssets = addrAssets.filter(assetInfo => assetInfo.tokenName === 'ADA'); - expect(filteredAddrAssets.length, 'No ADA token for the receiver address').to.equal(2); + expect(filteredAddrAssets.length, 'No ADA token for the receiver address').to.equal(1); expect( filteredAddrAssets[0].tokenAmount, 'Different amount for the receiver address' From d3c114242cf7b66b7fc80434f0a1461e855a56b2 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Thu, 27 Jun 2024 16:12:12 +0300 Subject: [PATCH 245/464] changed expected amount --- packages/e2e-tests/test/dapp/dAppSignTx.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/e2e-tests/test/dapp/dAppSignTx.test.js b/packages/e2e-tests/test/dapp/dAppSignTx.test.js index 07b9a21fd9..59e0f877a8 100644 --- a/packages/e2e-tests/test/dapp/dAppSignTx.test.js +++ b/packages/e2e-tests/test/dapp/dAppSignTx.test.js @@ -107,7 +107,7 @@ describe('dApp, signTx, intrawallet Tx', function () { expect( filteredAddrAssets[0].tokenAmount, 'Different amount for the receiver address' - ).to.equal(1); + ).to.equal(2); }); it('Checking info on Connection page', async function () { From 94c9c3621c79d528500ba66e60a8c7815b850f99 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Thu, 27 Jun 2024 16:24:07 +0300 Subject: [PATCH 246/464] one source of the truth --- packages/e2e-tests/test/dapp/dAppSignTx.test.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/e2e-tests/test/dapp/dAppSignTx.test.js b/packages/e2e-tests/test/dapp/dAppSignTx.test.js index 59e0f877a8..6720accc76 100644 --- a/packages/e2e-tests/test/dapp/dAppSignTx.test.js +++ b/packages/e2e-tests/test/dapp/dAppSignTx.test.js @@ -24,6 +24,7 @@ describe('dApp, signTx, intrawallet Tx', function () { let expectedFee = 0; let receiverAddr = ''; const testWallet = getSpendableWallet(); + const adaAmount = 2; before(function (done) { webdriver = driversPoolsManager.getDriverFromPool(); @@ -59,7 +60,7 @@ describe('dApp, signTx, intrawallet Tx', function () { await mockedDApp.requestUnusedAddresses(); const unusedAddresses = await mockedDApp.getAddresses(); receiverAddr = unusedAddresses.retValue[0]; - const requestedAmount = String(2 * adaInLovelaces); + const requestedAmount = String(adaAmount * adaInLovelaces); // send sign request with 1 ada const { txFee } = await mockedDApp.requestSigningTx(requestedAmount, receiverAddr); expectedFee = txFee; @@ -107,7 +108,7 @@ describe('dApp, signTx, intrawallet Tx', function () { expect( filteredAddrAssets[0].tokenAmount, 'Different amount for the receiver address' - ).to.equal(2); + ).to.equal(adaAmount); }); it('Checking info on Connection page', async function () { From 99d8d176854df684b8b9b6877f060fd1d21a1450 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Fri, 28 Jun 2024 02:06:26 +0300 Subject: [PATCH 247/464] reworked another waiter --- .../createWalletStepTwo.page.js | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/packages/e2e-tests/pages/newWalletPages/createWalletSteps/createWalletStepTwo.page.js b/packages/e2e-tests/pages/newWalletPages/createWalletSteps/createWalletStepTwo.page.js index 76cf91a54f..49e499ca93 100644 --- a/packages/e2e-tests/pages/newWalletPages/createWalletSteps/createWalletStepTwo.page.js +++ b/packages/e2e-tests/pages/newWalletPages/createWalletSteps/createWalletStepTwo.page.js @@ -1,3 +1,4 @@ +import { fiveSeconds, quarterSecond } from '../../../helpers/timeConstants.js'; import AddWalletBase from '../addWalletBase.page.js'; class CreateWalletStepTwo extends AddWalletBase { @@ -37,9 +38,24 @@ class CreateWalletStepTwo extends AddWalletBase { } async closeTipsModalWindow() { this.logger.info(`CreateWalletStepTwo::closeTipsModalWindow is called`); - await this.waitForElement(this.tipsModalLocator); - await this.waitForElement(this.tipModalContinueButtonLocator); - await this.click(this.tipModalContinueButtonLocator); + const tipsModalState = await this.customWaitIsPresented( + this.tipsModalLocator, + fiveSeconds, + quarterSecond + ); + if (!tipsModalState) { + throw new Error('The tips modal is not presented'); + } + const continueBtnState = await this.customWaitIsPresented( + this.tipModalContinueButtonLocator, + fiveSeconds, + quarterSecond + ); + if (continueBtnState) { + await this.click(this.tipModalContinueButtonLocator); + } else { + throw new Error('The Continue button on the tips modal is not found'); + } } async recoveryPhraseIsBlurred() { this.logger.info(`CreateWalletStepTwo::recoveryPhraseIsBlurred is called`); From db7379c33cc429acc7a44074c5bd46c35d6d0792 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Fri, 28 Jun 2024 06:20:19 +0300 Subject: [PATCH 248/464] package update after merge --- packages/e2e-tests/package-lock.json | 8 ++++---- packages/e2e-tests/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/e2e-tests/package-lock.json b/packages/e2e-tests/package-lock.json index 16d3da0e07..e9cca01537 100644 --- a/packages/e2e-tests/package-lock.json +++ b/packages/e2e-tests/package-lock.json @@ -41,7 +41,7 @@ "@emurgo/cardano-serialization-lib-nodejs": "^12.0.0-alpha.26", "bignumber.js": "^9.1.2", "chai": "^4.3.10", - "chromedriver": "^126.0.3", + "chromedriver": "^126.0.4", "cross-env": "^7.0.3", "json-server": "^0.17.4", "mocha": "^10.2.0", @@ -450,9 +450,9 @@ } }, "node_modules/chromedriver": { - "version": "126.0.3", - "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-126.0.3.tgz", - "integrity": "sha512-4o+ZK8926/8lqIlnnvcljCHV88Z8IguEMB5PInOiS9/Lb6cyeZSj2Uvz+ky1Jgyw2Bn7qCLJFfbUslaWnvUUbg==", + "version": "126.0.4", + "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-126.0.4.tgz", + "integrity": "sha512-mIdJqdocfN/y9fl5BymIzM9WQLy64x078i5tS1jGFzbFAwXwXrj3zmA86Wf3R/hywPYpWqwXxFGBJHgqZTuGCA==", "dev": true, "hasInstallScript": true, "dependencies": { diff --git a/packages/e2e-tests/package.json b/packages/e2e-tests/package.json index ab72c6d2c0..493d402f7e 100644 --- a/packages/e2e-tests/package.json +++ b/packages/e2e-tests/package.json @@ -47,7 +47,7 @@ "@emurgo/cardano-serialization-lib-nodejs": "^12.0.0-alpha.26", "bignumber.js": "^9.1.2", "chai": "^4.3.10", - "chromedriver": "^126.0.3", + "chromedriver": "^126.0.4", "cross-env": "^7.0.3", "json-server": "^0.17.4", "mocha": "^10.2.0", From 27fdbb2ae29e68b847161ef40fbe14cde6747ca4 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Fri, 28 Jun 2024 06:23:56 +0300 Subject: [PATCH 249/464] Version bump: 5.2.101 (nightly) --- packages/yoroi-extension/package-lock.json | 4 ++-- packages/yoroi-extension/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/yoroi-extension/package-lock.json b/packages/yoroi-extension/package-lock.json index d92c6dc348..e8b258ede1 100644 --- a/packages/yoroi-extension/package-lock.json +++ b/packages/yoroi-extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "yoroi", - "version": "5.2.100", + "version": "5.2.101", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "yoroi", - "version": "5.2.100", + "version": "5.2.101", "license": "MIT", "dependencies": { "@amplitude/analytics-browser": "^2.1.3", diff --git a/packages/yoroi-extension/package.json b/packages/yoroi-extension/package.json index a9550b6318..a183f23ccd 100644 --- a/packages/yoroi-extension/package.json +++ b/packages/yoroi-extension/package.json @@ -1,6 +1,6 @@ { "name": "yoroi", - "version": "5.2.100", + "version": "5.2.101", "description": "Cardano ADA wallet", "scripts": { "dev-mv2": "rimraf dev/ && NODE_OPTIONS=--openssl-legacy-provider babel-node scripts-mv2/build --type=debug --env 'mainnet'", From 9ce414ab3b6daa9569392e13da44264068739389 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Fri, 28 Jun 2024 06:37:59 +0300 Subject: [PATCH 250/464] flow fixes --- .../yoroi-extension/app/components/common/assets/AssetPair.js | 2 ++ packages/yoroi-extension/app/components/swap/PriceImpact.js | 1 + .../yoroi-extension/app/components/swap/SelectAssetDialog.js | 1 + packages/yoroi-extension/app/components/swap/SwapInput.js | 3 +++ .../app/containers/swap/asset-swap/ConfirmSwapTransaction.js | 3 +++ .../app/containers/swap/asset-swap/TxSubmittedStep.js | 1 + .../app/containers/swap/asset-swap/edit-pool/EditPool.js | 1 + .../yoroi-extension/app/containers/swap/orders/OrdersPage.js | 3 +++ 8 files changed, 15 insertions(+) diff --git a/packages/yoroi-extension/app/components/common/assets/AssetPair.js b/packages/yoroi-extension/app/components/common/assets/AssetPair.js index ba8430f0c6..5a9b29491d 100644 --- a/packages/yoroi-extension/app/components/common/assets/AssetPair.js +++ b/packages/yoroi-extension/app/components/common/assets/AssetPair.js @@ -3,6 +3,8 @@ import { Box } from '@mui/material'; import adaTokenImage from '../../../assets/images/ada.inline.svg'; import defaultTokenImage from '../../../assets/images/revamp/token-default.inline.svg'; import { urlResolveForIpfsAndCorsproxy } from '../../../coreUtils'; +import type { AssetAmount } from '../../swap/types'; +import type { RemoteTokenInfo } from '../../../api/ada/lib/state-fetch/types'; type Props = {| from: AssetAmount, diff --git a/packages/yoroi-extension/app/components/swap/PriceImpact.js b/packages/yoroi-extension/app/components/swap/PriceImpact.js index f23700dc32..fd1dd97060 100644 --- a/packages/yoroi-extension/app/components/swap/PriceImpact.js +++ b/packages/yoroi-extension/app/components/swap/PriceImpact.js @@ -9,6 +9,7 @@ import { Quantities } from '../../utils/quantities'; import Percent from '../common/Percent'; import Dialog from '../widgets/Dialog'; import { PRICE_PRECISION } from './common'; +import type { PriceImpact } from './types'; function colorsBySeverity(isSevere: boolean) { return isSevere ? { fg: '#FF1351', bg: '#FFF1F5' } : { fg: '#ED8600', bg: '#FDF7E2' }; diff --git a/packages/yoroi-extension/app/components/swap/SelectAssetDialog.js b/packages/yoroi-extension/app/components/swap/SelectAssetDialog.js index bb44e17457..bd1ca3b39d 100644 --- a/packages/yoroi-extension/app/components/swap/SelectAssetDialog.js +++ b/packages/yoroi-extension/app/components/swap/SelectAssetDialog.js @@ -14,6 +14,7 @@ import Table from '../common/table/Table'; import Dialog from '../widgets/Dialog'; import { InfoTooltip } from '../widgets/InfoTooltip'; import { PriceImpactColored, PriceImpactIcon } from './PriceImpact'; +import type { AssetAmount, PriceImpact } from './types'; const fromTemplateColumns = '1fr minmax(auto, 136px)'; const toTemplateColumns = '1fr minmax(auto, 152px) minmax(auto, 136px)'; diff --git a/packages/yoroi-extension/app/components/swap/SwapInput.js b/packages/yoroi-extension/app/components/swap/SwapInput.js index e215eba458..381f0848b2 100644 --- a/packages/yoroi-extension/app/components/swap/SwapInput.js +++ b/packages/yoroi-extension/app/components/swap/SwapInput.js @@ -5,6 +5,9 @@ import { useEffect, useState } from 'react'; import adaTokenImage from '../../assets/images/ada.inline.svg'; import { ReactComponent as ChevronDownIcon } from '../../assets/images/revamp/icons/chevron-down.inline.svg'; import defaultTokenImage from '../../assets/images/revamp/token-default.inline.svg'; +import type { AssetAmount } from './types'; +import type { RemoteTokenInfo } from '../../api/ada/lib/state-fetch/types'; +import type { State } from '../../containers/swap/context/swap-form/types'; type Props = {| label: string, diff --git a/packages/yoroi-extension/app/containers/swap/asset-swap/ConfirmSwapTransaction.js b/packages/yoroi-extension/app/containers/swap/asset-swap/ConfirmSwapTransaction.js index 58e1ef9b36..65e203a1fd 100644 --- a/packages/yoroi-extension/app/containers/swap/asset-swap/ConfirmSwapTransaction.js +++ b/packages/yoroi-extension/app/containers/swap/asset-swap/ConfirmSwapTransaction.js @@ -19,6 +19,9 @@ import { InfoTooltip } from '../../../components/widgets/InfoTooltip'; import { useSwapForm } from '../context/swap-form'; import { useSwapFeeDisplay } from '../hooks'; import SwapPoolFullInfo from './edit-pool/PoolFullInfo'; +import type { RemoteTokenInfo } from '../../../api/ada/lib/state-fetch/types'; +import type { PriceImpact } from '../../../components/swap/types'; +import type { State } from '../context/swap-form/types'; type Props = {| slippageValue: string, diff --git a/packages/yoroi-extension/app/containers/swap/asset-swap/TxSubmittedStep.js b/packages/yoroi-extension/app/containers/swap/asset-swap/TxSubmittedStep.js index 9a594bfb21..e0d6aa724b 100644 --- a/packages/yoroi-extension/app/containers/swap/asset-swap/TxSubmittedStep.js +++ b/packages/yoroi-extension/app/containers/swap/asset-swap/TxSubmittedStep.js @@ -2,6 +2,7 @@ import { Box, Button, Typography } from '@mui/material'; import { ReactComponent as TxFailureImage } from '../../../assets/images/revamp/tx-failure.inline.svg'; import { ReactComponent as TxSuccessfulImage } from '../../../assets/images/revamp/tx-submitted.inline.svg'; +import type { State } from '../context/swap-form/types'; type Props = {| txSubmitErrorState: State, diff --git a/packages/yoroi-extension/app/containers/swap/asset-swap/edit-pool/EditPool.js b/packages/yoroi-extension/app/containers/swap/asset-swap/edit-pool/EditPool.js index 5e0141a368..8d16049f17 100644 --- a/packages/yoroi-extension/app/containers/swap/asset-swap/edit-pool/EditPool.js +++ b/packages/yoroi-extension/app/containers/swap/asset-swap/edit-pool/EditPool.js @@ -10,6 +10,7 @@ import { maybe } from '../../../../coreUtils'; import { useSwapForm } from '../../context/swap-form'; import { useSwapFeeDisplay } from '../../hooks'; import SwapPoolFullInfo from './PoolFullInfo'; +import type { RemoteTokenInfo } from '../../../../api/ada/lib/state-fetch/types'; type Props = {| +defaultTokenInfo: RemoteTokenInfo, diff --git a/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js b/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js index 9677fdeb46..4398d29670 100644 --- a/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js +++ b/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js @@ -25,6 +25,9 @@ import { Quantities } from '../../../utils/quantities'; import ExplorableHashContainer from '../../widgets/ExplorableHashContainer'; import { useRichOrders } from './hooks'; import { createFormattedTokenValues } from './util'; +import type { RemoteTokenInfo } from '../../../api/ada/lib/state-fetch/types'; +import type { MappedOrder } from './hooks'; +import type { FormattedTokenValue } from './util'; type ColumnContext = {| completedOrders: boolean, From 0b204341d24f7d992ab4e6b2ff6fd14773497cb6 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Fri, 28 Jun 2024 14:06:02 +0300 Subject: [PATCH 251/464] remove eslint rule --- packages/yoroi-extension/.eslintrc.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/yoroi-extension/.eslintrc.js b/packages/yoroi-extension/.eslintrc.js index 27dee28d5b..661e6d5dbc 100644 --- a/packages/yoroi-extension/.eslintrc.js +++ b/packages/yoroi-extension/.eslintrc.js @@ -95,8 +95,6 @@ module.exports = { 'prefer-const': 1, 'object-curly-spacing': 1, 'spaced-comment': 0, - 'simple-import-sort/exports': 'error', - 'simple-import-sort/imports': 'error', quotes: ['error', 'single', { avoidEscape: true, allowTemplateLiterals: true }], 'import/imports-first': 1, 'react/jsx-indent': 1, From 526556c99268e9829f713091dba14b554b642455 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Fri, 28 Jun 2024 14:47:43 +0300 Subject: [PATCH 252/464] ignore UI folder from flow --- packages/yoroi-extension/.flowconfig | 1 + packages/yoroi-extension/app/Routes.js | 2 ++ 2 files changed, 3 insertions(+) diff --git a/packages/yoroi-extension/.flowconfig b/packages/yoroi-extension/.flowconfig index 022d677024..3263f01429 100644 --- a/packages/yoroi-extension/.flowconfig +++ b/packages/yoroi-extension/.flowconfig @@ -1,6 +1,7 @@ [ignore] .*/node_modules/fbjs/.* .*/node_modules/npm/.* +.*/UI/.* .*/release/.* .*/.git/.* .*/.vscode/.* diff --git a/packages/yoroi-extension/app/Routes.js b/packages/yoroi-extension/app/Routes.js index 72c383221b..c8e075aaba 100644 --- a/packages/yoroi-extension/app/Routes.js +++ b/packages/yoroi-extension/app/Routes.js @@ -1,3 +1,5 @@ +// @flow + import type { Node } from 'react'; import React, { Suspense } from 'react'; import { Redirect, Route, Switch } from 'react-router-dom'; From ff2b3ca6ac7b4938373d9ceab937e92791cf0ae5 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Fri, 28 Jun 2024 15:18:43 +0300 Subject: [PATCH 253/464] surpress errors - for some reasons the ignore in config is not working --- packages/yoroi-extension/app/Routes.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/yoroi-extension/app/Routes.js b/packages/yoroi-extension/app/Routes.js index c8e075aaba..dd24adae2f 100644 --- a/packages/yoroi-extension/app/Routes.js +++ b/packages/yoroi-extension/app/Routes.js @@ -29,16 +29,27 @@ import Wallet from './containers/wallet/Wallet'; import RestoreWalletPage, { RestoreWalletPagePromise } from './containers/wallet/restore/RestoreWalletPage'; // New UI pages +// $FlowIgnore: suppressing this error import { createCurrrentWalletInfo } from './UI/features/governace/common/helpers'; +// $FlowIgnore: suppressing this error import { GovernanceContextProvider } from './UI/features/governace/module/GovernanceContextProvider'; +// $FlowIgnore: suppressing this error import { PortfolioContextProvider } from './UI/features/portfolio/module/PortfolioContextProvider'; +// $FlowIgnore: suppressing this error import GovernanceDelegationFormPage from './UI/pages/Governance/GovernanceDelegationFormPage'; +// $FlowIgnore: suppressing this error import GovernanceStatusPage from './UI/pages/Governance/GovernanceStatusPage'; +// $FlowIgnore: suppressing this error import GovernanceTransactionFailedPage from './UI/pages/Governance/GovernanceTransactionFailedPage'; +// $FlowIgnore: suppressing this error import GovernanceTransactionSubmittedPage from './UI/pages/Governance/GovernanceTransactionSubmittedPage'; +// $FlowIgnore: suppressing this error import PortfolioDappsPage from './UI/pages/portfolio/PortfolioDappsPage'; +// $FlowIgnore: suppressing this error import PortfolioDetailPage from './UI/pages/portfolio/PortfolioDetailPage'; +// $FlowIgnore: suppressing this error import PortfolioPage from './UI/pages/portfolio/PortfolioPage'; +// $FlowIgnore: suppressing this error // PAGES const LanguageSelectionPagePromise = () => import('./containers/profile/LanguageSelectionPage'); From 4037e51a70a3ad7177d4740c89f7fb60eabf12ce Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Fri, 28 Jun 2024 15:22:12 +0300 Subject: [PATCH 254/464] before is not async anymore --- packages/e2e-tests/test/00_0_dontAcceptTOS.test.js | 3 +-- packages/e2e-tests/test/00_1_changingLanguageInitSteps.test.js | 3 +-- packages/e2e-tests/test/00_creatingWallet.test.js | 3 +-- packages/e2e-tests/test/01_restoringWallet.test.js | 3 +-- .../e2e-tests/test/02_restoringAlreadyExistingWallet.test.js | 3 +-- packages/e2e-tests/test/04_removingWallet.test.js | 3 +-- packages/e2e-tests/test/05_removingWallet_2.test.js | 3 +-- packages/e2e-tests/test/06_renamingWallet.test.js | 3 +-- packages/e2e-tests/test/07_changingPassword.test.js | 3 +-- packages/e2e-tests/test/08_downloadingLogs.test.js | 3 +-- packages/e2e-tests/test/09_exportTransactions.test.js | 3 +-- packages/e2e-tests/test/10_exportTxsNegative.test.js | 3 +-- packages/e2e-tests/test/11_countTransactions.test.js | 3 +-- packages/e2e-tests/test/12_loadingAllTransactions.test.js | 3 +-- packages/e2e-tests/test/13_generatingNewAddress.test.js | 3 +-- packages/e2e-tests/test/14_generatingMaxAmountAddrs.test.js | 3 +-- packages/e2e-tests/test/16_generateURILink.test.js | 3 +-- .../e2e-tests/test/17_generateURILink_NotRealAmount.test.js | 3 +-- packages/e2e-tests/test/18_changingLanguageSettings.test.js | 3 +-- packages/e2e-tests/test/19_changingFiat.test.js | 3 +-- packages/e2e-tests/test/20_changingCardanoExplorer.test.js | 3 +-- packages/e2e-tests/test/21_checkingTOS.test.js | 3 +-- packages/e2e-tests/test/22_addingMemo.test.js | 3 +-- packages/e2e-tests/test/23_editMemo.test.js | 3 +-- .../test/blacklist/03_restoringWalletClearInputs.test.js | 3 +-- .../test/blacklist/15_calculatingBalanceOnReceiveAddrs.test.js | 3 +-- .../test/blacklist/dapp/dAppGetCollateralNoPopUp.test.js | 3 +-- packages/e2e-tests/test/dapp/dAppConnection.test.js | 3 +-- packages/e2e-tests/test/dapp/dAppConnectionCancel.test.js | 3 +-- packages/e2e-tests/test/dapp/dAppConnectionNoWallets.test.js | 3 +-- packages/e2e-tests/test/dapp/dAppGeneral.test.js | 3 +-- .../e2e-tests/test/dapp/dAppGetCollateralErrorMaxLimit.test.js | 3 +-- .../test/dapp/dAppGetCollateralErrorNotEnoughUtxo.test.js | 3 +-- packages/e2e-tests/test/dapp/dAppGetUtxos.test.js | 3 +-- packages/e2e-tests/test/dapp/dAppGetUtxosEmptyWallet.test.js | 3 +-- packages/e2e-tests/test/dapp/dAppIsEnabled.test.js | 3 +-- packages/e2e-tests/test/dapp/dAppSignData.test.js | 3 +-- packages/e2e-tests/test/dapp/dAppSignDataCIP95.test.js | 3 +-- packages/e2e-tests/test/dapp/dAppSignTx.test.js | 3 +-- packages/e2e-tests/test/dapp/dAppSubmitTx.test.js | 3 +-- packages/e2e-tests/test/dapp/dAppYoroiInfo.test.js | 3 +-- 41 files changed, 41 insertions(+), 82 deletions(-) diff --git a/packages/e2e-tests/test/00_0_dontAcceptTOS.test.js b/packages/e2e-tests/test/00_0_dontAcceptTOS.test.js index 4e0c7b1bf7..773871ef22 100644 --- a/packages/e2e-tests/test/00_0_dontAcceptTOS.test.js +++ b/packages/e2e-tests/test/00_0_dontAcceptTOS.test.js @@ -11,12 +11,11 @@ describe("Can't proceed without accepting the ToS", function () { let webdriver = null; let logger = null; - before(function (done) { + before(function () { webdriver = getDriver(); logger = getTestLogger(this.test.parent.title); const basePage = new BasePage(webdriver, logger); basePage.goToExtension(); - done(); }); it('Checking the continue button', async function () { diff --git a/packages/e2e-tests/test/00_1_changingLanguageInitSteps.test.js b/packages/e2e-tests/test/00_1_changingLanguageInitSteps.test.js index e48691f618..cf4d29ebe5 100644 --- a/packages/e2e-tests/test/00_1_changingLanguageInitSteps.test.js +++ b/packages/e2e-tests/test/00_1_changingLanguageInitSteps.test.js @@ -11,12 +11,11 @@ describe('Changing language on the initial screen', function () { let webdriver = null; let logger = null; - before(function (done) { + before(function () { webdriver = getDriver(); logger = getTestLogger(this.test.parent.title); const basePage = new BasePage(webdriver, logger); basePage.goToExtension(); - done(); }); const testData = [ diff --git a/packages/e2e-tests/test/00_creatingWallet.test.js b/packages/e2e-tests/test/00_creatingWallet.test.js index 71fcc5b3c7..9d54eb57a0 100644 --- a/packages/e2e-tests/test/00_creatingWallet.test.js +++ b/packages/e2e-tests/test/00_creatingWallet.test.js @@ -17,10 +17,9 @@ describe('Creating wallet', function () { let webdriver = null; let logger = null; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - done(); }); it('Selecting Create wallet', async function () { diff --git a/packages/e2e-tests/test/01_restoringWallet.test.js b/packages/e2e-tests/test/01_restoringWallet.test.js index 1086c19f93..2ced2de293 100644 --- a/packages/e2e-tests/test/01_restoringWallet.test.js +++ b/packages/e2e-tests/test/01_restoringWallet.test.js @@ -17,10 +17,9 @@ describe('Restoring 15-wallet', function () { let webdriver = null; let logger = null; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - done(); }); it('Selecting Restore wallet 15-word', async function () { diff --git a/packages/e2e-tests/test/02_restoringAlreadyExistingWallet.test.js b/packages/e2e-tests/test/02_restoringAlreadyExistingWallet.test.js index 96ef5a4ba0..8dbc4e84d9 100644 --- a/packages/e2e-tests/test/02_restoringAlreadyExistingWallet.test.js +++ b/packages/e2e-tests/test/02_restoringAlreadyExistingWallet.test.js @@ -17,10 +17,9 @@ describe('Restoring already existing wallet', function () { let webdriver = null; let logger = null; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - done(); }); it('Restore a 15-word wallet', async function () { diff --git a/packages/e2e-tests/test/04_removingWallet.test.js b/packages/e2e-tests/test/04_removingWallet.test.js index 36a00d6a17..057b2969be 100644 --- a/packages/e2e-tests/test/04_removingWallet.test.js +++ b/packages/e2e-tests/test/04_removingWallet.test.js @@ -14,10 +14,9 @@ describe('Removing a wallet, one wallet is added', function () { let webdriver = null; let logger = null; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - done(); }); it('Prepare DB and storages', async function () { diff --git a/packages/e2e-tests/test/05_removingWallet_2.test.js b/packages/e2e-tests/test/05_removingWallet_2.test.js index c3eabf4130..eb0be9190d 100644 --- a/packages/e2e-tests/test/05_removingWallet_2.test.js +++ b/packages/e2e-tests/test/05_removingWallet_2.test.js @@ -17,10 +17,9 @@ describe('Removing the first wallet, two wallets is added', function () { let webdriver = null; let logger = null; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - done(); }); it('Prepare DB and storages', async function () { diff --git a/packages/e2e-tests/test/06_renamingWallet.test.js b/packages/e2e-tests/test/06_renamingWallet.test.js index 85a5fd5621..d0b73c81d0 100644 --- a/packages/e2e-tests/test/06_renamingWallet.test.js +++ b/packages/e2e-tests/test/06_renamingWallet.test.js @@ -16,10 +16,9 @@ describe('Renaming the wallet', function () { let logger = null; const newWalletName = 'newWalletName'; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - done(); }); it('Prepare DB and storages', async function () { diff --git a/packages/e2e-tests/test/07_changingPassword.test.js b/packages/e2e-tests/test/07_changingPassword.test.js index 212df032c7..3e30a22a22 100644 --- a/packages/e2e-tests/test/07_changingPassword.test.js +++ b/packages/e2e-tests/test/07_changingPassword.test.js @@ -19,10 +19,9 @@ describe('Changing wallet password', function () { let webdriver = null; let logger = null; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - done(); }); it('Prepare DB and storages', async function () { diff --git a/packages/e2e-tests/test/08_downloadingLogs.test.js b/packages/e2e-tests/test/08_downloadingLogs.test.js index 5e3f78ac35..3fb8b61fdd 100644 --- a/packages/e2e-tests/test/08_downloadingLogs.test.js +++ b/packages/e2e-tests/test/08_downloadingLogs.test.js @@ -19,11 +19,10 @@ describe('Downloading logs for support', function () { let webdriver = null; let logger = null; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); cleanDownloads(); - done(); }); it('Prepare DB and storages', async function () { diff --git a/packages/e2e-tests/test/09_exportTransactions.test.js b/packages/e2e-tests/test/09_exportTransactions.test.js index 29171b0af6..0d3ba3552e 100644 --- a/packages/e2e-tests/test/09_exportTransactions.test.js +++ b/packages/e2e-tests/test/09_exportTransactions.test.js @@ -21,11 +21,10 @@ describe('Export transactions, positive', function () { let webdriver = null; let logger = null; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); cleanDownloads(); - done(); }); it('Prepare DB and storages', async function () { diff --git a/packages/e2e-tests/test/10_exportTxsNegative.test.js b/packages/e2e-tests/test/10_exportTxsNegative.test.js index 692db095a3..84814f896b 100644 --- a/packages/e2e-tests/test/10_exportTxsNegative.test.js +++ b/packages/e2e-tests/test/10_exportTxsNegative.test.js @@ -19,11 +19,10 @@ describe('Export transactions, negative cases', function () { let webdriver = null; let logger = null; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); cleanDownloads(); - done(); }); it('Prepare DB and storages', async function () { diff --git a/packages/e2e-tests/test/11_countTransactions.test.js b/packages/e2e-tests/test/11_countTransactions.test.js index 0fe1dde547..ce424aa4d9 100644 --- a/packages/e2e-tests/test/11_countTransactions.test.js +++ b/packages/e2e-tests/test/11_countTransactions.test.js @@ -25,10 +25,9 @@ for (const testDatum of testData) { let webdriver = null; let logger = null; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - done(); }); it(`Restore a 15-word test wallet ${testDatum.testWallet.name}`, async function () { diff --git a/packages/e2e-tests/test/12_loadingAllTransactions.test.js b/packages/e2e-tests/test/12_loadingAllTransactions.test.js index 8d185c0f96..df111792bc 100644 --- a/packages/e2e-tests/test/12_loadingAllTransactions.test.js +++ b/packages/e2e-tests/test/12_loadingAllTransactions.test.js @@ -15,10 +15,9 @@ describe('Show more txs 5 times', function () { let webdriver = null; let logger = null; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - done(); }); it(`Restore a 15-word test wallet ${testWallet.name}`, async function () { diff --git a/packages/e2e-tests/test/13_generatingNewAddress.test.js b/packages/e2e-tests/test/13_generatingNewAddress.test.js index a3a396dc5a..d6ea4577b3 100644 --- a/packages/e2e-tests/test/13_generatingNewAddress.test.js +++ b/packages/e2e-tests/test/13_generatingNewAddress.test.js @@ -14,10 +14,9 @@ describe('Generating a new address', function () { let webdriver = null; let logger = null; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - done(); }); it('Create a 15-word wallet', async function () { diff --git a/packages/e2e-tests/test/14_generatingMaxAmountAddrs.test.js b/packages/e2e-tests/test/14_generatingMaxAmountAddrs.test.js index c53f67b53a..24cb4f4d39 100644 --- a/packages/e2e-tests/test/14_generatingMaxAmountAddrs.test.js +++ b/packages/e2e-tests/test/14_generatingMaxAmountAddrs.test.js @@ -15,10 +15,9 @@ describe('Generating a max amount of addresses', function () { let webdriver = null; let logger = null; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - done(); }); it('Create a 15-word wallet', async function () { diff --git a/packages/e2e-tests/test/16_generateURILink.test.js b/packages/e2e-tests/test/16_generateURILink.test.js index 331dd3d742..c0f31b5911 100644 --- a/packages/e2e-tests/test/16_generateURILink.test.js +++ b/packages/e2e-tests/test/16_generateURILink.test.js @@ -14,10 +14,9 @@ describe('Generating URL-link', function () { let webdriver = null; let logger = null; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - done(); }); it('Restore a 15-word wallet', async function () { diff --git a/packages/e2e-tests/test/17_generateURILink_NotRealAmount.test.js b/packages/e2e-tests/test/17_generateURILink_NotRealAmount.test.js index db1f2138a5..ba48cdf390 100644 --- a/packages/e2e-tests/test/17_generateURILink_NotRealAmount.test.js +++ b/packages/e2e-tests/test/17_generateURILink_NotRealAmount.test.js @@ -15,10 +15,9 @@ describe('Generating URL-link with really big amount', function () { let webdriver = null; let logger = null; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - done(); }); it('Restore a 15-word wallet', async function () { diff --git a/packages/e2e-tests/test/18_changingLanguageSettings.test.js b/packages/e2e-tests/test/18_changingLanguageSettings.test.js index 5b96cdb16a..4c7bea0200 100644 --- a/packages/e2e-tests/test/18_changingLanguageSettings.test.js +++ b/packages/e2e-tests/test/18_changingLanguageSettings.test.js @@ -14,10 +14,9 @@ describe('Changing language through the Settings', function () { let webdriver = null; let logger = null; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - done(); }); const testData = [ diff --git a/packages/e2e-tests/test/19_changingFiat.test.js b/packages/e2e-tests/test/19_changingFiat.test.js index f32c259603..6f2aff0fe7 100644 --- a/packages/e2e-tests/test/19_changingFiat.test.js +++ b/packages/e2e-tests/test/19_changingFiat.test.js @@ -15,10 +15,9 @@ describe('Changing fiat currencies', function () { let logger = null; let prices = {}; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - done(); }); const testData = ['BRL', 'ETH', 'BTC', 'KRW', 'CNY', 'EUR', 'JPY', 'USD', 'ADA']; diff --git a/packages/e2e-tests/test/20_changingCardanoExplorer.test.js b/packages/e2e-tests/test/20_changingCardanoExplorer.test.js index eee0bacbc3..e44445e6d7 100644 --- a/packages/e2e-tests/test/20_changingCardanoExplorer.test.js +++ b/packages/e2e-tests/test/20_changingCardanoExplorer.test.js @@ -14,10 +14,9 @@ describe('Changing explorer', function () { let webdriver = null; let logger = null; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - done(); }); const testData = [ diff --git a/packages/e2e-tests/test/21_checkingTOS.test.js b/packages/e2e-tests/test/21_checkingTOS.test.js index a586dbfe1d..3e5a9c18c9 100644 --- a/packages/e2e-tests/test/21_checkingTOS.test.js +++ b/packages/e2e-tests/test/21_checkingTOS.test.js @@ -14,10 +14,9 @@ describe('Checking Term Of Service Agreement', function () { let webdriver = null; let logger = null; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - done(); }); it('Prepare DB and storages', async function () { diff --git a/packages/e2e-tests/test/22_addingMemo.test.js b/packages/e2e-tests/test/22_addingMemo.test.js index 78923393ad..b2e4ee62c9 100644 --- a/packages/e2e-tests/test/22_addingMemo.test.js +++ b/packages/e2e-tests/test/22_addingMemo.test.js @@ -15,10 +15,9 @@ describe('Adding a memo to a completed Tx', function () { let logger = null; const testMemoMessage = getTestString('', 40, true); - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - done(); }); it('Prepare DB and storages', async function () { diff --git a/packages/e2e-tests/test/23_editMemo.test.js b/packages/e2e-tests/test/23_editMemo.test.js index 18e3301de3..0eecf5dccb 100644 --- a/packages/e2e-tests/test/23_editMemo.test.js +++ b/packages/e2e-tests/test/23_editMemo.test.js @@ -16,10 +16,9 @@ describe('Editing a memo', function () { const oldMemo = 'j1hKEo4Er4FDLFAtGBo07jIcXBSOqx9D16U0sUIl'; const newMemoMessage = getTestString('', 40, true); - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - done(); }); it('Prepare DB and storages', async function () { diff --git a/packages/e2e-tests/test/blacklist/03_restoringWalletClearInputs.test.js b/packages/e2e-tests/test/blacklist/03_restoringWalletClearInputs.test.js index db6ec57286..58c7c860ec 100644 --- a/packages/e2e-tests/test/blacklist/03_restoringWalletClearInputs.test.js +++ b/packages/e2e-tests/test/blacklist/03_restoringWalletClearInputs.test.js @@ -18,10 +18,9 @@ describe('Restoring 15-wallet, clear input and restore other 15-wallet', functio let webdriver = null; let logger = null; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - done(); }); it('Selecting Restore wallet 15-word', async function () { diff --git a/packages/e2e-tests/test/blacklist/15_calculatingBalanceOnReceiveAddrs.test.js b/packages/e2e-tests/test/blacklist/15_calculatingBalanceOnReceiveAddrs.test.js index 8ec24c8f52..49e235f4ce 100644 --- a/packages/e2e-tests/test/blacklist/15_calculatingBalanceOnReceiveAddrs.test.js +++ b/packages/e2e-tests/test/blacklist/15_calculatingBalanceOnReceiveAddrs.test.js @@ -17,10 +17,9 @@ describe('Comparing balances on the top plate and on addresses', function () { let topPlateBalance = 0; let balanceOnAddrs = 0; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - done(); }); it('Restore a 15-word wallet', async function () { diff --git a/packages/e2e-tests/test/blacklist/dapp/dAppGetCollateralNoPopUp.test.js b/packages/e2e-tests/test/blacklist/dapp/dAppGetCollateralNoPopUp.test.js index 03891840cc..cec2aacef6 100644 --- a/packages/e2e-tests/test/blacklist/dapp/dAppGetCollateralNoPopUp.test.js +++ b/packages/e2e-tests/test/blacklist/dapp/dAppGetCollateralNoPopUp.test.js @@ -21,7 +21,7 @@ describe('dApp, getCollateral, no popup, positive', function () { let mockedDApp = null; const testWallet = getSpendableWallet(); - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); const wmLogger = getTestLogger('windowManager', this.test.parent.title); @@ -30,7 +30,6 @@ describe('dApp, getCollateral, no popup, positive', function () { const dappLogger = getTestLogger('dApp', this.test.parent.title); mockedDApp = new MockDAppWebpage(webdriver, dappLogger); logger = getTestLogger(this.test.parent.title); - done(); }); it('Restore a 15-word wallet', async function () { diff --git a/packages/e2e-tests/test/dapp/dAppConnection.test.js b/packages/e2e-tests/test/dapp/dAppConnection.test.js index 40d7e34cc3..638d27e32e 100644 --- a/packages/e2e-tests/test/dapp/dAppConnection.test.js +++ b/packages/e2e-tests/test/dapp/dAppConnection.test.js @@ -20,7 +20,7 @@ describe('dApp, connection in extension', function () { let mockServer = null; let mockedDApp = null; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); const wmLogger = getTestLogger('windowManager', this.test.parent.title); @@ -29,7 +29,6 @@ describe('dApp, connection in extension', function () { const dappLogger = getTestLogger('dApp', this.test.parent.title); mockedDApp = new MockDAppWebpage(webdriver, dappLogger); logger = getTestLogger(this.test.parent.title); - done(); }); it('Restore a 15-word wallet', async function () { diff --git a/packages/e2e-tests/test/dapp/dAppConnectionCancel.test.js b/packages/e2e-tests/test/dapp/dAppConnectionCancel.test.js index 34f7fe342b..ca2b4917ec 100644 --- a/packages/e2e-tests/test/dapp/dAppConnectionCancel.test.js +++ b/packages/e2e-tests/test/dapp/dAppConnectionCancel.test.js @@ -20,7 +20,7 @@ describe('dApp, cancel connection', function () { let mockServer = null; let mockedDApp = null; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); const wmLogger = getTestLogger('windowManager', this.test.parent.title); @@ -29,7 +29,6 @@ describe('dApp, cancel connection', function () { const dappLogger = getTestLogger('dApp', this.test.parent.title); mockedDApp = new MockDAppWebpage(webdriver, dappLogger); logger = getTestLogger(this.test.parent.title); - done(); }); it('Restore a 15-word wallet', async function () { diff --git a/packages/e2e-tests/test/dapp/dAppConnectionNoWallets.test.js b/packages/e2e-tests/test/dapp/dAppConnectionNoWallets.test.js index ae19f0b9e4..44d2bd7b48 100644 --- a/packages/e2e-tests/test/dapp/dAppConnectionNoWallets.test.js +++ b/packages/e2e-tests/test/dapp/dAppConnectionNoWallets.test.js @@ -27,7 +27,7 @@ describe('dApp, connection, no wallets', function () { let mockServer = null; let mockedDApp = null; - before(function (done) { + before(function () { webdriver = getDriver(); mockServer = getMockServer({}); const wmLogger = getTestLogger('windowManager', this.test.parent.title); @@ -39,7 +39,6 @@ describe('dApp, connection, no wallets', function () { const basePage = new BasePage(webdriver, logger); // first open the dapp page basePage.goToUrl(mockDAppUrl); - done(); }); it('Request connection', async function () { diff --git a/packages/e2e-tests/test/dapp/dAppGeneral.test.js b/packages/e2e-tests/test/dapp/dAppGeneral.test.js index 697cb4668d..79c219d368 100644 --- a/packages/e2e-tests/test/dapp/dAppGeneral.test.js +++ b/packages/e2e-tests/test/dapp/dAppGeneral.test.js @@ -20,7 +20,7 @@ describe('dApp, general functions, without pop-up', function () { let mockServer = null; let mockedDApp = null; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); const wmLogger = getTestLogger('windowManager', this.test.parent.title); @@ -29,7 +29,6 @@ describe('dApp, general functions, without pop-up', function () { const dappLogger = getTestLogger('dApp', this.test.parent.title); mockedDApp = new MockDAppWebpage(webdriver, dappLogger); logger = getTestLogger(this.test.parent.title); - done(); }); it('Restore a 15-word wallet', async function () { diff --git a/packages/e2e-tests/test/dapp/dAppGetCollateralErrorMaxLimit.test.js b/packages/e2e-tests/test/dapp/dAppGetCollateralErrorMaxLimit.test.js index 38067fdc5a..8f32574a34 100644 --- a/packages/e2e-tests/test/dapp/dAppGetCollateralErrorMaxLimit.test.js +++ b/packages/e2e-tests/test/dapp/dAppGetCollateralErrorMaxLimit.test.js @@ -21,7 +21,7 @@ describe('dApp, getCollateral, error, max limit, not auth,', function () { let mockServer = null; let mockedDApp = null; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); const wmLogger = getTestLogger('windowManager', this.test.parent.title); @@ -30,7 +30,6 @@ describe('dApp, getCollateral, error, max limit, not auth,', function () { const dappLogger = getTestLogger('dApp', this.test.parent.title); mockedDApp = new MockDAppWebpage(webdriver, dappLogger); logger = getTestLogger(this.test.parent.title); - done(); }); it('Restore a 15-word wallet', async function () { diff --git a/packages/e2e-tests/test/dapp/dAppGetCollateralErrorNotEnoughUtxo.test.js b/packages/e2e-tests/test/dapp/dAppGetCollateralErrorNotEnoughUtxo.test.js index aace31ea87..114d2085fb 100644 --- a/packages/e2e-tests/test/dapp/dAppGetCollateralErrorNotEnoughUtxo.test.js +++ b/packages/e2e-tests/test/dapp/dAppGetCollateralErrorNotEnoughUtxo.test.js @@ -26,7 +26,7 @@ describe('dApp, getCollateral, error, empty wallet, not auth', function () { let mockServer = null; let mockedDApp = null; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); const wmLogger = getTestLogger('windowManager', this.test.parent.title); @@ -37,7 +37,6 @@ describe('dApp, getCollateral, error, empty wallet, not auth', function () { logger = getTestLogger(this.test.parent.title); const basePage = new BasePage(webdriver, logger); basePage.goToExtension(); - done(); }); it('Create an empty wallet', async function () { diff --git a/packages/e2e-tests/test/dapp/dAppGetUtxos.test.js b/packages/e2e-tests/test/dapp/dAppGetUtxos.test.js index 88e0bbfce4..3eeb3d33cf 100644 --- a/packages/e2e-tests/test/dapp/dAppGetUtxos.test.js +++ b/packages/e2e-tests/test/dapp/dAppGetUtxos.test.js @@ -20,7 +20,7 @@ describe('dApp, getUtxos, nested tests', function () { let mockServer = null; let mockedDApp = null; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); const wmLogger = getTestLogger('windowManager', this.test.parent.title); @@ -29,7 +29,6 @@ describe('dApp, getUtxos, nested tests', function () { const dappLogger = getTestLogger('dApp', this.test.parent.title); mockedDApp = new MockDAppWebpage(webdriver, dappLogger); logger = getTestLogger(this.test.parent.title); - done(); }); it('Restore a 15-word wallet', async function () { diff --git a/packages/e2e-tests/test/dapp/dAppGetUtxosEmptyWallet.test.js b/packages/e2e-tests/test/dapp/dAppGetUtxosEmptyWallet.test.js index fa9ef303ee..2f1ac1b2ed 100644 --- a/packages/e2e-tests/test/dapp/dAppGetUtxosEmptyWallet.test.js +++ b/packages/e2e-tests/test/dapp/dAppGetUtxosEmptyWallet.test.js @@ -25,7 +25,7 @@ describe('dApp, getUtxos, empty wallet, not auth', function () { let mockServer = null; let mockedDApp = null; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); const wmLogger = getTestLogger('windowManager', this.test.parent.title); @@ -34,7 +34,6 @@ describe('dApp, getUtxos, empty wallet, not auth', function () { const dappLogger = getTestLogger('dApp', this.test.parent.title); mockedDApp = new MockDAppWebpage(webdriver, dappLogger); logger = getTestLogger(this.test.parent.title); - done(); }); it('Create an empty wallet', async function () { diff --git a/packages/e2e-tests/test/dapp/dAppIsEnabled.test.js b/packages/e2e-tests/test/dapp/dAppIsEnabled.test.js index 19a8bacfb2..70a718627d 100644 --- a/packages/e2e-tests/test/dapp/dAppIsEnabled.test.js +++ b/packages/e2e-tests/test/dapp/dAppIsEnabled.test.js @@ -19,7 +19,7 @@ describe('dApp, isEnabled, not auth', function () { let mockServer = null; let mockedDApp = null; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); const wmLogger = getTestLogger('windowManager', this.test.parent.title); @@ -28,7 +28,6 @@ describe('dApp, isEnabled, not auth', function () { const dappLogger = getTestLogger('dApp', this.test.parent.title); mockedDApp = new MockDAppWebpage(webdriver, dappLogger); logger = getTestLogger(this.test.parent.title); - done(); }); it('Restore a 15-word wallet', async function () { diff --git a/packages/e2e-tests/test/dapp/dAppSignData.test.js b/packages/e2e-tests/test/dapp/dAppSignData.test.js index 3f767ebdb0..56fc0b3a7d 100644 --- a/packages/e2e-tests/test/dapp/dAppSignData.test.js +++ b/packages/e2e-tests/test/dapp/dAppSignData.test.js @@ -22,7 +22,7 @@ describe('dApp, signData', function () { let mockServer = null; let mockedDApp = null; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); const wmLogger = getTestLogger('windowManager', this.test.parent.title); @@ -31,7 +31,6 @@ describe('dApp, signData', function () { const dappLogger = getTestLogger('dApp', this.test.parent.title); mockedDApp = new MockDAppWebpage(webdriver, dappLogger); logger = getTestLogger(this.test.parent.title); - done(); }); it('Restore a 15-word wallet', async function () { diff --git a/packages/e2e-tests/test/dapp/dAppSignDataCIP95.test.js b/packages/e2e-tests/test/dapp/dAppSignDataCIP95.test.js index 1869dbb0ca..07d16bc407 100644 --- a/packages/e2e-tests/test/dapp/dAppSignDataCIP95.test.js +++ b/packages/e2e-tests/test/dapp/dAppSignDataCIP95.test.js @@ -22,7 +22,7 @@ describe('dApp, CIP-95, signData', function () { let mockServer = null; let mockedDApp = null; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); const wmLogger = getTestLogger('windowManager', this.test.parent.title); @@ -31,7 +31,6 @@ describe('dApp, CIP-95, signData', function () { const dappLogger = getTestLogger('dApp', this.test.parent.title); mockedDApp = new MockDAppWebpage(webdriver, dappLogger); logger = getTestLogger(this.test.parent.title); - done(); }); it('Restore a 15-word wallet', async function () { diff --git a/packages/e2e-tests/test/dapp/dAppSignTx.test.js b/packages/e2e-tests/test/dapp/dAppSignTx.test.js index 6720accc76..70aff73d25 100644 --- a/packages/e2e-tests/test/dapp/dAppSignTx.test.js +++ b/packages/e2e-tests/test/dapp/dAppSignTx.test.js @@ -26,7 +26,7 @@ describe('dApp, signTx, intrawallet Tx', function () { const testWallet = getSpendableWallet(); const adaAmount = 2; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); const wmLogger = getTestLogger('windowManager', this.test.parent.title); @@ -35,7 +35,6 @@ describe('dApp, signTx, intrawallet Tx', function () { const dappLogger = getTestLogger('dApp', this.test.parent.title); mockedDApp = new MockDAppWebpage(webdriver, dappLogger); logger = getTestLogger(this.test.parent.title); - done(); }); it('Restore a 15-word wallet', async function () { diff --git a/packages/e2e-tests/test/dapp/dAppSubmitTx.test.js b/packages/e2e-tests/test/dapp/dAppSubmitTx.test.js index 31e22ba819..e74477064b 100644 --- a/packages/e2e-tests/test/dapp/dAppSubmitTx.test.js +++ b/packages/e2e-tests/test/dapp/dAppSubmitTx.test.js @@ -26,7 +26,7 @@ describe('dApp, submitTx', function () { let witnessSet = ''; const testWallet = getSpendableWallet(); - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); const wmLogger = getTestLogger('windowManager', this.test.parent.title); @@ -35,7 +35,6 @@ describe('dApp, submitTx', function () { const dappLogger = getTestLogger('dApp', this.test.parent.title); mockedDApp = new MockDAppWebpage(webdriver, dappLogger); logger = getTestLogger(this.test.parent.title); - done(); }); it('Restore a 15-word wallet', async function () { diff --git a/packages/e2e-tests/test/dapp/dAppYoroiInfo.test.js b/packages/e2e-tests/test/dapp/dAppYoroiInfo.test.js index d4be6b0529..67d3a70980 100644 --- a/packages/e2e-tests/test/dapp/dAppYoroiInfo.test.js +++ b/packages/e2e-tests/test/dapp/dAppYoroiInfo.test.js @@ -19,7 +19,7 @@ describe('dApp, Yoroi object in Cardano', function () { let mockServer = null; let mockedDApp = null; - before(function (done) { + before(function () { webdriver = driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); const wmLogger = getTestLogger('windowManager', this.test.parent.title); @@ -28,7 +28,6 @@ describe('dApp, Yoroi object in Cardano', function () { const dappLogger = getTestLogger('dApp', this.test.parent.title); mockedDApp = new MockDAppWebpage(webdriver, dappLogger); logger = getTestLogger(this.test.parent.title); - done(); }); it('Restore a 15-word wallet', async function () { From a802c8b4cbac3e08027ab127bfb83fdf2ee16df9 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Fri, 28 Jun 2024 15:24:40 +0300 Subject: [PATCH 255/464] added the method waitPresentedAndAct --- packages/e2e-tests/pages/basepage.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/packages/e2e-tests/pages/basepage.js b/packages/e2e-tests/pages/basepage.js index a539a2219c..9f81576af8 100644 --- a/packages/e2e-tests/pages/basepage.js +++ b/packages/e2e-tests/pages/basepage.js @@ -14,8 +14,10 @@ import { getExtensionUrl } from '../utils/driverBootstrap.js'; import { defaultRepeatPeriod, defaultWaitTimeout, + fiveSeconds, halfSecond, oneSecond, + quarterSecond, } from '../helpers/timeConstants.js'; import { dbSnapshotsDir } from '../helpers/constants.js'; @@ -333,6 +335,20 @@ class BasePage { ); return result; } + async waitPresentedAndAct( + locator, + funcToCall, + timeout = fiveSeconds, + repeatPeriod = quarterSecond + ) { + this.logger.info(`BasePage::waitPresentedAndAct is called. Locator: '${locator.locator}'`); + const elemState = await this.customWaitIsPresented(locator, timeout, repeatPeriod); + if (elemState) { + await funcToCall(); + } else { + throw new Error(`The element is not found. Element: ${locator}`); + } + } async sleep(milliseconds) { this.logger.info(`BasePage::sleep is called. Value: ${milliseconds}`); await this.driver.sleep(milliseconds); From ab13f79fbba7af11d84b129c48032e3d8e0e525e Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Fri, 28 Jun 2024 16:11:04 +0300 Subject: [PATCH 256/464] surpress errors until adding typescript --- packages/yoroi-extension/.eslintrc.js | 5 ++++- .../wallet/dialogs/GovernanceParticipateDialog.js | 5 ++--- .../app/stores/toplevel/DelegationStore.js | 8 +++++--- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/packages/yoroi-extension/.eslintrc.js b/packages/yoroi-extension/.eslintrc.js index 661e6d5dbc..44829a6b8e 100644 --- a/packages/yoroi-extension/.eslintrc.js +++ b/packages/yoroi-extension/.eslintrc.js @@ -30,6 +30,8 @@ module.exports = { ignore: ['cardano-wallet-browser'], }, ], + 'import/no-unresolved': 'off', + 'import/extensions': 'off', 'import/no-extraneous-dependencies': 'off', 'import/no-dynamic-require': 'off', 'import/no-named-as-default': 'off', @@ -100,7 +102,8 @@ module.exports = { 'react/jsx-indent': 1, 'flowtype/define-flow-type': 1, 'flowtype/use-flow-type': 1, - 'flowtype/require-valid-file-annotation': [2, 'always'], + 'flowtype/require-valid-file-annotation': 'off', + 'no-nested-ternary': 'off', 'global-require': 'off', 'no-await-in-loop': 0, 'no-unused-expressions': 2, diff --git a/packages/yoroi-extension/app/containers/wallet/dialogs/GovernanceParticipateDialog.js b/packages/yoroi-extension/app/containers/wallet/dialogs/GovernanceParticipateDialog.js index ecab259b87..69ee93bf81 100644 --- a/packages/yoroi-extension/app/containers/wallet/dialogs/GovernanceParticipateDialog.js +++ b/packages/yoroi-extension/app/containers/wallet/dialogs/GovernanceParticipateDialog.js @@ -1,11 +1,10 @@ // @flow import Dialog from '../../../components/widgets/Dialog'; -import { Typography, Button, Grid, Stack } from '@mui/material'; +import { Typography, Button } from '@mui/material'; import { styled } from '@mui/material/styles'; import DialogCloseButton from '../../../components/widgets/DialogCloseButton'; -import { defineMessages, FormattedMessage } from 'react-intl'; +import { defineMessages } from 'react-intl'; -import type { PoolTransition } from '../../../stores/toplevel/DelegationStore'; import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; import { ROUTES } from '../../../routes-config'; diff --git a/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js b/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js index 35b16b8a9b..416b2e9274 100644 --- a/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js +++ b/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js @@ -274,7 +274,7 @@ export default class DelegationStore extends Store { runInAction(() => { this.poolTransitionRequestInfo[walletId] = { ...response }; - }) + }); } catch (error) { console.warn('Failed to check pool transition', error); } @@ -326,13 +326,15 @@ export default class DelegationStore extends Store { const govApi = new GovernanceApi({ oldBackendUrl: String(backendService), newBackendUrl: String(backendServiceZero), - networkId: networkId, + networkId, wasmFactory: RustModule.CrossCsl.init, }); const governanceStatus = await govApi.getAccountState(skey, skey); this.setGovernanceStatus(governanceStatus); - } catch (e) {} + } catch (e) { + console.warn(e); + } }; @action.bound From b9cbfb8d4e1dc91fdf9e8fc69f98a8d9bc1e5e52 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Fri, 28 Jun 2024 16:48:11 +0300 Subject: [PATCH 257/464] updated way of searching elements --- .../walletTab/walletTransactions.page.js | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js b/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js index 6b0c1c51c2..7a1a13ffea 100644 --- a/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js +++ b/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js @@ -307,29 +307,31 @@ export class TransactionsSubTab extends WalletTab { } async showMoreBtnIsDisplayed() { this.logger.info(`TransactionsSubTab::showMoreBtnIsDisplayed is called`); - await this.driver.manage().setTimeouts({ implicit: twoSeconds }); - try { - await (await this.findElement(this.showMoreTxsButtonLocator)).isDisplayed(); + const state = await this.customWaitIsPresented( + this.showMoreTxsButtonLocator, + twoSeconds, + quarterSecond + ); + if (state) { this.logger.info(`TransactionsSubTab::showMoreBtnIsDisplayed is displayed`); - await this.driver.manage().setTimeouts({ implicit: defaultWaitTimeout }); return true; - } catch (error) { + } else { this.logger.warn(`TransactionsSubTab::showMoreBtnIsDisplayed is not displayed`); - await this.driver.manage().setTimeouts({ implicit: defaultWaitTimeout }); return false; } } async loaderIsDisplayed() { this.logger.info(`TransactionsSubTab::loaderIsDisplayed is called`); - await this.driver.manage().setTimeouts({ implicit: twoSeconds }); - try { - await (await this.findElement(this.txsLoaderSpinnerLocator)).isDisplayed(); + const state = await this.customWaitIsPresented( + this.txsLoaderSpinnerLocator, + twoSeconds, + quarterSecond + ); + if (state) { this.logger.info(`TransactionsSubTab::loaderIsDisplayed is displayed`); - await this.driver.manage().setTimeouts({ implicit: defaultWaitTimeout }); return true; - } catch (error) { + } else { this.logger.warn(`TransactionsSubTab::loaderIsDisplayed is not displayed`); - await this.driver.manage().setTimeouts({ implicit: defaultWaitTimeout }); return false; } } From 19362c0a546bb0145b56338216fef7c5cf30af00 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Fri, 28 Jun 2024 16:56:57 +0300 Subject: [PATCH 258/464] before async again --- packages/e2e-tests/test/00_creatingWallet.test.js | 4 ++-- packages/e2e-tests/test/01_restoringWallet.test.js | 4 ++-- .../e2e-tests/test/02_restoringAlreadyExistingWallet.test.js | 4 ++-- packages/e2e-tests/test/04_removingWallet.test.js | 4 ++-- packages/e2e-tests/test/05_removingWallet_2.test.js | 4 ++-- packages/e2e-tests/test/06_renamingWallet.test.js | 4 ++-- packages/e2e-tests/test/07_changingPassword.test.js | 4 ++-- packages/e2e-tests/test/08_downloadingLogs.test.js | 4 ++-- packages/e2e-tests/test/09_exportTransactions.test.js | 4 ++-- packages/e2e-tests/test/10_exportTxsNegative.test.js | 4 ++-- packages/e2e-tests/test/11_countTransactions.test.js | 4 ++-- packages/e2e-tests/test/12_loadingAllTransactions.test.js | 4 ++-- packages/e2e-tests/test/13_generatingNewAddress.test.js | 4 ++-- packages/e2e-tests/test/14_generatingMaxAmountAddrs.test.js | 4 ++-- packages/e2e-tests/test/16_generateURILink.test.js | 4 ++-- .../e2e-tests/test/17_generateURILink_NotRealAmount.test.js | 4 ++-- packages/e2e-tests/test/18_changingLanguageSettings.test.js | 4 ++-- packages/e2e-tests/test/19_changingFiat.test.js | 4 ++-- packages/e2e-tests/test/20_changingCardanoExplorer.test.js | 4 ++-- packages/e2e-tests/test/21_checkingTOS.test.js | 4 ++-- packages/e2e-tests/test/22_addingMemo.test.js | 4 ++-- packages/e2e-tests/test/23_editMemo.test.js | 4 ++-- .../test/blacklist/03_restoringWalletClearInputs.test.js | 4 ++-- .../blacklist/15_calculatingBalanceOnReceiveAddrs.test.js | 4 ++-- packages/e2e-tests/test/dapp/dAppConnection.test.js | 4 ++-- packages/e2e-tests/test/dapp/dAppConnectionCancel.test.js | 4 ++-- packages/e2e-tests/test/dapp/dAppGeneral.test.js | 4 ++-- .../test/dapp/dAppGetCollateralErrorMaxLimit.test.js | 4 ++-- .../test/dapp/dAppGetCollateralErrorNotEnoughUtxo.test.js | 4 ++-- packages/e2e-tests/test/dapp/dAppGetUtxos.test.js | 4 ++-- packages/e2e-tests/test/dapp/dAppGetUtxosEmptyWallet.test.js | 4 ++-- packages/e2e-tests/test/dapp/dAppIsEnabled.test.js | 4 ++-- packages/e2e-tests/test/dapp/dAppSignData.test.js | 4 ++-- packages/e2e-tests/test/dapp/dAppSignDataCIP95.test.js | 4 ++-- packages/e2e-tests/test/dapp/dAppSignTx.test.js | 4 ++-- packages/e2e-tests/test/dapp/dAppSubmitTx.test.js | 4 ++-- packages/e2e-tests/test/dapp/dAppYoroiInfo.test.js | 4 ++-- packages/e2e-tests/utils/driversPool.js | 4 ++-- 38 files changed, 76 insertions(+), 76 deletions(-) diff --git a/packages/e2e-tests/test/00_creatingWallet.test.js b/packages/e2e-tests/test/00_creatingWallet.test.js index 9d54eb57a0..871114f4ab 100644 --- a/packages/e2e-tests/test/00_creatingWallet.test.js +++ b/packages/e2e-tests/test/00_creatingWallet.test.js @@ -17,8 +17,8 @@ describe('Creating wallet', function () { let webdriver = null; let logger = null; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); }); diff --git a/packages/e2e-tests/test/01_restoringWallet.test.js b/packages/e2e-tests/test/01_restoringWallet.test.js index 2ced2de293..c4a530ed72 100644 --- a/packages/e2e-tests/test/01_restoringWallet.test.js +++ b/packages/e2e-tests/test/01_restoringWallet.test.js @@ -17,8 +17,8 @@ describe('Restoring 15-wallet', function () { let webdriver = null; let logger = null; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); }); diff --git a/packages/e2e-tests/test/02_restoringAlreadyExistingWallet.test.js b/packages/e2e-tests/test/02_restoringAlreadyExistingWallet.test.js index 8dbc4e84d9..c5d62ffaef 100644 --- a/packages/e2e-tests/test/02_restoringAlreadyExistingWallet.test.js +++ b/packages/e2e-tests/test/02_restoringAlreadyExistingWallet.test.js @@ -17,8 +17,8 @@ describe('Restoring already existing wallet', function () { let webdriver = null; let logger = null; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); }); diff --git a/packages/e2e-tests/test/04_removingWallet.test.js b/packages/e2e-tests/test/04_removingWallet.test.js index 057b2969be..0175d0fef2 100644 --- a/packages/e2e-tests/test/04_removingWallet.test.js +++ b/packages/e2e-tests/test/04_removingWallet.test.js @@ -14,8 +14,8 @@ describe('Removing a wallet, one wallet is added', function () { let webdriver = null; let logger = null; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); }); diff --git a/packages/e2e-tests/test/05_removingWallet_2.test.js b/packages/e2e-tests/test/05_removingWallet_2.test.js index eb0be9190d..61fb7f163b 100644 --- a/packages/e2e-tests/test/05_removingWallet_2.test.js +++ b/packages/e2e-tests/test/05_removingWallet_2.test.js @@ -17,8 +17,8 @@ describe('Removing the first wallet, two wallets is added', function () { let webdriver = null; let logger = null; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); }); diff --git a/packages/e2e-tests/test/06_renamingWallet.test.js b/packages/e2e-tests/test/06_renamingWallet.test.js index d0b73c81d0..a0c0d3cdc5 100644 --- a/packages/e2e-tests/test/06_renamingWallet.test.js +++ b/packages/e2e-tests/test/06_renamingWallet.test.js @@ -16,8 +16,8 @@ describe('Renaming the wallet', function () { let logger = null; const newWalletName = 'newWalletName'; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); }); diff --git a/packages/e2e-tests/test/07_changingPassword.test.js b/packages/e2e-tests/test/07_changingPassword.test.js index 3e30a22a22..cfe4840dc3 100644 --- a/packages/e2e-tests/test/07_changingPassword.test.js +++ b/packages/e2e-tests/test/07_changingPassword.test.js @@ -19,8 +19,8 @@ describe('Changing wallet password', function () { let webdriver = null; let logger = null; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); }); diff --git a/packages/e2e-tests/test/08_downloadingLogs.test.js b/packages/e2e-tests/test/08_downloadingLogs.test.js index 3fb8b61fdd..d63b9e1231 100644 --- a/packages/e2e-tests/test/08_downloadingLogs.test.js +++ b/packages/e2e-tests/test/08_downloadingLogs.test.js @@ -19,8 +19,8 @@ describe('Downloading logs for support', function () { let webdriver = null; let logger = null; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); cleanDownloads(); }); diff --git a/packages/e2e-tests/test/09_exportTransactions.test.js b/packages/e2e-tests/test/09_exportTransactions.test.js index 0d3ba3552e..6d0aa52623 100644 --- a/packages/e2e-tests/test/09_exportTransactions.test.js +++ b/packages/e2e-tests/test/09_exportTransactions.test.js @@ -21,8 +21,8 @@ describe('Export transactions, positive', function () { let webdriver = null; let logger = null; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); cleanDownloads(); }); diff --git a/packages/e2e-tests/test/10_exportTxsNegative.test.js b/packages/e2e-tests/test/10_exportTxsNegative.test.js index 84814f896b..7b831d89b2 100644 --- a/packages/e2e-tests/test/10_exportTxsNegative.test.js +++ b/packages/e2e-tests/test/10_exportTxsNegative.test.js @@ -19,8 +19,8 @@ describe('Export transactions, negative cases', function () { let webdriver = null; let logger = null; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); cleanDownloads(); }); diff --git a/packages/e2e-tests/test/11_countTransactions.test.js b/packages/e2e-tests/test/11_countTransactions.test.js index ce424aa4d9..cf4011a425 100644 --- a/packages/e2e-tests/test/11_countTransactions.test.js +++ b/packages/e2e-tests/test/11_countTransactions.test.js @@ -25,8 +25,8 @@ for (const testDatum of testData) { let webdriver = null; let logger = null; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); }); diff --git a/packages/e2e-tests/test/12_loadingAllTransactions.test.js b/packages/e2e-tests/test/12_loadingAllTransactions.test.js index df111792bc..fb02e6225d 100644 --- a/packages/e2e-tests/test/12_loadingAllTransactions.test.js +++ b/packages/e2e-tests/test/12_loadingAllTransactions.test.js @@ -15,8 +15,8 @@ describe('Show more txs 5 times', function () { let webdriver = null; let logger = null; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); }); diff --git a/packages/e2e-tests/test/13_generatingNewAddress.test.js b/packages/e2e-tests/test/13_generatingNewAddress.test.js index d6ea4577b3..80523b8a2b 100644 --- a/packages/e2e-tests/test/13_generatingNewAddress.test.js +++ b/packages/e2e-tests/test/13_generatingNewAddress.test.js @@ -14,8 +14,8 @@ describe('Generating a new address', function () { let webdriver = null; let logger = null; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); }); diff --git a/packages/e2e-tests/test/14_generatingMaxAmountAddrs.test.js b/packages/e2e-tests/test/14_generatingMaxAmountAddrs.test.js index 24cb4f4d39..cfc3815b57 100644 --- a/packages/e2e-tests/test/14_generatingMaxAmountAddrs.test.js +++ b/packages/e2e-tests/test/14_generatingMaxAmountAddrs.test.js @@ -15,8 +15,8 @@ describe('Generating a max amount of addresses', function () { let webdriver = null; let logger = null; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); }); diff --git a/packages/e2e-tests/test/16_generateURILink.test.js b/packages/e2e-tests/test/16_generateURILink.test.js index c0f31b5911..5f53434bff 100644 --- a/packages/e2e-tests/test/16_generateURILink.test.js +++ b/packages/e2e-tests/test/16_generateURILink.test.js @@ -14,8 +14,8 @@ describe('Generating URL-link', function () { let webdriver = null; let logger = null; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); }); diff --git a/packages/e2e-tests/test/17_generateURILink_NotRealAmount.test.js b/packages/e2e-tests/test/17_generateURILink_NotRealAmount.test.js index ba48cdf390..c5369282a3 100644 --- a/packages/e2e-tests/test/17_generateURILink_NotRealAmount.test.js +++ b/packages/e2e-tests/test/17_generateURILink_NotRealAmount.test.js @@ -15,8 +15,8 @@ describe('Generating URL-link with really big amount', function () { let webdriver = null; let logger = null; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); }); diff --git a/packages/e2e-tests/test/18_changingLanguageSettings.test.js b/packages/e2e-tests/test/18_changingLanguageSettings.test.js index 4c7bea0200..7f849d1614 100644 --- a/packages/e2e-tests/test/18_changingLanguageSettings.test.js +++ b/packages/e2e-tests/test/18_changingLanguageSettings.test.js @@ -14,8 +14,8 @@ describe('Changing language through the Settings', function () { let webdriver = null; let logger = null; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); }); diff --git a/packages/e2e-tests/test/19_changingFiat.test.js b/packages/e2e-tests/test/19_changingFiat.test.js index 6f2aff0fe7..871b68d7d9 100644 --- a/packages/e2e-tests/test/19_changingFiat.test.js +++ b/packages/e2e-tests/test/19_changingFiat.test.js @@ -15,8 +15,8 @@ describe('Changing fiat currencies', function () { let logger = null; let prices = {}; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); }); diff --git a/packages/e2e-tests/test/20_changingCardanoExplorer.test.js b/packages/e2e-tests/test/20_changingCardanoExplorer.test.js index e44445e6d7..5ad3b5b0c9 100644 --- a/packages/e2e-tests/test/20_changingCardanoExplorer.test.js +++ b/packages/e2e-tests/test/20_changingCardanoExplorer.test.js @@ -14,8 +14,8 @@ describe('Changing explorer', function () { let webdriver = null; let logger = null; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); }); diff --git a/packages/e2e-tests/test/21_checkingTOS.test.js b/packages/e2e-tests/test/21_checkingTOS.test.js index 3e5a9c18c9..ebe3e9d1f0 100644 --- a/packages/e2e-tests/test/21_checkingTOS.test.js +++ b/packages/e2e-tests/test/21_checkingTOS.test.js @@ -14,8 +14,8 @@ describe('Checking Term Of Service Agreement', function () { let webdriver = null; let logger = null; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); }); diff --git a/packages/e2e-tests/test/22_addingMemo.test.js b/packages/e2e-tests/test/22_addingMemo.test.js index b2e4ee62c9..bc629fd571 100644 --- a/packages/e2e-tests/test/22_addingMemo.test.js +++ b/packages/e2e-tests/test/22_addingMemo.test.js @@ -15,8 +15,8 @@ describe('Adding a memo to a completed Tx', function () { let logger = null; const testMemoMessage = getTestString('', 40, true); - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); }); diff --git a/packages/e2e-tests/test/23_editMemo.test.js b/packages/e2e-tests/test/23_editMemo.test.js index 0eecf5dccb..1e9951f33c 100644 --- a/packages/e2e-tests/test/23_editMemo.test.js +++ b/packages/e2e-tests/test/23_editMemo.test.js @@ -16,8 +16,8 @@ describe('Editing a memo', function () { const oldMemo = 'j1hKEo4Er4FDLFAtGBo07jIcXBSOqx9D16U0sUIl'; const newMemoMessage = getTestString('', 40, true); - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); }); diff --git a/packages/e2e-tests/test/blacklist/03_restoringWalletClearInputs.test.js b/packages/e2e-tests/test/blacklist/03_restoringWalletClearInputs.test.js index 58c7c860ec..f26a538f19 100644 --- a/packages/e2e-tests/test/blacklist/03_restoringWalletClearInputs.test.js +++ b/packages/e2e-tests/test/blacklist/03_restoringWalletClearInputs.test.js @@ -18,8 +18,8 @@ describe('Restoring 15-wallet, clear input and restore other 15-wallet', functio let webdriver = null; let logger = null; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); }); diff --git a/packages/e2e-tests/test/blacklist/15_calculatingBalanceOnReceiveAddrs.test.js b/packages/e2e-tests/test/blacklist/15_calculatingBalanceOnReceiveAddrs.test.js index 49e235f4ce..84a3964123 100644 --- a/packages/e2e-tests/test/blacklist/15_calculatingBalanceOnReceiveAddrs.test.js +++ b/packages/e2e-tests/test/blacklist/15_calculatingBalanceOnReceiveAddrs.test.js @@ -17,8 +17,8 @@ describe('Comparing balances on the top plate and on addresses', function () { let topPlateBalance = 0; let balanceOnAddrs = 0; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); }); diff --git a/packages/e2e-tests/test/dapp/dAppConnection.test.js b/packages/e2e-tests/test/dapp/dAppConnection.test.js index 638d27e32e..14c7b778d1 100644 --- a/packages/e2e-tests/test/dapp/dAppConnection.test.js +++ b/packages/e2e-tests/test/dapp/dAppConnection.test.js @@ -20,8 +20,8 @@ describe('dApp, connection in extension', function () { let mockServer = null; let mockedDApp = null; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); const wmLogger = getTestLogger('windowManager', this.test.parent.title); windowManager = new WindowManager(webdriver, wmLogger); diff --git a/packages/e2e-tests/test/dapp/dAppConnectionCancel.test.js b/packages/e2e-tests/test/dapp/dAppConnectionCancel.test.js index ca2b4917ec..57c45bb7ab 100644 --- a/packages/e2e-tests/test/dapp/dAppConnectionCancel.test.js +++ b/packages/e2e-tests/test/dapp/dAppConnectionCancel.test.js @@ -20,8 +20,8 @@ describe('dApp, cancel connection', function () { let mockServer = null; let mockedDApp = null; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); const wmLogger = getTestLogger('windowManager', this.test.parent.title); windowManager = new WindowManager(webdriver, wmLogger); diff --git a/packages/e2e-tests/test/dapp/dAppGeneral.test.js b/packages/e2e-tests/test/dapp/dAppGeneral.test.js index 79c219d368..ea61e7482a 100644 --- a/packages/e2e-tests/test/dapp/dAppGeneral.test.js +++ b/packages/e2e-tests/test/dapp/dAppGeneral.test.js @@ -20,8 +20,8 @@ describe('dApp, general functions, without pop-up', function () { let mockServer = null; let mockedDApp = null; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); const wmLogger = getTestLogger('windowManager', this.test.parent.title); windowManager = new WindowManager(webdriver, wmLogger); diff --git a/packages/e2e-tests/test/dapp/dAppGetCollateralErrorMaxLimit.test.js b/packages/e2e-tests/test/dapp/dAppGetCollateralErrorMaxLimit.test.js index 8f32574a34..3613d1ba45 100644 --- a/packages/e2e-tests/test/dapp/dAppGetCollateralErrorMaxLimit.test.js +++ b/packages/e2e-tests/test/dapp/dAppGetCollateralErrorMaxLimit.test.js @@ -21,8 +21,8 @@ describe('dApp, getCollateral, error, max limit, not auth,', function () { let mockServer = null; let mockedDApp = null; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); const wmLogger = getTestLogger('windowManager', this.test.parent.title); windowManager = new WindowManager(webdriver, wmLogger); diff --git a/packages/e2e-tests/test/dapp/dAppGetCollateralErrorNotEnoughUtxo.test.js b/packages/e2e-tests/test/dapp/dAppGetCollateralErrorNotEnoughUtxo.test.js index 114d2085fb..c327d29fdc 100644 --- a/packages/e2e-tests/test/dapp/dAppGetCollateralErrorNotEnoughUtxo.test.js +++ b/packages/e2e-tests/test/dapp/dAppGetCollateralErrorNotEnoughUtxo.test.js @@ -26,8 +26,8 @@ describe('dApp, getCollateral, error, empty wallet, not auth', function () { let mockServer = null; let mockedDApp = null; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); const wmLogger = getTestLogger('windowManager', this.test.parent.title); windowManager = new WindowManager(webdriver, wmLogger); diff --git a/packages/e2e-tests/test/dapp/dAppGetUtxos.test.js b/packages/e2e-tests/test/dapp/dAppGetUtxos.test.js index 3eeb3d33cf..d4ccd26198 100644 --- a/packages/e2e-tests/test/dapp/dAppGetUtxos.test.js +++ b/packages/e2e-tests/test/dapp/dAppGetUtxos.test.js @@ -20,8 +20,8 @@ describe('dApp, getUtxos, nested tests', function () { let mockServer = null; let mockedDApp = null; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); const wmLogger = getTestLogger('windowManager', this.test.parent.title); windowManager = new WindowManager(webdriver, wmLogger); diff --git a/packages/e2e-tests/test/dapp/dAppGetUtxosEmptyWallet.test.js b/packages/e2e-tests/test/dapp/dAppGetUtxosEmptyWallet.test.js index 2f1ac1b2ed..d461290d06 100644 --- a/packages/e2e-tests/test/dapp/dAppGetUtxosEmptyWallet.test.js +++ b/packages/e2e-tests/test/dapp/dAppGetUtxosEmptyWallet.test.js @@ -25,8 +25,8 @@ describe('dApp, getUtxos, empty wallet, not auth', function () { let mockServer = null; let mockedDApp = null; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); const wmLogger = getTestLogger('windowManager', this.test.parent.title); windowManager = new WindowManager(webdriver, wmLogger); diff --git a/packages/e2e-tests/test/dapp/dAppIsEnabled.test.js b/packages/e2e-tests/test/dapp/dAppIsEnabled.test.js index 70a718627d..6961a27cf8 100644 --- a/packages/e2e-tests/test/dapp/dAppIsEnabled.test.js +++ b/packages/e2e-tests/test/dapp/dAppIsEnabled.test.js @@ -19,8 +19,8 @@ describe('dApp, isEnabled, not auth', function () { let mockServer = null; let mockedDApp = null; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); const wmLogger = getTestLogger('windowManager', this.test.parent.title); windowManager = new WindowManager(webdriver, wmLogger); diff --git a/packages/e2e-tests/test/dapp/dAppSignData.test.js b/packages/e2e-tests/test/dapp/dAppSignData.test.js index 56fc0b3a7d..6291f4a1fd 100644 --- a/packages/e2e-tests/test/dapp/dAppSignData.test.js +++ b/packages/e2e-tests/test/dapp/dAppSignData.test.js @@ -22,8 +22,8 @@ describe('dApp, signData', function () { let mockServer = null; let mockedDApp = null; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); const wmLogger = getTestLogger('windowManager', this.test.parent.title); windowManager = new WindowManager(webdriver, wmLogger); diff --git a/packages/e2e-tests/test/dapp/dAppSignDataCIP95.test.js b/packages/e2e-tests/test/dapp/dAppSignDataCIP95.test.js index 07d16bc407..aaccf97ca7 100644 --- a/packages/e2e-tests/test/dapp/dAppSignDataCIP95.test.js +++ b/packages/e2e-tests/test/dapp/dAppSignDataCIP95.test.js @@ -22,8 +22,8 @@ describe('dApp, CIP-95, signData', function () { let mockServer = null; let mockedDApp = null; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); const wmLogger = getTestLogger('windowManager', this.test.parent.title); windowManager = new WindowManager(webdriver, wmLogger); diff --git a/packages/e2e-tests/test/dapp/dAppSignTx.test.js b/packages/e2e-tests/test/dapp/dAppSignTx.test.js index 70aff73d25..cef16f6cf5 100644 --- a/packages/e2e-tests/test/dapp/dAppSignTx.test.js +++ b/packages/e2e-tests/test/dapp/dAppSignTx.test.js @@ -26,8 +26,8 @@ describe('dApp, signTx, intrawallet Tx', function () { const testWallet = getSpendableWallet(); const adaAmount = 2; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); const wmLogger = getTestLogger('windowManager', this.test.parent.title); windowManager = new WindowManager(webdriver, wmLogger); diff --git a/packages/e2e-tests/test/dapp/dAppSubmitTx.test.js b/packages/e2e-tests/test/dapp/dAppSubmitTx.test.js index e74477064b..0eec2a972f 100644 --- a/packages/e2e-tests/test/dapp/dAppSubmitTx.test.js +++ b/packages/e2e-tests/test/dapp/dAppSubmitTx.test.js @@ -26,8 +26,8 @@ describe('dApp, submitTx', function () { let witnessSet = ''; const testWallet = getSpendableWallet(); - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); const wmLogger = getTestLogger('windowManager', this.test.parent.title); windowManager = new WindowManager(webdriver, wmLogger); diff --git a/packages/e2e-tests/test/dapp/dAppYoroiInfo.test.js b/packages/e2e-tests/test/dapp/dAppYoroiInfo.test.js index 67d3a70980..41eec29c9e 100644 --- a/packages/e2e-tests/test/dapp/dAppYoroiInfo.test.js +++ b/packages/e2e-tests/test/dapp/dAppYoroiInfo.test.js @@ -19,8 +19,8 @@ describe('dApp, Yoroi object in Cardano', function () { let mockServer = null; let mockedDApp = null; - before(function () { - webdriver = driversPoolsManager.getDriverFromPool(); + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); mockServer = getMockServer({}); const wmLogger = getTestLogger('windowManager', this.test.parent.title); windowManager = new WindowManager(webdriver, wmLogger); diff --git a/packages/e2e-tests/utils/driversPool.js b/packages/e2e-tests/utils/driversPool.js index 307e3a865e..e761a613b1 100644 --- a/packages/e2e-tests/utils/driversPool.js +++ b/packages/e2e-tests/utils/driversPool.js @@ -80,11 +80,11 @@ class DriversManager { Promise.all(prepExtPromisesArr); } - getDriverFromPool() { + async getDriverFromPool() { const driverObject = poolOfDrivers.shift(); this.logger.info(`DriversManager::getDriverFromPool Returning driver ${driverObject.driverId}`); const newDriverObject = this.addNewDriverToPool(); - this.prepareExtension(newDriverObject); + await this.prepareExtension(newDriverObject); return driverObject.driver; } From 363cd8d2a4b34f800add568afa78ea36b5f35109 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Fri, 28 Jun 2024 16:58:00 +0300 Subject: [PATCH 259/464] updated waitPresentedAndAct --- packages/e2e-tests/pages/basepage.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/e2e-tests/pages/basepage.js b/packages/e2e-tests/pages/basepage.js index 9f81576af8..923571bc1f 100644 --- a/packages/e2e-tests/pages/basepage.js +++ b/packages/e2e-tests/pages/basepage.js @@ -344,7 +344,7 @@ class BasePage { this.logger.info(`BasePage::waitPresentedAndAct is called. Locator: '${locator.locator}'`); const elemState = await this.customWaitIsPresented(locator, timeout, repeatPeriod); if (elemState) { - await funcToCall(); + return await funcToCall(); } else { throw new Error(`The element is not found. Element: ${locator}`); } From e3897734c0c665e699dc4745d3cbc510427bfd80 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Fri, 28 Jun 2024 16:58:19 +0300 Subject: [PATCH 260/464] using waitPresentedAndAct --- packages/e2e-tests/pages/initialSteps.page.js | 29 +++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/packages/e2e-tests/pages/initialSteps.page.js b/packages/e2e-tests/pages/initialSteps.page.js index ed9bf751f4..e58fb07472 100644 --- a/packages/e2e-tests/pages/initialSteps.page.js +++ b/packages/e2e-tests/pages/initialSteps.page.js @@ -2,6 +2,7 @@ import BasePage from './basepage.js'; import { isChrome } from '../utils/utils.js'; import { defaultWaitTimeout, + fiveSeconds, oneSecond, quarterSecond, twoSeconds, @@ -78,11 +79,17 @@ class InitialStepsPage extends BasePage { } async acceptToSPP() { this.logger.info(`InitialStepsPage::acceptToSPP is called`); - await this.waitForElement(this.languagesDropDownLocator); - await this.waitForElement(this.agreeCheckboxLocator); - await this.click(this.agreeCheckboxLocator); - await this.waitEnable(this.tosContinueButtonLocator); - await this.click(this.tosContinueButtonLocator); + await this.waitPresentedAndAct( + this.languagesDropDownLocator, + async () => { + await this.waitPresentedAndAct( + this.agreeCheckboxLocator, + async () => await this.click(this.agreeCheckboxLocator) + ) + } + ); + const buttonElem = await this.waitEnable(this.tosContinueButtonLocator); + await buttonElem.click(); } async cantProceedWithoutToS() { this.logger.info(`InitialStepsPage::cantProceedWithoutToS is called`); @@ -106,8 +113,10 @@ class InitialStepsPage extends BasePage { } async skipAnalytics() { this.logger.info(`InitialStepsPage::skipAnalytics is called`); - await this.waitForElement(this.analyticsSkipButtonLocator); - await this.click(this.analyticsSkipButtonLocator); + await this.waitPresentedAndAct( + this.analyticsSkipButtonLocator, + async () => await this.click(this.analyticsSkipButtonLocator) + ); } async allowCardanoPaymentsUrls() { this.logger.info(`InitialStepsPage::allowCardanoPaymentsUrls is called`); @@ -116,8 +125,10 @@ class InitialStepsPage extends BasePage { } async skipCardanoPaymentUrls() { this.logger.info(`InitialStepsPage::skipCardanoPaymentUrls is called`); - await this.waitForElement(this.cardanoUrlPromptFormLocator); - await this.click(this.cardanoPaymentUrlSkipButtonLocator); + await this.waitPresentedAndAct( + this.cardanoPaymentUrlSkipButtonLocator, + async () => await this.click(this.cardanoPaymentUrlSkipButtonLocator) + ) } async skipInitialSteps() { this.logger.info(`InitialStepsPage::skipInitialSteps is called`); From d63012de8b3fee7822b1449d471c761b5e960dbf Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Fri, 28 Jun 2024 16:58:43 +0300 Subject: [PATCH 261/464] using waitPresentedAndAct --- .../e2e-tests/pages/walletCommonBase.page.js | 52 ++++++------------- 1 file changed, 17 insertions(+), 35 deletions(-) diff --git a/packages/e2e-tests/pages/walletCommonBase.page.js b/packages/e2e-tests/pages/walletCommonBase.page.js index 5c67cf7a32..8754ef6d4e 100644 --- a/packages/e2e-tests/pages/walletCommonBase.page.js +++ b/packages/e2e-tests/pages/walletCommonBase.page.js @@ -123,50 +123,32 @@ class WalletCommonBase extends BasePage { // functions async getSelectedWalletInfo() { this.logger.info(`WalletCommonBase::getSelectedWalletInfo is called`); - let walletName = ''; - let walletPlate = ''; - let adaBalance = 0; - let fiatBalance = 0; - let fiatBalanceStr = ''; - let fiatCurrency = ''; - await this.waitForElement(this.walletNameAndPlateNumberTextLocator); - const walletNavPanelState = await this.customWaitIsPresented( + const [walletName, walletPlate] = await this.waitPresentedAndAct( this.walletNameAndPlateNumberTextLocator, - fiveSeconds, - quarterSecond + async () => { + const rawNameAndPlateText = await this.getText(this.walletNameAndPlateNumberTextLocator); + return rawNameAndPlateText.split('\n'); + } ); - if (walletNavPanelState) { - const rawNameAndPlateText = await this.getText(this.walletNameAndPlateNumberTextLocator); - [walletName, walletPlate] = rawNameAndPlateText.split('\n'); - } else { - throw new Error('Wallet navigation panel is not found'); - } - const walletBalanceState = await this.customWaitIsPresented( + const adaBalance = await this.waitPresentedAndAct( this.walletBalanceTextLocator, - fiveSeconds, - quarterSecond + async () => { + const rawBalanceText = await this.getText(this.walletBalanceTextLocator); + return Number(rawBalanceText.split(' ')[0]); + } ); - if (walletBalanceState) { - const rawBalanceText = await this.getText(this.walletBalanceTextLocator); - adaBalance = Number(rawBalanceText.split(' ')[0]); - } else { - throw new Error('Wallet balance is not found'); - } - const walletFiatBalanceState = await this.customWaitIsPresented( + const [fiatBalance, fiatCurrency] = await this.waitPresentedAndAct( this.walletFiatBalanceTextLocator, - fiveSeconds, - quarterSecond + async () => { + const rawFiatBalanceText = await this.getText(this.walletFiatBalanceTextLocator); + const [fiatBalanceStr, fiatCurrencyInner] = rawFiatBalanceText.split(' '); + const fiatBalanceInner = fiatBalanceStr === '-' ? 0 : Number(fiatBalanceStr); + return [fiatBalanceInner, fiatCurrencyInner]; + } ); - if (walletFiatBalanceState) { - const rawFiatBalanceText = await this.getText(this.walletFiatBalanceTextLocator); - [fiatBalanceStr, fiatCurrency] = rawFiatBalanceText.split(' '); - fiatBalance = fiatBalanceStr === '-' ? 0 : Number(fiatBalanceStr); - } else { - throw new Error('Wallet fiat balance is not found'); - } const walletInfo = { name: walletName, From 8bd767f13089d0ba35b5adb01042eecaa15e3d7d Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Fri, 28 Jun 2024 16:58:55 +0300 Subject: [PATCH 262/464] using waitPresentedAndAct --- .../pages/newWalletPages/walletDetails.page.js | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/packages/e2e-tests/pages/newWalletPages/walletDetails.page.js b/packages/e2e-tests/pages/newWalletPages/walletDetails.page.js index dc1b54c4a0..184d6a2caf 100644 --- a/packages/e2e-tests/pages/newWalletPages/walletDetails.page.js +++ b/packages/e2e-tests/pages/newWalletPages/walletDetails.page.js @@ -54,17 +54,15 @@ class WalletDetails extends AddWalletBase { // async closeTipsModalWindow() { this.logger.info(`WalletDetails::closeTipsModalWindow is called`); - await this.waitForElement(this.tipsModalLocator); - const buttonIsPresented = await this.customWaitIsPresented( - this.tipModalContinueButtonLocator, - fiveSeconds, - quarterSecond + await this.waitPresentedAndAct( + this.tipsModalLocator, + async () => { + await this.waitPresentedAndAct( + this.tipModalContinueButtonLocator, + async () => await this.click(this.tipModalContinueButtonLocator) + ) + } ); - if (buttonIsPresented) { - await this.click(this.tipModalContinueButtonLocator); - } else { - throw new Error('New wallet -> Details page -> Tips modal -> The continue button is not found.'); - } } async enterWalletName(walletName) { this.logger.info(`WalletDetails::enterWalletName is called`); From 5735ffcb9f410ef9661bbe51b86437bdd6ab47ef Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Fri, 28 Jun 2024 17:04:26 +0300 Subject: [PATCH 263/464] using waitPresentedAndAct --- .../createWalletStepTwo.page.js | 21 +++++-------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/packages/e2e-tests/pages/newWalletPages/createWalletSteps/createWalletStepTwo.page.js b/packages/e2e-tests/pages/newWalletPages/createWalletSteps/createWalletStepTwo.page.js index 49e499ca93..7f2711e6a2 100644 --- a/packages/e2e-tests/pages/newWalletPages/createWalletSteps/createWalletStepTwo.page.js +++ b/packages/e2e-tests/pages/newWalletPages/createWalletSteps/createWalletStepTwo.page.js @@ -38,24 +38,13 @@ class CreateWalletStepTwo extends AddWalletBase { } async closeTipsModalWindow() { this.logger.info(`CreateWalletStepTwo::closeTipsModalWindow is called`); - const tipsModalState = await this.customWaitIsPresented( + await this.waitPresentedAndAct( this.tipsModalLocator, - fiveSeconds, - quarterSecond + async () => await this.waitPresentedAndAct( + this.tipModalContinueButtonLocator, + async () => await this.click(this.tipModalContinueButtonLocator) + ) ); - if (!tipsModalState) { - throw new Error('The tips modal is not presented'); - } - const continueBtnState = await this.customWaitIsPresented( - this.tipModalContinueButtonLocator, - fiveSeconds, - quarterSecond - ); - if (continueBtnState) { - await this.click(this.tipModalContinueButtonLocator); - } else { - throw new Error('The Continue button on the tips modal is not found'); - } } async recoveryPhraseIsBlurred() { this.logger.info(`CreateWalletStepTwo::recoveryPhraseIsBlurred is called`); From 2e6a3841967ca0424da57102dd196801efc9ab8b Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Fri, 28 Jun 2024 17:27:22 +0300 Subject: [PATCH 264/464] fix for changing password --- .../wallet/settingsTab/walletSubTab.page.js | 23 ++++++++++++++++++- .../test/07_changingPassword.test.js | 12 +++++++--- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/packages/e2e-tests/pages/wallet/settingsTab/walletSubTab.page.js b/packages/e2e-tests/pages/wallet/settingsTab/walletSubTab.page.js index 792e9c38f8..2887781008 100644 --- a/packages/e2e-tests/pages/wallet/settingsTab/walletSubTab.page.js +++ b/packages/e2e-tests/pages/wallet/settingsTab/walletSubTab.page.js @@ -1,5 +1,6 @@ import { Key } from 'selenium-webdriver'; import SettingsTab from './settingsTab.page.js'; +import { fiveSeconds, quarterSecond } from '../../../helpers/timeConstants.js'; class WalletSubTab extends SettingsTab { // locator @@ -109,7 +110,13 @@ class WalletSubTab extends SettingsTab { await this.click(this.walletNameCancelChangesButtonLocator); } } - async changeWalletPassword(oldPassword, newPassword, repeatNewPassword, confirm = true) { + async changeWalletPassword( + oldPassword, + newPassword, + repeatNewPassword, + confirm = true, + expectError = false + ) { this.logger.info( `WalletSubTab::getWalletExportInfo is called.` + `The old password: ${oldPassword}, the new password: ${newPassword}, the repeat new password: ${repeatNewPassword}` @@ -129,6 +136,20 @@ class WalletSubTab extends SettingsTab { if (confirm) { await this.click(this.changePasswordSaveButtonLocator); } + + if (!expectError) { + const modalState = await this.customWaiter( + async () => { + const elems = await this.findElements(this.changePasswordDialogLocator); + return elems.length === 0; + }, + fiveSeconds, + quarterSecond + ); + if (!modalState) { + throw new Error('Change password modal is still displayed.') + } + } } async getPasswordErrorMsg() { this.logger.info(`WalletSubTab::getPasswordErrorMsg is called.`); diff --git a/packages/e2e-tests/test/07_changingPassword.test.js b/packages/e2e-tests/test/07_changingPassword.test.js index cfe4840dc3..c2633d4ac4 100644 --- a/packages/e2e-tests/test/07_changingPassword.test.js +++ b/packages/e2e-tests/test/07_changingPassword.test.js @@ -89,7 +89,13 @@ describe('Changing wallet password', function () { }); it('Changing password, incorrect old one, correct new one', async function () { const walletSubTabPage = new WalletSubTab(webdriver, logger); - await walletSubTabPage.changeWalletPassword(oldPassword, newPassword, newPassword); + await walletSubTabPage.changeWalletPassword( + oldPassword, + newPassword, + newPassword, + true, + true + ); }); it('Checking the error message', async function () { const walletSubTabPage = new WalletSubTab(webdriver, logger); @@ -113,7 +119,7 @@ describe('Changing wallet password', function () { }); it('Changing password, correct old one, new one is too short', async function () { const walletSubTabPage = new WalletSubTab(webdriver, logger); - await walletSubTabPage.changeWalletPassword(newPassword, 'a', newPassword); + await walletSubTabPage.changeWalletPassword(newPassword, 'a', newPassword, true, true); }); it('Checking the error message', async function () { const walletSubTabPage = new WalletSubTab(webdriver, logger); @@ -139,7 +145,7 @@ describe('Changing wallet password', function () { }); it('Changing password, correct old one, new passwords dont match', async function () { const walletSubTabPage = new WalletSubTab(webdriver, logger); - await walletSubTabPage.changeWalletPassword(newPassword, newPass1, newPass2); + await walletSubTabPage.changeWalletPassword(newPassword, newPass1, newPass2, true, true); }); it('Checking the error message', async function () { const walletSubTabPage = new WalletSubTab(webdriver, logger); From 70c506dff75c55d814d250167b6ec44f49c66968 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Fri, 28 Jun 2024 18:36:57 +0300 Subject: [PATCH 265/464] improvements --- .../pages/wallet/settingsTab/blockchainSubTab.page.js | 2 +- .../pages/wallet/walletTab/walletTransactions.page.js | 11 ++++------- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/packages/e2e-tests/pages/wallet/settingsTab/blockchainSubTab.page.js b/packages/e2e-tests/pages/wallet/settingsTab/blockchainSubTab.page.js index fb963f4e9b..56f7c5eb0c 100644 --- a/packages/e2e-tests/pages/wallet/settingsTab/blockchainSubTab.page.js +++ b/packages/e2e-tests/pages/wallet/settingsTab/blockchainSubTab.page.js @@ -28,7 +28,7 @@ class BlockchainSubTab extends SettingsTab { this.logger.info(`BlockchainSubTab::selectExplorer is called. Explorer: "${explorer}"`); await this.openExplorerSelection(); await this.pickExplorer(explorer); - await this.sleep(200); + await this.sleep(500); } } diff --git a/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js b/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js index 7a1a13ffea..def244b5cf 100644 --- a/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js +++ b/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js @@ -162,13 +162,10 @@ export class TransactionsSubTab extends WalletTab { // methods async isDisplayed() { this.logger.info(`TransactionsSubTab::isDisplayed is called`); - try { - await this.waitForElement(this.transactionsSubmenuItemLocator); - await this.waitForElement(this.walletSummaryBoxLocator); - return true; - } catch (error) { - return false; - } + const submenuState = await this.customWaitIsPresented(this.transactionsSubmenuItemLocator, fiveSeconds, quarterSecond); + const summaryState = await this.customWaitIsPresented(this.walletSummaryBoxLocator, fiveSeconds, quarterSecond); + + return submenuState && summaryState; } async isWalletEmpty() { this.logger.info(`TransactionsSubTab::isWalletEmpty is called`); From 5d6f235e5ae0be1e6db4a1c9ff0b3299626260f1 Mon Sep 17 00:00:00 2001 From: Patriciu Nista Date: Mon, 1 Jul 2024 00:31:15 +0200 Subject: [PATCH 266/464] added new DS vars --- packages/yoroi-extension/app/App.js | 21 +- .../experimental/YoroiPalette/YoroiPalette.js | 154 +++--- .../YoroiTheme/YoroiThemesPage.js | 4 +- .../general-setting/ThemeSettingsBlock.js | 23 +- .../app/styles/context/layout.js | 2 +- .../app/styles/context/mode.js | 8 +- .../app/styles/globalStyles.js | 2 + .../app/styles/overrides/Button.js | 512 ++++++------------ .../app/styles/overrides/Checkbox.js | 51 +- .../app/styles/overrides/Chip.js | 110 +--- .../app/styles/overrides/FormControl.js | 30 +- .../app/styles/overrides/FormHelperText.js | 52 +- .../app/styles/overrides/InputLabel.js | 58 +- .../app/styles/overrides/Menu.js | 23 +- .../app/styles/overrides/MenuItem.js | 52 +- .../app/styles/overrides/OutlinedInput.js | 94 +--- .../app/styles/overrides/Select.js | 17 +- .../app/styles/overrides/TabPanel.js | 16 +- .../app/styles/overrides/Tabs.js | 108 +--- .../app/styles/overrides/TextField.js | 36 +- .../app/styles/overrides/Tooltip.js | 41 +- .../app/styles/overrides/legacy/Button.js | 429 +++++++++++++++ .../app/styles/overrides/legacy/Checkbox.js | 54 ++ .../app/styles/overrides/legacy/Chip.js | 171 ++++++ .../styles/overrides/legacy/FormControl.js | 40 ++ .../styles/overrides/legacy/FormHelperText.js | 44 ++ .../app/styles/overrides/legacy/InputLabel.js | 51 ++ .../app/styles/overrides/legacy/Menu.js | 31 ++ .../app/styles/overrides/legacy/MenuItem.js | 65 +++ .../styles/overrides/legacy/OutlinedInput.js | 89 +++ .../app/styles/overrides/legacy/Select.js | 26 + .../app/styles/overrides/legacy/TabPanel.js | 23 + .../app/styles/overrides/legacy/Tabs.js | 104 ++++ .../app/styles/overrides/legacy/TextField.js | 23 + .../app/styles/overrides/legacy/Tooltip.js | 41 ++ .../overrides/{revamp => legacy}/index.js | 0 .../app/styles/overrides/revamp/Button.js | 210 ------- .../app/styles/overrides/revamp/Checkbox.js | 19 - .../app/styles/overrides/revamp/Chip.js | 81 --- .../styles/overrides/revamp/FormControl.js | 24 - .../styles/overrides/revamp/FormHelperText.js | 14 - .../app/styles/overrides/revamp/InputLabel.js | 17 - .../app/styles/overrides/revamp/Menu.js | 16 - .../app/styles/overrides/revamp/MenuItem.js | 31 -- .../styles/overrides/revamp/OutlinedInput.js | 43 -- .../app/styles/overrides/revamp/Select.js | 15 - .../app/styles/overrides/revamp/TabPanel.js | 13 - .../app/styles/overrides/revamp/Tabs.js | 40 -- .../app/styles/overrides/revamp/TextField.js | 45 -- .../app/styles/overrides/revamp/Tooltip.js | 18 - packages/yoroi-extension/app/styles/themes.js | 15 +- .../themes/base-palettes/dark-palette.js | 62 +++ .../themes/base-palettes/light-palette.js | 56 ++ .../app/styles/themes/common-theme.js | 169 ++++-- .../app/styles/themes/dark-theme-base.js | 130 +++++ .../app/styles/themes/dark-theme-mui.js | 44 ++ .../themes/{ => legacy}/classic-theme.js | 4 +- .../app/styles/themes/legacy/common-theme.js | 61 +++ .../themes/{ => legacy}/modern-theme.js | 4 +- .../app/styles/themes/light-theme-base.js | 159 ++++++ .../app/styles/themes/light-theme-mui.js | 44 ++ .../app/styles/themes/revamp/common-theme.js | 114 ---- .../styles/themes/revamp/dark-theme-base.js | 91 ---- .../styles/themes/revamp/dark-theme-mui.js | 44 -- .../styles/themes/revamp/light-theme-base.js | 91 ---- .../styles/themes/revamp/light-theme-mui.js | 44 -- .../app/styles/themes/themed-palettes/dark.js | 41 ++ .../styles/themes/themed-palettes/light.js | 41 ++ .../app/styles/themes/tokens/tokens.js | 66 +++ 69 files changed, 2434 insertions(+), 2037 deletions(-) create mode 100644 packages/yoroi-extension/app/styles/overrides/legacy/Button.js create mode 100644 packages/yoroi-extension/app/styles/overrides/legacy/Checkbox.js create mode 100644 packages/yoroi-extension/app/styles/overrides/legacy/Chip.js create mode 100644 packages/yoroi-extension/app/styles/overrides/legacy/FormControl.js create mode 100644 packages/yoroi-extension/app/styles/overrides/legacy/FormHelperText.js create mode 100644 packages/yoroi-extension/app/styles/overrides/legacy/InputLabel.js create mode 100644 packages/yoroi-extension/app/styles/overrides/legacy/Menu.js create mode 100644 packages/yoroi-extension/app/styles/overrides/legacy/MenuItem.js create mode 100644 packages/yoroi-extension/app/styles/overrides/legacy/OutlinedInput.js create mode 100644 packages/yoroi-extension/app/styles/overrides/legacy/Select.js create mode 100644 packages/yoroi-extension/app/styles/overrides/legacy/TabPanel.js create mode 100644 packages/yoroi-extension/app/styles/overrides/legacy/Tabs.js create mode 100644 packages/yoroi-extension/app/styles/overrides/legacy/TextField.js create mode 100644 packages/yoroi-extension/app/styles/overrides/legacy/Tooltip.js rename packages/yoroi-extension/app/styles/overrides/{revamp => legacy}/index.js (100%) delete mode 100644 packages/yoroi-extension/app/styles/overrides/revamp/Button.js delete mode 100644 packages/yoroi-extension/app/styles/overrides/revamp/Checkbox.js delete mode 100644 packages/yoroi-extension/app/styles/overrides/revamp/Chip.js delete mode 100644 packages/yoroi-extension/app/styles/overrides/revamp/FormControl.js delete mode 100644 packages/yoroi-extension/app/styles/overrides/revamp/FormHelperText.js delete mode 100644 packages/yoroi-extension/app/styles/overrides/revamp/InputLabel.js delete mode 100644 packages/yoroi-extension/app/styles/overrides/revamp/Menu.js delete mode 100644 packages/yoroi-extension/app/styles/overrides/revamp/MenuItem.js delete mode 100644 packages/yoroi-extension/app/styles/overrides/revamp/OutlinedInput.js delete mode 100644 packages/yoroi-extension/app/styles/overrides/revamp/Select.js delete mode 100644 packages/yoroi-extension/app/styles/overrides/revamp/TabPanel.js delete mode 100644 packages/yoroi-extension/app/styles/overrides/revamp/Tabs.js delete mode 100644 packages/yoroi-extension/app/styles/overrides/revamp/TextField.js delete mode 100644 packages/yoroi-extension/app/styles/overrides/revamp/Tooltip.js create mode 100644 packages/yoroi-extension/app/styles/themes/base-palettes/dark-palette.js create mode 100644 packages/yoroi-extension/app/styles/themes/base-palettes/light-palette.js create mode 100644 packages/yoroi-extension/app/styles/themes/dark-theme-base.js create mode 100644 packages/yoroi-extension/app/styles/themes/dark-theme-mui.js rename packages/yoroi-extension/app/styles/themes/{ => legacy}/classic-theme.js (96%) create mode 100644 packages/yoroi-extension/app/styles/themes/legacy/common-theme.js rename packages/yoroi-extension/app/styles/themes/{ => legacy}/modern-theme.js (96%) create mode 100644 packages/yoroi-extension/app/styles/themes/light-theme-base.js create mode 100644 packages/yoroi-extension/app/styles/themes/light-theme-mui.js delete mode 100644 packages/yoroi-extension/app/styles/themes/revamp/common-theme.js delete mode 100644 packages/yoroi-extension/app/styles/themes/revamp/dark-theme-base.js delete mode 100644 packages/yoroi-extension/app/styles/themes/revamp/dark-theme-mui.js delete mode 100644 packages/yoroi-extension/app/styles/themes/revamp/light-theme-base.js delete mode 100644 packages/yoroi-extension/app/styles/themes/revamp/light-theme-mui.js create mode 100644 packages/yoroi-extension/app/styles/themes/themed-palettes/dark.js create mode 100644 packages/yoroi-extension/app/styles/themes/themed-palettes/light.js create mode 100644 packages/yoroi-extension/app/styles/themes/tokens/tokens.js diff --git a/packages/yoroi-extension/app/App.js b/packages/yoroi-extension/app/App.js index d673c45e94..f287b14e40 100644 --- a/packages/yoroi-extension/app/App.js +++ b/packages/yoroi-extension/app/App.js @@ -1,26 +1,27 @@ // @flow -import { Component } from 'react'; import type { Node } from 'react'; +import type { RouterHistory } from 'react-router-dom'; +import type { StoresMap } from './stores'; +import type { ActionsMap } from './actions'; +import { Component } from 'react'; import { observer } from 'mobx-react'; import { Router } from 'react-router-dom'; -import type { RouterHistory } from 'react-router-dom'; import { addLocaleData, IntlProvider } from 'react-intl'; import { observable, autorun, runInAction } from 'mobx'; import { Routes } from './Routes'; import { locales, translations } from './i18n/translations'; -import type { StoresMap } from './stores'; -import type { ActionsMap } from './actions'; -import ThemeManager from './ThemeManager'; -import environment from './environment'; -import MaintenancePage from './containers/MaintenancePage'; -import CrashPage from './containers/CrashPage'; import { Logger } from './utils/logging'; import { LayoutProvider } from './styles/context/layout'; import { ColorModeProvider } from './styles/context/mode'; import { CssBaseline } from '@mui/material'; import { globalStyles } from './styles/globalStyles'; -import Support from './components/widgets/Support'; import { changeToplevelTheme, MuiThemes } from './styles/themes'; +import { THEMES } from './styles/themes'; +import ThemeManager from './ThemeManager'; +import environment from './environment'; +import MaintenancePage from './containers/MaintenancePage'; +import CrashPage from './containers/CrashPage'; +import Support from './components/widgets/Support'; // https://github.com/yahoo/react-intl/wiki#loading-locale-data addLocaleData(locales); @@ -81,7 +82,7 @@ class App extends Component { // which looks ugly but at least it's readable. '--default-font': !environment.isProduction() ? 'wingdings' : 'Times New Roman', }); - const currentTheme = stores.profile.currentTheme; + const currentTheme = stores.profile.currentTheme || THEMES.YOROI_BASE; changeToplevelTheme(currentTheme); diff --git a/packages/yoroi-extension/app/components/experimental/YoroiPalette/YoroiPalette.js b/packages/yoroi-extension/app/components/experimental/YoroiPalette/YoroiPalette.js index 3831c35e9f..747497df42 100644 --- a/packages/yoroi-extension/app/components/experimental/YoroiPalette/YoroiPalette.js +++ b/packages/yoroi-extension/app/components/experimental/YoroiPalette/YoroiPalette.js @@ -1,98 +1,90 @@ // @flow import { Component } from 'react'; import { observer } from 'mobx-react'; -import styles from './YoroiPalette.scss' +import styles from './YoroiPalette.scss'; import type { Node } from 'react'; -import { classicTheme } from '../../../styles/themes/classic-theme' -import { modernTheme } from '../../../styles/themes/modern-theme' +import { classicTheme } from '../../../styles/themes/legacy/classic-theme'; +import { modernTheme } from '../../../styles/themes/legacy/modern-theme'; import classNames from 'classnames'; -import { ReactComponent as ArrowDown } from '../../../assets/images/down-arrow.inline.svg'; +import { ReactComponent as ArrowDown } from '../../../assets/images/down-arrow.inline.svg'; import { getMainYoroiPalette, formatPalette } from '../../../styles/globalStyles'; -import type { DesignToken } from '../../../styles/globalStyles' +import type { DesignToken } from '../../../styles/globalStyles'; /** * @todos * 1. Print transaction status * 2. Print the actual theme object */ -type Props = {||} +type Props = {||}; -type Theme = 'classic' | 'modern' +type Theme = 'classic' | 'modern'; type State = {| - currentTheme: Theme -|} + currentTheme: Theme, +|}; const themes = { - classic: classicTheme, - modern: modernTheme -} + classic: classicTheme, + modern: modernTheme, +}; @observer export default class YoroiPalettePage extends Component { + state: State = { + currentTheme: 'classic', + }; - state: State = { - currentTheme: 'classic', - } - - switchTheme(theme: Theme): void { - this.setState({ currentTheme: theme }) - } + switchTheme(theme: Theme): void { + this.setState({ currentTheme: theme }); + } - render(): Node { + render(): Node { + const { currentTheme } = this.state; + const palette = getMainYoroiPalette(themes[currentTheme]); + const { designTokens, nameToHex } = formatPalette(palette, themes[currentTheme]); + return ( +
+
+ + +
- const { currentTheme } = this.state - const palette = getMainYoroiPalette(themes[currentTheme]) - const { designTokens, nameToHex } = formatPalette(palette, themes[currentTheme]) - return ( -
-
- - +
+

Design tokens

+
+ {designTokens.map(color => ( +
    {this.renderRow(color).map(node => node)}
+ ))}
+
-
-

Design tokens

-
- { - designTokens.map(color => ( -
    - {this.renderRow(color).map(node => node)} -
- )) - } -
+

Colors Direct Hex Colors

+ {nameToHex.map(color => ( +
+ +
{String(color.hex)}
+
{color.name}
- -

Colors Direct Hex Colors

- {nameToHex.map((color) => ( -
- -
- {String(color.hex)} -
-
{color.name}
-
- ))} -
- ) + ))} +
+ ); } renderRow(color: DesignToken): Node[] { @@ -103,7 +95,7 @@ export default class YoroiPalettePage extends Component { }, { text: color.path.join('-'), - classnames: [styles.flexWithMargin, styles.designTokens] + classnames: [styles.flexWithMargin, styles.designTokens], }, { text: color.child, @@ -112,13 +104,13 @@ export default class YoroiPalettePage extends Component { { text: color.parent, classnames: [styles.flexWithMargin, styles.parent], - } - ] + }, + ]; - const nodes = [] + const nodes = []; - for(let i = 0; i < subRows.length; i++) { - const subRow = subRows[i] + for (let i = 0; i < subRows.length; i++) { + const subRow = subRows[i]; nodes.push( <>
  • @@ -133,11 +125,15 @@ export default class YoroiPalettePage extends Component { />
    {subRow.text}
  • - {i < subRows.length -1 &&
  • } + {i < subRows.length - 1 && ( +
  • + +
  • + )} - ) + ); } - return nodes + return nodes; } -} \ No newline at end of file +} diff --git a/packages/yoroi-extension/app/components/experimental/YoroiTheme/YoroiThemesPage.js b/packages/yoroi-extension/app/components/experimental/YoroiTheme/YoroiThemesPage.js index 59cd283fa0..4394fc699f 100644 --- a/packages/yoroi-extension/app/components/experimental/YoroiTheme/YoroiThemesPage.js +++ b/packages/yoroi-extension/app/components/experimental/YoroiTheme/YoroiThemesPage.js @@ -3,8 +3,8 @@ import { Component } from 'react'; import { observer } from 'mobx-react'; import styles from './YoroiThemesPage.scss' import type { Node } from 'react'; -import { classicTheme } from '../../../styles/themes/classic-theme' -import { modernTheme } from '../../../styles/themes/modern-theme' +import { classicTheme } from '../../../styles/themes/legacy/classic-theme'; +import { modernTheme } from '../../../styles/themes/legacy/modern-theme'; import classNames from 'classnames'; type Props = {||} diff --git a/packages/yoroi-extension/app/components/settings/categories/general-setting/ThemeSettingsBlock.js b/packages/yoroi-extension/app/components/settings/categories/general-setting/ThemeSettingsBlock.js index 23d876694a..72164d5223 100644 --- a/packages/yoroi-extension/app/components/settings/categories/general-setting/ThemeSettingsBlock.js +++ b/packages/yoroi-extension/app/components/settings/categories/general-setting/ThemeSettingsBlock.js @@ -79,7 +79,7 @@ type Props = {| +onExternalLinkClick: MouseEvent => void, |}; -const NEW_THEME = THEMES.YOROI_REVAMP; +const NEW_THEME = THEMES.YOROI_BASE; const OLD_THEME = `${THEMES.YOROI_MODERN}-${THEMES.YOROI_CLASSIC}`; @observer export default class ThemeSettingsBlock extends Component { @@ -90,7 +90,7 @@ export default class ThemeSettingsBlock extends Component { render(): Node { const { currentTheme, onSubmit, onExternalLinkClick } = this.props; const { intl } = this.context; - const isRevampLayout = currentTheme === THEMES.YOROI_REVAMP; + const isRevampLayout = currentTheme === THEMES.YOROI_BASE; const blogLink = ( { py: !isRevampLayout && '24px', }} > - { /> - {false && currentTheme === THEMES.YOROI_REVAMP && environment.isDev() && ( + {false && currentTheme === THEMES.YOROI_BASE && environment.isDev() && ( )} - {currentTheme !== THEMES.YOROI_REVAMP && ( + {currentTheme !== THEMES.YOROI_BASE && ( - { > {intl.formatMessage(messages.selectColorTheme)} - - + diff --git a/packages/yoroi-extension/app/styles/context/layout.js b/packages/yoroi-extension/app/styles/context/layout.js index cf49ff9b18..8dc955f4ec 100644 --- a/packages/yoroi-extension/app/styles/context/layout.js +++ b/packages/yoroi-extension/app/styles/context/layout.js @@ -18,7 +18,7 @@ const LayoutContext = React.createContext(); const LayoutProvider = (props: Object): Node => { const { layout } = props; - const localLayout: Layouts = layout === THEMES.YOROI_REVAMP ? 'REVAMP' : 'CLASSIC'; + const localLayout: Layouts = layout === THEMES.YOROI_BASE ? 'REVAMP' : 'CLASSIC'; return ( { - if (currentTheme === THEMES.YOROI_REVAMP) return getDesignTokens(mode); + if (currentTheme === THEMES.YOROI_BASE) return getDesignTokens(mode); return MuiThemes[currentTheme]; }, [mode, currentTheme]); diff --git a/packages/yoroi-extension/app/styles/globalStyles.js b/packages/yoroi-extension/app/styles/globalStyles.js index 2b5b38eb0b..7603aa38ec 100644 --- a/packages/yoroi-extension/app/styles/globalStyles.js +++ b/packages/yoroi-extension/app/styles/globalStyles.js @@ -68,6 +68,8 @@ export const formatPalette = (palette: any, theme: any): FormatedPalette => { }; export function getMainYoroiPalette(theme: Object): { [string]: string | number } { + // if (theme.name === 'light-theme' || theme.name === 'dark-theme') return {}; + return { /* CSS variables follow the same name as mui using kebab case syntax diff --git a/packages/yoroi-extension/app/styles/overrides/Button.js b/packages/yoroi-extension/app/styles/overrides/Button.js index 1d582cb28a..9fe568dd04 100644 --- a/packages/yoroi-extension/app/styles/overrides/Button.js +++ b/packages/yoroi-extension/app/styles/overrides/Button.js @@ -1,429 +1,229 @@ // @flow -import { revampBaseTheme } from '../themes/revamp/light-theme-mui'; -const ClassicButton: any = { +import { lightThemeBase } from '../themes/light-theme-base'; +import { darkThemeBase } from '../themes/dark-theme-base'; + +const { palette: darkThemePalette } = darkThemeBase; +const { palette: lightThemePalette } = lightThemeBase; +const ltDs = lightThemePalette.ds; +const dtDs = darkThemePalette.ds; + +const ButtonCommonProps: Object = { styleOverrides: { root: { - fontSize: '0.875rem', - borderRadius: 0, - border: 0, + fontSize: '1rem', + borderRadius: 8, fontWeight: 500, - minHeight: 44, - minWidth: 230, - padding: '12px 20px', - textTransform: 'none', + fontFamily: 'Rubik', + lineHeight: '19px', + textTransform: 'uppercase', + padding: '16px', + boxShadow: 'none', + '&.MuiButton-sizeLarge': { height: '56px' }, + '&.MuiButton-sizeMedium': { padding: '13px 24px' }, + '&.MuiButton-sizeSmall': { padding: '7px' }, + '&.MuiButton-sizeFlat': { padding: '13px 24px', height: 'unset' }, + '&:hover': { boxShadow: 'none' }, + '& span.MuiButton-startIcon': { + marginLeft: '0px', + marginRight: '6px', + }, }, }, - defaultProps: { disableRipple: true }, + defaultProps: { disableRipple: false }, +}; + +// Button in Figam: https://bit.ly/3Ky4uvo +export const LightButton: any = { + ...ButtonCommonProps, variants: [ { props: { variant: 'primary' }, - style: { - backgroundColor: 'var(--yoroi-comp-button-primary-background)', - color: 'var(--yoroi-comp-button-primary-text)', - ':hover': { - backgroundColor: 'var(--yoroi-comp-button-primary-background-hover)', - }, - '&.Mui-active': { - backgroundColor: 'var(--yoroi-comp-button-primary-background-active)', - }, - '&.Mui-disabled': { - opacity: 0.4, - color: 'var(--yoroi-comp-button-primary-text)', - }, - '& .MuiLoadingButton-loadingIndicator': { - color: 'var(--yoroi-comp-button-primary-text)', - }, - }, + style: getContainedStyles('primary', ltDs), }, { props: { variant: 'secondary' }, + style: getOutlinedStyles('primary', ltDs), + }, + { + props: { variant: 'tertiary', color: 'primary' }, + style: getTertiaryStyles('primary', ltDs), + }, + { + props: { variant: 'tertiary', color: 'secondary' }, + style: getTertiaryStyles('grayscale', ltDs), + }, + { + props: { variant: 'destructive' }, style: { - backgroundColor: 'var(--yoroi-comp-button-flat-background)', - color: 'var(--yoroi-comp-button-flat-text)', - border: 0, - ':hover': { - backgroundColor: 'var(--yoroi-comp-button-flat-background-hover)', - }, - '&.Mui-active': { - backgroundColor: 'var(--yoroi-comp-button-flat-background-active)', + backgroundColor: ltDs.sys_magenta_c500, + color: ltDs.white_static, + ':hover': { backgroundColor: ltDs.sys_magenta_c600 }, + ':active': { backgroundColor: ltDs.sys_magenta_c700 }, + ':focus': { + backgroundColor: ltDs.sys_magenta_c500, + outline: '2px solid', + outlineColor: ltDs.sys_yellow_c500, }, '&.Mui-disabled': { - color: 'var(--yoroi-comp-button-flat-text)', - opacity: 0.4, - }, - '& .MuiLoadingButton-loadingIndicator': { - color: 'var(--yoroi-comp-button-flat-text)', + color: ltDs.white_static, + backgroundColor: ltDs.sys_magenta_c300, + cursor: 'not-allowed', + pointerEvents: 'unset', }, + '& .MuiLoadingButton-loadingIndicator': { color: ltDs.white_static }, + '& .MuiButton-startIcon svg': { fill: ltDs.white_static }, + '& .MuiButton-startIcon svg path': { fill: ltDs.white_static }, }, }, { - props: { variant: 'danger' }, + props: { variant: 'segmented' }, style: { - backgroundColor: 'var(--yoroi-comp-button-danger-background)', - color: 'var(--yoroi-comp-button-danger-text)', - border: 0, + minWidth: 'unset', + maxWidth: 'unset', + width: '40px', + height: '40px', + padding: '8px', + color: 'ds.gray_c200', + '&.MuiButton-sizeMedium': { padding: '8px', height: '40px' }, ':hover': { - backgroundColor: 'var(--yoroi-comp-button-danger-background-hover)', - }, - '&.Mui-active': { - backgroundColor: 'var(--yoroi-comp-button-danger-background-active)', - }, - '&.Mui-disabled': { - opacity: 0.4, - color: 'var(--yoroi-comp-button-danger-text)', + color: 'ds.gray_c50', }, - '& .MuiLoadingButton-loadingIndicator': { - color: 'var(--yoroi-comp-button-danger-background)', + '&.active': { + backgroundColor: ltDs.gray_c200, + ':hover': { + backgroundColor: ltDs.gray_c50, + }, }, }, }, ], }; -const ModernButton: any = { - styleOverrides: { - root: { - fontSize: '1rem', - borderRadius: 8, - fontWeight: 500, - fontFamily: 'Rubik', - minHeight: 52, - minWidth: 230, - lineHeight: '18px', - textTransform: 'uppercase', - padding: '16px', - height: 52, - }, - }, - defaultProps: { disableRipple: true }, +// Button in Figam: https://bit.ly/3Ky4uvo +export const DarkButton: any = { + ...ButtonCommonProps, variants: [ { props: { variant: 'primary' }, - style: { - backgroundColor: 'var(--yoroi-comp-button-primary-background)', - color: 'var(--yoroi-comp-button-primary-text)', - ':hover': { - backgroundColor: 'var(--yoroi-comp-button-primary-background-hover)', - }, - '&.Mui-active': { - backgroundColor: 'var(--yoroi-comp-button-primary-background-active)', - }, - '&.Mui-disabled': { - opacity: 0.4, - color: 'var(--yoroi-comp-button-primary-text)', - }, - '& .MuiLoadingButton-loadingIndicator': { - color: 'var(--yoroi-comp-button-primary-text)', - }, - }, - }, - { - props: { variant: 'secondary-blue' }, - style: { - backgroundColor: 'var(--yoroi-comp-button-secondary-background)', - color: 'var(--yoroi-comp-button-primary-text)', - border: '2px solid', - borderColor: 'var(--yoroi-comp-button-primary-border)', - ':hover': { - color: 'var(--yoroi-comp-button-primary-text)', - borderColor: 'var(--yoroi-comp-button-primary-border-hover)', - backgroundColor: 'var(--yoroi-comp-button-primary-background-hover)', - }, - '&.Mui-active': { - backgroundColor: 'var(--yoroi-comp-button-primary-background-active)', - }, - '&.Mui-disabled': { - border: '2px solid', - opacity: 0.4, - borderColor: 'var(--yoroi-comp-button-primary-border)', - color: 'var(--yoroi-comp-button-primary-text)', - }, - '& .MuiLoadingButton-loadingIndicator': { - color: 'var(--yoroi-comp-button-primary-text)', - }, - }, + style: getContainedStyles('primary', dtDs), }, { props: { variant: 'secondary' }, - style: { - backgroundColor: 'var(--yoroi-comp-button-secondary-background)', - color: 'var(--yoroi-comp-button-secondary-text)', - border: '2px solid', - borderColor: 'var(--yoroi-comp-button-secondary-border)', - ':hover': { - color: 'var(--yoroi-comp-button-secondary-text)', - borderColor: 'var(--yoroi-comp-button-secondary-border-hover)', - backgroundColor: 'var(--yoroi-comp-button-secondary-background-hover)', - }, - '&.Mui-active': { - backgroundColor: 'var(--yoroi-comp-button-secondary-background-active)', - }, - '&.Mui-disabled': { - border: '2px solid', - opacity: 0.4, - borderColor: 'var(--yoroi-comp-button-secondary-border)', - color: 'var(--yoroi-comp-button-secondary-text)', - }, - '& .MuiLoadingButton-loadingIndicator': { - color: 'var(--yoroi-comp-button-secondary-text)', - }, - }, + style: getOutlinedStyles('primary', dtDs), }, { - props: { variant: 'ternary' }, - style: { - minWidth: '160px', - minHeight: '44px', - height: '44px', - fontSize: '0.875rem', - backgroundColor: 'transparent', - color: 'var(--yoroi-palette-gray-600)', - border: '1px solid', - borderColor: 'var(--yoroi-palette-gray-400)', - ':hover': { - borderColor: 'var(--yoroi-palette-gray-500)', - }, - '&.Mui-active': { - backgroundColor: 'var(--yoroi-palette-gray-50)', - }, - '&.Mui-disabled': { - border: '1px solid', - opacity: 0.4, - borderColor: 'var(--yoroi-palette-gray-400)', - color: 'var(--yoroi-palette-gray-600)', - }, - '& .MuiLoadingButton-loadingIndicator': { - color: 'var(--yoroi-palette-gray-600)', - }, - }, + props: { variant: 'tertiary', color: 'primary' }, + style: getTertiaryStyles('primary', dtDs), }, { - props: { variant: 'danger' }, - style: { - backgroundColor: 'var(--yoroi-comp-button-danger-background)', - color: 'var(--yoroi-comp-button-danger-text)', - border: 0, - ':hover': { - backgroundColor: 'var(--yoroi-comp-button-danger-background-hover)', - }, - '&.Mui-active': { - backgroundColor: 'var(--yoroi-comp-button-danger-background-active)', - }, - '&.Mui-disabled': { - color: 'var(--yoroi-comp-button-danger-text)', - opacity: 0.4, - }, - '& .MuiLoadingButton-loadingIndicator': { - color: 'var(--yoroi-comp-button-danger-background)', - }, - }, + props: { variant: 'tertiary', color: 'secondary' }, + style: getTertiaryStyles('grayscale', dtDs), }, - // Todo: this button `varient` should be part of the new revam design system { - props: { variant: 'rv-primary' }, + props: { variant: 'destructive' }, style: { - minWidth: 'unset', - minHeight: 'unset', - width: 'unset', - height: 'unset', - // Todo: get the colors from the design system - backgroundColor: '#4B6DDE', - color: 'var(--yoroi-palette-common-white)', - border: 1, - ':hover': { - backgroundColor: '#3154CB', - }, - '&.Mui-active': { - backgroundColor: '#1737A3', + backgroundColor: dtDs.sys_magenta_c500, + color: dtDs.white_static, + ':hover': { backgroundColor: dtDs.sys_magenta_c600 }, + ':active': { backgroundColor: dtDs.sys_magenta_c700 }, + ':focus': { + backgroundColor: dtDs.sys_magenta_c500, + outline: '2px solid', + outlineColor: dtDs.sys_yellow_c500, }, '&.Mui-disabled': { - color: '#C4CFF5', - opacity: 0.4, - }, - '& .MuiLoadingButton-loadingIndicator': { - color: '#C4CFF5', + color: dtDs.white_static, + backgroundColor: dtDs.sys_magenta_c300, + cursor: 'not-allowed', + pointerEvents: 'unset', }, + '& .MuiLoadingButton-loadingIndicator': { color: dtDs.white_static }, + '& .MuiButton-startIcon svg': { fill: dtDs.white_static }, + '& .MuiButton-startIcon svg path': { fill: dtDs.white_static }, }, }, ], }; -function makeContainedBtnStyles(color: 'primary' | 'secondary'): Object { +function getContainedStyles(variant: 'primary' | 'secondary', themePalette: Object): Object { return { - backgroundColor: revampBaseTheme.palette[color].main, - color: revampBaseTheme.palette.common.white, - ':hover': { - backgroundColor: revampBaseTheme.palette[color][600], - }, - ':active': { - backgroundColor: revampBaseTheme.palette[color][700], - }, + backgroundColor: themePalette[`${variant}_c500`], + color: themePalette.gray_cmin, + ':hover': { backgroundColor: themePalette[`${variant}_c600`] }, + ':active': { backgroundColor: themePalette[`${variant}_c700`] }, ':focus': { - backgroundColor: revampBaseTheme.palette[color][500], + backgroundColor: themePalette[`${variant}_c500`], + outline: '2px solid', + outlineColor: themePalette.sys_yellow_c500, }, '&.Mui-disabled': { - color: revampBaseTheme.palette.common.white, - backgroundColor: revampBaseTheme.palette[color][200], - }, - '& .MuiLoadingButton-loadingIndicator': { - color: revampBaseTheme.palette.common.white, - }, + color: themePalette.gray_cmin, + backgroundColor: themePalette[`${variant}_c300`], + cursor: 'not-allowed', + pointerEvents: 'unset', + }, + '& .MuiLoadingButton-loadingIndicator': { color: themePalette.gray_cmin }, + '& .MuiButton-startIcon svg': { fill: themePalette.gray_cmin }, + '& .MuiButton-startIcon svg path': { fill: themePalette.gray_cmin }, }; } -function makeOutlinedBtnStyles(color: 'primary' | 'secondary'): Object { +function getOutlinedStyles(variant: 'primary' | 'secondary', themePalette: Object): Object { return { backgroundColor: 'transparent', - color: revampBaseTheme.palette[color][500], + color: themePalette[`${variant}_c500`], border: '2px solid', - borderColor: revampBaseTheme.palette[color][500], + borderColor: themePalette[`${variant}_c500`], ':hover': { border: '2px solid', - color: revampBaseTheme.palette[color][600], - borderColor: revampBaseTheme.palette[color][600], - }, - ':active': { - borderColor: revampBaseTheme.palette[color][700], + color: themePalette[`${variant}_c600`], + borderColor: themePalette[`${variant}_c600`], }, + ':active': { borderColor: themePalette[`${variant}_c700`] }, ':focus': { - borderColor: revampBaseTheme.palette[color][500], + borderColor: themePalette[`${variant}_c500`], + outline: '2px solid', + outlineColor: themePalette.sys_yellow_c500, }, '&.Mui-disabled': { border: '2px solid', - borderColor: revampBaseTheme.palette[color][200], - color: revampBaseTheme.palette[color][200], - }, - '& .MuiLoadingButton-loadingIndicator': { - color: revampBaseTheme.palette[color][600], - }, + borderColor: themePalette[`${variant}_c200`], + color: themePalette[`${variant}_c200`], + cursor: 'not-allowed', + pointerEvents: 'unset', + }, + '& .MuiLoadingButton-loadingIndicator': { color: themePalette[`${variant}_c600`] }, + '& .MuiButton-startIcon svg': { fill: themePalette[`${variant}_c500`] }, + '& .MuiButton-startIcon svg path': { fill: themePalette[`${variant}_c500`] }, }; } -// Button in Figam: https://bit.ly/3Ky4uvo -const RevampButton: any = { - styleOverrides: { - root: { - fontSize: '1rem', - borderRadius: 8, - fontWeight: 500, - fontFamily: 'Rubik', - lineHeight: '19px', - textTransform: 'uppercase', - padding: '16px', - '&.MuiButton-sizeLarge': { - height: '56px', - }, - '&.MuiButton-sizeMedium': { - padding: '10px', - height: '48px', - }, - '&.MuiButton-sizeSmall': { - padding: '7px', - height: '32px', - }, - boxShadow: 'none', - ':hover': { - boxShadow: 'none', - }, - }, - }, - defaultProps: { disableRipple: false }, - variants: [ - { - props: { variant: 'contained', color: 'primary' }, - style: makeContainedBtnStyles('primary'), - }, - { - props: { variant: 'contained', color: 'secondary' }, - style: makeContainedBtnStyles('secondary'), - }, - { - props: { variant: 'outlined', color: 'primary' }, - style: makeOutlinedBtnStyles('primary'), - }, - { - props: { variant: 'outlined', color: 'secondary' }, - style: makeOutlinedBtnStyles('secondary'), - }, - { - props: { variant: 'ternary' }, - style: { - width: '160px', - height: '48px', - padding: '8px', - fontSize: '0.875rem', - backgroundColor: 'transparent', - color: revampBaseTheme.palette.grayscale[600], - border: '1px solid', - borderColor: revampBaseTheme.palette.grayscale[400], - ':hover': { - borderColor: revampBaseTheme.palette.grayscale[500], - }, - '&.Mui-active': { - backgroundColor: revampBaseTheme.palette.grayscale[50], - }, - '&.Mui-disabled': { - border: '1px solid', - opacity: 0.4, - borderColor: revampBaseTheme.palette.grayscale[400], - color: revampBaseTheme.palette.grayscale[600], - }, - '& .MuiLoadingButton-loadingIndicator': { - color: revampBaseTheme.palette.grayscale[600], - }, - }, +function getTertiaryStyles(variant: 'primary' | 'grayscale', themePalette: Object): Object { + return { + backgroundColor: 'transparent', + color: themePalette[`${variant}_c500`], + ':hover': { + backgroundColor: themePalette.gray_c50, + color: themePalette[`${variant}_c600`], }, - { - props: { variant: 'contained', color: 'error' }, - style: { - backgroundColor: revampBaseTheme.palette.magenta[300], - color: revampBaseTheme.palette.common.white, - border: 0, - ':hover': { - backgroundColor: revampBaseTheme.palette.magenta[100], - }, - '&.Mui-active': { - backgroundColor: revampBaseTheme.palette.magenta[300], - }, - '&.Mui-disabled': { - backgroundColor: revampBaseTheme.palette.magenta[300], - color: revampBaseTheme.palette.common.white, - opacity: 0.4, - }, - '& .MuiLoadingButton-loadingIndicator': { - color: revampBaseTheme.palette.magenta[300], - }, - }, + ':active': { + backgroundColor: themePalette.gray_c100, + color: themePalette[`${variant}_c700`], }, - { - props: { variant: 'outlined', color: 'error' }, - style: { - backgroundColor: revampBaseTheme.palette.common.white, - color: revampBaseTheme.palette.magenta[500], - border: '2px solid', - borderColor: revampBaseTheme.palette.magenta[500], - ':hover': { - border: '2px solid', - color: revampBaseTheme.palette.magenta[400], - borderColor: revampBaseTheme.palette.magenta[400], - }, - ':active': { - borderColor: revampBaseTheme.palette.magenta[400], - }, - ':focus': { - borderColor: revampBaseTheme.palette.magenta[400], - }, - '&.Mui-disabled': { - border: '2px solid', - opacity: 0.4, - }, - '& .MuiLoadingButton-loadingIndicator': { - color: revampBaseTheme.palette.magenta[500], - }, - }, + ':focus': { + outline: '2px solid', + outlineColor: themePalette.sys_yellow_c500, }, - ], -}; - -export { ClassicButton, ModernButton, RevampButton }; + '&.Mui-disabled': { + border: '2px solid', + borderColor: themePalette[`${variant}_c200`], + color: themePalette[`${variant}_c200`], + cursor: 'not-allowed', + pointerEvents: 'unset', + }, + '& .MuiLoadingButton-loadingIndicator': { color: themePalette[`${variant}_c600`] }, + '& .MuiButton-startIcon svg': { fill: themePalette[`${variant}_c500`] }, + '& .MuiButton-startIcon svg path': { fill: themePalette[`${variant}_c500`] }, + }; +} diff --git a/packages/yoroi-extension/app/styles/overrides/Checkbox.js b/packages/yoroi-extension/app/styles/overrides/Checkbox.js index 6ceabccf7b..97dafe2e76 100644 --- a/packages/yoroi-extension/app/styles/overrides/Checkbox.js +++ b/packages/yoroi-extension/app/styles/overrides/Checkbox.js @@ -1,54 +1,19 @@ // @flow -import { lightTheme } from '../themes/revamp/light-theme-base'; -const ClassicCheckbox = { +const Checkbox: any = { styleOverrides: { - root: { - padding: 0, - marginRight: '18px', - color: 'var(--yoroi-comp-checkbox-background-active)', - '&.Mui-checked': { - color: 'var(--yoroi-comp-checkbox-background-active)', - }, - '&.Mui-disabled': { - color: 'var(--yoroi-comp-checkbox-border-disabled)', - }, - }, - }, -}; - -const ModernCheckbox = { - styleOverrides: { - root: { - padding: 0, - marginRight: '18px', - color: 'var(--yoroi-comp-checkbox-border)', - '&.Mui-checked': { - color: 'var(--yoroi-comp-checkbox-background-active)', - }, - '&.Mui-disabled': { - color: 'var(--yoroi-comp-checkbox-border-disabled)', - }, - }, - }, -}; - -const RevampCheckbox: any = { - styleOverrides: { - root: { + root: ({ theme }) => ({ padding: 0, marginRight: '18px', borderRadius: '2px', - color: 'primary.500', - '&.Mui-checked': { - color: 'primary.500', - }, + color: theme.palette.ds.gray_c800, + '&.Mui-checked': { color: theme.palette.ds.primary_c500 }, '&.Mui-disabled': { - color: lightTheme.palette.grayscale[400], - backgroundColor: lightTheme.palette.grayscale[400], + color: theme.palette.ds.gray_c400, + backgroundColor: theme.palette.ds.gray_c400, }, - }, + }), }, }; -export { ClassicCheckbox, ModernCheckbox, RevampCheckbox }; +export { Checkbox }; diff --git a/packages/yoroi-extension/app/styles/overrides/Chip.js b/packages/yoroi-extension/app/styles/overrides/Chip.js index 0038f727d2..aca24d2ea8 100644 --- a/packages/yoroi-extension/app/styles/overrides/Chip.js +++ b/packages/yoroi-extension/app/styles/overrides/Chip.js @@ -1,5 +1,6 @@ // @flow -const ClassicChip = { + +const ChipCommonProps = { styleOverrides: { root: { minWidth: '87px', @@ -15,89 +16,11 @@ const ClassicChip = { border: 'none', }, }, - variants: [ - { - props: { variant: 'pending' }, - style: { - background: 'var(--yoroi-palette-tx-status-pending-background)', - color: 'var(--yoroi-palette-tx-status-pending-text)', - }, - }, - { - props: { variant: 'high' }, - style: { - background: 'var(--yoroi-palette-tx-status-high-background)', - color: 'var(--yoroi-palette-tx-status-high-text)', - }, - }, - { - props: { variant: 'failed' }, - style: { - background: 'var(--yoroi-palette-tx-status-failed-background)', - color: 'var(--yoroi-palette-tx-status-failed-text)', - }, - }, - { - props: { variant: 'medium' }, - style: { - background: 'var(--yoroi-palette-tx-status-medium-background)', - color: 'var(--yoroi-palette-tx-status-medium-text)', - }, - }, - { - props: { variant: 'low' }, - style: { - background: 'var(--yoroi-palette-tx-status-low-background)', - color: 'var(--yoroi-palette-tx-status-low-text)', - }, - }, - { - props: { variant: 'autocomplete' }, - style: { - minWidth: 'auto', - borderRadius: '2px', - margin: '5px 3px 0 3px', - textTransform: 'lowercase', - padding: '3px 0 3px 6px', - background: '#daa49a', - height: '28px', - display: 'flex', - alignItems: 'center', - color: '#f9fafb', - fontSize: '0.9rem', - fontWeight: 300, - span: { - padding: 0, - marginLeft: '2px', - paddingRight: '10px', - }, - '& .MuiChip-deleteIcon': { - color: 'inherit', - }, - '&:hover': { - background: '#daa49a', - }, - }, - }, - ], + defaultProps: { readOnly: true }, }; -const ModernChip = { - styleOverrides: { - root: { - minWidth: '87px', - textAlign: 'center', - fontSize: '0.75rem', - lineHeight: '21px', - letterSpacing: '1px', - textTransform: 'uppercase', - borderRadius: '8px', - paddingTop: '3px', - height: '25px', - userSelect: 'none', - border: 'none', - }, - }, +export const Chip = { + ...ChipCommonProps, variants: [ { props: { variant: 'pending' }, @@ -142,30 +65,17 @@ const ModernChip = { textTransform: 'lowercase', margin: '5px 4px 0 4px', padding: '3px 0 4px 3px', - background: 'var(--yoroi-palette-gray-50)', + background: 'ds.gray_c50', height: '30px', display: 'flex', alignItems: 'center', fontSize: '0.875rem', - color: 'var(--yoroi-palette-gray-900)', + color: 'ds.gray_c900', letterSpacing: 0, - span: { - padding: 0, - paddingRight: '9px', - paddingLeft: '7px', - }, - '& .MuiChip-deleteIcon': { - color: 'inherit', - }, - '&:hover': { - background: 'var(--yoroi-palette-gray-50)', - }, + span: { padding: 0, paddingRight: '9px', paddingLeft: '7px' }, + '& .MuiChip-deleteIcon': { color: 'inherit' }, + '&:hover': { background: 'ds.gray_c50' }, }, }, ], - defaultProps: { - readOnly: true, - }, }; - -export { ClassicChip, ModernChip }; diff --git a/packages/yoroi-extension/app/styles/overrides/FormControl.js b/packages/yoroi-extension/app/styles/overrides/FormControl.js index f211175c24..68ad6ef07c 100644 --- a/packages/yoroi-extension/app/styles/overrides/FormControl.js +++ b/packages/yoroi-extension/app/styles/overrides/FormControl.js @@ -1,35 +1,19 @@ // @flow -const ClassicFormControl = { - styleOverrides: { - root: { - paddingBottom: '20px', - marginBottom: '10px', - }, - }, - defaultProps: { - variant: 'outlined', - fullWidth: true, - }, -}; -const ModernFormControl = { +const FormControl = { styleOverrides: { - root: { + root: ({ theme }: any): any => ({ paddingBottom: '20px', marginBottom: '10px', marginTop: '7px', '&:hover': { '& .MuiInputLabel-root': { - color: 'var(--yoroi-comp-input-text-focus)', - '&.Mui-disabled': { - color: 'var(--yoroi-comp-input-border-disabled)', - }, - '&.Mui-error': { - color: 'var(--yoroi-comp-input-error)', - }, + color: theme.palette.ds.gray_c900, + '&.Mui-disabled': { color: theme.palette.ds.gray_c200 }, + '&.Mui-error': { color: theme.palette.ds.sys_magenta_c500 }, }, }, - }, + }), }, defaultProps: { variant: 'outlined', @@ -37,4 +21,4 @@ const ModernFormControl = { }, }; -export { ClassicFormControl, ModernFormControl }; +export { FormControl }; diff --git a/packages/yoroi-extension/app/styles/overrides/FormHelperText.js b/packages/yoroi-extension/app/styles/overrides/FormHelperText.js index 3e13091604..e2d2801f3c 100644 --- a/packages/yoroi-extension/app/styles/overrides/FormHelperText.js +++ b/packages/yoroi-extension/app/styles/overrides/FormHelperText.js @@ -1,44 +1,14 @@ // @flow -const ClassicFormHelperText = { + +const FormHelperText = { styleOverrides: { - root: { - color: 'var(--yoroi-comp-input-helper-text)', - marginLeft: 0, - marginTop: 0, - fontWeight: 400, - position: 'absolute', - bottom: '-2px', - '&.Mui-disabled': { - color: 'var(--yoroi-comp-input-helper-text-disabled)', - }, - '&.Mui-error': { - color: 'var(--yoroi-comp-input-error)', - }, - }, - }, - defaultProps: { - variant: 'outlined', - }, -}; -const ModernFormHelperText = { - styleOverrides: { - root: { - color: 'var(--yoroi-comp-input-helper-text)', - marginTop: 0, - marginLeft: '14px', - fontWeight: 400, - position: 'absolute', - bottom: '-2px', - '&.Mui-disabled': { - color: 'var(--yoroi-comp-input-helper-text-disabled)', - }, - '&.Mui-error': { - color: 'var(--yoroi-comp-input-error)', - }, - }, - }, - defaultProps: { - variant: 'outlined', - }, + root: ({ theme }: any): any => ({ + color: theme.palette.ds.gray_c600, + fontSize: '0.75rem', + '&.Mui-disabled': { color: theme.palette.ds.gray_c200 }, + '&.Mui-error': { color: theme.palette.ds.sys_magenta_c500 }, + }), + }, + defaultProps: { variant: 'outlined' }, }; -export { ClassicFormHelperText, ModernFormHelperText }; +export { FormHelperText }; diff --git a/packages/yoroi-extension/app/styles/overrides/InputLabel.js b/packages/yoroi-extension/app/styles/overrides/InputLabel.js index 792f13b250..aad4dc4881 100644 --- a/packages/yoroi-extension/app/styles/overrides/InputLabel.js +++ b/packages/yoroi-extension/app/styles/overrides/InputLabel.js @@ -1,51 +1,17 @@ // @flow -const ClassicInputLabel = { - styleOverrides: { - root: { - color: 'var(--yoroi-comp-input-placeholder)', - position: 'relative', - top: 'unset', - transform: 'none', - marginBottom: '10px', - letterSpacing: '1.12px', - fontWeight: 500, - '&.Mui-focused': { - color: 'var(--yoroi-comp-input-text-focus)', - }, - '&.Mui-disabled': { - color: 'var(--yoroi-comp-input-placeholder-disabled)', - }, - '&.Mui-error': { - color: 'var(--yoroi-comp-input-error)', - }, - }, - }, - defaultProps: { - variant: 'outlined', - shrink: false, - }, -}; -const ModernInputLabel = { + +const InputLabel = { styleOverrides: { - root: { - color: 'var(--yoroi-comp-input-placeholder)', - '&::first-letter': { - textTransform: 'uppercase' - }, - '&.Mui-focused': { - color: 'var(--yoroi-comp-input-text-focus)', - }, - '&.Mui-disabled': { - color: 'var(--yoroi-comp-input-placeholder-disabled)', - }, - '&.Mui-error': { - color: 'var(--yoroi-comp-input-error)', - }, - }, - }, - defaultProps: { - variant: 'outlined', + root: ({ theme }: any): any => ({ + color: theme.palette.ds.gray_c900, + lineHeight: '24px', + '&::first-letter': { textTransform: 'uppercase' }, + '&.Mui-focused': { color: theme.palette.ds.gray_c900 }, + '&.Mui-disabled': { color: theme.palette.ds.gray_c200 }, + '&.Mui-error': { color: theme.palette.ds.sys_magenta_c500 }, + }), }, + defaultProps: { variant: 'outlined' }, }; -export { ClassicInputLabel, ModernInputLabel }; +export { InputLabel }; diff --git a/packages/yoroi-extension/app/styles/overrides/Menu.js b/packages/yoroi-extension/app/styles/overrides/Menu.js index 2096637801..2699ab248d 100644 --- a/packages/yoroi-extension/app/styles/overrides/Menu.js +++ b/packages/yoroi-extension/app/styles/overrides/Menu.js @@ -1,19 +1,6 @@ // @flow -const ClassicMenu = { - styleOverrides: { - root: { - '& .MuiMenu-paper': { - maxHeight: '500px', - borderRadius: 0, - }, - '& .MuiMenu-list': { - padding: 0, - boxShadow: '0 3px 7px 0 rgba(74,74,74,0.16)', - }, - }, - }, -}; -const ModernMenu = { + +const Menu = { styleOverrides: { root: { '& .MuiMenu-paper': { @@ -22,10 +9,8 @@ const ModernMenu = { boxShadow: '0 3px 7px 0 rgba(74,74,74,0.16)', marginTop: '4px', }, - '& .MuiMenu-list': { - padding: 0, - }, + '& .MuiMenu-list': { padding: 0 }, }, }, }; -export { ClassicMenu, ModernMenu }; +export { Menu }; diff --git a/packages/yoroi-extension/app/styles/overrides/MenuItem.js b/packages/yoroi-extension/app/styles/overrides/MenuItem.js index b1ae80259b..4962cfef38 100644 --- a/packages/yoroi-extension/app/styles/overrides/MenuItem.js +++ b/packages/yoroi-extension/app/styles/overrides/MenuItem.js @@ -1,55 +1,21 @@ // @flow -const ClassicMenuItem = { + +const MenuItem = { styleOverrides: { root: { padding: '14px 20px', - backgroundColor: 'var(--yoroi-comp-menu-item-background)', - height: 50, - color: 'var(--yoroi-comp-menu-item-text)', - '&:hover': { - background: 'var(--yoroi-comp-menu-item-background-highlighted)', - }, - '&.Mui-selected': { - background: 'var(--yoroi-comp-menu-item-background-highlighted)', - '&:hover': { - backgroundColor: 'var(--yoroi-comp-menu-item-background-highlighted)', - }, - '&::after': { - content: '""', - position: 'absolute', - borderColor: 'var(--yoroi-comp-menu-item-checkmark)', - borderStyle: 'solid', - borderWidth: '0 2px 2px 0', - height: '9px', - margin: '0 2px 3px auto', - transform: 'rotate(45deg)', - width: '5px', - right: '22px', - }, - }, - }, - }, -}; -const ModernMenuItem = { - styleOverrides: { - root: { - padding: '14px 20px', - backgroundColor: 'var(--yoroi-comp-menu-item-background)', + bgcolor: 'ds.gray_cmin', height: 45, - color: 'var(--yoroi-comp-menu-item-text)', - '&:hover': { - background: 'var(--yoroi-comp-menu-item-background-highlighted)', - }, + color: 'ds.gray_c900', + '&:hover': { background: 'ds.gray_c50' }, '&.Mui-selected': { - background: 'var(--yoroi-comp-menu-item-background-highlighted)', + background: 'ds.gray_c50', position: 'relative', - '&:hover': { - backgroundColor: 'var(--yoroi-comp-menu-item-background-highlighted)', - }, + '&:hover': { backgroundColor: 'ds.gray_c50' }, '&::after': { content: '""', position: 'absolute', - borderColor: 'var(--yoroi-comp-menu-item-checkmark)', + borderColor: 'ds.secondary_c300', borderStyle: 'solid', borderWidth: '0 2px 2px 0', height: '9px', @@ -62,4 +28,4 @@ const ModernMenuItem = { }, }, }; -export { ClassicMenuItem, ModernMenuItem }; +export { MenuItem }; diff --git a/packages/yoroi-extension/app/styles/overrides/OutlinedInput.js b/packages/yoroi-extension/app/styles/overrides/OutlinedInput.js index dd7fff2dd5..03f9aded23 100644 --- a/packages/yoroi-extension/app/styles/overrides/OutlinedInput.js +++ b/packages/yoroi-extension/app/styles/overrides/OutlinedInput.js @@ -1,89 +1,43 @@ // @flow -const ClassicOutlinedInput = { + +const OutlinedInput = { styleOverrides: { - root: { + root: ({ theme }: any): any => ({ paddingRight: '16px', + '&:hover .MuiOutlinedInput-notchedOutline': { borderColor: theme.palette.ds.gray_c900 }, '& .MuiOutlinedInput-notchedOutline': { - borderColor: 'var(--yoroi-comp-input-border)', - borderRadius: 0, - backgroundColor: 'var(--yoroi-comp-input-background)', - letterSpacing: 'initial', - }, - '&:hover .MuiOutlinedInput-notchedOutline': { - borderColor: 'var(--yoroi-comp-input-border-focus)', - }, - '&.Mui-focused .MuiOutlinedInput-notchedOutline': { - borderColor: 'var(--yoroi-comp-input-border-focus)', - }, - '&.Mui-disabled .MuiOutlinedInput-notchedOutline': { - borderColor: 'var(--yoroi-comp-input-border-disabled)', - backgroundColor: 'var(--yoroi-comp-input-background-disabled)', - color: 'var(--yoroi-comp-input-text-disabled)', - }, - '&.Mui-error .MuiOutlinedInput-notchedOutline': { - borderColor: 'var(--yoroi-comp-input-error)', - }, - '& .MuiOutlinedInput-input': { - height: '1.2em', - '&.Mui-disabled': { - color: 'var(--yoroi-comp-input-text-disabled)', - WebkitTextFillColor: 'var(--yoroi-comp-input-text-disabled)', - }, - }, - '& svg': { - color: 'var(--yoroi-comp-input-border)', - }, - '&.Mui-focused svg': { - color: 'var(--yoroi-comp-input-helper-text)', - }, - '&.Mui-disabled svg': { - color: 'var(--yoroi-comp-input-border-disabled)', - }, - }, - }, -}; -const ModernOutlinedInput = { - styleOverrides: { - root: { - paddingRight: '16px', - height: '56px', - '&:hover .MuiOutlinedInput-notchedOutline': { - borderColor: 'var(--yoroi-comp-input-border-focus)', - }, - '& .MuiOutlinedInput-notchedOutline': { - borderColor: 'var(--yoroi-comp-input-border)', + borderColor: theme.palette.ds.gray_c400, borderRadius: 8, - backgroundColor: 'var(--yoroi-comp-input-background)', + backgroundColor: 'transparent', letterSpacing: 'initial', }, '&.Mui-focused .MuiOutlinedInput-notchedOutline': { - borderColor: 'var(--yoroi-comp-input-border-focus)', - border: '2px solid', + borderColor: theme.palette.ds.gray_c900, + borderWidth: '2px', + }, + '&.Mui-focused.Mui-error .MuiOutlinedInput-notchedOutline': { + borderColor: theme.palette.ds.sys_magenta_c500, + borderWidth: '2px', }, '&.Mui-disabled .MuiOutlinedInput-notchedOutline': { - borderColor: 'var(--yoroi-comp-input-border-disabled)', - backgroundColor: 'var(--yoroi-comp-input-background-disabled)', - color: 'var(--yoroi-comp-input-text-disabled)', + borderColor: theme.palette.ds.gray_c200, + backgroundColor: 'transparent', + color: theme.palette.ds.gray_c200, }, '&.Mui-error .MuiOutlinedInput-notchedOutline': { - borderColor: 'var(--yoroi-comp-input-error)', + borderColor: theme.palette.ds.sys_magenta_c500, + borderWidth: '2px', }, '& .MuiOutlinedInput-input': { '&.Mui-disabled': { - color: 'var(--yoroi-comp-input-text-disabled)', - WebkitTextFillColor: 'var(--yoroi-comp-input-text-disabled)', + color: theme.palette.ds.gray_c200, + WebkitTextFillColor: theme.palette.ds.gray_c200, }, }, - '& svg': { - color: 'var(--yoroi-comp-input-border)', - }, - '&.Mui-focused svg': { - color: 'var(--yoroi-comp-input-helper-text)', - }, - '&.Mui-disabled svg': { - color: 'var(--yoroi-comp-input-border-disabled)', - }, - }, + '& svg': { color: theme.palette.ds.gray_c400 }, + '&.Mui-focused svg': { color: theme.palette.ds.gray_c600 }, + '&.Mui-disabled svg': { color: theme.palette.ds.gray_c200 }, + }), }, }; -export { ClassicOutlinedInput, ModernOutlinedInput }; +export { OutlinedInput }; diff --git a/packages/yoroi-extension/app/styles/overrides/Select.js b/packages/yoroi-extension/app/styles/overrides/Select.js index be248d5c21..6433330854 100644 --- a/packages/yoroi-extension/app/styles/overrides/Select.js +++ b/packages/yoroi-extension/app/styles/overrides/Select.js @@ -1,20 +1,9 @@ // @flow -const ClassicSelect = { - styleOverrides: { - icon: { - color: 'var(--yoroi-comp-menu-icon)', - right: '15px', - }, - }, - defaultProps: { - notched: false, - }, -}; -const ModernSelect = { +const Select = { styleOverrides: { icon: { - color: 'var(--yoroi-comp-menu-icon)', + color: 'ds.gray_c600', right: '15px', }, }, @@ -23,4 +12,4 @@ const ModernSelect = { }, }; -export { ClassicSelect, ModernSelect }; +export { Select }; diff --git a/packages/yoroi-extension/app/styles/overrides/TabPanel.js b/packages/yoroi-extension/app/styles/overrides/TabPanel.js index 68071bec39..5bb977ae40 100644 --- a/packages/yoroi-extension/app/styles/overrides/TabPanel.js +++ b/packages/yoroi-extension/app/styles/overrides/TabPanel.js @@ -1,23 +1,13 @@ // @flow -const ClassicTabPanel = { +const TabPanel = { styleOverrides: { root: { - background: 'white', + bgcolor: 'ds.gray_cmin', borderBottomLeftRadius: 8, borderBottomRightRadius: 8, boxShadow: 'inset 0 2px 12px 0 hsl(0 0% 0% / 6%)', }, }, }; -const ModernTabPanel = { - styleOverrides: { - root: { - background: 'white', - borderBottomLeftRadius: 8, - borderBottomRightRadius: 8, - boxShadow: 'inset 0 2px 12px 0 hsl(0 0% 0% / 6%)', - }, - }, -}; -export { ClassicTabPanel, ModernTabPanel }; +export { TabPanel }; diff --git a/packages/yoroi-extension/app/styles/overrides/Tabs.js b/packages/yoroi-extension/app/styles/overrides/Tabs.js index 41bac192ec..14e216d6e0 100644 --- a/packages/yoroi-extension/app/styles/overrides/Tabs.js +++ b/packages/yoroi-extension/app/styles/overrides/Tabs.js @@ -1,104 +1,40 @@ // @flow -const ClassicTabs = { +const Tabs = { styleOverrides: { - root: { - borderBottom: 'none', + // $FlowFixMe + root: ({ theme }) => ({ borderTopLeftRadius: 8, borderTopRightRadius: 8, boxShadow: '0 4px 6px 0 hsl(220deg 22% 89%), 0 1px 2px 0 hsl(220deg 22% 89% / 82%), 0 2px 4px 0 hsl(220deg 22% 89% / 74%)', '& .MuiTab-root': { - background: 'var(--yoroi-comp-tabs-background)', - color: 'var(--yoroi-comp-tabs-text)', + color: theme.palette.ds.gray_c600, fontSize: '1rem', - paddingRight: 24, - paddingLeft: 24, + lineHeight: '22px', + padding: '6px 24px', textTransform: 'capitalize', - ':hover': { - color: 'var(--yoroi-comp-tabs-text-active)', - }, + minHeight: 'unset', + ':hover': { color: theme.palette.ds.primary_c600 }, }, - '& .Mui-selected ': { - fontWeight: 500, - color: 'var(--yoroi-comp-tabs-text-active)', + '& .Mui-selected': { fontWeight: 500, color: theme.palette.ds.primary_c600 }, + '& .Mui-disabled': { color: theme.palette.ds.gray_c400 }, + '& .MuiTabs-indicator': { + backgroundColor: theme.palette.ds.primary_c600, + height: '3px', }, - '& .Mui-disabled': { - color: 'var(--yoroi-comp-tabs-text-disabled)', + '& .MuiTabs-flexContainer': { + height: 'fit-content', }, - }, - }, - defaultProps: { - indicatorColor: 'secondary', - textColor: 'secondary', - }, -}; - -const ModernTabs = { - styleOverrides: { - root: { - borderBottom: 'none', - borderTopLeftRadius: 8, - borderTopRightRadius: 8, - boxShadow: - '0 4px 6px 0 hsl(220deg 22% 89%), 0 1px 2px 0 hsl(220deg 22% 89% / 82%), 0 2px 4px 0 hsl(220deg 22% 89% / 74%)', - '& .MuiTab-root': { - background: 'var(--yoroi-comp-tabs-background)', - color: 'var(--yoroi-comp-tabs-text)', - fontSize: '1rem', - paddingRight: 24, - paddingLeft: 24, - textTransform: 'capitalize', - ':hover': { - color: 'var(--yoroi-comp-tabs-text-active)', - }, - }, - '& .Mui-selected ': { - fontWeight: 500, - color: 'var(--yoroi-comp-tabs-text-active)', - }, - '& .Mui-disabled': { - color: 'var(--yoroi-comp-tabs-text-disabled)', - }, - }, - }, - defaultProps: { - indicatorColor: 'secondary', - textColor: 'secondary', - }, -}; - -const RevampTabs = { - styleOverrides: { - root: { - borderBottom: 'none', - borderTopLeftRadius: 8, - borderTopRightRadius: 8, - boxShadow: - '0 4px 6px 0 hsl(220deg 22% 89%), 0 1px 2px 0 hsl(220deg 22% 89% / 82%), 0 2px 4px 0 hsl(220deg 22% 89% / 74%)', - '& .MuiTab-root': { - bgcolor: 'common.white', - color: 'gray.600', - fontSize: '1rem', - paddingRight: 24, - paddingLeft: 24, - textTransform: 'capitalize', - ':hover': { - color: 'primary.600', - }, - }, - '& .Mui-selected ': { - fontWeight: 500, - color: 'primary.600', - }, - '& .Mui-disabled': { - color: 'gray.400', + '& .MuiTabs-scroller': { + display: 'flex', + alignItems: 'flex-end', + justifyContent: 'flex-start', }, - }, + }), }, defaultProps: { - indicatorColor: 'primary', - textColor: 'primary', + textColor: 'ds.primary_c500', }, }; -export { ClassicTabs, ModernTabs, RevampTabs }; +export { Tabs }; diff --git a/packages/yoroi-extension/app/styles/overrides/TextField.js b/packages/yoroi-extension/app/styles/overrides/TextField.js index e42bf14614..57bca43ef5 100644 --- a/packages/yoroi-extension/app/styles/overrides/TextField.js +++ b/packages/yoroi-extension/app/styles/overrides/TextField.js @@ -1,5 +1,7 @@ // @flow +import { asImportant } from '../utils'; + /* It's important to understand that the text field is a simple abstraction on top of - FormControl @@ -7,17 +9,37 @@ - OutlinedInput - FormHelperText */ -const ClassicTextField = { +const TextField = { defaultProps: { variant: 'outlined', fullWidth: true, }, -}; -const ModernTextField = { - defaultProps: { - variant: 'outlined', - fullWidth: true, + styleOverrides: { + // $FlowFixMe + root: ({ theme }) => ({ + margin: '8px 0px', + '.MuiFormHelperText-root': { + fontSize: '0.75rem', + '&.Mui-error': { + color: theme.palette.ds.sys_magenta_c500, + }, + }, + '.MuiOutlinedInput-input.Mui-disabled': { + color: asImportant(theme.palette.ds.gray_cmax), + WebkitTextFillColor: asImportant(theme.palette.ds.gray_cmax), + }, + '.MuiOutlinedInput-root.Mui-disabled': { + backgroundColor: theme.palette.ds.gray_c50, + }, + '.MuiInputLabel-root.Mui-disabled': { + color: theme.palette.ds.gray_cmax, + backgroundColor: theme.palette.ds.gray_cmin, + }, + '& .MuiInputLabel-root': { + color: theme.palette.ds.gray_c600, + }, + }), }, }; -export { ClassicTextField, ModernTextField }; +export { TextField }; diff --git a/packages/yoroi-extension/app/styles/overrides/Tooltip.js b/packages/yoroi-extension/app/styles/overrides/Tooltip.js index bbe460b0d5..75080c7b6f 100644 --- a/packages/yoroi-extension/app/styles/overrides/Tooltip.js +++ b/packages/yoroi-extension/app/styles/overrides/Tooltip.js @@ -1,41 +1,18 @@ // @flow -const ClassicTooltip = { - styleOverrides: { - tooltip: { - color: 'var(--yoroi-comp-tooltip-text) ', - backgroundColor: 'var(--yoroi-comp-tooltip-background)', - borderRadius: 0, - fontSize: '0.75rem', - boxShadow: '0 1.5px 5px 0 rgba(0, 0, 0, 0.18)', - padding: '8px 12px', - }, - arrow: { - color: 'var(--yoroi-comp-tooltip-background)', - }, - }, - defaultProps: { - arrow: true, - placement: 'bottom', - }, -}; +// import { } from '../../themes/' -const ModernTooltip = { +const Tooltip = { styleOverrides: { - tooltip: { - color: 'var(--yoroi-comp-tooltip-text) ', - backgroundColor: 'var(--yoroi-comp-tooltip-background)', + tooltip: ({ theme }: any): any => ({ + color: theme.palette.ds.gray_cmin, + backgroundColor: theme.palette.ds.gray_c900, borderRadius: 8, fontSize: '0.75rem', boxShadow: '0 1.5px 5px 0 rgba(0, 0, 0, 0.18)', padding: '8px 14px', - }, - arrow: { - color: 'var(--yoroi-comp-tooltip-background)', - }, - }, - defaultProps: { - arrow: true, - placement: 'bottom', + }), + arrow: ({ theme }: any): any => ({ color: theme.palette.ds.gray_c900 }), }, + defaultProps: { arrow: true, placement: 'bottom' }, }; -export { ClassicTooltip, ModernTooltip }; +export { Tooltip }; diff --git a/packages/yoroi-extension/app/styles/overrides/legacy/Button.js b/packages/yoroi-extension/app/styles/overrides/legacy/Button.js new file mode 100644 index 0000000000..cbd525000b --- /dev/null +++ b/packages/yoroi-extension/app/styles/overrides/legacy/Button.js @@ -0,0 +1,429 @@ +// @flow +import { baseLightTheme } from '../../themes/light-theme-mui'; + +const ClassicButton: any = { + styleOverrides: { + root: { + fontSize: '0.875rem', + borderRadius: 0, + border: 0, + fontWeight: 500, + minHeight: 44, + minWidth: 230, + padding: '12px 20px', + textTransform: 'none', + }, + }, + defaultProps: { disableRipple: true }, + variants: [ + { + props: { variant: 'primary' }, + style: { + backgroundColor: 'var(--yoroi-comp-button-primary-background)', + color: 'var(--yoroi-comp-button-primary-text)', + ':hover': { + backgroundColor: 'var(--yoroi-comp-button-primary-background-hover)', + }, + '&.Mui-active': { + backgroundColor: 'var(--yoroi-comp-button-primary-background-active)', + }, + '&.Mui-disabled': { + opacity: 0.4, + color: 'var(--yoroi-comp-button-primary-text)', + }, + '& .MuiLoadingButton-loadingIndicator': { + color: 'var(--yoroi-comp-button-primary-text)', + }, + }, + }, + { + props: { variant: 'secondary' }, + style: { + backgroundColor: 'var(--yoroi-comp-button-flat-background)', + color: 'var(--yoroi-comp-button-flat-text)', + border: 0, + ':hover': { + backgroundColor: 'var(--yoroi-comp-button-flat-background-hover)', + }, + '&.Mui-active': { + backgroundColor: 'var(--yoroi-comp-button-flat-background-active)', + }, + '&.Mui-disabled': { + color: 'var(--yoroi-comp-button-flat-text)', + opacity: 0.4, + }, + '& .MuiLoadingButton-loadingIndicator': { + color: 'var(--yoroi-comp-button-flat-text)', + }, + }, + }, + { + props: { variant: 'danger' }, + style: { + backgroundColor: 'var(--yoroi-comp-button-danger-background)', + color: 'var(--yoroi-comp-button-danger-text)', + border: 0, + ':hover': { + backgroundColor: 'var(--yoroi-comp-button-danger-background-hover)', + }, + '&.Mui-active': { + backgroundColor: 'var(--yoroi-comp-button-danger-background-active)', + }, + '&.Mui-disabled': { + opacity: 0.4, + color: 'var(--yoroi-comp-button-danger-text)', + }, + '& .MuiLoadingButton-loadingIndicator': { + color: 'var(--yoroi-comp-button-danger-background)', + }, + }, + }, + ], +}; + +const ModernButton: any = { + styleOverrides: { + root: { + fontSize: '1rem', + borderRadius: 8, + fontWeight: 500, + fontFamily: 'Rubik', + minHeight: 52, + minWidth: 230, + lineHeight: '18px', + textTransform: 'uppercase', + padding: '16px', + height: 52, + }, + }, + defaultProps: { disableRipple: true }, + variants: [ + { + props: { variant: 'primary' }, + style: { + backgroundColor: 'var(--yoroi-comp-button-primary-background)', + color: 'var(--yoroi-comp-button-primary-text)', + ':hover': { + backgroundColor: 'var(--yoroi-comp-button-primary-background-hover)', + }, + '&.Mui-active': { + backgroundColor: 'var(--yoroi-comp-button-primary-background-active)', + }, + '&.Mui-disabled': { + opacity: 0.4, + color: 'var(--yoroi-comp-button-primary-text)', + }, + '& .MuiLoadingButton-loadingIndicator': { + color: 'var(--yoroi-comp-button-primary-text)', + }, + }, + }, + { + props: { variant: 'secondary-blue' }, + style: { + backgroundColor: 'var(--yoroi-comp-button-secondary-background)', + color: 'var(--yoroi-comp-button-primary-text)', + border: '2px solid', + borderColor: 'var(--yoroi-comp-button-primary-border)', + ':hover': { + color: 'var(--yoroi-comp-button-primary-text)', + borderColor: 'var(--yoroi-comp-button-primary-border-hover)', + backgroundColor: 'var(--yoroi-comp-button-primary-background-hover)', + }, + '&.Mui-active': { + backgroundColor: 'var(--yoroi-comp-button-primary-background-active)', + }, + '&.Mui-disabled': { + border: '2px solid', + opacity: 0.4, + borderColor: 'var(--yoroi-comp-button-primary-border)', + color: 'var(--yoroi-comp-button-primary-text)', + }, + '& .MuiLoadingButton-loadingIndicator': { + color: 'var(--yoroi-comp-button-primary-text)', + }, + }, + }, + { + props: { variant: 'secondary' }, + style: { + backgroundColor: 'var(--yoroi-comp-button-secondary-background)', + color: 'var(--yoroi-comp-button-secondary-text)', + border: '2px solid', + borderColor: 'var(--yoroi-comp-button-secondary-border)', + ':hover': { + color: 'var(--yoroi-comp-button-secondary-text)', + borderColor: 'var(--yoroi-comp-button-secondary-border-hover)', + backgroundColor: 'var(--yoroi-comp-button-secondary-background-hover)', + }, + '&.Mui-active': { + backgroundColor: 'var(--yoroi-comp-button-secondary-background-active)', + }, + '&.Mui-disabled': { + border: '2px solid', + opacity: 0.4, + borderColor: 'var(--yoroi-comp-button-secondary-border)', + color: 'var(--yoroi-comp-button-secondary-text)', + }, + '& .MuiLoadingButton-loadingIndicator': { + color: 'var(--yoroi-comp-button-secondary-text)', + }, + }, + }, + { + props: { variant: 'ternary' }, + style: { + minWidth: '160px', + minHeight: '44px', + height: '44px', + fontSize: '0.875rem', + backgroundColor: 'transparent', + color: 'var(--yoroi-palette-gray-600)', + border: '1px solid', + borderColor: 'var(--yoroi-palette-gray-400)', + ':hover': { + borderColor: 'var(--yoroi-palette-gray-500)', + }, + '&.Mui-active': { + backgroundColor: 'var(--yoroi-palette-gray-50)', + }, + '&.Mui-disabled': { + border: '1px solid', + opacity: 0.4, + borderColor: 'var(--yoroi-palette-gray-400)', + color: 'var(--yoroi-palette-gray-600)', + }, + '& .MuiLoadingButton-loadingIndicator': { + color: 'var(--yoroi-palette-gray-600)', + }, + }, + }, + { + props: { variant: 'danger' }, + style: { + backgroundColor: 'var(--yoroi-comp-button-danger-background)', + color: 'var(--yoroi-comp-button-danger-text)', + border: 0, + ':hover': { + backgroundColor: 'var(--yoroi-comp-button-danger-background-hover)', + }, + '&.Mui-active': { + backgroundColor: 'var(--yoroi-comp-button-danger-background-active)', + }, + '&.Mui-disabled': { + color: 'var(--yoroi-comp-button-danger-text)', + opacity: 0.4, + }, + '& .MuiLoadingButton-loadingIndicator': { + color: 'var(--yoroi-comp-button-danger-background)', + }, + }, + }, + // Todo: this button `varient` should be part of the new revam design system + { + props: { variant: 'rv-primary' }, + style: { + minWidth: 'unset', + minHeight: 'unset', + width: 'unset', + height: 'unset', + // Todo: get the colors from the design system + backgroundColor: '#4B6DDE', + color: 'var(--yoroi-palette-common-white)', + border: 1, + ':hover': { + backgroundColor: '#3154CB', + }, + '&.Mui-active': { + backgroundColor: '#1737A3', + }, + '&.Mui-disabled': { + color: '#C4CFF5', + opacity: 0.4, + }, + '& .MuiLoadingButton-loadingIndicator': { + color: '#C4CFF5', + }, + }, + }, + ], +}; + +function makeContainedBtnStyles(color: 'primary' | 'secondary'): Object { + return { + backgroundColor: baseLightTheme.palette[color].main, + color: baseLightTheme.palette.static.white, + ':hover': { + backgroundColor: baseLightTheme.palette[color][600], + }, + ':active': { + backgroundColor: baseLightTheme.palette[color][700], + }, + ':focus': { + backgroundColor: baseLightTheme.palette[color][500], + }, + '&.Mui-disabled': { + color: baseLightTheme.palette.static.white, + backgroundColor: baseLightTheme.palette[color][200], + }, + '& .MuiLoadingButton-loadingIndicator': { + color: baseLightTheme.palette.static.white, + }, + }; +} + +function makeOutlinedBtnStyles(color: 'primary' | 'secondary'): Object { + return { + backgroundColor: 'transparent', + color: baseLightTheme.palette[color][500], + border: '2px solid', + borderColor: baseLightTheme.palette[color][500], + ':hover': { + border: '2px solid', + color: baseLightTheme.palette[color][600], + borderColor: baseLightTheme.palette[color][600], + }, + ':active': { + borderColor: baseLightTheme.palette[color][700], + }, + ':focus': { + borderColor: baseLightTheme.palette[color][500], + }, + '&.Mui-disabled': { + border: '2px solid', + borderColor: baseLightTheme.palette[color][200], + color: baseLightTheme.palette[color][200], + }, + '& .MuiLoadingButton-loadingIndicator': { + color: baseLightTheme.palette[color][600], + }, + }; +} + +// Button in Figam: https://bit.ly/3Ky4uvo +const RevampButton: any = { + styleOverrides: { + root: { + fontSize: '1rem', + borderRadius: 8, + fontWeight: 500, + fontFamily: 'Rubik', + lineHeight: '19px', + textTransform: 'uppercase', + padding: '16px', + '&.MuiButton-sizeLarge': { + height: '56px', + }, + '&.MuiButton-sizeMedium': { + padding: '10px', + height: '48px', + }, + '&.MuiButton-sizeSmall': { + padding: '7px', + height: '32px', + }, + boxShadow: 'none', + ':hover': { + boxShadow: 'none', + }, + }, + }, + defaultProps: { disableRipple: false }, + variants: [ + { + props: { variant: 'contained', color: 'primary' }, + style: makeContainedBtnStyles('primary'), + }, + { + props: { variant: 'contained', color: 'secondary' }, + style: makeContainedBtnStyles('secondary'), + }, + { + props: { variant: 'outlined', color: 'primary' }, + style: makeOutlinedBtnStyles('primary'), + }, + { + props: { variant: 'outlined', color: 'secondary' }, + style: makeOutlinedBtnStyles('secondary'), + }, + { + props: { variant: 'ternary' }, + style: { + width: '160px', + height: '48px', + padding: '8px', + fontSize: '0.875rem', + backgroundColor: 'transparent', + color: baseLightTheme.palette.grayscale[600], + border: '1px solid', + borderColor: baseLightTheme.palette.grayscale[400], + ':hover': { + borderColor: baseLightTheme.palette.grayscale[500], + }, + '&.Mui-active': { + backgroundColor: baseLightTheme.palette.grayscale[50], + }, + '&.Mui-disabled': { + border: '1px solid', + opacity: 0.4, + borderColor: baseLightTheme.palette.grayscale[400], + color: baseLightTheme.palette.grayscale[600], + }, + '& .MuiLoadingButton-loadingIndicator': { + color: baseLightTheme.palette.grayscale[600], + }, + }, + }, + { + props: { variant: 'contained', color: 'error' }, + style: { + backgroundColor: baseLightTheme.palette.system.magenta[300], + color: baseLightTheme.palette.static.white, + border: 0, + ':hover': { + backgroundColor: baseLightTheme.palette.system.magenta[100], + }, + '&.Mui-active': { + backgroundColor: baseLightTheme.palette.system.magenta[300], + }, + '&.Mui-disabled': { + backgroundColor: baseLightTheme.palette.system.magenta[300], + color: baseLightTheme.palette.static.white, + opacity: 0.4, + }, + '& .MuiLoadingButton-loadingIndicator': { + color: baseLightTheme.palette.system.magenta[300], + }, + }, + }, + { + props: { variant: 'outlined', color: 'error' }, + style: { + backgroundColor: baseLightTheme.palette.static.white, + color: baseLightTheme.palette.system.magenta[500], + border: '2px solid', + borderColor: baseLightTheme.palette.system.magenta[500], + ':hover': { + border: '2px solid', + color: baseLightTheme.palette.system.magenta[400], + borderColor: baseLightTheme.palette.system.magenta[400], + }, + ':active': { + borderColor: baseLightTheme.palette.system.magenta[400], + }, + ':focus': { + borderColor: baseLightTheme.palette.system.magenta[400], + }, + '&.Mui-disabled': { + border: '2px solid', + opacity: 0.4, + }, + '& .MuiLoadingButton-loadingIndicator': { + color: baseLightTheme.palette.system.magenta[500], + }, + }, + }, + ], +}; + +export { ClassicButton, ModernButton, RevampButton }; diff --git a/packages/yoroi-extension/app/styles/overrides/legacy/Checkbox.js b/packages/yoroi-extension/app/styles/overrides/legacy/Checkbox.js new file mode 100644 index 0000000000..ac9d803f8a --- /dev/null +++ b/packages/yoroi-extension/app/styles/overrides/legacy/Checkbox.js @@ -0,0 +1,54 @@ +// @flow +import { lightThemeBase } from '../../themes/light-theme-base'; + +const ClassicCheckbox = { + styleOverrides: { + root: { + padding: 0, + marginRight: '18px', + color: 'var(--yoroi-comp-checkbox-background-active)', + '&.Mui-checked': { + color: 'var(--yoroi-comp-checkbox-background-active)', + }, + '&.Mui-disabled': { + color: 'var(--yoroi-comp-checkbox-border-disabled)', + }, + }, + }, +}; + +const ModernCheckbox = { + styleOverrides: { + root: { + padding: 0, + marginRight: '18px', + color: 'var(--yoroi-comp-checkbox-border)', + '&.Mui-checked': { + color: 'var(--yoroi-comp-checkbox-background-active)', + }, + '&.Mui-disabled': { + color: 'var(--yoroi-comp-checkbox-border-disabled)', + }, + }, + }, +}; + +const RevampCheckbox: any = { + styleOverrides: { + root: { + padding: 0, + marginRight: '18px', + borderRadius: '2px', + color: 'ds.primary_c500', + '&.Mui-checked': { + color: 'ds.primary_c500', + }, + '&.Mui-disabled': { + color: lightThemeBase.palette.grayscale[400], + backgroundColor: lightThemeBase.palette.grayscale[400], + }, + }, + }, +}; + +export { ClassicCheckbox, ModernCheckbox, RevampCheckbox }; diff --git a/packages/yoroi-extension/app/styles/overrides/legacy/Chip.js b/packages/yoroi-extension/app/styles/overrides/legacy/Chip.js new file mode 100644 index 0000000000..0038f727d2 --- /dev/null +++ b/packages/yoroi-extension/app/styles/overrides/legacy/Chip.js @@ -0,0 +1,171 @@ +// @flow +const ClassicChip = { + styleOverrides: { + root: { + minWidth: '87px', + textAlign: 'center', + fontSize: '0.75rem', + lineHeight: '21px', + letterSpacing: '1px', + textTransform: 'uppercase', + borderRadius: '8px', + paddingTop: '3px', + height: '25px', + userSelect: 'none', + border: 'none', + }, + }, + variants: [ + { + props: { variant: 'pending' }, + style: { + background: 'var(--yoroi-palette-tx-status-pending-background)', + color: 'var(--yoroi-palette-tx-status-pending-text)', + }, + }, + { + props: { variant: 'high' }, + style: { + background: 'var(--yoroi-palette-tx-status-high-background)', + color: 'var(--yoroi-palette-tx-status-high-text)', + }, + }, + { + props: { variant: 'failed' }, + style: { + background: 'var(--yoroi-palette-tx-status-failed-background)', + color: 'var(--yoroi-palette-tx-status-failed-text)', + }, + }, + { + props: { variant: 'medium' }, + style: { + background: 'var(--yoroi-palette-tx-status-medium-background)', + color: 'var(--yoroi-palette-tx-status-medium-text)', + }, + }, + { + props: { variant: 'low' }, + style: { + background: 'var(--yoroi-palette-tx-status-low-background)', + color: 'var(--yoroi-palette-tx-status-low-text)', + }, + }, + { + props: { variant: 'autocomplete' }, + style: { + minWidth: 'auto', + borderRadius: '2px', + margin: '5px 3px 0 3px', + textTransform: 'lowercase', + padding: '3px 0 3px 6px', + background: '#daa49a', + height: '28px', + display: 'flex', + alignItems: 'center', + color: '#f9fafb', + fontSize: '0.9rem', + fontWeight: 300, + span: { + padding: 0, + marginLeft: '2px', + paddingRight: '10px', + }, + '& .MuiChip-deleteIcon': { + color: 'inherit', + }, + '&:hover': { + background: '#daa49a', + }, + }, + }, + ], +}; + +const ModernChip = { + styleOverrides: { + root: { + minWidth: '87px', + textAlign: 'center', + fontSize: '0.75rem', + lineHeight: '21px', + letterSpacing: '1px', + textTransform: 'uppercase', + borderRadius: '8px', + paddingTop: '3px', + height: '25px', + userSelect: 'none', + border: 'none', + }, + }, + variants: [ + { + props: { variant: 'pending' }, + style: { + background: 'var(--yoroi-palette-tx-status-pending-background)', + color: 'var(--yoroi-palette-tx-status-pending-text)', + }, + }, + { + props: { variant: 'high' }, + style: { + background: 'var(--yoroi-palette-tx-status-high-background)', + color: 'var(--yoroi-palette-tx-status-high-text)', + }, + }, + { + props: { variant: 'failed' }, + style: { + background: 'var(--yoroi-palette-tx-status-failed-background)', + color: 'var(--yoroi-palette-tx-status-failed-text)', + }, + }, + { + props: { variant: 'medium' }, + style: { + background: 'var(--yoroi-palette-tx-status-medium-background)', + color: 'var(--yoroi-palette-tx-status-medium-text)', + }, + }, + { + props: { variant: 'low' }, + style: { + background: 'var(--yoroi-palette-tx-status-low-background)', + color: 'var(--yoroi-palette-tx-status-low-text)', + }, + }, + { + props: { variant: 'autocomplete' }, + style: { + minWidth: 'auto', + borderRadius: '8px', + textTransform: 'lowercase', + margin: '5px 4px 0 4px', + padding: '3px 0 4px 3px', + background: 'var(--yoroi-palette-gray-50)', + height: '30px', + display: 'flex', + alignItems: 'center', + fontSize: '0.875rem', + color: 'var(--yoroi-palette-gray-900)', + letterSpacing: 0, + span: { + padding: 0, + paddingRight: '9px', + paddingLeft: '7px', + }, + '& .MuiChip-deleteIcon': { + color: 'inherit', + }, + '&:hover': { + background: 'var(--yoroi-palette-gray-50)', + }, + }, + }, + ], + defaultProps: { + readOnly: true, + }, +}; + +export { ClassicChip, ModernChip }; diff --git a/packages/yoroi-extension/app/styles/overrides/legacy/FormControl.js b/packages/yoroi-extension/app/styles/overrides/legacy/FormControl.js new file mode 100644 index 0000000000..f211175c24 --- /dev/null +++ b/packages/yoroi-extension/app/styles/overrides/legacy/FormControl.js @@ -0,0 +1,40 @@ +// @flow +const ClassicFormControl = { + styleOverrides: { + root: { + paddingBottom: '20px', + marginBottom: '10px', + }, + }, + defaultProps: { + variant: 'outlined', + fullWidth: true, + }, +}; + +const ModernFormControl = { + styleOverrides: { + root: { + paddingBottom: '20px', + marginBottom: '10px', + marginTop: '7px', + '&:hover': { + '& .MuiInputLabel-root': { + color: 'var(--yoroi-comp-input-text-focus)', + '&.Mui-disabled': { + color: 'var(--yoroi-comp-input-border-disabled)', + }, + '&.Mui-error': { + color: 'var(--yoroi-comp-input-error)', + }, + }, + }, + }, + }, + defaultProps: { + variant: 'outlined', + fullWidth: true, + }, +}; + +export { ClassicFormControl, ModernFormControl }; diff --git a/packages/yoroi-extension/app/styles/overrides/legacy/FormHelperText.js b/packages/yoroi-extension/app/styles/overrides/legacy/FormHelperText.js new file mode 100644 index 0000000000..3e13091604 --- /dev/null +++ b/packages/yoroi-extension/app/styles/overrides/legacy/FormHelperText.js @@ -0,0 +1,44 @@ +// @flow +const ClassicFormHelperText = { + styleOverrides: { + root: { + color: 'var(--yoroi-comp-input-helper-text)', + marginLeft: 0, + marginTop: 0, + fontWeight: 400, + position: 'absolute', + bottom: '-2px', + '&.Mui-disabled': { + color: 'var(--yoroi-comp-input-helper-text-disabled)', + }, + '&.Mui-error': { + color: 'var(--yoroi-comp-input-error)', + }, + }, + }, + defaultProps: { + variant: 'outlined', + }, +}; +const ModernFormHelperText = { + styleOverrides: { + root: { + color: 'var(--yoroi-comp-input-helper-text)', + marginTop: 0, + marginLeft: '14px', + fontWeight: 400, + position: 'absolute', + bottom: '-2px', + '&.Mui-disabled': { + color: 'var(--yoroi-comp-input-helper-text-disabled)', + }, + '&.Mui-error': { + color: 'var(--yoroi-comp-input-error)', + }, + }, + }, + defaultProps: { + variant: 'outlined', + }, +}; +export { ClassicFormHelperText, ModernFormHelperText }; diff --git a/packages/yoroi-extension/app/styles/overrides/legacy/InputLabel.js b/packages/yoroi-extension/app/styles/overrides/legacy/InputLabel.js new file mode 100644 index 0000000000..792f13b250 --- /dev/null +++ b/packages/yoroi-extension/app/styles/overrides/legacy/InputLabel.js @@ -0,0 +1,51 @@ +// @flow +const ClassicInputLabel = { + styleOverrides: { + root: { + color: 'var(--yoroi-comp-input-placeholder)', + position: 'relative', + top: 'unset', + transform: 'none', + marginBottom: '10px', + letterSpacing: '1.12px', + fontWeight: 500, + '&.Mui-focused': { + color: 'var(--yoroi-comp-input-text-focus)', + }, + '&.Mui-disabled': { + color: 'var(--yoroi-comp-input-placeholder-disabled)', + }, + '&.Mui-error': { + color: 'var(--yoroi-comp-input-error)', + }, + }, + }, + defaultProps: { + variant: 'outlined', + shrink: false, + }, +}; +const ModernInputLabel = { + styleOverrides: { + root: { + color: 'var(--yoroi-comp-input-placeholder)', + '&::first-letter': { + textTransform: 'uppercase' + }, + '&.Mui-focused': { + color: 'var(--yoroi-comp-input-text-focus)', + }, + '&.Mui-disabled': { + color: 'var(--yoroi-comp-input-placeholder-disabled)', + }, + '&.Mui-error': { + color: 'var(--yoroi-comp-input-error)', + }, + }, + }, + defaultProps: { + variant: 'outlined', + }, +}; + +export { ClassicInputLabel, ModernInputLabel }; diff --git a/packages/yoroi-extension/app/styles/overrides/legacy/Menu.js b/packages/yoroi-extension/app/styles/overrides/legacy/Menu.js new file mode 100644 index 0000000000..2096637801 --- /dev/null +++ b/packages/yoroi-extension/app/styles/overrides/legacy/Menu.js @@ -0,0 +1,31 @@ +// @flow +const ClassicMenu = { + styleOverrides: { + root: { + '& .MuiMenu-paper': { + maxHeight: '500px', + borderRadius: 0, + }, + '& .MuiMenu-list': { + padding: 0, + boxShadow: '0 3px 7px 0 rgba(74,74,74,0.16)', + }, + }, + }, +}; +const ModernMenu = { + styleOverrides: { + root: { + '& .MuiMenu-paper': { + maxHeight: '500px', + borderRadius: 6, + boxShadow: '0 3px 7px 0 rgba(74,74,74,0.16)', + marginTop: '4px', + }, + '& .MuiMenu-list': { + padding: 0, + }, + }, + }, +}; +export { ClassicMenu, ModernMenu }; diff --git a/packages/yoroi-extension/app/styles/overrides/legacy/MenuItem.js b/packages/yoroi-extension/app/styles/overrides/legacy/MenuItem.js new file mode 100644 index 0000000000..b1ae80259b --- /dev/null +++ b/packages/yoroi-extension/app/styles/overrides/legacy/MenuItem.js @@ -0,0 +1,65 @@ +// @flow +const ClassicMenuItem = { + styleOverrides: { + root: { + padding: '14px 20px', + backgroundColor: 'var(--yoroi-comp-menu-item-background)', + height: 50, + color: 'var(--yoroi-comp-menu-item-text)', + '&:hover': { + background: 'var(--yoroi-comp-menu-item-background-highlighted)', + }, + '&.Mui-selected': { + background: 'var(--yoroi-comp-menu-item-background-highlighted)', + '&:hover': { + backgroundColor: 'var(--yoroi-comp-menu-item-background-highlighted)', + }, + '&::after': { + content: '""', + position: 'absolute', + borderColor: 'var(--yoroi-comp-menu-item-checkmark)', + borderStyle: 'solid', + borderWidth: '0 2px 2px 0', + height: '9px', + margin: '0 2px 3px auto', + transform: 'rotate(45deg)', + width: '5px', + right: '22px', + }, + }, + }, + }, +}; +const ModernMenuItem = { + styleOverrides: { + root: { + padding: '14px 20px', + backgroundColor: 'var(--yoroi-comp-menu-item-background)', + height: 45, + color: 'var(--yoroi-comp-menu-item-text)', + '&:hover': { + background: 'var(--yoroi-comp-menu-item-background-highlighted)', + }, + '&.Mui-selected': { + background: 'var(--yoroi-comp-menu-item-background-highlighted)', + position: 'relative', + '&:hover': { + backgroundColor: 'var(--yoroi-comp-menu-item-background-highlighted)', + }, + '&::after': { + content: '""', + position: 'absolute', + borderColor: 'var(--yoroi-comp-menu-item-checkmark)', + borderStyle: 'solid', + borderWidth: '0 2px 2px 0', + height: '9px', + margin: '0 2px 3px auto', + transform: 'rotate(45deg)', + width: '5px', + right: '22px', + }, + }, + }, + }, +}; +export { ClassicMenuItem, ModernMenuItem }; diff --git a/packages/yoroi-extension/app/styles/overrides/legacy/OutlinedInput.js b/packages/yoroi-extension/app/styles/overrides/legacy/OutlinedInput.js new file mode 100644 index 0000000000..dd7fff2dd5 --- /dev/null +++ b/packages/yoroi-extension/app/styles/overrides/legacy/OutlinedInput.js @@ -0,0 +1,89 @@ +// @flow +const ClassicOutlinedInput = { + styleOverrides: { + root: { + paddingRight: '16px', + '& .MuiOutlinedInput-notchedOutline': { + borderColor: 'var(--yoroi-comp-input-border)', + borderRadius: 0, + backgroundColor: 'var(--yoroi-comp-input-background)', + letterSpacing: 'initial', + }, + '&:hover .MuiOutlinedInput-notchedOutline': { + borderColor: 'var(--yoroi-comp-input-border-focus)', + }, + '&.Mui-focused .MuiOutlinedInput-notchedOutline': { + borderColor: 'var(--yoroi-comp-input-border-focus)', + }, + '&.Mui-disabled .MuiOutlinedInput-notchedOutline': { + borderColor: 'var(--yoroi-comp-input-border-disabled)', + backgroundColor: 'var(--yoroi-comp-input-background-disabled)', + color: 'var(--yoroi-comp-input-text-disabled)', + }, + '&.Mui-error .MuiOutlinedInput-notchedOutline': { + borderColor: 'var(--yoroi-comp-input-error)', + }, + '& .MuiOutlinedInput-input': { + height: '1.2em', + '&.Mui-disabled': { + color: 'var(--yoroi-comp-input-text-disabled)', + WebkitTextFillColor: 'var(--yoroi-comp-input-text-disabled)', + }, + }, + '& svg': { + color: 'var(--yoroi-comp-input-border)', + }, + '&.Mui-focused svg': { + color: 'var(--yoroi-comp-input-helper-text)', + }, + '&.Mui-disabled svg': { + color: 'var(--yoroi-comp-input-border-disabled)', + }, + }, + }, +}; +const ModernOutlinedInput = { + styleOverrides: { + root: { + paddingRight: '16px', + height: '56px', + '&:hover .MuiOutlinedInput-notchedOutline': { + borderColor: 'var(--yoroi-comp-input-border-focus)', + }, + '& .MuiOutlinedInput-notchedOutline': { + borderColor: 'var(--yoroi-comp-input-border)', + borderRadius: 8, + backgroundColor: 'var(--yoroi-comp-input-background)', + letterSpacing: 'initial', + }, + '&.Mui-focused .MuiOutlinedInput-notchedOutline': { + borderColor: 'var(--yoroi-comp-input-border-focus)', + border: '2px solid', + }, + '&.Mui-disabled .MuiOutlinedInput-notchedOutline': { + borderColor: 'var(--yoroi-comp-input-border-disabled)', + backgroundColor: 'var(--yoroi-comp-input-background-disabled)', + color: 'var(--yoroi-comp-input-text-disabled)', + }, + '&.Mui-error .MuiOutlinedInput-notchedOutline': { + borderColor: 'var(--yoroi-comp-input-error)', + }, + '& .MuiOutlinedInput-input': { + '&.Mui-disabled': { + color: 'var(--yoroi-comp-input-text-disabled)', + WebkitTextFillColor: 'var(--yoroi-comp-input-text-disabled)', + }, + }, + '& svg': { + color: 'var(--yoroi-comp-input-border)', + }, + '&.Mui-focused svg': { + color: 'var(--yoroi-comp-input-helper-text)', + }, + '&.Mui-disabled svg': { + color: 'var(--yoroi-comp-input-border-disabled)', + }, + }, + }, +}; +export { ClassicOutlinedInput, ModernOutlinedInput }; diff --git a/packages/yoroi-extension/app/styles/overrides/legacy/Select.js b/packages/yoroi-extension/app/styles/overrides/legacy/Select.js new file mode 100644 index 0000000000..be248d5c21 --- /dev/null +++ b/packages/yoroi-extension/app/styles/overrides/legacy/Select.js @@ -0,0 +1,26 @@ +// @flow +const ClassicSelect = { + styleOverrides: { + icon: { + color: 'var(--yoroi-comp-menu-icon)', + right: '15px', + }, + }, + defaultProps: { + notched: false, + }, +}; + +const ModernSelect = { + styleOverrides: { + icon: { + color: 'var(--yoroi-comp-menu-icon)', + right: '15px', + }, + }, + defaultProps: { + notched: true, + }, +}; + +export { ClassicSelect, ModernSelect }; diff --git a/packages/yoroi-extension/app/styles/overrides/legacy/TabPanel.js b/packages/yoroi-extension/app/styles/overrides/legacy/TabPanel.js new file mode 100644 index 0000000000..68071bec39 --- /dev/null +++ b/packages/yoroi-extension/app/styles/overrides/legacy/TabPanel.js @@ -0,0 +1,23 @@ +// @flow + +const ClassicTabPanel = { + styleOverrides: { + root: { + background: 'white', + borderBottomLeftRadius: 8, + borderBottomRightRadius: 8, + boxShadow: 'inset 0 2px 12px 0 hsl(0 0% 0% / 6%)', + }, + }, +}; +const ModernTabPanel = { + styleOverrides: { + root: { + background: 'white', + borderBottomLeftRadius: 8, + borderBottomRightRadius: 8, + boxShadow: 'inset 0 2px 12px 0 hsl(0 0% 0% / 6%)', + }, + }, +}; +export { ClassicTabPanel, ModernTabPanel }; diff --git a/packages/yoroi-extension/app/styles/overrides/legacy/Tabs.js b/packages/yoroi-extension/app/styles/overrides/legacy/Tabs.js new file mode 100644 index 0000000000..3875ebd9dd --- /dev/null +++ b/packages/yoroi-extension/app/styles/overrides/legacy/Tabs.js @@ -0,0 +1,104 @@ +// @flow + +const ClassicTabs = { + styleOverrides: { + root: { + borderBottom: 'none', + borderTopLeftRadius: 8, + borderTopRightRadius: 8, + boxShadow: + '0 4px 6px 0 hsl(220deg 22% 89%), 0 1px 2px 0 hsl(220deg 22% 89% / 82%), 0 2px 4px 0 hsl(220deg 22% 89% / 74%)', + '& .MuiTab-root': { + background: 'var(--yoroi-comp-tabs-background)', + color: 'var(--yoroi-comp-tabs-text)', + fontSize: '1rem', + paddingRight: 24, + paddingLeft: 24, + textTransform: 'capitalize', + ':hover': { + color: 'var(--yoroi-comp-tabs-text-active)', + }, + }, + '& .Mui-selected ': { + fontWeight: 500, + color: 'var(--yoroi-comp-tabs-text-active)', + }, + '& .Mui-disabled': { + color: 'var(--yoroi-comp-tabs-text-disabled)', + }, + }, + }, + defaultProps: { + indicatorColor: 'secondary', + textColor: 'secondary', + }, +}; + +const ModernTabs = { + styleOverrides: { + root: { + borderBottom: 'none', + borderTopLeftRadius: 8, + borderTopRightRadius: 8, + boxShadow: + '0 4px 6px 0 hsl(220deg 22% 89%), 0 1px 2px 0 hsl(220deg 22% 89% / 82%), 0 2px 4px 0 hsl(220deg 22% 89% / 74%)', + '& .MuiTab-root': { + background: 'var(--yoroi-comp-tabs-background)', + color: 'var(--yoroi-comp-tabs-text)', + fontSize: '1rem', + paddingRight: 24, + paddingLeft: 24, + textTransform: 'capitalize', + ':hover': { + color: 'var(--yoroi-comp-tabs-text-active)', + }, + }, + '& .Mui-selected ': { + fontWeight: 500, + color: 'var(--yoroi-comp-tabs-text-active)', + }, + '& .Mui-disabled': { + color: 'var(--yoroi-comp-tabs-text-disabled)', + }, + }, + }, + defaultProps: { + indicatorColor: 'secondary', + textColor: 'secondary', + }, +}; + +const RevampTabs = { + styleOverrides: { + root: { + borderBottom: 'none', + borderTopLeftRadius: 8, + borderTopRightRadius: 8, + boxShadow: + '0 4px 6px 0 hsl(220deg 22% 89%), 0 1px 2px 0 hsl(220deg 22% 89% / 82%), 0 2px 4px 0 hsl(220deg 22% 89% / 74%)', + '& .MuiTab-root': { + bgcolor: 'ds.gray_cmin', + color: 'gray.600', + fontSize: '1rem', + paddingRight: 24, + paddingLeft: 24, + textTransform: 'capitalize', + ':hover': { + color: 'ds.primary_c600', + }, + }, + '& .Mui-selected ': { + fontWeight: 500, + color: 'ds.primary_c600', + }, + '& .Mui-disabled': { + color: 'gray.400', + }, + }, + }, + defaultProps: { + indicatorColor: 'primary', + textColor: 'primary', + }, +}; +export { ClassicTabs, ModernTabs, RevampTabs }; diff --git a/packages/yoroi-extension/app/styles/overrides/legacy/TextField.js b/packages/yoroi-extension/app/styles/overrides/legacy/TextField.js new file mode 100644 index 0000000000..e42bf14614 --- /dev/null +++ b/packages/yoroi-extension/app/styles/overrides/legacy/TextField.js @@ -0,0 +1,23 @@ +// @flow + +/* It's important to understand that the text field is a + simple abstraction on top of + - FormControl + - InputLabel + - OutlinedInput + - FormHelperText +*/ +const ClassicTextField = { + defaultProps: { + variant: 'outlined', + fullWidth: true, + }, +}; +const ModernTextField = { + defaultProps: { + variant: 'outlined', + fullWidth: true, + }, +}; + +export { ClassicTextField, ModernTextField }; diff --git a/packages/yoroi-extension/app/styles/overrides/legacy/Tooltip.js b/packages/yoroi-extension/app/styles/overrides/legacy/Tooltip.js new file mode 100644 index 0000000000..bbe460b0d5 --- /dev/null +++ b/packages/yoroi-extension/app/styles/overrides/legacy/Tooltip.js @@ -0,0 +1,41 @@ +// @flow +const ClassicTooltip = { + styleOverrides: { + tooltip: { + color: 'var(--yoroi-comp-tooltip-text) ', + backgroundColor: 'var(--yoroi-comp-tooltip-background)', + borderRadius: 0, + fontSize: '0.75rem', + boxShadow: '0 1.5px 5px 0 rgba(0, 0, 0, 0.18)', + padding: '8px 12px', + }, + arrow: { + color: 'var(--yoroi-comp-tooltip-background)', + }, + }, + defaultProps: { + arrow: true, + placement: 'bottom', + }, +}; + +const ModernTooltip = { + styleOverrides: { + tooltip: { + color: 'var(--yoroi-comp-tooltip-text) ', + backgroundColor: 'var(--yoroi-comp-tooltip-background)', + borderRadius: 8, + fontSize: '0.75rem', + boxShadow: '0 1.5px 5px 0 rgba(0, 0, 0, 0.18)', + padding: '8px 14px', + }, + arrow: { + color: 'var(--yoroi-comp-tooltip-background)', + }, + }, + defaultProps: { + arrow: true, + placement: 'bottom', + }, +}; +export { ClassicTooltip, ModernTooltip }; diff --git a/packages/yoroi-extension/app/styles/overrides/revamp/index.js b/packages/yoroi-extension/app/styles/overrides/legacy/index.js similarity index 100% rename from packages/yoroi-extension/app/styles/overrides/revamp/index.js rename to packages/yoroi-extension/app/styles/overrides/legacy/index.js diff --git a/packages/yoroi-extension/app/styles/overrides/revamp/Button.js b/packages/yoroi-extension/app/styles/overrides/revamp/Button.js deleted file mode 100644 index b4c14a7b6a..0000000000 --- a/packages/yoroi-extension/app/styles/overrides/revamp/Button.js +++ /dev/null @@ -1,210 +0,0 @@ -// @flow - -import { lightTheme } from '../../themes/revamp/light-theme-base'; -import { darkTheme } from '../../themes/revamp/dark-theme-base'; - -const RevampButtonCommonProps: Object = { - styleOverrides: { - root: { - fontSize: '1rem', - borderRadius: 8, - fontWeight: 500, - fontFamily: 'Rubik', - lineHeight: '19px', - textTransform: 'uppercase', - padding: '16px', - boxShadow: 'none', - '&.MuiButton-sizeLarge': { height: '56px' }, - '&.MuiButton-sizeMedium': { padding: '13px 24px' }, - '&.MuiButton-sizeSmall': { padding: '7px' }, - '&.MuiButton-sizeFlat': { padding: '13px 24px', height: 'unset' }, - '&:hover': { boxShadow: 'none' }, - '& span.MuiButton-startIcon': { - marginLeft: '0px', - marginRight: '6px', - }, - }, - }, - defaultProps: { disableRipple: false }, -}; - -// Button in Figam: https://bit.ly/3Ky4uvo -export const LightRevampButton: any = { - ...RevampButtonCommonProps, - variants: [ - { - props: { variant: 'primary' }, - style: ({ theme }) => getContainedStyles('primary', theme), - }, - { - props: { variant: 'secondary' }, - style: ({ theme }) => getOutlinedStyles('primary', theme), - }, - { - props: { variant: 'tertiary', color: 'primary' }, - style: getTertiaryStyles('primary', lightTheme), - }, - { - props: { variant: 'tertiary', color: 'secondary' }, - style: getTertiaryStyles('grayscale', lightTheme), - }, - { - props: { variant: 'destructive' }, - style: getContainedStyles('magenta', lightTheme), - }, - { - props: { variant: 'segmented' }, - style: { - minWidth: 'unset', - maxWidth: 'unset', - width: '40px', - height: '40px', - padding: '8px', - color: 'grayscale.200', - '&.MuiButton-sizeMedium': { padding: '8px', height: '40px' }, - ':hover': { - color: 'grayscale.50', - }, - '&.active': { - backgroundColor: lightTheme.palette.grayscale[200], - ':hover': { - backgroundColor: lightTheme.palette.grayscale[50], - }, - }, - }, - }, - ], -}; - -// Button in Figam: https://bit.ly/3Ky4uvo -export const DarkRevampButton: any = { - ...RevampButtonCommonProps, - variants: [ - { - props: { variant: 'primary' }, - style: getContainedStyles('primary', darkTheme), - }, - { - props: { variant: 'secondary' }, - style: getOutlinedStyles('primary', darkTheme), - }, - { - props: { variant: 'tertiary', color: 'primary' }, - style: getTertiaryStyles('primary', darkTheme), - }, - { - props: { variant: 'tertiary', color: 'secondary' }, - style: getTertiaryStyles('grayscale', darkTheme), - }, - { - props: { variant: 'destructive' }, - style: getContainedStyles('magenta', darkTheme), - }, - ], -}; - -function getContainedStyles(variant: 'primary' | 'secondary' | 'magenta', theme: Object): Object { - return { - backgroundColor: theme.palette[variant].main, - color: theme.palette.common.white, - ':hover': { - backgroundColor: theme.palette[variant][600], - }, - ':active': { - backgroundColor: theme.palette[variant][700], - }, - ':focus': { - backgroundColor: theme.palette[variant][500], - outline: '2px solid', - outlineColor: theme.palette.yellow[500], - }, - '&.Mui-disabled': { - color: theme.palette.common.white, - backgroundColor: theme.palette[variant][300], - cursor: 'not-allowed', - pointerEvents: 'unset', - }, - '& .MuiLoadingButton-loadingIndicator': { - color: theme.palette.common.white, - }, - '& .MuiButton-startIcon svg': { - fill: theme.palette.common.white, - }, - '& .MuiButton-startIcon svg path': { - fill: theme.palette.common.white, - }, - }; -} - -function getOutlinedStyles(variant: 'primary' | 'secondary', theme: Object): Object { - return { - backgroundColor: 'transparent', - color: theme.palette[variant][500], - border: '2px solid', - borderColor: theme.palette[variant][500], - ':hover': { - border: '2px solid', - color: theme.palette[variant][600], - borderColor: theme.palette[variant][600], - }, - ':active': { - borderColor: theme.palette[variant][700], - }, - ':focus': { - borderColor: theme.palette[variant][500], - outline: '2px solid', - outlineColor: theme.palette.yellow[500], - }, - '&.Mui-disabled': { - border: '2px solid', - borderColor: theme.palette[variant][200], - color: theme.palette[variant][200], - cursor: 'not-allowed', - pointerEvents: 'unset', - }, - '& .MuiLoadingButton-loadingIndicator': { - color: theme.palette[variant][600], - }, - '& .MuiButton-startIcon svg': { - fill: theme.palette[variant][500], - }, - '& .MuiButton-startIcon svg path': { - fill: theme.palette[variant][500], - }, - }; -} - -function getTertiaryStyles(variant: 'primary' | 'grayscale', theme: Object): Object { - return { - backgroundColor: 'transparent', - color: theme.palette[variant][500], - ':hover': { - backgroundColor: theme.palette.grayscale[50], - color: theme.palette[variant][600], - }, - ':active': { - backgroundColor: theme.palette.grayscale[100], - color: theme.palette[variant][700], - }, - ':focus': { - outline: '2px solid', - outlineColor: theme.palette.yellow[500], - }, - '&.Mui-disabled': { - border: '2px solid', - borderColor: theme.palette[variant][200], - color: theme.palette[variant][200], - cursor: 'not-allowed', - pointerEvents: 'unset', - }, - '& .MuiLoadingButton-loadingIndicator': { - color: theme.palette[variant][600], - }, - '& .MuiButton-startIcon svg': { - fill: theme.palette[variant][500], - }, - '& .MuiButton-startIcon svg path': { - fill: theme.palette[variant][500], - }, - }; -} diff --git a/packages/yoroi-extension/app/styles/overrides/revamp/Checkbox.js b/packages/yoroi-extension/app/styles/overrides/revamp/Checkbox.js deleted file mode 100644 index 5f72774113..0000000000 --- a/packages/yoroi-extension/app/styles/overrides/revamp/Checkbox.js +++ /dev/null @@ -1,19 +0,0 @@ -// @flow - -const RevampCheckbox: any = { - styleOverrides: { - root: ({ theme }) => ({ - padding: 0, - marginRight: '18px', - borderRadius: '2px', - color: theme.palette.grayscale[800], - '&.Mui-checked': { color: theme.palette.primary[500] }, - '&.Mui-disabled': { - color: theme.palette.grayscale[400], - backgroundColor: theme.palette.grayscale[400], - }, - }), - }, -}; - -export { RevampCheckbox }; diff --git a/packages/yoroi-extension/app/styles/overrides/revamp/Chip.js b/packages/yoroi-extension/app/styles/overrides/revamp/Chip.js deleted file mode 100644 index 1b597541ec..0000000000 --- a/packages/yoroi-extension/app/styles/overrides/revamp/Chip.js +++ /dev/null @@ -1,81 +0,0 @@ -// @flow - -const RevampChipCommonProps = { - styleOverrides: { - root: { - minWidth: '87px', - textAlign: 'center', - fontSize: '0.75rem', - lineHeight: '21px', - letterSpacing: '1px', - textTransform: 'uppercase', - borderRadius: '8px', - paddingTop: '3px', - height: '25px', - userSelect: 'none', - border: 'none', - }, - }, - defaultProps: { readOnly: true }, -}; - -export const RevampChip = { - ...RevampChipCommonProps, - variants: [ - { - props: { variant: 'pending' }, - style: { - background: 'var(--yoroi-palette-tx-status-pending-background)', - color: 'var(--yoroi-palette-tx-status-pending-text)', - }, - }, - { - props: { variant: 'high' }, - style: { - background: 'var(--yoroi-palette-tx-status-high-background)', - color: 'var(--yoroi-palette-tx-status-high-text)', - }, - }, - { - props: { variant: 'failed' }, - style: { - background: 'var(--yoroi-palette-tx-status-failed-background)', - color: 'var(--yoroi-palette-tx-status-failed-text)', - }, - }, - { - props: { variant: 'medium' }, - style: { - background: 'var(--yoroi-palette-tx-status-medium-background)', - color: 'var(--yoroi-palette-tx-status-medium-text)', - }, - }, - { - props: { variant: 'low' }, - style: { - background: 'var(--yoroi-palette-tx-status-low-background)', - color: 'var(--yoroi-palette-tx-status-low-text)', - }, - }, - { - props: { variant: 'autocomplete' }, - style: { - minWidth: 'auto', - borderRadius: '8px', - textTransform: 'lowercase', - margin: '5px 4px 0 4px', - padding: '3px 0 4px 3px', - background: 'grayscale.50', - height: '30px', - display: 'flex', - alignItems: 'center', - fontSize: '0.875rem', - color: 'grayscale.900', - letterSpacing: 0, - span: { padding: 0, paddingRight: '9px', paddingLeft: '7px' }, - '& .MuiChip-deleteIcon': { color: 'inherit' }, - '&:hover': { background: 'grayscale.50' }, - }, - }, - ], -}; diff --git a/packages/yoroi-extension/app/styles/overrides/revamp/FormControl.js b/packages/yoroi-extension/app/styles/overrides/revamp/FormControl.js deleted file mode 100644 index 3ddece309e..0000000000 --- a/packages/yoroi-extension/app/styles/overrides/revamp/FormControl.js +++ /dev/null @@ -1,24 +0,0 @@ -// @flow - -const RevampFormControl = { - styleOverrides: { - root: ({ theme }: any): any => ({ - paddingBottom: '20px', - marginBottom: '10px', - marginTop: '7px', - '&:hover': { - '& .MuiInputLabel-root': { - color: theme.palette.grayscale[900], - '&.Mui-disabled': { color: theme.palette.grayscale[200] }, - '&.Mui-error': { color: theme.palette.magenta[500] }, - }, - }, - }), - }, - defaultProps: { - variant: 'outlined', - fullWidth: true, - }, -}; - -export { RevampFormControl }; diff --git a/packages/yoroi-extension/app/styles/overrides/revamp/FormHelperText.js b/packages/yoroi-extension/app/styles/overrides/revamp/FormHelperText.js deleted file mode 100644 index c962eefb9c..0000000000 --- a/packages/yoroi-extension/app/styles/overrides/revamp/FormHelperText.js +++ /dev/null @@ -1,14 +0,0 @@ -// @flow - -const RevampFormHelperText = { - styleOverrides: { - root: ({ theme }: any): any => ({ - color: theme.palette.grayscale[600], - fontSize: '0.75rem', - '&.Mui-disabled': { color: theme.palette.grayscale[200] }, - '&.Mui-error': { color: theme.palette.magenta[500] }, - }), - }, - defaultProps: { variant: 'outlined' }, -}; -export { RevampFormHelperText }; diff --git a/packages/yoroi-extension/app/styles/overrides/revamp/InputLabel.js b/packages/yoroi-extension/app/styles/overrides/revamp/InputLabel.js deleted file mode 100644 index 09e2ef5192..0000000000 --- a/packages/yoroi-extension/app/styles/overrides/revamp/InputLabel.js +++ /dev/null @@ -1,17 +0,0 @@ -// @flow - -const RevampInputLabel = { - styleOverrides: { - root: ({ theme }: any): any => ({ - color: theme.palette.grayscale[900], - lineHeight: '24px', - '&::first-letter': { textTransform: 'uppercase' }, - '&.Mui-focused': { color: theme.palette.grayscale[900] }, - '&.Mui-disabled': { color: theme.palette.grayscale[200] }, - '&.Mui-error': { color: theme.palette.magenta[500] }, - }), - }, - defaultProps: { variant: 'outlined' }, -}; - -export { RevampInputLabel }; diff --git a/packages/yoroi-extension/app/styles/overrides/revamp/Menu.js b/packages/yoroi-extension/app/styles/overrides/revamp/Menu.js deleted file mode 100644 index 3e52b8887c..0000000000 --- a/packages/yoroi-extension/app/styles/overrides/revamp/Menu.js +++ /dev/null @@ -1,16 +0,0 @@ -// @flow - -const RevampMenu = { - styleOverrides: { - root: { - '& .MuiMenu-paper': { - maxHeight: '500px', - borderRadius: 6, - boxShadow: '0 3px 7px 0 rgba(74,74,74,0.16)', - marginTop: '4px', - }, - '& .MuiMenu-list': { padding: 0 }, - }, - }, -}; -export { RevampMenu }; diff --git a/packages/yoroi-extension/app/styles/overrides/revamp/MenuItem.js b/packages/yoroi-extension/app/styles/overrides/revamp/MenuItem.js deleted file mode 100644 index b0d9439c47..0000000000 --- a/packages/yoroi-extension/app/styles/overrides/revamp/MenuItem.js +++ /dev/null @@ -1,31 +0,0 @@ -// @flow - -const RevampMenuItem = { - styleOverrides: { - root: { - padding: '14px 20px', - bgcolor: 'common.white', - height: 45, - color: 'grayscale.900', - '&:hover': { background: 'grayscale.50' }, - '&.Mui-selected': { - background: 'grayscale.50', - position: 'relative', - '&:hover': { backgroundColor: 'grayscale.50' }, - '&::after': { - content: '""', - position: 'absolute', - borderColor: 'secondary.300', - borderStyle: 'solid', - borderWidth: '0 2px 2px 0', - height: '9px', - margin: '0 2px 3px auto', - transform: 'rotate(45deg)', - width: '5px', - right: '22px', - }, - }, - }, - }, -}; -export { RevampMenuItem }; diff --git a/packages/yoroi-extension/app/styles/overrides/revamp/OutlinedInput.js b/packages/yoroi-extension/app/styles/overrides/revamp/OutlinedInput.js deleted file mode 100644 index 34f4702fde..0000000000 --- a/packages/yoroi-extension/app/styles/overrides/revamp/OutlinedInput.js +++ /dev/null @@ -1,43 +0,0 @@ -// @flow - -const RevampOutlinedInput = { - styleOverrides: { - root: ({ theme }: any): any => ({ - paddingRight: '16px', - '&:hover .MuiOutlinedInput-notchedOutline': { borderColor: theme.palette.grayscale[900] }, - '& .MuiOutlinedInput-notchedOutline': { - borderColor: theme.palette.grayscale[400], - borderRadius: 8, - backgroundColor: 'transparent', - letterSpacing: 'initial', - }, - '&.Mui-focused .MuiOutlinedInput-notchedOutline': { - borderColor: theme.palette.grayscale[900], - borderWidth: '2px', - }, - '&.Mui-focused.Mui-error .MuiOutlinedInput-notchedOutline': { - borderColor: theme.palette.magenta[500], - borderWidth: '2px', - }, - '&.Mui-disabled .MuiOutlinedInput-notchedOutline': { - borderColor: theme.palette.grayscale[200], - backgroundColor: 'transparent', - color: theme.palette.grayscale[200], - }, - '&.Mui-error .MuiOutlinedInput-notchedOutline': { - borderColor: theme.palette.magenta[500], - borderWidth: '2px', - }, - '& .MuiOutlinedInput-input': { - '&.Mui-disabled': { - color: theme.palette.grayscale[200], - WebkitTextFillColor: theme.palette.grayscale[200], - }, - }, - '& svg': { color: theme.palette.grayscale[400] }, - '&.Mui-focused svg': { color: theme.palette.grayscale[600] }, - '&.Mui-disabled svg': { color: theme.palette.grayscale[200] }, - }), - }, -}; -export { RevampOutlinedInput }; diff --git a/packages/yoroi-extension/app/styles/overrides/revamp/Select.js b/packages/yoroi-extension/app/styles/overrides/revamp/Select.js deleted file mode 100644 index 41d7a27bef..0000000000 --- a/packages/yoroi-extension/app/styles/overrides/revamp/Select.js +++ /dev/null @@ -1,15 +0,0 @@ -// @flow - -const RevampSelect = { - styleOverrides: { - icon: { - color: 'grayscale.600', - right: '15px', - }, - }, - defaultProps: { - notched: true, - }, -}; - -export { RevampSelect }; diff --git a/packages/yoroi-extension/app/styles/overrides/revamp/TabPanel.js b/packages/yoroi-extension/app/styles/overrides/revamp/TabPanel.js deleted file mode 100644 index f0fe6ab401..0000000000 --- a/packages/yoroi-extension/app/styles/overrides/revamp/TabPanel.js +++ /dev/null @@ -1,13 +0,0 @@ -// @flow - -const RevampTabPanel = { - styleOverrides: { - root: { - bgcolor: 'common.white', - borderBottomLeftRadius: 8, - borderBottomRightRadius: 8, - boxShadow: 'inset 0 2px 12px 0 hsl(0 0% 0% / 6%)', - }, - }, -}; -export { RevampTabPanel }; diff --git a/packages/yoroi-extension/app/styles/overrides/revamp/Tabs.js b/packages/yoroi-extension/app/styles/overrides/revamp/Tabs.js deleted file mode 100644 index 9d7161dc2c..0000000000 --- a/packages/yoroi-extension/app/styles/overrides/revamp/Tabs.js +++ /dev/null @@ -1,40 +0,0 @@ -// @flow - -const RevampTabs = { - styleOverrides: { - // $FlowFixMe - root: ({ theme }) => ({ - borderTopLeftRadius: 8, - borderTopRightRadius: 8, - boxShadow: - '0 4px 6px 0 hsl(220deg 22% 89%), 0 1px 2px 0 hsl(220deg 22% 89% / 82%), 0 2px 4px 0 hsl(220deg 22% 89% / 74%)', - '& .MuiTab-root': { - color: theme.palette.grayscale[600], - fontSize: '1rem', - lineHeight: '22px', - padding: '6px 24px', - textTransform: 'capitalize', - minHeight: 'unset', - ':hover': { color: theme.palette.primary[600] }, - }, - '& .Mui-selected': { fontWeight: 500, color: theme.palette.primary[600] }, - '& .Mui-disabled': { color: theme.palette.grayscale[400] }, - '& .MuiTabs-indicator': { - backgroundColor: theme.palette.primary[600], - height: '3px', - }, - '& .MuiTabs-flexContainer': { - height: 'fit-content', - }, - '& .MuiTabs-scroller': { - display: 'flex', - alignItems: 'flex-end', - justifyContent: 'flex-start', - }, - }), - }, - defaultProps: { - textColor: 'primary.main', - }, -}; -export { RevampTabs }; diff --git a/packages/yoroi-extension/app/styles/overrides/revamp/TextField.js b/packages/yoroi-extension/app/styles/overrides/revamp/TextField.js deleted file mode 100644 index 837f42146c..0000000000 --- a/packages/yoroi-extension/app/styles/overrides/revamp/TextField.js +++ /dev/null @@ -1,45 +0,0 @@ -// @flow - -import { asImportant } from '../../utils'; - -/* It's important to understand that the text field is a - simple abstraction on top of - - FormControl - - InputLabel - - OutlinedInput - - FormHelperText -*/ -const RevampTextField = { - defaultProps: { - variant: 'outlined', - fullWidth: true, - }, - styleOverrides: { - // $FlowFixMe - root: ({ theme }) => ({ - margin: '8px 0px', - '.MuiFormHelperText-root': { - fontSize: '0.75rem', - '&.Mui-error': { - color: theme.palette.magenta[500], - }, - }, - '.MuiOutlinedInput-input.Mui-disabled': { - color: asImportant(theme.palette.common.black), - WebkitTextFillColor: asImportant(theme.palette.common.black), - }, - '.MuiOutlinedInput-root.Mui-disabled': { - backgroundColor: theme.palette.grayscale[50], - }, - '.MuiInputLabel-root.Mui-disabled': { - color: theme.palette.common.black, - backgroundColor: theme.palette.common.white, - }, - '& .MuiInputLabel-root': { - color: theme.palette.grayscale[600], - }, - }), - }, -}; - -export { RevampTextField }; diff --git a/packages/yoroi-extension/app/styles/overrides/revamp/Tooltip.js b/packages/yoroi-extension/app/styles/overrides/revamp/Tooltip.js deleted file mode 100644 index 9131863509..0000000000 --- a/packages/yoroi-extension/app/styles/overrides/revamp/Tooltip.js +++ /dev/null @@ -1,18 +0,0 @@ -// @flow -// import { } from '../../themes/' - -const RevampTooltip = { - styleOverrides: { - tooltip: ({ theme }: any): any => ({ - color: theme.palette.common.white, - backgroundColor: theme.palette.grayscale[900], - borderRadius: 8, - fontSize: '0.75rem', - boxShadow: '0 1.5px 5px 0 rgba(0, 0, 0, 0.18)', - padding: '8px 14px', - }), - arrow: ({ theme }: any): any => ({ color: theme.palette.grayscale[900] }), - }, - defaultProps: { arrow: true, placement: 'bottom' }, -}; -export { RevampTooltip }; diff --git a/packages/yoroi-extension/app/styles/themes.js b/packages/yoroi-extension/app/styles/themes.js index a3cdceb7cc..e7977fdd3e 100644 --- a/packages/yoroi-extension/app/styles/themes.js +++ b/packages/yoroi-extension/app/styles/themes.js @@ -2,23 +2,22 @@ import { createTheme } from '@mui/material/styles'; import { deepmerge } from '@mui/utils'; -import { revampBaseTheme as revampBaseThemeLight } from './themes/revamp/light-theme-mui'; -import { classicTheme } from './themes/classic-theme'; -import { modernTheme } from './themes/modern-theme'; +import { baseLightTheme } from './themes/light-theme-mui'; +import { classicTheme } from './themes/legacy/classic-theme'; +import { modernTheme } from './themes/legacy/modern-theme'; export const THEMES = Object.freeze({ YOROI_CLASSIC: 'YoroiClassic', YOROI_MODERN: 'YoroiModern', - YOROI_REVAMP: 'YoroiRevamp', + YOROI_BASE: 'YoroiBase', }); export type Theme = $Values; // Old way -export const revampTheme: Object = - createTheme(deepmerge({ name: 'revamp' }, revampBaseThemeLight)); +export const baseTheme: Object = createTheme(deepmerge({ name: 'base' }, baseLightTheme)); export const MuiThemes: {| [Theme]: Object |} = Object.freeze({ [THEMES.YOROI_CLASSIC]: classicTheme, [THEMES.YOROI_MODERN]: modernTheme, - [THEMES.YOROI_REVAMP]: revampTheme, + [THEMES.YOROI_BASE]: baseTheme, }); // Refer: https://github.com/Emurgo/yoroi-frontend/pull/497 @@ -33,4 +32,4 @@ export function changeToplevelTheme(currentTheme: Theme) { bodyClassList.remove('YoroiShelley'); bodyClassList.add(currentTheme); } -} \ No newline at end of file +} diff --git a/packages/yoroi-extension/app/styles/themes/base-palettes/dark-palette.js b/packages/yoroi-extension/app/styles/themes/base-palettes/dark-palette.js new file mode 100644 index 0000000000..f0da8da5f7 --- /dev/null +++ b/packages/yoroi-extension/app/styles/themes/base-palettes/dark-palette.js @@ -0,0 +1,62 @@ +import { tokens } from '../tokens/tokens'; + +const { opacity } = tokens; + +export const darkPalette = { + primary_c900: '#E4E8F7', + primary_c800: '#C4CFF5', + primary_c700: '#A0B3F2', + primary_c600: '#7892E8', + primary_c500: '#4B6DDE', + primary_c400: '#2E4BB0', + primary_c300: '#304489', + primary_c200: '#142049', + primary_c100: '#171B28', + + secondary_c900: '#E4F7F3', + secondary_c800: '#C6F7ED', + secondary_c700: '#93F5E1', + secondary_c600: '#66F2D6', + secondary_c500: '#16E3BA', + secondary_c400: '#08C29D', + secondary_c300: '#0B997D', + secondary_c200: '#12705D', + secondary_c100: '#17453C', + + gray_cmax: '#FFFFFF', + gray_c900: '#E1E6F5', + gray_c800: '#BCC5E0', + gray_c700: '#9BA4C2', + gray_c600: '#7C85A3', + gray_c500: '#656C85', + gray_c400: '#4B5266', + gray_c300: '#3E4457', + gray_c200: '#262A38', + gray_c100: '#1F232E', + gray_c50: '#15171F', + gray_cmin: '#0B0B0F', + + black_static: '#000000', + white_static: '#FFFFFF', + + sys_magenta_c700: '#FF6B92', + sys_magenta_c600: '#FD3468', + sys_magenta_c500: '#FF7196', + sys_magenta_c300: '#572835', + sys_magenta_c100: '#2F171D', + + sys_cyan_c500: '#59B1F4', + sys_cyan_c100: '#112333', + + sys_yellow_c500: '#ECBA09', + sys_yellow_c100: '#31290E', + + sys_orange_c500: '#FAB357', + sys_orange_c100: '#291802', + + bg_gradient_1: + 'linear-gradient(195.39deg, rgba(26, 227, 187, 0.26) 0.57%, rgba(75, 109, 222, 0.1) 41.65%, rgba(75, 109, 222, 0.16) 100%)', + bg_gradient_2: + 'linear-gradient(205.51deg, rgba(11, 153, 125, 0.49) -10.43%, rgba(8, 194, 157, 0.08) 100%)', + bg_gradient_3: 'linear-gradient(30.09deg, #244ABF 0%, #4760FF 176.73%)', +}; diff --git a/packages/yoroi-extension/app/styles/themes/base-palettes/light-palette.js b/packages/yoroi-extension/app/styles/themes/base-palettes/light-palette.js new file mode 100644 index 0000000000..665db5944a --- /dev/null +++ b/packages/yoroi-extension/app/styles/themes/base-palettes/light-palette.js @@ -0,0 +1,56 @@ +export const lightPalette = { + primary_c900: '#121F4D', + primary_c800: '#122770', + primary_c700: '#1737A3', + primary_c600: '#3154CB', + primary_c500: '#4B6DDE', + primary_c400: '#7892E8', + primary_c300: '#A0B3F2', + primary_c200: '#C4CFF5', + primary_c100: '#E4E8F7', + + secondary_c900: '#17453C', + secondary_c800: '#12705D', + secondary_c700: '#0B997D', + secondary_c600: '#08C29D', + secondary_c500: '#16E3BA', + secondary_c400: '#66F2D6', + secondary_c300: '#93F5E1', + secondary_c200: '#C6F7ED', + secondary_c100: '#E4F7F3', + + gray_cmax: '#000000', + gray_c900: '#242838', + gray_c800: '#383E54', + gray_c700: '#4A5065', + gray_c600: '#6B7384', + gray_c500: '#8A92A3', + gray_c400: '#A7AFC0', + gray_c300: '#C4CAD7', + gray_c200: '#DCE0E9', + gray_c100: '#EAEDF2', + gray_c50: '#F0F3F5', + gray_cmin: '#FFFFFF', + + black_static: '#000000', + white_static: '#FFFFFF', + + sys_magenta_c700: '#CF053A', + sys_magenta_c600: '#E80742', + sys_magenta_c500: '#FF1351', + sys_magenta_c300: '#FBCBD7', + sys_magenta_c100: '#FFF1F5', + + sys_cyan_c500: '#59B1F4', + sys_cyan_c100: '#E8F4FF', + + sys_yellow_c500: '#ECBA09', + sys_yellow_c100: '#FDF7E2', + + sys_orange_c500: '#ED8600', + sys_orange_c100: '#FFF2E2', + + bg_gradient_1: 'linear-gradient(312.19deg, #C6F7ED 0%, #E4E8F7 100%)', + bg_gradient_2: 'linear-gradient(180deg, #93F5E1 0%, #C6F7ED 100%)', + bg_gradient_3: 'linear-gradient(30.09deg, #244ABF 0%, #4760FF 176.73%)', +}; diff --git a/packages/yoroi-extension/app/styles/themes/common-theme.js b/packages/yoroi-extension/app/styles/themes/common-theme.js index 599e563c58..674543922f 100644 --- a/packages/yoroi-extension/app/styles/themes/common-theme.js +++ b/packages/yoroi-extension/app/styles/themes/common-theme.js @@ -1,61 +1,114 @@ -// @flow -import { createTheme } from '@mui/material/styles'; +//@flow +import { RubikFonts, RobotoMonoFonts } from '../fonts'; -/* Common settings for colors, typography, shapes */ -export const commonTheme: Object = createTheme({ - palette: { - error: { - main: '#FF1351', - '50': '#FFF3F5', - '100': '#FF1351', - '200': '#CD0E41', - }, - warning: { - main: '#f6a823', - }, - cyan: { - '50': '#F2F9FF', - '100': '#59B1F4', - }, - gray: { - min: '#ffffff', - '50': '#F0F3F5', - '100': '#EAEDF2', - '200': '#DCE0E9', - '300': '#C4CAD7', - '400': '#A7AFC0', - '500': '#8A92A3', - '600': '#6B7384', - '700': '#4A5065', - '800': '#383E54', - '900': '#242838', - max: '#000000', - }, - background: { - overlay: '#060d23cc', // dialogs, - }, - txStatus: { - pending: { - background: '#F0F3F5', - text: '#ADAEB6', - stripes: 'rgba(217, 221, 224, 0.6)', - }, - high: { - background: '#c9ede5', - text: '#17cfa7', - }, - failed: { - background: '#ff145380', - text: '#e6003d', - }, - medium: { - background: '#f5a5244d', - text: '#f5a524', - }, - low: { - background: '#ff145326', - text: '#FA5F88', - }, +const fontFamily = ['Rubik', 'sans-serif'].join(','); + +export const commonTheme: Object = { + components: { + MuiCssBaseline: { + styleOverrides: ` + ${RubikFonts} + ${RobotoMonoFonts} + `, + }, + }, + /** + * Note: all typography tokens are named based on the regular + * variant`{token}-{num}-regular` (e.g. `heading-1-regular, body-1-regular`). + * To create the "medium" vairant, you can overwrite the font-weight to be + * "fontWeight: 500". + */ + typography: { + htmlFontSize: 14, + fontSize: 14, + fontFamily, + // DS name: heading-1-regular + h1: { + fontWeight: 400, + fontSize: '1.875rem', // 30px + lineHeight: '38px', + fontFamily, + }, + // DS name: heading-2-regular + h2: { + fontSize: '1.75rem', // 28px + lineHeight: '32px', + fontWeight: 400, + fontFamily, + }, + // DS name: heading-3-regular + h3: { + fontSize: '1.5rem', // 24px + lineHeight: '32px', + fontWeight: 400, + fontFamily, + }, + // DS name: heading-4-regular + h4: { + fontSize: '1.25rem', // 20px + lineHeight: '28px', + fontWeight: 400, + fontFamily, + }, + // DS name: heading-5-regular + h5: { + fontSize: '1.125rem', // 18px + lineHeight: '26px', + fontWeight: 400, + fontFamily, + }, + // DS name: button-1 + button: { + fontSize: '1rem', // 16px + fontWeight: 500, + lineHeight: '22px', + letterSpacing: '0.5px', + textTransform: 'uppercase', + fontFamily, + }, + // DS name: button-2 + button2: { + fontSize: '0.875rem', // 14px + fontWeight: 500, + lineHeight: '22px', + letterSpacing: '0.5px', + textTransform: 'uppercase', + fontFamily, + }, + // DS name: body-1-regular + body1: { + fontSize: '1rem', // 16px + lineHeight: '24px', + fontWeight: 400, + fontFamily, + }, + // DS name: body-2-regular + body2: { + fontSize: '0.875rem', // 14px + lineHeight: '22px', + fontWeight: 400, + fontFamily, + }, + overline: { + fontWeight: 400, + fontSize: '0.875rem', // 14px + lineHeight: '22px', + textTransform: 'uppercase', + fontFamily, + }, + // DS name: caption-1-regular + caption1: { + fontSize: '0.75rem', // 12px + lineHeight: '16px', + fontWeight: 400, + fontFamily, + }, + // DS name: caption-2-regular + caption2: { + fontSize: '0.625rem', // 10px + lineHeight: '14px', + fontWeight: 400, + fontFamily, }, }, -}); +}; diff --git a/packages/yoroi-extension/app/styles/themes/dark-theme-base.js b/packages/yoroi-extension/app/styles/themes/dark-theme-base.js new file mode 100644 index 0000000000..a7bf306136 --- /dev/null +++ b/packages/yoroi-extension/app/styles/themes/dark-theme-base.js @@ -0,0 +1,130 @@ +// @flow +import { alpha } from '@mui/material/styles'; +import { dark } from './themed-palettes/dark'; + +const primary = { + main: '#4B6DDE', + '900': '#E4E8F7', + '800': '#C4CFF5', + '700': '#A0B3F2', + '600': '#7892E8', + '500': '#4B6DDE', + '400': '#2E4BB0', + '300': '#304489', + '200': '#242D4F', + '100': '#1F253B', +}; + +const secondary = { + main: '#16E3BA', + '100': '#17453C', + '200': '#12705D', + '300': '#0B997D', + '400': '#08C29D', + '500': '#16E3BA', + '600': '#66F2D6', + '700': '#93F5E1', + '800': '#C6F7ED', + '900': '#E4F7F3', +}; + +const grayscale = { + main: '#656C85', + min: '#0B0B0F', + '50': '#15171F', + '100': '#1F232E', + '200': '#262A38', + '300': '#3E4457', + '400': '#4B5266', + '500': '#656C85', + '600': '#7C85A3', + '700': '#9BA4C2', + '800': '#BCC5E0', + '900': '#E1E6F5', + max: '#FFFFFF', +}; + +const staticColors = { white: '#FFFFFF', black: '#000000' }; + +const cyan = { '500': '#59B1F4', '100': '#112333' }; +const yellow = { '500': '#ECBA09', '100': '#31290E' }; +const orange = { '500': '#FAB357', '100': '#291802' }; +const magenta = { + main: '#FF7196', + '700': '#9B1F40', + '600': '#CF335B', + '500': '#FF7196', + '300': '#64303E', + '100': '#3B252A', +}; + +const system = { magenta, cyan, yellow, orange }; + +export const darkThemeBase = { + name: 'dark-theme', + palette: { + mode: 'dark', + /* `main` is added since MUI required it but we don't use it at all */ + ds: { + ...dark, + }, + primary, + secondary, + grayscale, + static: staticColors, + system, + gradients: { + bg_gradient_1: + 'linear-gradient(195.39deg, rgba(26, 227, 187, 0.26) 0.57%, rgba(75, 109, 222, 0.1) 41.65%, rgba(75, 109, 222, 0.16) 100%)', + bg_gradient_2: + 'linear-gradient(205.51deg, rgba(11, 153, 125, 0.49) -10.43%, rgba(8, 194, 157, 0.08) 100%)', + bg_gradient_3: 'linear-gradient(30.09deg, #244ABF 0%, #4760FF 176.73%)', + }, + background: { bg_color_low: dark.gray_cmin, bg_color_medium: grayscale['100'] }, + uitext: { + primary: { + high: primary['700'], + normal: primary['600'], + low: primary['300'], + }, + on_primary: staticColors.white, + gray: { + max: dark.gray_cmax, + normal: grayscale['900'], + medium: grayscale['600'], + low: grayscale['400'], + }, + error: system.magenta['500'], + warning: system.orange['500'], + success: secondary['500'], + info: system.cyan['500'], + }, + ui: { + primary: { + high: primary['700'], + normal: primary['600'], + low: primary['300'], + }, + gray: { + high: dark.gray_cmax, + normal: grayscale['900'], + medium: grayscale['600'], + low: grayscale['400'], + }, + secondary: { + medium: secondary['400'], + }, + static: { + white: staticColors.white, + }, + }, + special: { + overlay: alpha(grayscale['100'], 0.8), + bg_sidebar_item: alpha(staticColors.black, 0.16), + el_sidebar_item: alpha(staticColors.white, 0.48), + }, + }, + shape: { + borderRadius: 8, + }, +}; diff --git a/packages/yoroi-extension/app/styles/themes/dark-theme-mui.js b/packages/yoroi-extension/app/styles/themes/dark-theme-mui.js new file mode 100644 index 0000000000..c3000d01d4 --- /dev/null +++ b/packages/yoroi-extension/app/styles/themes/dark-theme-mui.js @@ -0,0 +1,44 @@ +// @flow +import { createTheme } from '@mui/material/styles'; +import { commonTheme } from './common-theme'; +import { deepmerge } from '@mui/utils'; +import { darkThemeBase } from './dark-theme-base'; +import { + DarkButton, + Checkbox, + TextField, + OutlinedInput, + FormHelperText, + FormControl, + Menu, + MenuItem, + Tabs, + TabPanel, + Chip, + Tooltip, + InputLabel, + Select, +} from '../overrides'; + +const darkThemeComponents = { + components: { + MuiButton: DarkButton, + MuiCheckbox: Checkbox, + MuiTextField: TextField, + MuiOutlinedInput: OutlinedInput, + MuiFormHelperText: FormHelperText, + MuiFormControl: FormControl, + MuiSelect: Select, + MuiInputLabel: InputLabel, + MuiMenu: Menu, + MuiMenuItem: MenuItem, + MuiTabs: Tabs, + MuiTabPanel: TabPanel, + MuiChip: Chip, + MuiTooltip: Tooltip, + }, +}; + +export const baseDarkTheme: Object = createTheme( + deepmerge(commonTheme, deepmerge(darkThemeBase, darkThemeComponents)) +); diff --git a/packages/yoroi-extension/app/styles/themes/classic-theme.js b/packages/yoroi-extension/app/styles/themes/legacy/classic-theme.js similarity index 96% rename from packages/yoroi-extension/app/styles/themes/classic-theme.js rename to packages/yoroi-extension/app/styles/themes/legacy/classic-theme.js index e86b1f1ca2..cef4c9a84d 100644 --- a/packages/yoroi-extension/app/styles/themes/classic-theme.js +++ b/packages/yoroi-extension/app/styles/themes/legacy/classic-theme.js @@ -1,6 +1,6 @@ // @flow import { createTheme } from '@mui/material/styles'; -import { SFUIDisplayFonts, RobotoMonoFonts } from '../fonts'; +import { SFUIDisplayFonts, RobotoMonoFonts } from '../../fonts'; import { ClassicButton, ClassicCheckbox, @@ -16,7 +16,7 @@ import { ClassicChip, ClassicTooltip, ClassicSelect, -} from '../overrides'; +} from '../../overrides/legacy'; import { commonTheme } from './common-theme'; import { deepmerge } from '@mui/utils'; diff --git a/packages/yoroi-extension/app/styles/themes/legacy/common-theme.js b/packages/yoroi-extension/app/styles/themes/legacy/common-theme.js new file mode 100644 index 0000000000..599e563c58 --- /dev/null +++ b/packages/yoroi-extension/app/styles/themes/legacy/common-theme.js @@ -0,0 +1,61 @@ +// @flow +import { createTheme } from '@mui/material/styles'; + +/* Common settings for colors, typography, shapes */ +export const commonTheme: Object = createTheme({ + palette: { + error: { + main: '#FF1351', + '50': '#FFF3F5', + '100': '#FF1351', + '200': '#CD0E41', + }, + warning: { + main: '#f6a823', + }, + cyan: { + '50': '#F2F9FF', + '100': '#59B1F4', + }, + gray: { + min: '#ffffff', + '50': '#F0F3F5', + '100': '#EAEDF2', + '200': '#DCE0E9', + '300': '#C4CAD7', + '400': '#A7AFC0', + '500': '#8A92A3', + '600': '#6B7384', + '700': '#4A5065', + '800': '#383E54', + '900': '#242838', + max: '#000000', + }, + background: { + overlay: '#060d23cc', // dialogs, + }, + txStatus: { + pending: { + background: '#F0F3F5', + text: '#ADAEB6', + stripes: 'rgba(217, 221, 224, 0.6)', + }, + high: { + background: '#c9ede5', + text: '#17cfa7', + }, + failed: { + background: '#ff145380', + text: '#e6003d', + }, + medium: { + background: '#f5a5244d', + text: '#f5a524', + }, + low: { + background: '#ff145326', + text: '#FA5F88', + }, + }, + }, +}); diff --git a/packages/yoroi-extension/app/styles/themes/modern-theme.js b/packages/yoroi-extension/app/styles/themes/legacy/modern-theme.js similarity index 96% rename from packages/yoroi-extension/app/styles/themes/modern-theme.js rename to packages/yoroi-extension/app/styles/themes/legacy/modern-theme.js index ac98ea0a8c..72992058c2 100644 --- a/packages/yoroi-extension/app/styles/themes/modern-theme.js +++ b/packages/yoroi-extension/app/styles/themes/legacy/modern-theme.js @@ -1,6 +1,6 @@ // @flow import { createTheme } from '@mui/material/styles'; -import { RubikFonts, RobotoMonoFonts } from '../fonts'; +import { RubikFonts, RobotoMonoFonts } from '../../fonts'; import { ModernButton, ModernCheckbox, @@ -16,7 +16,7 @@ import { ModernTooltip, ModernInputLabel, ModernSelect, -} from '../overrides'; +} from '../../overrides/legacy'; import { commonTheme } from './common-theme'; import { deepmerge } from '@mui/utils'; diff --git a/packages/yoroi-extension/app/styles/themes/light-theme-base.js b/packages/yoroi-extension/app/styles/themes/light-theme-base.js new file mode 100644 index 0000000000..99906c0554 --- /dev/null +++ b/packages/yoroi-extension/app/styles/themes/light-theme-base.js @@ -0,0 +1,159 @@ +// @flow +import { alpha } from '@mui/material/styles'; +import { light } from './themed-palettes/light'; + +const grayscale = { + main: '#8A92A3', + max: '#000000', + '900': '#242838', + '800': '#383E54', + '700': '#4A5065', + '600': '#6B7384', + '500': '#8A92A3', + '400': '#A7AFC0', + '300': '#C4CAD7', + '200': '#DCE0E9', + '100': '#EAEDF2', + '50': '#F0F3F5', + min: '#FFFFFF', // legacy prop +}; + +const primary = { + main: '#4B6DDE', + '900': '#121F4D', + '800': '#122770', + '700': '#1737A3', + '600': '#3154CB', + '500': '#4B6DDE', + '400': '#7892E8', + '300': '#A0B3F2', + '200': '#C4CFF5', + '100': '#E4E8F7', + contrastText: '#FFF', // legacy prop +}; + +const secondary = { + main: '#16E3BA', + '900': '#17453C', + '800': '#12705D', + '700': '#0B997D', + '600': '#08C29D', + '500': '#16E3BA', + '400': '#66F2D6', + '300': '#93F5E1', + '200': '#C6F7ED', + '100': '#E4F7F3', + contrastText: '#FFF', // legacy prop +}; + +const staticColors = { white: '#FFFFFF', black: '#000000' }; + +const cyan = { '500': '#59B1F4', '100': '#E8F4FF' }; +const yellow = { '500': '#ECBA09', '100': '#FDF7E2' }; +const orange = { '500': '#ED8600', '100': '#FFF2E2' }; +const magenta = { + main: '#FF1351', + '700': '#CF053A', + '600': '#E80742', + '500': '#FF1351', + '300': '#FBCBD7', + '100': '#FFF1F5', +}; + +const system = { magenta, cyan, yellow, orange }; + +export const lightThemeBase = { + name: 'light-theme', + palette: { + mode: 'light', + /* `main` is added since MUI required it but we don't use it at all */ + ds: { + ...light, + }, + primary, + secondary, + grayscale, + static: staticColors, + system, + // start legacy props + magenta, + cyan, + yellow, + common: { black: '#000000', white: '#FFFFFF', magenta, cyan, yellow }, + // end legacy props + gradients: { + bg_gradient_1: 'linear-gradient(312.19deg, #C6F7ED 0%, #E4E8F7 100%)', + bg_gradient_2: 'linear-gradient(180deg, #93F5E1 0%, #C6F7ED 100%)', + bg_gradient_3: 'linear-gradient(30.09deg, #244ABF 0%, #4760FF 176.73%)', + // legacy ones + 'blue-green-bg': 'linear-gradient(180deg, #E4E8F7 0%, #C6F7F7 100%)', + 'blue-green-banner': 'linear-gradient(269.97deg, #E4E8F7 0%, #C6F7ED 100%)', + green: 'linear-gradient(180deg, #93F5E1 0%, #C6F7ED 100%)', + blue: 'linear-gradient(30.09deg, #244ABF 0%, #4760FF 176.73%)', + }, + background: { + bg_color_low: light.gray_cmin, + bg_color_medium: grayscale['100'], + // legacy ones + card: '#fff', + sidebar: '#4760FF', + banner: { + warning: '#f5a623', + }, + walletAdd: { + title: '#ffffff', + subtitle: '#ffffff', + }, + gradients: { + walletEmptyCard: 'linear-gradient(180deg, #93F5E1 0%, #C6F7ED 100%)', + supportedAddressDomainsBanner: 'linear-gradient(260deg, #E4E8F7 0%, #C6F7ED 100%)', + primary: 'linear-gradient(269.97deg, #E4E8F7 0%, #C6F7ED 100%)', + }, + }, + uitext: { + primary: { + high: primary['600'], + normal: primary['500'], + low: primary['300'], + }, + on_primary: staticColors.white, + gray: { + max: light.gray_cmax, + normal: grayscale['900'], + medium: grayscale['600'], + low: grayscale['400'], + }, + error: system.magenta['500'], + warning: system.orange['500'], + success: secondary['500'], + info: system.cyan['500'], + }, + ui: { + primary: { + high: primary['600'], + normal: primary['500'], + low: primary['300'], + }, + gray: { + high: light.gray_cmax, + normal: grayscale['900'], + medium: grayscale['600'], + low: grayscale['400'], + }, + secondary: { + medium: secondary['400'], + }, + static: { + white: staticColors.white, + }, + }, + special: { + overlay: alpha(staticColors.black, 0.7), + bg_sidebar_item: alpha(staticColors.black, 0.16), + el_sidebar_item: alpha(staticColors.white, 0.48), + }, + }, + shape: { + borderRadius: 8, + }, +}; diff --git a/packages/yoroi-extension/app/styles/themes/light-theme-mui.js b/packages/yoroi-extension/app/styles/themes/light-theme-mui.js new file mode 100644 index 0000000000..16dca89166 --- /dev/null +++ b/packages/yoroi-extension/app/styles/themes/light-theme-mui.js @@ -0,0 +1,44 @@ +// @flow +import { createTheme } from '@mui/material/styles'; +import { commonTheme } from './common-theme'; +import { deepmerge } from '@mui/utils'; +import { lightThemeBase } from './light-theme-base'; +import { + LightButton, + Checkbox, + TextField, + OutlinedInput, + FormHelperText, + FormControl, + Menu, + MenuItem, + Tabs, + TabPanel, + Chip, + Tooltip, + InputLabel, + Select, +} from '../overrides'; + +const lightThemeComponents = { + components: { + MuiButton: LightButton, + MuiCheckbox: Checkbox, + MuiTextField: TextField, + MuiOutlinedInput: OutlinedInput, + MuiFormHelperText: FormHelperText, + MuiFormControl: FormControl, + MuiSelect: Select, + MuiInputLabel: InputLabel, + MuiMenu: Menu, + MuiMenuItem: MenuItem, + MuiTabs: Tabs, + MuiTabPanel: TabPanel, + MuiChip: Chip, + MuiTooltip: Tooltip, + }, +}; + +export const baseLightTheme: Object = createTheme( + deepmerge(commonTheme, deepmerge(lightThemeBase, lightThemeComponents)) +); diff --git a/packages/yoroi-extension/app/styles/themes/revamp/common-theme.js b/packages/yoroi-extension/app/styles/themes/revamp/common-theme.js deleted file mode 100644 index 91ad37acbe..0000000000 --- a/packages/yoroi-extension/app/styles/themes/revamp/common-theme.js +++ /dev/null @@ -1,114 +0,0 @@ -//@flow -import { RubikFonts, RobotoMonoFonts } from '../../fonts'; - -const fontFamily = ['Rubik', 'sans-serif'].join(','); - -export const commonRevampTheme: Object = { - components: { - MuiCssBaseline: { - styleOverrides: ` - ${RubikFonts} - ${RobotoMonoFonts} - `, - }, - }, - /** - * Note: all typography tokens are named based on the regular - * variant`{token}-{num}-regular` (e.g. `heading-1-regular, body-1-regular`). - * To create the "medium" vairant, you can overwrite the font-weight to be - * "fontWeight: 500". - */ - typography: { - htmlFontSize: 14, - fontSize: 14, - fontFamily, - // DS name: heading-1-regular - h1: { - fontWeight: 400, - fontSize: '1.875rem', // 30px - lineHeight: '38px', - fontFamily, - }, - // DS name: heading-2-regular - h2: { - fontSize: '1.75rem', // 28px - lineHeight: '32px', - fontWeight: 400, - fontFamily, - }, - // DS name: heading-3-regular - h3: { - fontSize: '1.5rem', // 24px - lineHeight: '32px', - fontWeight: 400, - fontFamily, - }, - // DS name: heading-4-regular - h4: { - fontSize: '1.25rem', // 20px - lineHeight: '28px', - fontWeight: 400, - fontFamily, - }, - // DS name: heading-5-regular - h5: { - fontSize: '1.125rem', // 18px - lineHeight: '26px', - fontWeight: 400, - fontFamily, - }, - // DS name: button-1 - button: { - fontSize: '1rem', // 16px - fontWeight: 500, - lineHeight: '22px', - letterSpacing: '0.5px', - textTransform: 'uppercase', - fontFamily, - }, - // DS name: button-2 - button2: { - fontSize: '0.875rem', // 14px - fontWeight: 500, - lineHeight: '22px', - letterSpacing: '0.5px', - textTransform: 'uppercase', - fontFamily, - }, - // DS name: body-1-regular - body1: { - fontSize: '1rem', // 16px - lineHeight: '24px', - fontWeight: 400, - fontFamily, - }, - // DS name: body-2-regular - body2: { - fontSize: '0.875rem', // 14px - lineHeight: '22px', - fontWeight: 400, - fontFamily, - }, - overline: { - fontWeight: 400, - fontSize: '0.875rem', // 14px - lineHeight: '22px', - textTransform: 'uppercase', - fontFamily, - }, - // DS name: caption-1-regular - caption1: { - fontSize: '0.75rem', // 12px - lineHeight: '16px', - fontWeight: 400, - fontFamily, - }, - // DS name: caption-2-regular - caption2: { - fontSize: '0.625rem', // 10px - lineHeight: '14px', - fontWeight: 400, - fontFamily, - }, - }, -}; diff --git a/packages/yoroi-extension/app/styles/themes/revamp/dark-theme-base.js b/packages/yoroi-extension/app/styles/themes/revamp/dark-theme-base.js deleted file mode 100644 index 989a5df0b6..0000000000 --- a/packages/yoroi-extension/app/styles/themes/revamp/dark-theme-base.js +++ /dev/null @@ -1,91 +0,0 @@ -//@flow - -const cyan = { '400': '#59B1F4', '100': '#F2F9FF' }; -const yellow = { '500': '#ECBA09', '100': '#FDF7E2' }; -const magenta = { - main: '#FF1351', - '700': '#CF053A', - '600': '#E80742', - '500': '#FF1351', - '300': '#FBCBD7', - '100': '#FFF1F5', -}; - -export const darkTheme = { - name: 'revamp-dark', - palette: { - mode: 'dark', - /* `main` is added since MUI required it but we don't use it at all */ - primary: { - main: '#17D1AA', - '900': '#17453C', - '800': '#12705D', - '700': '#0B997D', - '600': '#08C29D', - '500': '#17D1AA', - '400': '#66F2D6', - '300': '#93F5E1', - '200': '#C6F7ED', - '100': '#E4F7F3', - contrastText: '#FFF', - }, - secondary: { - main: '#4B6DDE', - '900': '#121F4D', - '800': '#122770', - '700': '#1737A3', - '600': '#3154CB', - '500': '#4B6DDE', - '400': '#7892E8', - '300': '#A0B3F2', - '200': '#C4CFF5', - '100': '#E4E8F7', - contrastText: '#FFF', - }, - grayscale: { - main: '#A7AFC0', - min: '#000000', - '50': '#242838', - '100': '#383E54', - '200': '#4A5065', - '300': '#6B7384', - '400': '#8A92A3', - '500': '#A7AFC0', - '600': '#C4CAD7', - '700': '#DCE0E9', - '800': '#EAEDF2', - '900': '#F0F3F5', - max: '#FFFFFF', - contrastText: '#000', - }, - magenta, - cyan, - yellow, - common: { black: '#FFF', white: '#000', magenta, cyan, yellow }, - gradients: { - 'blue-green-bg': 'linear-gradient(180deg, #E4E8F7 0%, #C6F7F7 100%)', - 'blue-green-banner': 'linear-gradient(269.97deg, #E4E8F7 0%, #C6F7ED 100%)', - green: 'linear-gradient(180deg, #93F5E1 0%, #C6F7ED 100%)', - blue: 'linear-gradient(30.09deg, #244ABF 0%, #4760FF 176.73%)', - }, - background: { - card: '#15171F', - sidebar: '#121F4D', - banner: { - warning: '#f5a623', - }, - walletAdd: { - title: '#ffffff', - subtitle: '#ffffff', - }, - gradients: { - walletEmptyCard: 'linear-gradient(180deg, #93F5E1 0%, #C6F7ED 100%)', - supportedAddressDomainsBanner: 'linear-gradient(260deg, #E4E8F7 0%, #C6F7ED 100%)', - primary: 'linear-gradient(269.97deg, #E4E8F7 0%, #C6F7ED 100%)', - }, - }, - }, - shape: { - borderRadius: 8, - }, -}; diff --git a/packages/yoroi-extension/app/styles/themes/revamp/dark-theme-mui.js b/packages/yoroi-extension/app/styles/themes/revamp/dark-theme-mui.js deleted file mode 100644 index 6807a2b7c8..0000000000 --- a/packages/yoroi-extension/app/styles/themes/revamp/dark-theme-mui.js +++ /dev/null @@ -1,44 +0,0 @@ -// @flow -import { createTheme } from '@mui/material/styles'; -import { commonRevampTheme } from './common-theme'; -import { deepmerge } from '@mui/utils'; -import { darkTheme } from './dark-theme-base'; -import { - DarkRevampButton, - RevampCheckbox, - RevampTextField, - RevampOutlinedInput, - RevampFormHelperText, - RevampFormControl, - RevampMenu, - RevampMenuItem, - RevampTabs, - RevampTabPanel, - RevampChip, - RevampTooltip, - RevampInputLabel, - RevampSelect, -} from '../../overrides/revamp'; - -const darkThemeComponents = { - components: { - MuiButton: DarkRevampButton, - MuiCheckbox: RevampCheckbox, - MuiTextField: RevampTextField, - MuiOutlinedInput: RevampOutlinedInput, - MuiFormHelperText: RevampFormHelperText, - MuiFormControl: RevampFormControl, - MuiSelect: RevampSelect, - MuiInputLabel: RevampInputLabel, - MuiMenu: RevampMenu, - MuiMenuItem: RevampMenuItem, - MuiTabs: RevampTabs, - MuiTabPanel: RevampTabPanel, - MuiChip: RevampChip, - MuiTooltip: RevampTooltip, - }, -}; - -const revampDarkTheme = deepmerge(darkTheme, darkThemeComponents); - -export const revampBaseTheme: Object = createTheme(deepmerge(commonRevampTheme, revampDarkTheme)); diff --git a/packages/yoroi-extension/app/styles/themes/revamp/light-theme-base.js b/packages/yoroi-extension/app/styles/themes/revamp/light-theme-base.js deleted file mode 100644 index 2261eb531b..0000000000 --- a/packages/yoroi-extension/app/styles/themes/revamp/light-theme-base.js +++ /dev/null @@ -1,91 +0,0 @@ -// @flow - -const cyan = { '400': '#59B1F4', '100': '#F2F9FF' }; -const yellow = { '500': '#ECBA09', '100': '#FDF7E2' }; -const magenta = { - main: '#FF1351', - '700': '#CF053A', - '600': '#E80742', - '500': '#FF1351', - '300': '#FBCBD7', - '100': '#FFF1F5', -}; - -export const lightTheme = { - name: 'revamp-light', - palette: { - mode: 'light', - /* `main` is added since MUI required it but we don't use it at all */ - primary: { - main: '#4B6DDE', - '900': '#121F4D', - '800': '#122770', - '700': '#1737A3', - '600': '#3154CB', - '500': '#4B6DDE', - '400': '#7892E8', - '300': '#A0B3F2', - '200': '#C4CFF5', - '100': '#E4E8F7', - contrastText: '#FFF', - }, - secondary: { - main: '#16E3BA', - '900': '#17453C', - '800': '#12705D', - '700': '#0B997D', - '600': '#08C29D', - '500': '#16E3BA', - '400': '#66F2D6', - '300': '#93F5E1', - '200': '#C6F7ED', - '100': '#E4F7F3', - contrastText: '#FFF', - }, - grayscale: { - main: '#8A92A3', - max: '#000000', - '900': '#242838', - '800': '#383E54', - '700': '#4A5065', - '600': '#6B7384', - '500': '#8A92A3', - '400': '#A7AFC0', - '300': '#C4CAD7', - '200': '#DCE0E9', - '100': '#EAEDF2', - '50': '#F0F3F5', - min: '#FFFFFF', - contrastText: '#FFF', - }, - magenta, - cyan, - yellow, - common: { black: '#000000', white: '#FFFFFF', magenta, cyan, yellow }, - gradients: { - 'blue-green-bg': 'linear-gradient(180deg, #E4E8F7 0%, #C6F7F7 100%)', - 'blue-green-banner': 'linear-gradient(269.97deg, #E4E8F7 0%, #C6F7ED 100%)', - green: 'linear-gradient(180deg, #93F5E1 0%, #C6F7ED 100%)', - blue: 'linear-gradient(30.09deg, #244ABF 0%, #4760FF 176.73%)', - }, - background: { - card: '#fff', - sidebar: '#4760FF', - banner: { - warning: '#f5a623', - }, - walletAdd: { - title: '#ffffff', - subtitle: '#ffffff', - }, - gradients: { - walletEmptyCard: 'linear-gradient(180deg, #93F5E1 0%, #C6F7ED 100%)', - supportedAddressDomainsBanner: 'linear-gradient(260deg, #E4E8F7 0%, #C6F7ED 100%)', - primary: 'linear-gradient(269.97deg, #E4E8F7 0%, #C6F7ED 100%)', - }, - }, - }, - shape: { - borderRadius: 8, - }, -}; diff --git a/packages/yoroi-extension/app/styles/themes/revamp/light-theme-mui.js b/packages/yoroi-extension/app/styles/themes/revamp/light-theme-mui.js deleted file mode 100644 index 5dc8051a7f..0000000000 --- a/packages/yoroi-extension/app/styles/themes/revamp/light-theme-mui.js +++ /dev/null @@ -1,44 +0,0 @@ -// @flow -import { createTheme } from '@mui/material/styles'; -import { commonRevampTheme } from './common-theme'; -import { deepmerge } from '@mui/utils'; -import { lightTheme } from './light-theme-base'; -import { - LightRevampButton, - RevampCheckbox, - RevampTextField, - RevampOutlinedInput, - RevampFormHelperText, - RevampFormControl, - RevampMenu, - RevampMenuItem, - RevampTabs, - RevampTabPanel, - RevampChip, - RevampTooltip, - RevampInputLabel, - RevampSelect, -} from '../../overrides/revamp'; - -const lightThemeComponents = { - components: { - MuiButton: LightRevampButton, - MuiCheckbox: RevampCheckbox, - MuiTextField: RevampTextField, - MuiOutlinedInput: RevampOutlinedInput, - MuiFormHelperText: RevampFormHelperText, - MuiFormControl: RevampFormControl, - MuiSelect: RevampSelect, - MuiInputLabel: RevampInputLabel, - MuiMenu: RevampMenu, - MuiMenuItem: RevampMenuItem, - MuiTabs: RevampTabs, - MuiTabPanel: RevampTabPanel, - MuiChip: RevampChip, - MuiTooltip: RevampTooltip, - }, -}; - -const revampLightTheme = deepmerge(lightTheme, lightThemeComponents); - -export const revampBaseTheme: Object = createTheme(deepmerge(commonRevampTheme, revampLightTheme)); diff --git a/packages/yoroi-extension/app/styles/themes/themed-palettes/dark.js b/packages/yoroi-extension/app/styles/themes/themed-palettes/dark.js new file mode 100644 index 0000000000..073579714c --- /dev/null +++ b/packages/yoroi-extension/app/styles/themes/themed-palettes/dark.js @@ -0,0 +1,41 @@ +import { darkPalette } from '../base-palettes/dark-palette'; +import { tokens } from '../tokens/tokens'; + +const { opacity } = tokens; + +export const dark = { + ...darkPalette, + + text_primary_high: darkPalette.primary_c700, // hover, text, button, links, text in tabs, chips + text_primary_medium: darkPalette.primary_c600, // links, tabs, chips, special cases + text_primary_low: darkPalette.primary_c300, // disabled, buttons, links + text_primary_on: darkPalette.white_static, // primary color surfaces + text_gray_max: darkPalette.gray_cmax, // hover and pressed + text_gray_normal: darkPalette.gray_c900, // draws attention + text_gray_medium: darkPalette.gray_c600, // accent or additional text + text_gray_low: darkPalette.gray_c400, // disabled text + text_error: darkPalette.sys_magenta_c500, // error messages + text_warning: darkPalette.sys_orange_c500, // warning messages + text_success: darkPalette.secondary_c500, // success messages + text_info: darkPalette.sys_cyan_c500, // info messages + + bg_color_high: darkPalette.gray_cmin, // bottom surface + bg_color_low: darkPalette.gray_c100, // upper surface + + el_primary_high: darkPalette.primary_c700, // hover'nd pressed state, actianable elements + el_primary_medium: darkPalette.primary_c600, // actionable elements + el_primary_low: darkPalette.primary_c300, // disabled elements, icons + el_gray_high: darkPalette.gray_cmax, // hover and pressed, icons, shapes, lines in buttons, icons in banners + el_gray_normal: darkPalette.gray_c900, // icons, shapes, lines in buttons, chips, tabs, checkboxes, readio, switch + el_gray_medium: darkPalette.gray_c600, // icons, shapes, inputs, bottom navigation bar + el_gray_low: darkPalette.gray_c400, // input stroke, disabled state for most components + el_secondary_medium: darkPalette.secondary_c600, // success state + el_static_white: darkPalette.white_static, // text and icons buttons and chips + + web_overlay: `${darkPalette.gray_c100}${opacity._80}`, // extension modal overlay + web_sidebar_item_active: `${darkPalette.black_static}${opacity._16}`, // extension active sidebar item background + web_sidebar_item_inactive: `${darkPalette.white_static}${opacity._48}`, // extension inactive sidebar item + + mobile_overlay: `${darkPalette.black_static}${opacity._40}`, // mobile bottom sheet overlay + mobile_bg_blur: `${darkPalette.gray_c50}${opacity._80}`, // mobile bottom sheet background +}; diff --git a/packages/yoroi-extension/app/styles/themes/themed-palettes/light.js b/packages/yoroi-extension/app/styles/themes/themed-palettes/light.js new file mode 100644 index 0000000000..98fb9f3882 --- /dev/null +++ b/packages/yoroi-extension/app/styles/themes/themed-palettes/light.js @@ -0,0 +1,41 @@ +import { lightPalette } from '../base-palettes/light-palette'; +import { tokens } from '../tokens/tokens'; + +const { opacity } = tokens; + +export const light = { + ...lightPalette, + + text_primary_high: lightPalette.primary_c600, // hover, text, button, links, text in tabs, chips + text_primary_medium: lightPalette.primary_c500, // links, tabs, chips, special cases + text_primary_low: lightPalette.primary_c300, // disabled, buttons, links + text_primary_on: lightPalette.white_static, // primary color surfaces + text_gray_max: lightPalette.gray_cmax, // hover and pressed + text_gray_normal: lightPalette.gray_c900, // draws attention + text_gray_medium: lightPalette.gray_c600, // accent or additional text + text_gray_low: lightPalette.gray_c400, // disabled text + text_error: lightPalette.sys_magenta_c500, // error messages + text_warning: lightPalette.sys_orange_c500, // warning messages + text_success: lightPalette.secondary_c500, // success messages + text_info: lightPalette.sys_cyan_c500, // info messages + + bg_color_high: lightPalette.gray_cmin, // bottom surface + bg_color_low: lightPalette.gray_c100, // upper surface + + el_primary_high: lightPalette.primary_c600, // hover'nd pressed state, actianable elements + el_primary_medium: lightPalette.primary_c500, // actionable elements + el_primary_low: lightPalette.primary_c300, // disabled elements, icons + el_gray_high: lightPalette.gray_cmax, // hover and pressed, icons, shapes, lines in buttons, icons in banners + el_gray_normal: lightPalette.gray_c900, // icons, shapes, lines in buttons, chips, tabs, checkboxes, readio, switch + el_gray_medium: lightPalette.gray_c600, // icons, shapes, inputs, bottom navigation bar + el_gray_low: lightPalette.gray_c400, // input stroke, disabled state for most components + el_secondary_medium: lightPalette.secondary_c400, // success state + el_static_white: lightPalette.white_static, // text and icons buttons and chips + + web_overlay: `${lightPalette.black_static}${opacity._70}`, // extension modal overlay + web_sidebar_item_active: `${lightPalette.black_static}${opacity._16}`, // extension active sidebar item background + web_sidebar_item_inactive: `${lightPalette.white_static}${opacity._48}`, // extension inactive sidebar item + + mobile_overlay: `${lightPalette.black_static}${opacity._40}`, // mobile bottom sheet overlay + mobile_bg_blur: `${lightPalette.white_static}${opacity._80}`, // mobile bottom sheet background +}; diff --git a/packages/yoroi-extension/app/styles/themes/tokens/tokens.js b/packages/yoroi-extension/app/styles/themes/tokens/tokens.js new file mode 100644 index 0000000000..e2a457a7b3 --- /dev/null +++ b/packages/yoroi-extension/app/styles/themes/tokens/tokens.js @@ -0,0 +1,66 @@ +export const space = { + none: 0, + _2xs: 2, + xs: 4, + sm: 8, + md: 12, + lg: 16, + xl: 24, + _2xl: 32, +}; + +export const borderRadius = { + xs: 4, + sm: 8, + md: 12, + full: 999, +}; + +export const fontSize = { + _2xs: 10, + xs: 12, + sm: 14, + md: 16, + lg: 18, + xl: 20, + _2xl: 24, + _3xl: 28, +}; + +export const lineHeight = { + _2xs: 18, + xs: 18, + sm: 22, + md: 24, + lg: 26, + xl: 30, + _2xl: 32, + _3xl: 36, +}; + +export const fontWeight = { + thin: '300', + normal: '400', + semibold: '500', + bold: '600', +}; + +export const opacity = { + _8: '14', + _10: '1A', + _16: '29', + _26: '42', + _40: '66', + _48: '7A', + _70: 'B3', + _80: 'CC', +}; + +export const tokens = { + space, + borderRadius, + fontSize, + lineHeight, + fontWeight, + opacity, +}; From c18f78d0176125247f3ac351b5ce03f64dfd659b Mon Sep 17 00:00:00 2001 From: Patriciu Nista Date: Mon, 1 Jul 2024 00:41:54 +0200 Subject: [PATCH 267/464] fix eslint --- packages/yoroi-extension/app/App.js | 3 +-- .../app/styles/themes/base-palettes/dark-palette.js | 5 +---- .../app/styles/themes/base-palettes/light-palette.js | 1 + .../app/styles/themes/themed-palettes/dark.js | 1 + .../app/styles/themes/themed-palettes/light.js | 1 + packages/yoroi-extension/app/styles/themes/tokens/tokens.js | 1 + 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/yoroi-extension/app/App.js b/packages/yoroi-extension/app/App.js index f287b14e40..fa5aaa864f 100644 --- a/packages/yoroi-extension/app/App.js +++ b/packages/yoroi-extension/app/App.js @@ -15,8 +15,7 @@ import { LayoutProvider } from './styles/context/layout'; import { ColorModeProvider } from './styles/context/mode'; import { CssBaseline } from '@mui/material'; import { globalStyles } from './styles/globalStyles'; -import { changeToplevelTheme, MuiThemes } from './styles/themes'; -import { THEMES } from './styles/themes'; +import { changeToplevelTheme, MuiThemes, THEMES } from './styles/themes'; import ThemeManager from './ThemeManager'; import environment from './environment'; import MaintenancePage from './containers/MaintenancePage'; diff --git a/packages/yoroi-extension/app/styles/themes/base-palettes/dark-palette.js b/packages/yoroi-extension/app/styles/themes/base-palettes/dark-palette.js index f0da8da5f7..96234bf6f8 100644 --- a/packages/yoroi-extension/app/styles/themes/base-palettes/dark-palette.js +++ b/packages/yoroi-extension/app/styles/themes/base-palettes/dark-palette.js @@ -1,7 +1,4 @@ -import { tokens } from '../tokens/tokens'; - -const { opacity } = tokens; - +// @flow export const darkPalette = { primary_c900: '#E4E8F7', primary_c800: '#C4CFF5', diff --git a/packages/yoroi-extension/app/styles/themes/base-palettes/light-palette.js b/packages/yoroi-extension/app/styles/themes/base-palettes/light-palette.js index 665db5944a..6ddd4e8fc7 100644 --- a/packages/yoroi-extension/app/styles/themes/base-palettes/light-palette.js +++ b/packages/yoroi-extension/app/styles/themes/base-palettes/light-palette.js @@ -1,3 +1,4 @@ +// @flow export const lightPalette = { primary_c900: '#121F4D', primary_c800: '#122770', diff --git a/packages/yoroi-extension/app/styles/themes/themed-palettes/dark.js b/packages/yoroi-extension/app/styles/themes/themed-palettes/dark.js index 073579714c..ced8c7193e 100644 --- a/packages/yoroi-extension/app/styles/themes/themed-palettes/dark.js +++ b/packages/yoroi-extension/app/styles/themes/themed-palettes/dark.js @@ -1,3 +1,4 @@ +// @flow import { darkPalette } from '../base-palettes/dark-palette'; import { tokens } from '../tokens/tokens'; diff --git a/packages/yoroi-extension/app/styles/themes/themed-palettes/light.js b/packages/yoroi-extension/app/styles/themes/themed-palettes/light.js index 98fb9f3882..00b62f8be3 100644 --- a/packages/yoroi-extension/app/styles/themes/themed-palettes/light.js +++ b/packages/yoroi-extension/app/styles/themes/themed-palettes/light.js @@ -1,3 +1,4 @@ +// @flow import { lightPalette } from '../base-palettes/light-palette'; import { tokens } from '../tokens/tokens'; diff --git a/packages/yoroi-extension/app/styles/themes/tokens/tokens.js b/packages/yoroi-extension/app/styles/themes/tokens/tokens.js index e2a457a7b3..1cdec14f88 100644 --- a/packages/yoroi-extension/app/styles/themes/tokens/tokens.js +++ b/packages/yoroi-extension/app/styles/themes/tokens/tokens.js @@ -1,3 +1,4 @@ +// @flow export const space = { none: 0, _2xs: 2, From fee9131550a748bf6fb35a43acde95b849408153 Mon Sep 17 00:00:00 2001 From: Emurgo Date: Mon, 1 Jul 2024 18:08:19 +0800 Subject: [PATCH 268/464] fix test snapshot after adding BackendServiceZerop --- .../ada/lib/storage/tests/__snapshots__/index.test.js.snap | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/yoroi-extension/app/api/ada/lib/storage/tests/__snapshots__/index.test.js.snap b/packages/yoroi-extension/app/api/ada/lib/storage/tests/__snapshots__/index.test.js.snap index 8fd9419664..d76ee8f8df 100644 --- a/packages/yoroi-extension/app/api/ada/lib/storage/tests/__snapshots__/index.test.js.snap +++ b/packages/yoroi-extension/app/api/ada/lib/storage/tests/__snapshots__/index.test.js.snap @@ -1238,6 +1238,7 @@ Object { Object { "Backend": Object { "BackendService": "https://api.yoroiwallet.com", + "BackendServiceZero": "https://yoroi-backend-zero-mainnet.emurgornd.com", "TokenInfoService": "https://cdn.yoroiwallet.com", }, "BaseConfig": Array [ @@ -1306,6 +1307,7 @@ Object { Object { "Backend": Object { "BackendService": "https://preprod-backend.yoroiwallet.com", + "BackendServiceZero": "https://yoroi-backend-zero-preprod.emurgornd.com", "TokenInfoService": "https://stage-cdn.yoroiwallet.com", }, "BaseConfig": Array [ @@ -1340,6 +1342,7 @@ Object { Object { "Backend": Object { "BackendService": "https://preview-backend.emurgornd.com", + "BackendServiceZero": "https://yoroi-backend-zero-previes.emurgornd.com", "TokenInfoService": "https://stage-cdn.yoroiwallet.com", }, "BaseConfig": Array [ @@ -1374,6 +1377,7 @@ Object { Object { "Backend": Object { "BackendService": "https://sanchonet-backend.yoroiwallet.com", + "BackendServiceZero": "https://yoroi-backend-zero-sanchonet.emurgornd.com", "TokenInfoService": "https://stage-cdn.yoroiwallet.com", }, "BaseConfig": Array [ From 2ab3e9bcd3d86ae24c1a36323785ff1441c2be49 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Mon, 1 Jul 2024 15:54:37 +0300 Subject: [PATCH 269/464] minor fixes --- .../transactionsModals/editMemoModal.page.js | 9 +++------ .../transactionsModals/memoWarningModal.page.js | 6 +++--- .../wallet/walletTab/walletTransactions.page.js | 17 ++++++++++++----- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/editMemoModal.page.js b/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/editMemoModal.page.js index 754fa3b71f..c9351a322e 100644 --- a/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/editMemoModal.page.js +++ b/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/editMemoModal.page.js @@ -56,7 +56,7 @@ class EditMemoDialog extends BasePage { await this.click(this.editMemoDialogCloseButtonLocator); } // * enter memo - async enterMemo(memoText, oldMessage) { + async enterMemo(memoText) { this.logger.info(`EditMemoDialog::enterMemo is called. Memo text: ${memoText}`); await this.click(this.editMemoDialogInputLocator); await this.clearInputAll(this.editMemoDialogInputLocator); @@ -73,11 +73,8 @@ class EditMemoDialog extends BasePage { async pressSave() { this.logger.info(`EditMemoDialog::pressSave is called.`); await this.click(this.editMemoDialogSaveButtonLocator); - const modalIsNotDisplayed = await this.customWaiter( - async () => { - const modalsWebElems = await this.findElements(this.editMemoDialogWindowLocator); - return modalsWebElems.length === 0; - }, + const modalIsNotDisplayed = await this.customWaitIsPresented( + this.editMemoDialogWindowLocator, fiveSeconds, quarterSecond ); diff --git a/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/memoWarningModal.page.js b/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/memoWarningModal.page.js index 8ee4436ef5..8617aab9b5 100644 --- a/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/memoWarningModal.page.js +++ b/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/memoWarningModal.page.js @@ -25,7 +25,7 @@ class MemoWarningModal extends BasePage { method: 'id', }; // * understandBtn - undesrtandButtonLocator = { + understandButtonLocator = { locator: 'memoNoExternalStorageDialog-iunderstand-button', method: 'id', }; @@ -54,13 +54,13 @@ class MemoWarningModal extends BasePage { // * confirm adding async understandAdding() { this.logger.info(`MemoWarningModal::understandAdding is called`); - await this.click(this.undesrtandButtonLocator); + await this.click(this.understandButtonLocator); return new AddMemoDialog(this.driver, this.logger); } // * confirm editing async understandEditing() { this.logger.info(`MemoWarningModal::understandEditing is called`); - await this.click(this.undesrtandButtonLocator); + await this.click(this.understandButtonLocator); return new EditMemoDialog(this.driver, this.logger); } } diff --git a/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js b/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js index def244b5cf..104ec6732b 100644 --- a/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js +++ b/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js @@ -1,5 +1,4 @@ import { - defaultWaitTimeout, fiveSeconds, quarterSecond, twoSeconds, @@ -162,10 +161,18 @@ export class TransactionsSubTab extends WalletTab { // methods async isDisplayed() { this.logger.info(`TransactionsSubTab::isDisplayed is called`); - const submenuState = await this.customWaitIsPresented(this.transactionsSubmenuItemLocator, fiveSeconds, quarterSecond); - const summaryState = await this.customWaitIsPresented(this.walletSummaryBoxLocator, fiveSeconds, quarterSecond); - - return submenuState && summaryState; + const submenuState = await this.customWaitIsPresented( + this.transactionsSubmenuItemLocator, + fiveSeconds, + quarterSecond + ); + const summaryState = await this.customWaitIsPresented( + this.walletSummaryBoxLocator, + fiveSeconds, + quarterSecond + ); + + return submenuState && summaryState; } async isWalletEmpty() { this.logger.info(`TransactionsSubTab::isWalletEmpty is called`); From 13e091e30d90ddf8f4c8f7fe7526b19147bddd16 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Mon, 1 Jul 2024 15:55:06 +0300 Subject: [PATCH 270/464] added id for delete memo modal --- .../app/components/wallet/memos/DeleteMemoDialog.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/yoroi-extension/app/components/wallet/memos/DeleteMemoDialog.js b/packages/yoroi-extension/app/components/wallet/memos/DeleteMemoDialog.js index d875f7abb2..d0eb168793 100644 --- a/packages/yoroi-extension/app/components/wallet/memos/DeleteMemoDialog.js +++ b/packages/yoroi-extension/app/components/wallet/memos/DeleteMemoDialog.js @@ -83,6 +83,7 @@ export default class DeleteMemoDialog extends Component { closeOnOverlayClick={false} closeButton={} onClose={onClose} + id='deleteMemoDialog' >
    { error ? () : null } From c216c724fe685f2ac8e1a41d6b0a3eec49b21e67 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Mon, 1 Jul 2024 15:59:28 +0300 Subject: [PATCH 271/464] added delete memo page --- .../deleteMemoModal.page.js | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 packages/e2e-tests/pages/wallet/walletTab/transactionsModals/deleteMemoModal.page.js diff --git a/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/deleteMemoModal.page.js b/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/deleteMemoModal.page.js new file mode 100644 index 0000000000..4f9072ff9a --- /dev/null +++ b/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/deleteMemoModal.page.js @@ -0,0 +1,78 @@ +import { + defaultWaitTimeout, + fiveSeconds, + quarterSecond, +} from '../../../../helpers/timeConstants.js'; +import BasePage from '../../../basepage.js'; + +class DeleteMemoModal extends BasePage { + // locators + deleteDialogWindowLocator = { + locator: 'deleteMemoDialog-dialogWindow-modalWindow', + method: 'id', + }; + deleteDialogTitleLocator = { + locator: 'deleteMemoDialog-dialogTitle-text', + method: 'id', + }; + deleteDialogCloseButtonLocator = { + locator: 'deleteMemoDialog-closeModal-button', + method: 'id', + }; + cancelButtonLocator = { + locator: 'deleteMemoDialog-cancel-button', + method: 'id', + }; + deleteButtonLocator = { + locator: 'deleteMemoDialog-delete-button', + method: 'id', + }; + // methods + // * isDisplayed + async isDisplayed() { + this.logger.info(`DeleteMemoModal::isDisplayed is called`); + const windowState = await this.customWaitIsPresented( + this.deleteDialogWindowLocator, + fiveSeconds, + quarterSecond + ); + const titleState = await this.customWaitIsPresented( + this.deleteDialogTitleLocator, + fiveSeconds, + quarterSecond + ); + return windowState && titleState; + } + // * modal is not displayed + async isNotDisplayed() { + this.logger.info(`DeleteMemoModal::isNotDisplayed is called`); + const notPresented = await this.customWaiter( + async () => { + const allElements = await this.findElements(this.deleteDialogWindowLocator); + return allElements.length === 0; + }, + defaultWaitTimeout, + quarterSecond + ); + if (!notPresented) { + throw new Error('The Delete Memo modal is still displayed after 10 seconds'); + } + } + // * cancel + async pressCancel() { + this.logger.info(`DeleteMemoModal::pressCancel is called`); + await this.click(this.cancelButtonLocator); + } + // * close + async closeDialog() { + this.logger.info(`DeleteMemoModal::closeDialog is called`); + await this.click(this.deleteDialogCloseButtonLocator); + } + // * delete + async confirmDeleting() { + this.logger.info(`DeleteMemoModal::confirmDeleting is called`); + await this.click(this.deleteButtonLocator); + } +} + +export default DeleteMemoModal; From 47b801f7805bd7199185bc5bbb8e5cd2e53cecb6 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Mon, 1 Jul 2024 16:00:28 +0300 Subject: [PATCH 272/464] added deleteMemo method --- .../transactionsModals/editMemoModal.page.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/editMemoModal.page.js b/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/editMemoModal.page.js index c9351a322e..2a3abc4ed5 100644 --- a/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/editMemoModal.page.js +++ b/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/editMemoModal.page.js @@ -1,5 +1,6 @@ import { fiveSeconds, quarterSecond } from '../../../../helpers/timeConstants.js'; import BasePage from '../../../basepage.js'; +import DeleteMemoModal from './deleteMemoModal.page.js'; class EditMemoDialog extends BasePage { // locators @@ -83,6 +84,23 @@ class EditMemoDialog extends BasePage { throw new Error('Save memo modal is still displayed after 5 seconds'); } } + + // * delete message by pressing cross button + async deleteMemo(confrimDeleting = true) { + this.logger.info(`EditMemoDialog::deleteMemo is called`); + await this.click(this.editMemoDialogDeleteButtonLocator); + const deleteModal = new DeleteMemoModal(this.driver, this.logger); + const deleteModalState = await deleteModal.isDisplayed(); + if (!deleteModalState) { + throw new Error('Save memo modal is still displayed after 5 seconds'); + } + if (confrimDeleting) { + await deleteModal.confirmDeleting(); + await deleteModal.isNotDisplayed(); + } else { + await deleteModal.pressCancel(); + } + } } export default EditMemoDialog; From 82e7b845c0a3e250bca3a3edf7bc677f13290d44 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Mon, 1 Jul 2024 16:02:34 +0300 Subject: [PATCH 273/464] added method thereIsNoMemo --- .../wallet/walletTab/walletTransactions.page.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js b/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js index 104ec6732b..96da201884 100644 --- a/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js +++ b/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js @@ -1,6 +1,7 @@ import { fiveSeconds, quarterSecond, + threeSeconds, twoSeconds, } from '../../../helpers/timeConstants.js'; import WalletTab from './walletTab.page.js'; @@ -473,6 +474,21 @@ export class TransactionsSubTab extends WalletTab { this.logger.info(`TransactionsSubTab::getMemoMessage::result ${result}`); return result; } + async thereIsNoMemo(groupIndex, txIndex) { + this.logger.info( + `TransactionsSubTab::thereIsNoMemo is called. Group index: ${groupIndex}, tx index: ${txIndex}` + ); + const memoMsgLocator = this.txMemoContentTextLocator(groupIndex, txIndex); + const noMemoState = await this.customWaiter( + async () => { + const allElements = await this.findElements(memoMsgLocator); + return allElements.length === 0; + }, + threeSeconds, + quarterSecond + ); + return noMemoState; + } } export default TransactionsSubTab; From 64cd057a83db64bea756ebd3eca21a3343e18df4 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Mon, 1 Jul 2024 16:02:58 +0300 Subject: [PATCH 274/464] added test for deleting a memo --- .../e2e-tests/test/24_deletingMemo.test.js | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 packages/e2e-tests/test/24_deletingMemo.test.js diff --git a/packages/e2e-tests/test/24_deletingMemo.test.js b/packages/e2e-tests/test/24_deletingMemo.test.js new file mode 100644 index 0000000000..6b903565bc --- /dev/null +++ b/packages/e2e-tests/test/24_deletingMemo.test.js @@ -0,0 +1,93 @@ +import BasePage from '../pages/basepage.js'; +import { customAfterEach } from '../utils/customHooks.js'; +import TransactionsSubTab from '../pages/wallet/walletTab/walletTransactions.page.js'; +import { expect } from 'chai'; +import { getTestLogger } from '../utils/utils.js'; +import { oneMinute } from '../helpers/timeConstants.js'; +import driversPoolsManager from '../utils/driversPool.js'; +import AddNewWallet from '../pages/addNewWallet.page.js'; + +describe('Deleting a memo', function () { + this.timeout(2 * oneMinute); + let webdriver = null; + let logger = null; + const oldMemo = 'j1hKEo4Er4FDLFAtGBo07jIcXBSOqx9D16U0sUIl'; + + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); + logger = getTestLogger(this.test.parent.title); + }); + + it('Prepare DB and storages', async function () { + const addWalletPage = new AddNewWallet(webdriver, logger); + const state = await addWalletPage.isDisplayed(); + expect(state).to.be.true; + await addWalletPage.prepareDBAndStorage('testWallet1MemoAdded'); + await addWalletPage.refreshPage(); + }); + + it('Check transactions page', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + await transactionsPage.waitPrepareWalletBannerIsClosed(); + const txPageIsDisplayed = await transactionsPage.isDisplayed(); + expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; + }); + + it('Expand tx', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + await transactionsPage.clickOnTxRow(0, 0); + }); + + it('Delete memo', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + const memoMessage = await transactionsPage.getMemoMessage(0, 0); + expect(memoMessage).to.equal(oldMemo); + + // click edit memo + const memoWarningModal = await transactionsPage.clickEditMemo(0, 0); + const warningIsDisplayed = await memoWarningModal.isDisplayed(); + expect(warningIsDisplayed).to.be.true; + + const editMemoModal = await memoWarningModal.understandEditing(); + const editMemoModalIsDisplayed = await editMemoModal.isDisplayed(); + expect(editMemoModalIsDisplayed).to.be.true; + + // click delete memo + await editMemoModal.deleteMemo(); + }); + + // check the memo displayed message + it('Check deleted memo', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + await transactionsPage.clickOnTxRow(0, 0); + const noMemo = await transactionsPage.thereIsNoMemo(0, 0); + expect(noMemo).to.be.true; + const memosInDB = await transactionsPage.getInfoFromIndexedDB('TxMemo'); + expect(memosInDB.length).to.equal(0); + }); + + // reload the page + it('Refresh page', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + await transactionsPage.refreshPage(); + }); + + // check the memo displayed message again + it('Check deleted memo again', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + await transactionsPage.clickOnTxRow(0, 0); + const noMemo = await transactionsPage.thereIsNoMemo(0, 0); + expect(noMemo).to.be.true; + }); + + afterEach(function (done) { + customAfterEach(this, webdriver, logger); + done(); + }); + + after(function (done) { + const basePage = new BasePage(webdriver, logger); + basePage.closeBrowser(); + done(); + }); +}); From 663778f91e8a9454da93afab04f7bd497ce622b6 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Mon, 1 Jul 2024 19:21:09 +0300 Subject: [PATCH 275/464] added the method customWaitIsNotPresented --- packages/e2e-tests/pages/basepage.js | 16 ++++++++++++++++ .../transactionsModals/editMemoModal.page.js | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/e2e-tests/pages/basepage.js b/packages/e2e-tests/pages/basepage.js index 923571bc1f..83e1e2b80d 100644 --- a/packages/e2e-tests/pages/basepage.js +++ b/packages/e2e-tests/pages/basepage.js @@ -335,6 +335,22 @@ class BasePage { ); return result; } + async customWaitIsNotPresented( + locator, + timeout = defaultWaitTimeout, + repeatPeriod = defaultRepeatPeriod + ) { + this.logger.info(`BasePage::customWaitIsNotPresented is called.`); + const result = await this.customWaiter( + async () => { + const elemsPresented = await this.findElements(locator); + return elemsPresented.length === 0; + }, + timeout, + repeatPeriod + ); + return result; + } async waitPresentedAndAct( locator, funcToCall, diff --git a/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/editMemoModal.page.js b/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/editMemoModal.page.js index 2a3abc4ed5..ddbc3dc6ee 100644 --- a/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/editMemoModal.page.js +++ b/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/editMemoModal.page.js @@ -74,7 +74,7 @@ class EditMemoDialog extends BasePage { async pressSave() { this.logger.info(`EditMemoDialog::pressSave is called.`); await this.click(this.editMemoDialogSaveButtonLocator); - const modalIsNotDisplayed = await this.customWaitIsPresented( + const modalIsNotDisplayed = await this.customWaitIsNotPresented( this.editMemoDialogWindowLocator, fiveSeconds, quarterSecond From 890be6549e5a29d8c32b3ff382e6ad744e35e6df Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Mon, 1 Jul 2024 19:52:12 +0300 Subject: [PATCH 276/464] replaced waitFoElement --- .../e2e-tests/pages/walletCommonBase.page.js | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/packages/e2e-tests/pages/walletCommonBase.page.js b/packages/e2e-tests/pages/walletCommonBase.page.js index 8754ef6d4e..cbc0e94703 100644 --- a/packages/e2e-tests/pages/walletCommonBase.page.js +++ b/packages/e2e-tests/pages/walletCommonBase.page.js @@ -132,13 +132,10 @@ class WalletCommonBase extends BasePage { } ); - const adaBalance = await this.waitPresentedAndAct( - this.walletBalanceTextLocator, - async () => { - const rawBalanceText = await this.getText(this.walletBalanceTextLocator); - return Number(rawBalanceText.split(' ')[0]); - } - ); + const adaBalance = await this.waitPresentedAndAct(this.walletBalanceTextLocator, async () => { + const rawBalanceText = await this.getText(this.walletBalanceTextLocator); + return Number(rawBalanceText.split(' ')[0]); + }); const [fiatBalance, fiatCurrency] = await this.waitPresentedAndAct( this.walletFiatBalanceTextLocator, @@ -221,8 +218,10 @@ class WalletCommonBase extends BasePage { } async openChangeWalletModal() { this.logger.info(`WalletCommonBase::openChangeWalletModal is called`); - const selectWalletBtnElem = await this.waitForElement(this.selectedWalletButtonLocator); - await selectWalletBtnElem.click(); + await this.waitPresentedAndAct( + this.selectedWalletButtonLocator, + async () => await this.click(this.selectedWalletButtonLocator) + ); await this.waitForElement(this.changeWalletDialogLocator); } async addNewWallet() { From a34a7251045be19ee1ca0ecd0f51c49f83f85df8 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Mon, 1 Jul 2024 20:08:17 +0300 Subject: [PATCH 277/464] added function description --- packages/e2e-tests/pages/basepage.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/e2e-tests/pages/basepage.js b/packages/e2e-tests/pages/basepage.js index 83e1e2b80d..b4176259ac 100644 --- a/packages/e2e-tests/pages/basepage.js +++ b/packages/e2e-tests/pages/basepage.js @@ -351,6 +351,14 @@ class BasePage { ); return result; } + /** + * The function wait until the passed element is found and call the passed function + * @param {{locator: string, method: id}} locator Element locator + * @param {object} funcToCall A function that should be called when the element is found + * @param {number} timeout Total time of search in milliseconds. Default values is **5000** milliseconds + * @param {number} repeatPeriod The time after which it is necessary to repeat the check. Default value is **250** milliseconds + * @returns {Promise} + */ async waitPresentedAndAct( locator, funcToCall, From 5f909ff93408a22b71051f75c9a206d828017412 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Mon, 1 Jul 2024 20:33:28 +0300 Subject: [PATCH 278/464] updated loading txs --- .../pages/wallet/walletTab/walletTransactions.page.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js b/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js index 96da201884..03458bbd79 100644 --- a/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js +++ b/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js @@ -357,18 +357,18 @@ export class TransactionsSubTab extends WalletTab { return loaderIsNotDisplayed; } async _loadMore() { - const showMoreIsDisplayed = this.showMoreBtnIsDisplayed(); - const loaderIsDisplayed = this.loaderIsDisplayed(); - if (!(await showMoreIsDisplayed) && !(await loaderIsDisplayed)) { + const showMoreIsDisplayed = await this.showMoreBtnIsDisplayed(); + const loaderIsDisplayed = await this.loaderIsDisplayed(); + if (!showMoreIsDisplayed && !loaderIsDisplayed) { return false; } - if (await showMoreIsDisplayed) { + if (showMoreIsDisplayed) { await this.scrollIntoView(this.showMoreTxsButtonLocator); await this.click(this.showMoreTxsButtonLocator); await this.sleep(quarterSecond); return true; } - if (await loaderIsDisplayed) { + if (loaderIsDisplayed) { await this.scrollIntoView(this.txsLoaderSpinnerLocator); const result = await this.waitLoaderIsNotDisplayed(fiveSeconds, quarterSecond); if (!result) { From f30cbc3130d2874c4d994b5053a38b6b9e2ffddd Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 2 Jul 2024 14:02:39 +0300 Subject: [PATCH 279/464] added id for the eye icon on top bar wallet info panel --- .../app/components/topbar/NavWalletDetailsRevamp.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/yoroi-extension/app/components/topbar/NavWalletDetailsRevamp.js b/packages/yoroi-extension/app/components/topbar/NavWalletDetailsRevamp.js index fd3c99b5bc..cbe4eac732 100644 --- a/packages/yoroi-extension/app/components/topbar/NavWalletDetailsRevamp.js +++ b/packages/yoroi-extension/app/components/topbar/NavWalletDetailsRevamp.js @@ -158,6 +158,7 @@ export default class NavWalletDetailsRevamp extends Component { }, }} color="primary" + id={amountDisplayId + '-showHideBalance-button'} > {shouldHideBalance ? : } From 0b2e17634aeddd0ac76a430bf47b4b395f7db26f Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 2 Jul 2024 14:03:18 +0300 Subject: [PATCH 280/464] added locator for the eye icon --- packages/e2e-tests/pages/walletCommonBase.page.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/e2e-tests/pages/walletCommonBase.page.js b/packages/e2e-tests/pages/walletCommonBase.page.js index cbc0e94703..dbda470d25 100644 --- a/packages/e2e-tests/pages/walletCommonBase.page.js +++ b/packages/e2e-tests/pages/walletCommonBase.page.js @@ -57,6 +57,10 @@ class WalletCommonBase extends BasePage { locator: 'topBar:selectedWallet-availableFiatBalance-text', method: 'id', }; + walletGideBalanceButtonLocator = { + locator: 'topBar:selectedWallet-showHideBalance-button', + method: 'id', + } // change wallet modal window changeWalletDialogLocator = { locator: 'changeWalletDialog-dialogWindow-modalWindow', From 5564f4c008b6b8cb760c5efcdaf90f84346cb3f2 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 2 Jul 2024 14:03:31 +0300 Subject: [PATCH 281/464] added a template for the test --- .../e2e-tests/test/25_hideShowBalance.test.js | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 packages/e2e-tests/test/25_hideShowBalance.test.js diff --git a/packages/e2e-tests/test/25_hideShowBalance.test.js b/packages/e2e-tests/test/25_hideShowBalance.test.js new file mode 100644 index 0000000000..16cfc25d31 --- /dev/null +++ b/packages/e2e-tests/test/25_hideShowBalance.test.js @@ -0,0 +1,54 @@ +import BasePage from '../pages/basepage.js'; +import { customAfterEach } from '../utils/customHooks.js'; +import TransactionsSubTab from '../pages/wallet/walletTab/walletTransactions.page.js'; +import { expect } from 'chai'; +import { getTestLogger } from '../utils/utils.js'; +import { oneMinute } from '../helpers/timeConstants.js'; +import driversPoolsManager from '../utils/driversPool.js'; +import AddNewWallet from '../pages/addNewWallet.page.js'; + +describe('Deleting a memo', function () { + this.timeout(2 * oneMinute); + let webdriver = null; + let logger = null; + const oldMemo = 'j1hKEo4Er4FDLFAtGBo07jIcXBSOqx9D16U0sUIl'; + + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); + logger = getTestLogger(this.test.parent.title); + }); + + it('Prepare DB and storages', async function () { + const addWalletPage = new AddNewWallet(webdriver, logger); + const state = await addWalletPage.isDisplayed(); + expect(state).to.be.true; + await addWalletPage.prepareDBAndStorage('testWallet1MemoAdded'); + await addWalletPage.refreshPage(); + }); + + it('Check transactions page', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + await transactionsPage.waitPrepareWalletBannerIsClosed(); + const txPageIsDisplayed = await transactionsPage.isDisplayed(); + expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; + }); + + // check the default state. The balance should be displayed + // click hide balance + // check balance on the the top bar wallet info panel + // check balance in a collapsed tx + // check balance in an expanded tx + // check balance on Receive tab + // add checking Staking page when testnetwork is added + + afterEach(function (done) { + customAfterEach(this, webdriver, logger); + done(); + }); + + after(function (done) { + const basePage = new BasePage(webdriver, logger); + basePage.closeBrowser(); + done(); + }); +}); From 3a8eaf42de369ec0002d7ee564a10d339cb0c5b8 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 2 Jul 2024 14:19:59 +0300 Subject: [PATCH 282/464] moved preparing db and wait tx page into separate function from tests --- packages/e2e-tests/helpers/restoreWalletHelper.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/packages/e2e-tests/helpers/restoreWalletHelper.js b/packages/e2e-tests/helpers/restoreWalletHelper.js index 50d5439c50..a6d35b4763 100644 --- a/packages/e2e-tests/helpers/restoreWalletHelper.js +++ b/packages/e2e-tests/helpers/restoreWalletHelper.js @@ -96,3 +96,18 @@ export const createWallet = async (webdriver, logger, testWalletName) => { ); return walletInfo; }; + +export const preloadDBAndStorage = async (webdriver, logger, templateName) => { + const addWalletPage = new AddNewWallet(webdriver, logger); + const state = await addWalletPage.isDisplayed(); + expect(state).to.be.true; + await addWalletPage.prepareDBAndStorage(templateName); + await addWalletPage.refreshPage(); +}; + +export const waitTxPage = async (webdriver, logger) => { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + await transactionsPage.waitPrepareWalletBannerIsClosed(); + const txPageIsDisplayed = await transactionsPage.isDisplayed(); + expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; +}; From aacc4218a6ae0860f2684a94ab09f89c8f44d333 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 2 Jul 2024 19:29:11 +0300 Subject: [PATCH 283/464] added id for addresses amounts --- .../components/wallet/transactions/TransactionRevamp.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/components/wallet/transactions/TransactionRevamp.js b/packages/yoroi-extension/app/components/wallet/transactions/TransactionRevamp.js index 9573d8add6..c7f88c0d23 100644 --- a/packages/yoroi-extension/app/components/wallet/transactions/TransactionRevamp.js +++ b/packages/yoroi-extension/app/components/wallet/transactions/TransactionRevamp.js @@ -510,7 +510,13 @@ export default class TransactionRevamp extends Component { {this.generateAddressButton(request.address.address)} - + {renderAmount(request.address.value.getDefaultEntry())} {request.address.value.nonDefaultEntries().map(entry => ( From fd3f43e2a747b13d5ed1c97c3e27177e996a7319 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 2 Jul 2024 20:23:43 +0300 Subject: [PATCH 284/464] added constant for balance replacer --- packages/e2e-tests/helpers/constants.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/e2e-tests/helpers/constants.js b/packages/e2e-tests/helpers/constants.js index cf28bf61e1..429b1bed9a 100644 --- a/packages/e2e-tests/helpers/constants.js +++ b/packages/e2e-tests/helpers/constants.js @@ -124,3 +124,5 @@ export const yoroiObject = Object.freeze({ export const Colors = Object.freeze({ errorRed: 'rgb(255, 19, 81)', }); + +export const balanceReplacer = '******'; From 62dd5d2718126e58db52ea469557abd35d714bba Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 2 Jul 2024 20:24:37 +0300 Subject: [PATCH 285/464] added methods for hiding and showing balance on the top bar panel --- .../e2e-tests/pages/walletCommonBase.page.js | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/packages/e2e-tests/pages/walletCommonBase.page.js b/packages/e2e-tests/pages/walletCommonBase.page.js index dbda470d25..515d3888da 100644 --- a/packages/e2e-tests/pages/walletCommonBase.page.js +++ b/packages/e2e-tests/pages/walletCommonBase.page.js @@ -1,3 +1,4 @@ +import { balanceReplacer } from '../helpers/constants.js'; import { defaultWaitTimeout, fiveSeconds, @@ -57,10 +58,10 @@ class WalletCommonBase extends BasePage { locator: 'topBar:selectedWallet-availableFiatBalance-text', method: 'id', }; - walletGideBalanceButtonLocator = { + walletBalanceVisibilityButtonLocator = { locator: 'topBar:selectedWallet-showHideBalance-button', method: 'id', - } + }; // change wallet modal window changeWalletDialogLocator = { locator: 'changeWalletDialog-dialogWindow-modalWindow', @@ -285,6 +286,34 @@ class WalletCommonBase extends BasePage { nfts, }; } + async showHideBalance() { + this.logger.info(`WalletCommonBase::showHideBalance is called`); + await this.click(this.walletBalanceVisibilityButtonLocator); + await this.sleep(500); + } + async balanceIsHiddenOnTopPanel() { + this.logger.info(`WalletCommonBase::showHideBalance is called`); + + const adaBalanceIsHidden = await this.waitPresentedAndAct( + this.walletBalanceTextLocator, + async () => { + const rawBalanceText = await this.getText(this.walletBalanceTextLocator); + const balanceStr = rawBalanceText.split(' ')[0]; + return balanceStr === balanceReplacer; + } + ); + + const fiatBalanceIsHidden = await this.waitPresentedAndAct( + this.walletFiatBalanceTextLocator, + async () => { + const rawFiatBalanceText = await this.getText(this.walletFiatBalanceTextLocator); + const fiatBalanceStr = rawFiatBalanceText.split(' ')[0]; + return fiatBalanceStr === balanceReplacer; + } + ); + + return adaBalanceIsHidden && fiatBalanceIsHidden; + } } export default WalletCommonBase; From 21b0bf198305b3a8ad05b7939d3312bb9f2f8dd6 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 2 Jul 2024 20:25:49 +0300 Subject: [PATCH 286/464] added methods for checking balance in txs --- .../walletTab/walletTransactions.page.js | 85 ++++++++++++++++++- 1 file changed, 81 insertions(+), 4 deletions(-) diff --git a/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js b/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js index 03458bbd79..0d082c0c4b 100644 --- a/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js +++ b/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js @@ -8,6 +8,7 @@ import WalletTab from './walletTab.page.js'; import ExportTransactionsModal from './transactionsModals/exportTransactionModal.page.js'; import { convertPrettyDateToNormal, convertPrettyTimeToNormal } from '../../../utils/utils.js'; import MemoWarningModal from './transactionsModals/memoWarningModal.page.js'; +import { balanceReplacer } from '../../../helpers/constants.js'; export class TransactionsSubTab extends WalletTab { // locators @@ -44,8 +45,8 @@ export class TransactionsSubTab extends WalletTab { }; txRowLocator = (groupIndex, txIndex) => { return { - locator: `wallet:transactions:transactionsList:transactionsGroup_${groupIndex}-transaction_${txIndex}-box`, - method: 'id', + locator: `#wallet\\:transactions\\:transactionsList\\:transactionsGroup_${groupIndex}-transaction_${txIndex}-box > div`, + method: 'css', }; }; txTypeTextLocator = (groupIndex, txIndex) => { @@ -108,12 +109,24 @@ export class TransactionsSubTab extends WalletTab { method: 'id', }; }; + txFromAddressAmountTextLocator = (groupIndex, txIndex, fromAddressIndex) => { + return { + locator: `wallet:transactions:transactionsList:transactionsGroup_${groupIndex}:transaction_${txIndex}:txFullInfo:fromAddresses:address_${fromAddressIndex}-amount-text`, + method: 'id', + }; + }; txToAddressTextLocator = (groupIndex, txIndex, toAddressIndex) => { return { locator: `wallet:transactions:transactionsList:transactionsGroup_${groupIndex}:transaction_${txIndex}:txFullInfo:toAddresses:address_${toAddressIndex}-address-text`, method: 'id', }; }; + txToAddressAmountTextLocator = (groupIndex, txIndex, toAddressIndex) => { + return { + locator: `wallet:transactions:transactionsList:transactionsGroup_${groupIndex}:transaction_${txIndex}:txFullInfo:toAddresses:address_${toAddressIndex}-amount-text`, + method: 'id', + }; + }; txAddMemoButtonLocator = (groupIndex, txIndex) => { return { locator: `wallet:transactions:transactionsList:transactionsGroup_${groupIndex}:transaction_${txIndex}:txFullInfo-addMemo-button`, @@ -232,9 +245,9 @@ export class TransactionsSubTab extends WalletTab { } const txAmountString = await this.getText(this.txAmountTextLocator(groupIndex, txIndex)); const txAmount = parseFloat(txAmountString.split(' ')[0]); - await this.click(this.txRowLocator(groupIndex, txIndex)); + await this.clickOnTxRow(groupIndex, txIndex); const txHashId = await this.getTxHashID(groupIndex, txIndex); - await this.click(this.txRowLocator(groupIndex, txIndex)); + await this.clickOnTxRow(groupIndex, txIndex); const txInfo = { txType, txTime, @@ -489,6 +502,70 @@ export class TransactionsSubTab extends WalletTab { ); return noMemoState; } + async _allCollapsedTxsBalanceHiddenInGroup(groupObject) { + this.logger.info(`TransactionsSubTab::_allCollapsedTxsBalanceHiddenInGroup is called`); + const { groupIndex } = groupObject; + const result = []; + const allTxs = await this.findElements(this.txsInGroupLocator(groupIndex)); + for (let txIndex = 0; txIndex < allTxs.length; txIndex++) { + const txFeeString = await this.getText(this.txFeeTextLocator(groupIndex, txIndex)); + const txAmountRawString = await this.getText(this.txAmountTextLocator(groupIndex, txIndex)); + const txAmountString = txAmountRawString.split(' ')[0]; + + const txFeeHiddenState = txFeeString === balanceReplacer || txFeeString === '-'; + const txAmountHiddenState = txAmountString === balanceReplacer; + + result.push(txFeeHiddenState && txAmountHiddenState); + } + return result; + } + async _allExpandedTxsBalanceHiddenInGroup(groupObject) { + this.logger.info(`TransactionsSubTab::_allCollapsedTxsBalanceHiddenInGroup is called`); + const { groupIndex } = groupObject; + const result = []; + const allTxs = await this.findElements(this.txsInGroupLocator(groupIndex)); + for (let txIndex = 0; txIndex < allTxs.length; txIndex++) { + await this.clickOnTxRow(groupIndex, txIndex); + // check all from addresses + const amountFromAddrs = await this.__getAmountOfFromAddresses(groupIndex, txIndex); + for (let addrFromIndex = 0; addrFromIndex < amountFromAddrs; addrFromIndex++) { + const addrFromAmountRawStr = await this.getText( + this.txFromAddressAmountTextLocator(groupIndex, txIndex, addrFromIndex) + ); + const addrFromAmountStr = addrFromAmountRawStr.split(' ')[0]; + result.push(addrFromAmountStr === balanceReplacer); + } + // check all to addresses + const amountToAddrs = await this.__getAmountOfToAddresses(groupIndex, txIndex); + for (let addrToIndex = 0; addrToIndex < amountToAddrs; addrToIndex++) { + const addrToAmountRawStr = await this.getText(this.txToAddressAmountTextLocator(groupIndex, txIndex, addrToIndex)); + const addrToAmountStr = addrToAmountRawStr.split(' ')[0]; + result.push(addrToAmountStr === balanceReplacer); + } + await this.clickOnTxRow(groupIndex, txIndex); + } + return result; + } + async balanceIsHiddenInCollapsedTxs() { + this.logger.info(`TransactionsSubTab::balanceIsHiddenInCollapsedTxs is called`); + const allGroups = await this.__getTxsGroups(); + const allTxsBalanceHidden = []; + for (const group of allGroups) { + const txsBalanceHiddenInGroup = await this._allCollapsedTxsBalanceHiddenInGroup(group); + allTxsBalanceHidden.push(...txsBalanceHiddenInGroup); + } + return allTxsBalanceHidden.every(txBalanceHidden => txBalanceHidden === true); + } + async balanceIsHiddenInExpandedTxs() { + this.logger.info(`TransactionsSubTab::balanceIsHiddenInCollapsedTxs is called`); + const allGroups = await this.__getTxsGroups(); + const allTxsBalanceHidden = []; + for (const group of allGroups) { + const expandedTxsBalanceHiddenInGroup = await this._allExpandedTxsBalanceHiddenInGroup(group); + allTxsBalanceHidden.push(...expandedTxsBalanceHiddenInGroup); + } + return allTxsBalanceHidden.every(txBalanceHidden => txBalanceHidden === true); + } } export default TransactionsSubTab; From 66872823ce053b7e16e10609fde8b4782fec92e3 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 2 Jul 2024 20:26:57 +0300 Subject: [PATCH 287/464] added checks --- .../e2e-tests/test/25_hideShowBalance.test.js | 72 ++++++++++++++----- 1 file changed, 54 insertions(+), 18 deletions(-) diff --git a/packages/e2e-tests/test/25_hideShowBalance.test.js b/packages/e2e-tests/test/25_hideShowBalance.test.js index 16cfc25d31..23458fe1bb 100644 --- a/packages/e2e-tests/test/25_hideShowBalance.test.js +++ b/packages/e2e-tests/test/25_hideShowBalance.test.js @@ -5,39 +5,75 @@ import { expect } from 'chai'; import { getTestLogger } from '../utils/utils.js'; import { oneMinute } from '../helpers/timeConstants.js'; import driversPoolsManager from '../utils/driversPool.js'; -import AddNewWallet from '../pages/addNewWallet.page.js'; +import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; +import { testWallet1 } from '../utils/testWallets.js'; -describe('Deleting a memo', function () { +describe('Hide and show balance', function () { this.timeout(2 * oneMinute); let webdriver = null; let logger = null; - const oldMemo = 'j1hKEo4Er4FDLFAtGBo07jIcXBSOqx9D16U0sUIl'; before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); + await preloadDBAndStorage(webdriver, logger, 'testWallet1MemoAdded'); + await waitTxPage(webdriver, logger); }); - - it('Prepare DB and storages', async function () { - const addWalletPage = new AddNewWallet(webdriver, logger); - const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; - await addWalletPage.prepareDBAndStorage('testWallet1MemoAdded'); - await addWalletPage.refreshPage(); - }); - - it('Check transactions page', async function () { + // check the default state. The balance should be displayed + it('Check default state', async function () { const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.waitPrepareWalletBannerIsClosed(); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; + const walletInfo = await transactionsPage.getSelectedWalletInfo(); + expect(walletInfo.balance, 'The wallet balance is different').to.equal(testWallet1.balance); + expect(walletInfo.name, `The wallet name is incorrect`).to.equal(testWallet1.name); + expect(walletInfo.plate, `The wallet plate is incorrect`).to.equal(testWallet1.plate); }); - - // check the default state. The balance should be displayed // click hide balance + it('Hide balance', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + await transactionsPage.showHideBalance(); + }); + it('Check balance is hidden on the top bar wallet info', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + const balanceIsHidden = await transactionsPage.balanceIsHiddenOnTopPanel(); + expect(balanceIsHidden, 'Balance is not hidden').to.be.true; + }); + it('Check balance is hidden in collapsed txs', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + const collapsedTxsBalanceHidden = await transactionsPage.balanceIsHiddenInCollapsedTxs(); + expect(collapsedTxsBalanceHidden, 'Balance is not hidden in collapsed txs').to.be.true; + }); + // check balance in an expanded tx + it('Check balance is hidden in expanded txs', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + const expandedTxsBalanceHidden = await transactionsPage.balanceIsHiddenInExpandedTxs(); + expect(expandedTxsBalanceHidden, 'Balance is not hidden in expanded txs').to.be.true; + }); + // check balance on Receive tab + // add checking Staking page when testnetwork is added + // click show balance + it('Show balance', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + await transactionsPage.goToWalletTab(); + await transactionsPage.showHideBalance(); + }); // check balance on the the top bar wallet info panel + it('Check balance is shown on the top bar wallet info', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + const balanceIsHidden = await transactionsPage.balanceIsHiddenOnTopPanel(); + expect(balanceIsHidden, 'Balance is hidden').to.be.false; + }); // check balance in a collapsed tx + it('Check balance is shown in collapsed txs', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + const collapsedTxsBalanceHidden = await transactionsPage.balanceIsHiddenInCollapsedTxs(); + expect(collapsedTxsBalanceHidden, 'Balance is hidden in collapsed txs').to.be.false; + }); // check balance in an expanded tx + it('Check balance is shown in expanded txs', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + const expandedTxsBalanceHidden = await transactionsPage.balanceIsHiddenInExpandedTxs(); + expect(expandedTxsBalanceHidden, 'Balance is hidden in expanded txs').to.be.false; + }); // check balance on Receive tab // add checking Staking page when testnetwork is added From 266520a1cddaa64b79126f3e23b38edc8ae70721 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 2 Jul 2024 20:50:12 +0300 Subject: [PATCH 288/464] added method allAddressesBalancesHidden on Receive page --- .../pages/wallet/walletTab/receiveSubTab.page.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/packages/e2e-tests/pages/wallet/walletTab/receiveSubTab.page.js b/packages/e2e-tests/pages/wallet/walletTab/receiveSubTab.page.js index 6a0739dbde..059a6237a9 100644 --- a/packages/e2e-tests/pages/wallet/walletTab/receiveSubTab.page.js +++ b/packages/e2e-tests/pages/wallet/walletTab/receiveSubTab.page.js @@ -1,6 +1,7 @@ import WalletTab from './walletTab.page.js'; import BasePage from '../../basepage.js'; import { twoSeconds, quarterSecond } from '../../../helpers/timeConstants.js'; +import { balanceReplacer } from '../../../helpers/constants.js'; class GenerateURIModal extends BasePage { // locators @@ -378,7 +379,7 @@ class ReceiveSubTab extends WalletTab { return allAddrs.length; } /** - * + * Getting an address info from the Receive page * @param {number} rowIndex An index of a row in the addresses table starting from 0 * @returns {Promise<{address: string, balance: number}>} */ @@ -442,7 +443,7 @@ class ReceiveSubTab extends WalletTab { return new DisplayURIModal(this.driver, this.logger); } /** - * + * Generating the Payment URI with the selected address * @param {number} rowIndex An index of a row in the addresses table starting from 0 * @param {string} adaAmount ADA amount to receive * @returns {Promise<{address: string, amount: string, genLink: string}>} @@ -474,6 +475,16 @@ class ReceiveSubTab extends WalletTab { this.logger.info(`ReceiveSubTab::getCurrentReceiveAddr::address - "${address}"`); return address; } + async allAddressesBalancesHidden() { + this.logger.info(`ReceiveSubTab::allAddressesBalancesHidden is called.`); + const addrsAmount = await this.getAmountOfAddresses(); + const allBalancesHidden = []; + for (let rowIndex = 0; rowIndex < addrsAmount; rowIndex++) { + const addrBalanceText = await this.getText(this.addressBalanceTextInRowLocator(rowIndex)); + allBalancesHidden.push(addrBalanceText === balanceReplacer || '-'); + } + return allBalancesHidden.every(addrBalance => addrBalance === true); + } } export default ReceiveSubTab; From 9255ed6664ccfce54501d02835f19f923ef0646f Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 2 Jul 2024 20:50:35 +0300 Subject: [PATCH 289/464] added checks for the Receive page --- .../e2e-tests/test/25_hideShowBalance.test.js | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/packages/e2e-tests/test/25_hideShowBalance.test.js b/packages/e2e-tests/test/25_hideShowBalance.test.js index 23458fe1bb..e6b67db330 100644 --- a/packages/e2e-tests/test/25_hideShowBalance.test.js +++ b/packages/e2e-tests/test/25_hideShowBalance.test.js @@ -1,6 +1,7 @@ import BasePage from '../pages/basepage.js'; import { customAfterEach } from '../utils/customHooks.js'; import TransactionsSubTab from '../pages/wallet/walletTab/walletTransactions.page.js'; +import ReceiveSubTab from '../pages/wallet/walletTab/receiveSubTab.page.js'; import { expect } from 'chai'; import { getTestLogger } from '../utils/utils.js'; import { oneMinute } from '../helpers/timeConstants.js'; @@ -49,11 +50,24 @@ describe('Hide and show balance', function () { expect(expandedTxsBalanceHidden, 'Balance is not hidden in expanded txs').to.be.true; }); // check balance on Receive tab + it('Check balances are hidden on Receive page', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + await transactionsPage.goToReceiveSubMenu(); + const receivePage = new ReceiveSubTab(webdriver, logger); + await receivePage.selectBaseExtHasBalanceAddrs(); + const balanceExtAddrHidden = await receivePage.allAddressesBalancesHidden(); + expect(balanceExtAddrHidden, 'Balances of external addresses are not hidden').to.be.true; + await receivePage.selectBaseInterHasBalanceAddrs(); + const balanceInterAddrHidden = await receivePage.allAddressesBalancesHidden(); + expect(balanceInterAddrHidden, 'Balances of internal addresses are not hidden').to.be.true; + }); // add checking Staking page when testnetwork is added // click show balance it('Show balance', async function () { + const receivePage = new ReceiveSubTab(webdriver, logger); + await receivePage.goToWalletTab(); + await receivePage.goToTransactionsSubMenu(); const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.goToWalletTab(); await transactionsPage.showHideBalance(); }); // check balance on the the top bar wallet info panel @@ -75,6 +89,17 @@ describe('Hide and show balance', function () { expect(expandedTxsBalanceHidden, 'Balance is hidden in expanded txs').to.be.false; }); // check balance on Receive tab + it('Check balances are shown on Receive page', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + await transactionsPage.goToReceiveSubMenu(); + const receivePage = new ReceiveSubTab(webdriver, logger); + await receivePage.selectBaseExtHasBalanceAddrs(); + const balanceExtAddrHidden = await receivePage.allAddressesBalancesHidden(); + expect(balanceExtAddrHidden, 'Balances of external addresses are hidden').to.be.false; + await receivePage.selectBaseInterHasBalanceAddrs(); + const balanceInterAddrHidden = await receivePage.allAddressesBalancesHidden(); + expect(balanceInterAddrHidden, 'Balances of internal addresses are hidden').to.be.false; + }); // add checking Staking page when testnetwork is added afterEach(function (done) { From 672745804f4d88ddc1a1497036425e5ac88cbdd5 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 2 Jul 2024 20:55:47 +0300 Subject: [PATCH 290/464] added issue number and moved to blacklist --- .../25_hideShowBalance.test.js | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) rename packages/e2e-tests/test/{ => blacklist}/25_hideShowBalance.test.js (89%) diff --git a/packages/e2e-tests/test/25_hideShowBalance.test.js b/packages/e2e-tests/test/blacklist/25_hideShowBalance.test.js similarity index 89% rename from packages/e2e-tests/test/25_hideShowBalance.test.js rename to packages/e2e-tests/test/blacklist/25_hideShowBalance.test.js index e6b67db330..371f859482 100644 --- a/packages/e2e-tests/test/25_hideShowBalance.test.js +++ b/packages/e2e-tests/test/blacklist/25_hideShowBalance.test.js @@ -1,14 +1,15 @@ -import BasePage from '../pages/basepage.js'; -import { customAfterEach } from '../utils/customHooks.js'; -import TransactionsSubTab from '../pages/wallet/walletTab/walletTransactions.page.js'; -import ReceiveSubTab from '../pages/wallet/walletTab/receiveSubTab.page.js'; +import BasePage from '../../pages/basepage.js'; +import { customAfterEach } from '../../utils/customHooks.js'; +import TransactionsSubTab from '../../pages/wallet/walletTab/walletTransactions.page.js'; +import ReceiveSubTab from '../../pages/wallet/walletTab/receiveSubTab.page.js'; import { expect } from 'chai'; -import { getTestLogger } from '../utils/utils.js'; -import { oneMinute } from '../helpers/timeConstants.js'; -import driversPoolsManager from '../utils/driversPool.js'; -import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; -import { testWallet1 } from '../utils/testWallets.js'; +import { getTestLogger } from '../../utils/utils.js'; +import { oneMinute } from '../../helpers/timeConstants.js'; +import driversPoolsManager from '../../utils/driversPool.js'; +import { preloadDBAndStorage, waitTxPage } from '../../helpers/restoreWalletHelper.js'; +import { testWallet1 } from '../../utils/testWallets.js'; +// Issue https://emurgo.atlassian.net/browse/YOEXT-1218 describe('Hide and show balance', function () { this.timeout(2 * oneMinute); let webdriver = null; From 6ef59581ef5c6b1c8071dcfcd69fc59e515f7597 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Wed, 3 Jul 2024 12:58:22 +0300 Subject: [PATCH 291/464] moved preparing DB into before step --- .../e2e-tests/test/04_removingWallet.test.js | 18 +++----------- .../test/05_removingWallet_2.test.js | 24 +++++++------------ .../e2e-tests/test/06_renamingWallet.test.js | 19 +++------------ .../test/07_changingPassword.test.js | 17 +++---------- .../e2e-tests/test/08_downloadingLogs.test.js | 19 +++------------ .../test/09_exportTransactions.test.js | 19 +++------------ .../test/10_exportTxsNegative.test.js | 19 +++------------ .../test/18_changingLanguageSettings.test.js | 19 +++------------ .../e2e-tests/test/19_changingFiat.test.js | 21 ++++------------ .../test/20_changingCardanoExplorer.test.js | 19 +++------------ .../e2e-tests/test/21_checkingTOS.test.js | 19 +++------------ packages/e2e-tests/test/22_addingMemo.test.js | 19 +++------------ packages/e2e-tests/test/23_editMemo.test.js | 19 +++------------ .../e2e-tests/test/24_deletingMemo.test.js | 19 +++------------ 14 files changed, 48 insertions(+), 222 deletions(-) diff --git a/packages/e2e-tests/test/04_removingWallet.test.js b/packages/e2e-tests/test/04_removingWallet.test.js index 0175d0fef2..cb7ff1be67 100644 --- a/packages/e2e-tests/test/04_removingWallet.test.js +++ b/packages/e2e-tests/test/04_removingWallet.test.js @@ -8,6 +8,7 @@ import SettingsTab from '../pages/wallet/settingsTab/settingsTab.page.js'; import WalletSubTab from '../pages/wallet/settingsTab/walletSubTab.page.js'; import AddNewWallet from '../pages/addNewWallet.page.js'; import driversPoolsManager from '../utils/driversPool.js'; +import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; describe('Removing a wallet, one wallet is added', function () { this.timeout(2 * oneMinute); @@ -17,21 +18,8 @@ describe('Removing a wallet, one wallet is added', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - }); - - it('Prepare DB and storages', async function () { - const addWalletPage = new AddNewWallet(webdriver, logger); - const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; - await addWalletPage.prepareDBAndStorage('testWallet1'); - await addWalletPage.refreshPage(); - }); - - it('Check transactions page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.waitPrepareWalletBannerIsClosed(); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); }); it('Remove wallet', async function () { diff --git a/packages/e2e-tests/test/05_removingWallet_2.test.js b/packages/e2e-tests/test/05_removingWallet_2.test.js index 61fb7f163b..8dd16002e6 100644 --- a/packages/e2e-tests/test/05_removingWallet_2.test.js +++ b/packages/e2e-tests/test/05_removingWallet_2.test.js @@ -4,7 +4,12 @@ import { testWallet1, testWallet2 } from '../utils/testWallets.js'; import { expect } from 'chai'; import { getTestLogger } from '../utils/utils.js'; import { oneMinute } from '../helpers/timeConstants.js'; -import { checkCorrectWalletIsDisplayed, restoreWallet } from '../helpers/restoreWalletHelper.js'; +import { + checkCorrectWalletIsDisplayed, + restoreWallet, + preloadDBAndStorage, + waitTxPage, +} from '../helpers/restoreWalletHelper.js'; import SettingsTab from '../pages/wallet/settingsTab/settingsTab.page.js'; import WalletSubTab from '../pages/wallet/settingsTab/walletSubTab.page.js'; import WalletCommonBase from '../pages/walletCommonBase.page.js'; @@ -20,21 +25,8 @@ describe('Removing the first wallet, two wallets is added', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - }); - - it('Prepare DB and storages', async function () { - const addWalletPage = new AddNewWallet(webdriver, logger); - const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; - await addWalletPage.prepareDBAndStorage('testWallet1'); - await addWalletPage.refreshPage(); - }); - - it('Check transactions page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.waitPrepareWalletBannerIsClosed(); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); }); // restore the second wallet diff --git a/packages/e2e-tests/test/06_renamingWallet.test.js b/packages/e2e-tests/test/06_renamingWallet.test.js index a0c0d3cdc5..31427bafc3 100644 --- a/packages/e2e-tests/test/06_renamingWallet.test.js +++ b/packages/e2e-tests/test/06_renamingWallet.test.js @@ -8,7 +8,7 @@ import SettingsTab from '../pages/wallet/settingsTab/settingsTab.page.js'; import WalletSubTab from '../pages/wallet/settingsTab/walletSubTab.page.js'; import TransactionsSubTab from '../pages/wallet/walletTab/walletTransactions.page.js'; import driversPoolsManager from '../utils/driversPool.js'; -import AddNewWallet from '../pages/addNewWallet.page.js'; +import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; describe('Renaming the wallet', function () { this.timeout(2 * oneMinute); @@ -19,21 +19,8 @@ describe('Renaming the wallet', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - }); - - it('Prepare DB and storages', async function () { - const addWalletPage = new AddNewWallet(webdriver, logger); - const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; - await addWalletPage.prepareDBAndStorage('testWallet1'); - await addWalletPage.refreshPage(); - }); - - it('Check transactions page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.waitPrepareWalletBannerIsClosed(); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); }); it('Go to Wallet subtub in Settings', async function () { diff --git a/packages/e2e-tests/test/07_changingPassword.test.js b/packages/e2e-tests/test/07_changingPassword.test.js index c2633d4ac4..9ac828348c 100644 --- a/packages/e2e-tests/test/07_changingPassword.test.js +++ b/packages/e2e-tests/test/07_changingPassword.test.js @@ -12,7 +12,7 @@ import WalletTab from '../pages/wallet/walletTab/walletTab.page.js'; import SendSubTab from '../pages/wallet/walletTab/sendSubTab.page.js'; import { PASSWORDS_DONT_MATCH, PASSWORD_TOO_SHORT, WRONG_PASSWORD } from '../helpers/messages.js'; import driversPoolsManager from '../utils/driversPool.js'; -import AddNewWallet from '../pages/addNewWallet.page.js'; +import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; describe('Changing wallet password', function () { this.timeout(2 * oneMinute); @@ -22,19 +22,8 @@ describe('Changing wallet password', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - }); - - it('Prepare DB and storages', async function () { - const addWalletPage = new AddNewWallet(webdriver, logger); - const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; - await addWalletPage.prepareDBAndStorage('testWallet1'); - await addWalletPage.refreshPage(); - }); - - it('Check transactions page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.waitPrepareWalletBannerIsClosed(); + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); }); const oldPassword = getPassword(); diff --git a/packages/e2e-tests/test/08_downloadingLogs.test.js b/packages/e2e-tests/test/08_downloadingLogs.test.js index d63b9e1231..33492f7022 100644 --- a/packages/e2e-tests/test/08_downloadingLogs.test.js +++ b/packages/e2e-tests/test/08_downloadingLogs.test.js @@ -12,7 +12,7 @@ import { oneMinute } from '../helpers/timeConstants.js'; import SettingsTab from '../pages/wallet/settingsTab/settingsTab.page.js'; import SupportSubTab from '../pages/wallet/settingsTab/supportSubTab.page.js'; import driversPoolsManager from '../utils/driversPool.js'; -import AddNewWallet from '../pages/addNewWallet.page.js'; +import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; describe('Downloading logs for support', function () { this.timeout(2 * oneMinute); @@ -22,24 +22,11 @@ describe('Downloading logs for support', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); cleanDownloads(); }); - it('Prepare DB and storages', async function () { - const addWalletPage = new AddNewWallet(webdriver, logger); - const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; - await addWalletPage.prepareDBAndStorage('testWallet1'); - await addWalletPage.refreshPage(); - }); - - it('Check transactions page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.waitPrepareWalletBannerIsClosed(); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; - }); - it('Go to Settings -> Support', async function () { const transactionsPage = new TransactionsSubTab(webdriver, logger); await transactionsPage.goToSettingsTab(); diff --git a/packages/e2e-tests/test/09_exportTransactions.test.js b/packages/e2e-tests/test/09_exportTransactions.test.js index 6d0aa52623..5bb597171f 100644 --- a/packages/e2e-tests/test/09_exportTransactions.test.js +++ b/packages/e2e-tests/test/09_exportTransactions.test.js @@ -14,7 +14,7 @@ import { import { oneMinute } from '../helpers/timeConstants.js'; import driversPoolsManager from '../utils/driversPool.js'; import { compareExportedTxsAndDisplayedTxs } from '../helpers/customChecks.js'; -import AddNewWallet from '../pages/addNewWallet.page.js'; +import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; describe('Export transactions, positive', function () { this.timeout(2 * oneMinute); @@ -24,24 +24,11 @@ describe('Export transactions, positive', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); cleanDownloads(); }); - it('Prepare DB and storages', async function () { - const addWalletPage = new AddNewWallet(webdriver, logger); - const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; - await addWalletPage.prepareDBAndStorage('testWallet1'); - await addWalletPage.refreshPage(); - }); - - it('Check transactions page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.waitPrepareWalletBannerIsClosed(); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; - }); - // Open the export txs modal window it('Open the export modal window', async function () { const transactionsPage = new TransactionsSubTab(webdriver, logger); diff --git a/packages/e2e-tests/test/10_exportTxsNegative.test.js b/packages/e2e-tests/test/10_exportTxsNegative.test.js index 7b831d89b2..f78cd46aa3 100644 --- a/packages/e2e-tests/test/10_exportTxsNegative.test.js +++ b/packages/e2e-tests/test/10_exportTxsNegative.test.js @@ -12,7 +12,7 @@ import { import { oneMinute } from '../helpers/timeConstants.js'; import driversPoolsManager from '../utils/driversPool.js'; import { Colors } from '../helpers/constants.js'; -import AddNewWallet from '../pages/addNewWallet.page.js'; +import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; describe('Export transactions, negative cases', function () { this.timeout(2 * oneMinute); @@ -22,24 +22,11 @@ describe('Export transactions, negative cases', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); cleanDownloads(); }); - it('Prepare DB and storages', async function () { - const addWalletPage = new AddNewWallet(webdriver, logger); - const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; - await addWalletPage.prepareDBAndStorage('testWallet1'); - await addWalletPage.refreshPage(); - }); - - it('Check transactions page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.waitPrepareWalletBannerIsClosed(); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; - }); - describe('Both dates are 00/00/0000', function () { it('Open the export modal window', async function () { const transactionsPage = new TransactionsSubTab(webdriver, logger); diff --git a/packages/e2e-tests/test/18_changingLanguageSettings.test.js b/packages/e2e-tests/test/18_changingLanguageSettings.test.js index 7f849d1614..d6edb7d5bf 100644 --- a/packages/e2e-tests/test/18_changingLanguageSettings.test.js +++ b/packages/e2e-tests/test/18_changingLanguageSettings.test.js @@ -7,7 +7,7 @@ import { oneMinute } from '../helpers/timeConstants.js'; import SettingsTab from '../pages/wallet/settingsTab/settingsTab.page.js'; import driversPoolsManager from '../utils/driversPool.js'; import GeneralSubTab from '../pages/wallet/settingsTab/generalSubTab.page.js'; -import AddNewWallet from '../pages/addNewWallet.page.js'; +import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; describe('Changing language through the Settings', function () { this.timeout(2 * oneMinute); @@ -17,6 +17,8 @@ describe('Changing language through the Settings', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); }); const testData = [ @@ -46,21 +48,6 @@ describe('Changing language through the Settings', function () { }, ]; - it('Prepare DB and storages', async function () { - const addWalletPage = new AddNewWallet(webdriver, logger); - const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; - await addWalletPage.prepareDBAndStorage('testWallet1'); - await addWalletPage.refreshPage(); - }); - - it('Check transactions page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.waitPrepareWalletBannerIsClosed(); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; - }); - it('Open General settings', async function () { const transactionsPage = new TransactionsSubTab(webdriver, logger); await transactionsPage.goToSettingsTab(); diff --git a/packages/e2e-tests/test/19_changingFiat.test.js b/packages/e2e-tests/test/19_changingFiat.test.js index 871b68d7d9..5f043af25c 100644 --- a/packages/e2e-tests/test/19_changingFiat.test.js +++ b/packages/e2e-tests/test/19_changingFiat.test.js @@ -7,7 +7,7 @@ import { oneMinute } from '../helpers/timeConstants.js'; import SettingsTab from '../pages/wallet/settingsTab/settingsTab.page.js'; import driversPoolsManager from '../utils/driversPool.js'; import GeneralSubTab from '../pages/wallet/settingsTab/generalSubTab.page.js'; -import AddNewWallet from '../pages/addNewWallet.page.js'; +import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; describe('Changing fiat currencies', function () { this.timeout(2 * oneMinute); @@ -18,26 +18,13 @@ describe('Changing fiat currencies', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); + prices = await getCurrenciesPrices(); }); const testData = ['BRL', 'ETH', 'BTC', 'KRW', 'CNY', 'EUR', 'JPY', 'USD', 'ADA']; - it('Prepare DB and storages', async function () { - const addWalletPage = new AddNewWallet(webdriver, logger); - const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; - await addWalletPage.prepareDBAndStorage('testWallet1'); - await addWalletPage.refreshPage(); - }); - - it('Check transactions page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.waitPrepareWalletBannerIsClosed(); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; - prices = await getCurrenciesPrices(); - }); - for (const testDatum of testData) { describe(`Changing fiat currency to ${testDatum}`, function () { it('Open General settings', async function () { diff --git a/packages/e2e-tests/test/20_changingCardanoExplorer.test.js b/packages/e2e-tests/test/20_changingCardanoExplorer.test.js index 5ad3b5b0c9..3cfb58de64 100644 --- a/packages/e2e-tests/test/20_changingCardanoExplorer.test.js +++ b/packages/e2e-tests/test/20_changingCardanoExplorer.test.js @@ -7,7 +7,7 @@ import { oneMinute } from '../helpers/timeConstants.js'; import SettingsTab from '../pages/wallet/settingsTab/settingsTab.page.js'; import driversPoolsManager from '../utils/driversPool.js'; import BlockchainSubTab from '../pages/wallet/settingsTab/blockchainSubTab.page.js'; -import AddNewWallet from '../pages/addNewWallet.page.js'; +import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; describe('Changing explorer', function () { this.timeout(2 * oneMinute); @@ -17,6 +17,8 @@ describe('Changing explorer', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); }); const testData = [ @@ -42,21 +44,6 @@ describe('Changing explorer', function () { }, ]; - it('Prepare DB and storages', async function () { - const addWalletPage = new AddNewWallet(webdriver, logger); - const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; - await addWalletPage.prepareDBAndStorage('testWallet1'); - await addWalletPage.refreshPage(); - }); - - it('Check transactions page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.waitPrepareWalletBannerIsClosed(); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; - }); - for (const testDatum of testData) { describe(`Changing Cardano explorer to ${testDatum.explorerName}`, function () { it('Open Blockchain settings', async function () { diff --git a/packages/e2e-tests/test/21_checkingTOS.test.js b/packages/e2e-tests/test/21_checkingTOS.test.js index ebe3e9d1f0..106d869ab7 100644 --- a/packages/e2e-tests/test/21_checkingTOS.test.js +++ b/packages/e2e-tests/test/21_checkingTOS.test.js @@ -7,7 +7,7 @@ import { oneMinute } from '../helpers/timeConstants.js'; import SettingsTab from '../pages/wallet/settingsTab/settingsTab.page.js'; import driversPoolsManager from '../utils/driversPool.js'; import TermOfServiceAgreementSubTab from '../pages/wallet/settingsTab/tosSubTab.page.js'; -import AddNewWallet from '../pages/addNewWallet.page.js'; +import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; describe('Checking Term Of Service Agreement', function () { this.timeout(2 * oneMinute); @@ -17,21 +17,8 @@ describe('Checking Term Of Service Agreement', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - }); - - it('Prepare DB and storages', async function () { - const addWalletPage = new AddNewWallet(webdriver, logger); - const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; - await addWalletPage.prepareDBAndStorage('testWallet1'); - await addWalletPage.refreshPage(); - }); - - it('Check transactions page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.waitPrepareWalletBannerIsClosed(); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; + await preloadDBAndStorage(webdriver, logger, 'testWallet1MemoAdded'); + await waitTxPage(webdriver, logger); }); it('Open Term Of User Agreement', async function () { diff --git a/packages/e2e-tests/test/22_addingMemo.test.js b/packages/e2e-tests/test/22_addingMemo.test.js index bc629fd571..ade581a6d4 100644 --- a/packages/e2e-tests/test/22_addingMemo.test.js +++ b/packages/e2e-tests/test/22_addingMemo.test.js @@ -7,7 +7,7 @@ import { getTestLogger } from '../utils/utils.js'; import { oneMinute } from '../helpers/timeConstants.js'; import driversPoolsManager from '../utils/driversPool.js'; import { getTestString } from '../helpers/constants.js'; -import AddNewWallet from '../pages/addNewWallet.page.js'; +import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; describe('Adding a memo to a completed Tx', function () { this.timeout(2 * oneMinute); @@ -18,21 +18,8 @@ describe('Adding a memo to a completed Tx', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - }); - - it('Prepare DB and storages', async function () { - const addWalletPage = new AddNewWallet(webdriver, logger); - const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; - await addWalletPage.prepareDBAndStorage('testWallet1'); - await addWalletPage.refreshPage(); - }); - - it('Check transactions page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.waitPrepareWalletBannerIsClosed(); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); }); // open the latests tx diff --git a/packages/e2e-tests/test/23_editMemo.test.js b/packages/e2e-tests/test/23_editMemo.test.js index 1e9951f33c..0087c6abda 100644 --- a/packages/e2e-tests/test/23_editMemo.test.js +++ b/packages/e2e-tests/test/23_editMemo.test.js @@ -7,7 +7,7 @@ import { getTestLogger } from '../utils/utils.js'; import { oneMinute } from '../helpers/timeConstants.js'; import driversPoolsManager from '../utils/driversPool.js'; import { getTestString } from '../helpers/constants.js'; -import AddNewWallet from '../pages/addNewWallet.page.js'; +import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; describe('Editing a memo', function () { this.timeout(2 * oneMinute); @@ -19,21 +19,8 @@ describe('Editing a memo', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - }); - - it('Prepare DB and storages', async function () { - const addWalletPage = new AddNewWallet(webdriver, logger); - const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; - await addWalletPage.prepareDBAndStorage('testWallet1MemoAdded'); - await addWalletPage.refreshPage(); - }); - - it('Check transactions page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.waitPrepareWalletBannerIsClosed(); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; + await preloadDBAndStorage(webdriver, logger, 'testWallet1MemoAdded'); + await waitTxPage(webdriver, logger); }); it('Expand tx', async function () { diff --git a/packages/e2e-tests/test/24_deletingMemo.test.js b/packages/e2e-tests/test/24_deletingMemo.test.js index 6b903565bc..9bd63b1d1a 100644 --- a/packages/e2e-tests/test/24_deletingMemo.test.js +++ b/packages/e2e-tests/test/24_deletingMemo.test.js @@ -5,7 +5,7 @@ import { expect } from 'chai'; import { getTestLogger } from '../utils/utils.js'; import { oneMinute } from '../helpers/timeConstants.js'; import driversPoolsManager from '../utils/driversPool.js'; -import AddNewWallet from '../pages/addNewWallet.page.js'; +import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; describe('Deleting a memo', function () { this.timeout(2 * oneMinute); @@ -16,21 +16,8 @@ describe('Deleting a memo', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - }); - - it('Prepare DB and storages', async function () { - const addWalletPage = new AddNewWallet(webdriver, logger); - const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; - await addWalletPage.prepareDBAndStorage('testWallet1MemoAdded'); - await addWalletPage.refreshPage(); - }); - - it('Check transactions page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.waitPrepareWalletBannerIsClosed(); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; + await preloadDBAndStorage(webdriver, logger, 'testWallet1MemoAdded'); + await waitTxPage(webdriver, logger); }); it('Expand tx', async function () { From 3bab38ebdb185745f046b4834bca98a9f1692b0c Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Wed, 3 Jul 2024 16:35:20 +0300 Subject: [PATCH 292/464] minor change of using wallet db template --- packages/e2e-tests/test/blacklist/25_hideShowBalance.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/e2e-tests/test/blacklist/25_hideShowBalance.test.js b/packages/e2e-tests/test/blacklist/25_hideShowBalance.test.js index 371f859482..f2546bec45 100644 --- a/packages/e2e-tests/test/blacklist/25_hideShowBalance.test.js +++ b/packages/e2e-tests/test/blacklist/25_hideShowBalance.test.js @@ -18,7 +18,7 @@ describe('Hide and show balance', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - await preloadDBAndStorage(webdriver, logger, 'testWallet1MemoAdded'); + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); await waitTxPage(webdriver, logger); }); // check the default state. The balance should be displayed From d380c71b4d081c8dd3eabb2ee93d6f625f6e247e Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Wed, 3 Jul 2024 16:36:37 +0300 Subject: [PATCH 293/464] updates in receiveSubTab --- .../receiveModals/displayURIModal.page.js | 51 ++++++ .../receiveModals/generateURIModal.page.js | 101 +++++++++++ .../wallet/walletTab/receiveSubTab.page.js | 166 ++---------------- 3 files changed, 167 insertions(+), 151 deletions(-) create mode 100644 packages/e2e-tests/pages/wallet/walletTab/receiveModals/displayURIModal.page.js create mode 100644 packages/e2e-tests/pages/wallet/walletTab/receiveModals/generateURIModal.page.js diff --git a/packages/e2e-tests/pages/wallet/walletTab/receiveModals/displayURIModal.page.js b/packages/e2e-tests/pages/wallet/walletTab/receiveModals/displayURIModal.page.js new file mode 100644 index 0000000000..5ab07a7c48 --- /dev/null +++ b/packages/e2e-tests/pages/wallet/walletTab/receiveModals/displayURIModal.page.js @@ -0,0 +1,51 @@ +import BasePage from '../../../basepage.js'; + +class DisplayURIModal extends BasePage { + // locators + uriDisplayModalLocator = { + locator: 'uriDisplayDialog-dialogWindow-modalWindow', + method: 'id', + }; + uriDisplayModalTitleLocator = { + locator: 'uriDisplayDialog-dialogTitle-text', + method: 'id', + }; + closeModalButtonLocator = { + locator: 'uriDisplayDialog-closeModal-button', + method: 'id', + }; + linkTextLocator = { + locator: 'uriDisplayDialog-address-text', + method: 'id', + }; + copyLinkButtonLocator = { + locator: 'uriDisplayDialog-copyAddress-button', + method: 'id', + }; + // methods + /** + * Getting a generated link right from the component itself + * @returns {Promise} + */ + async getGeneratedLink() { + this.logger.info(`ReceiveSubTab::DisplayURIModal::getGeneratedLink is called.`); + return await this.getText(this.linkTextLocator); + } + /** + * Getting a generated link by clicking on the copy button near the text field. + * The address will be saved into clipboard. + */ + async copyGeneratedLink() { + this.logger.info(`ReceiveSubTab::DisplayURIModal::copyGeneratedLink is called.`); + await this.click(this.copyGeneratedLink); + } + /** + * Closing the modal window + */ + async closeModalWindow() { + this.logger.info(`ReceiveSubTab::DisplayURIModal::closeModalWindow is called.`); + await this.click(this.closeModalButtonLocator); + } +} + +export default DisplayURIModal; diff --git a/packages/e2e-tests/pages/wallet/walletTab/receiveModals/generateURIModal.page.js b/packages/e2e-tests/pages/wallet/walletTab/receiveModals/generateURIModal.page.js new file mode 100644 index 0000000000..40340e302b --- /dev/null +++ b/packages/e2e-tests/pages/wallet/walletTab/receiveModals/generateURIModal.page.js @@ -0,0 +1,101 @@ +import BasePage from '../../../basepage.js'; +import { twoSeconds, quarterSecond } from '../../../../helpers/timeConstants.js'; + +class GenerateURIModal extends BasePage { + // locators + generateURIModalLocator = { + locator: 'uriGenerateDialog-dialogWindow-modalWindow', + method: 'id', + }; + generateURIModalTitleLocator = { + locator: 'uriGenerateDialog-dialogTitle-text', + method: 'id', + }; + generateButtonLocator = { + locator: 'uriGenerateDialog-generate-button', + method: 'id', + }; + closeModalButtonLocator = { + locator: 'uriGenerateDialog-closeModal-button', + method: 'id', + }; + receiverAddressTextLocator = { + locator: '//input[starts-with(@id, "receiver--")]', // unfortunately, I didn't find a way to make a proper ID + method: 'xpath', + }; + amountToSendInputLocator = { + locator: '//input[starts-with(@id, "amount--")]', // unfortunately, I didn't find a way to make a proper ID + method: 'xpath', + }; + inputErrorMessageFieldLocator = { + locator: '//p[starts-with(@id, "amount--") and contains(@id, "-helper-text")]', + method: 'xpath', + }; + // methods + /** + * Getting a receiver address from the disabled receiver input + * @returns {Promise} A bech32 string format address + */ + async getReceiverAddress() { + this.logger.info(`ReceiveSubTab::GenerateURIModal::getReceiverAddress is called.`); + const address = await this.getAttribute(this.receiverAddressTextLocator, 'value'); + this.logger.info(`ReceiveSubTab::GenerateURIModal::getReceiverAddress::address - "${address}"`); + return address; + } + /** + * Entering amount to send + * @param {string} adaAmount Amount to send + */ + async enterReceiveAmount(adaAmount) { + this.logger.info(`ReceiveSubTab::GenerateURIModal::enterReceiveAmount is called.`); + await this.click(this.amountToSendInputLocator); + await this.input(this.amountToSendInputLocator, adaAmount); + } + /** + * Pressing the button "Generate". + * The method contains a waiter with 2 seconds timeout + */ + async generateLink() { + this.logger.info(`ReceiveSubTab::GenerateURIModal::generateLink is called.`); + const buttonIsEnabled = await this.customWaiter( + async () => { + const buttonlIsEnabled = await this.getAttribute(this.generateButtonLocator, 'disabled'); + return buttonlIsEnabled === null; + }, + twoSeconds, + quarterSecond + ); + if (buttonIsEnabled) { + await this.click(this.generateButtonLocator); + } else { + throw new Error('The Continue button is disabled'); + } + } + /** + * Getting the error message of amount input field + * @returns {Promise} + */ + async getAmountErrorMessage() { + this.logger.info(`ReceiveSubTab::GenerateURIModal::getAmountErrorMessage is called.`); + + const messageAppeared = await this.customWaiter( + async () => { + const displayedText = await this.getText(this.inputErrorMessageFieldLocator); + return displayedText !== ''; + }, + twoSeconds, + quarterSecond + ); + if (messageAppeared) { + const errMsg = await this.getText(this.inputErrorMessageFieldLocator); + this.logger.info( + `ReceiveSubTab::GenerateURIModal::getAmountErrorMessage:errMsg - "${errMsg}"` + ); + return errMsg; + } else { + return ''; + } + } +} + +export default GenerateURIModal; diff --git a/packages/e2e-tests/pages/wallet/walletTab/receiveSubTab.page.js b/packages/e2e-tests/pages/wallet/walletTab/receiveSubTab.page.js index 059a6237a9..b1cccdcc07 100644 --- a/packages/e2e-tests/pages/wallet/walletTab/receiveSubTab.page.js +++ b/packages/e2e-tests/pages/wallet/walletTab/receiveSubTab.page.js @@ -1,153 +1,8 @@ import WalletTab from './walletTab.page.js'; -import BasePage from '../../basepage.js'; -import { twoSeconds, quarterSecond } from '../../../helpers/timeConstants.js'; +import GenerateURIModal from './receiveModals/generateURIModal.page.js'; +import DisplayURIModal from './receiveModals/displayURIModal.page.js'; import { balanceReplacer } from '../../../helpers/constants.js'; -class GenerateURIModal extends BasePage { - // locators - generateURIModalLocator = { - locator: 'uriGenerateDialog-dialogWindow-modalWindow', - method: 'id', - }; - generateURIModalTitleLocator = { - locator: 'uriGenerateDialog-dialogTitle-text', - method: 'id', - }; - generateButtonLocator = { - locator: 'uriGenerateDialog-generate-button', - method: 'id', - }; - closeModalButtonLocator = { - locator: 'uriGenerateDialog-closeModal-button', - method: 'id', - }; - receiverAddressTextLocator = { - locator: '//input[starts-with(@id, "receiver--")]', // unfortunately, I didn't find a way to make a proper ID - method: 'xpath', - }; - amountToSendInputLocator = { - locator: '//input[starts-with(@id, "amount--")]', // unfortunately, I didn't find a way to make a proper ID - method: 'xpath', - }; - inputErrorMessageFieldLocator = { - locator: '//p[starts-with(@id, "amount--") and contains(@id, "-helper-text")]', - method: 'xpath', - }; - // methods - /** - * Getting a receiver address from the disabled receiver input - * @returns {Promise} A bech32 string format address - */ - async getReceiverAddress() { - this.logger.info(`ReceiveSubTab::GenerateURIModal::getReceiverAddress is called.`); - const address = await this.getAttribute(this.receiverAddressTextLocator, 'value'); - this.logger.info(`ReceiveSubTab::GenerateURIModal::getReceiverAddress::address - "${address}"`); - return address; - } - /** - * Entering amount to send - * @param {string} adaAmount Amount to send - */ - async enterReceiveAmount(adaAmount) { - this.logger.info(`ReceiveSubTab::GenerateURIModal::enterReceiveAmount is called.`); - await this.click(this.amountToSendInputLocator); - await this.input(this.amountToSendInputLocator, adaAmount); - } - /** - * Pressing the button "Generate". - * The method contains a waiter with 2 seconds timeout - */ - async generateLink() { - this.logger.info(`ReceiveSubTab::GenerateURIModal::generateLink is called.`); - const buttonIsEnabled = await this.customWaiter( - async () => { - const buttonlIsEnabled = await this.getAttribute(this.generateButtonLocator, 'disabled'); - return buttonlIsEnabled === null; - }, - twoSeconds, - quarterSecond - ); - if (buttonIsEnabled) { - await this.click(this.generateButtonLocator); - } else { - throw new Error('The Continue button is disabled'); - } - } - /** - * Getting the error message of amount input field - * @returns {Promise} - */ - async getAmountErrorMessage() { - this.logger.info(`ReceiveSubTab::GenerateURIModal::getAmountErrorMessage is called.`); - - const messageAppeared = await this.customWaiter( - async () => { - const displayedText = await this.getText(this.inputErrorMessageFieldLocator); - return displayedText !== ''; - }, - twoSeconds, - quarterSecond - ); - if (messageAppeared) { - const errMsg = await this.getText(this.inputErrorMessageFieldLocator); - this.logger.info( - `ReceiveSubTab::GenerateURIModal::getAmountErrorMessage:errMsg - "${errMsg}"` - ); - return errMsg; - } else { - return ''; - } - } -} - -class DisplayURIModal extends BasePage { - // locators - uriDisplayModalLocator = { - locator: 'uriDisplayDialog-dialogWindow-modalWindow', - method: 'id', - }; - uriDisplayModalTitleLocator = { - locator: 'uriDisplayDialog-dialogTitle-text', - method: 'id', - }; - closeModalButtonLocator = { - locator: 'uriDisplayDialog-closeModal-button', - method: 'id', - }; - linkTextLocator = { - locator: 'uriDisplayDialog-address-text', - method: 'id', - }; - copyLinkButtonLocator = { - locator: 'uriDisplayDialog-copyAddress-button', - method: 'id', - }; - // methods - /** - * Getting a generated link right from the component itself - * @returns {Promise} - */ - async getGeneratedLink() { - this.logger.info(`ReceiveSubTab::DisplayURIModal::getGeneratedLink is called.`); - return await this.getText(this.linkTextLocator); - } - /** - * Getting a generated link by clicking on the copy button near the text field. - * The address will be saved into clipboard. - */ - async copyGeneratedLink() { - this.logger.info(`ReceiveSubTab::DisplayURIModal::copyGeneratedLink is called.`); - await this.click(this.copyGeneratedLink); - } - /** - * Closing the modal window - */ - async closeModalWindow() { - this.logger.info(`ReceiveSubTab::DisplayURIModal::closeModalWindow is called.`); - await this.click(this.closeModalButtonLocator); - } -} - class ReceiveSubTab extends WalletTab { // locators // * base addresses menu item @@ -378,18 +233,26 @@ class ReceiveSubTab extends WalletTab { const allAddrs = await this.findElements(this.generalAddrRowLocator); return allAddrs.length; } + async getFullAddressFromRow(rowIndex) { + this.logger.info(`ReceiveSubTab::getFullAddressFromRow is called. Row index: ${rowIndex}`); + const linkText = await this.getLinkFromComponent(this.addressTextInRowLocator(rowIndex)); + const splittedLink = linkText.split('/'); + return splittedLink[splittedLink.length - 1]; + } /** * Getting an address info from the Receive page * @param {number} rowIndex An index of a row in the addresses table starting from 0 - * @returns {Promise<{address: string, balance: number}>} + * @returns {Promise<{addressShort: string, addressFull: string, balance: number}>} */ async getAddressInfo(rowIndex) { this.logger.info(`ReceiveSubTab::getAddressInfo is called. Row index: ${rowIndex}`); - const shortAddr = await this.getText(this.addressTextInRowLocator(rowIndex)); + const addressShort = await this.getText(this.addressTextInRowLocator(rowIndex)); + const addressFull = await this.getFullAddressFromRow(rowIndex); const addrBalanceText = await this.getText(this.addressBalanceTextInRowLocator(rowIndex)); if (addrBalanceText === '-') { return { - address: shortAddr, + addressShort, + addressFull, balance: 0, }; } @@ -397,7 +260,8 @@ class ReceiveSubTab extends WalletTab { const matchResult = [...addrBalanceText.matchAll(regexp)]; const addrBalance = parseFloat(matchResult[0]); return { - address: shortAddr, + addressShort, + addressFull, balance: addrBalance, }; } From 7b4fed91ff80fe2ae72f1357b7579b505fe142d6 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Wed, 3 Jul 2024 22:25:34 +0300 Subject: [PATCH 294/464] flow fixes --- .../containers/settings/categories/GeneralSettingsPage.js | 2 +- .../yoroi-extension/app/stores/base/BaseProfileStore.js | 8 ++++---- .../yoroi-extension/app/styles/themes/dark-theme-base.js | 2 +- .../yoroi-extension/app/styles/themes/light-theme-base.js | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/yoroi-extension/app/containers/settings/categories/GeneralSettingsPage.js b/packages/yoroi-extension/app/containers/settings/categories/GeneralSettingsPage.js index 2443179eec..2b94a96915 100644 --- a/packages/yoroi-extension/app/containers/settings/categories/GeneralSettingsPage.js +++ b/packages/yoroi-extension/app/containers/settings/categories/GeneralSettingsPage.js @@ -121,7 +121,7 @@ export default class GeneralSettingsPage extends Component { - if (theme === THEMES.YOROI_REVAMP) { + if (theme === THEMES.YOROI_BASE) { const { wallets } = this.props.stores; const publicDeriver = wallets.selected; const publicDerivers = wallets.publicDerivers; diff --git a/packages/yoroi-extension/app/stores/base/BaseProfileStore.js b/packages/yoroi-extension/app/stores/base/BaseProfileStore.js index e73b12e759..109c684b38 100644 --- a/packages/yoroi-extension/app/stores/base/BaseProfileStore.js +++ b/packages/yoroi-extension/app/stores/base/BaseProfileStore.js @@ -356,8 +356,8 @@ export default class BaseProfileStore if (result != null) { if (!this.didUserMigratedToRevampTheme) { this.setUserRevampMigrationStatusRequest.execute(true); - this._updateTheme({ theme: THEMES.YOROI_REVAMP }); - return THEMES.YOROI_REVAMP; + this._updateTheme({ theme: THEMES.YOROI_BASE }); + return THEMES.YOROI_BASE; } // verify content is an actual theme @@ -367,11 +367,11 @@ export default class BaseProfileStore } } - return THEMES.YOROI_REVAMP; + return THEMES.YOROI_BASE; } @computed get isRevampTheme(): boolean { - return this.currentTheme === THEMES.YOROI_REVAMP; + return this.currentTheme === THEMES.YOROI_BASE; } @computed get isModernTheme(): boolean { diff --git a/packages/yoroi-extension/app/styles/themes/dark-theme-base.js b/packages/yoroi-extension/app/styles/themes/dark-theme-base.js index a7bf306136..375c5757a0 100644 --- a/packages/yoroi-extension/app/styles/themes/dark-theme-base.js +++ b/packages/yoroi-extension/app/styles/themes/dark-theme-base.js @@ -60,7 +60,7 @@ const magenta = { const system = { magenta, cyan, yellow, orange }; -export const darkThemeBase = { +export const darkThemeBase: any = { name: 'dark-theme', palette: { mode: 'dark', diff --git a/packages/yoroi-extension/app/styles/themes/light-theme-base.js b/packages/yoroi-extension/app/styles/themes/light-theme-base.js index 99906c0554..d9dab4b44f 100644 --- a/packages/yoroi-extension/app/styles/themes/light-theme-base.js +++ b/packages/yoroi-extension/app/styles/themes/light-theme-base.js @@ -62,7 +62,7 @@ const magenta = { const system = { magenta, cyan, yellow, orange }; -export const lightThemeBase = { +export const lightThemeBase: any = { name: 'light-theme', palette: { mode: 'light', From 92b78a85b9dfc6c5fa0828591ffa4efba038a266 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Wed, 3 Jul 2024 22:28:29 +0300 Subject: [PATCH 295/464] flow fixes --- packages/yoroi-extension/app/stores/base/BaseProfileStore.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/stores/base/BaseProfileStore.js b/packages/yoroi-extension/app/stores/base/BaseProfileStore.js index 109c684b38..437b5f3fea 100644 --- a/packages/yoroi-extension/app/stores/base/BaseProfileStore.js +++ b/packages/yoroi-extension/app/stores/base/BaseProfileStore.js @@ -356,7 +356,7 @@ export default class BaseProfileStore if (result != null) { if (!this.didUserMigratedToRevampTheme) { this.setUserRevampMigrationStatusRequest.execute(true); - this._updateTheme({ theme: THEMES.YOROI_BASE }); + noop(this._updateTheme({ theme: THEMES.YOROI_BASE })); return THEMES.YOROI_BASE; } From 6306c837d6299d5dac23954a1a01f0e32177fd9c Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Wed, 3 Jul 2024 23:44:06 +0300 Subject: [PATCH 296/464] added ids on Verify addres modal --- .../app/components/wallet/receive/VerifyAddressDialog.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/yoroi-extension/app/components/wallet/receive/VerifyAddressDialog.js b/packages/yoroi-extension/app/components/wallet/receive/VerifyAddressDialog.js index b56c35488f..0c0e10d65d 100644 --- a/packages/yoroi-extension/app/components/wallet/receive/VerifyAddressDialog.js +++ b/packages/yoroi-extension/app/components/wallet/receive/VerifyAddressDialog.js @@ -95,6 +95,7 @@ class VerifyAddressDialog extends Component { closeOnOverlayClick={false} closeButton={} onClose={this.props.cancel} + id='verifyAddressDialog' > {this.renderQrCode()} {this.renderAddressBlock()} @@ -183,7 +184,7 @@ class VerifyAddressDialog extends Component { {intl.formatMessage(globalMessages.stakingKeyHashLabel)} -
    +
    {stakingKey} @@ -275,7 +276,9 @@ class VerifyAddressDialog extends Component { {intl.formatMessage(globalMessages.derivationPathLabel)}
    -
    {toDerivationPathString(addressing.path)}
    +
    + {toDerivationPathString(addressing.path)} +

    From 9d0190169638cd7a5c29d7f8086c9b8e7e508cfd Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Wed, 3 Jul 2024 23:44:27 +0300 Subject: [PATCH 297/464] added function getRewarKeyHashFromBech32 --- .../e2e-tests/helpers/mock-dApp-webpage/dAppTxHelper.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/e2e-tests/helpers/mock-dApp-webpage/dAppTxHelper.js b/packages/e2e-tests/helpers/mock-dApp-webpage/dAppTxHelper.js index 44feb139fe..c9d29bab20 100644 --- a/packages/e2e-tests/helpers/mock-dApp-webpage/dAppTxHelper.js +++ b/packages/e2e-tests/helpers/mock-dApp-webpage/dAppTxHelper.js @@ -87,6 +87,12 @@ export const getAddressFromBytes = changeAddress => export const getAddressFromBech32 = addressBech32 => CSL.Address.from_bech32(addressBech32); +export const getRewarKeyHashFromBech32 = rewardAddressBech32 => + CSL.RewardAddress.from_address(CSL.Address.from_bech32(rewardAddressBech32)) + .payment_cred() + .to_keyhash() + .to_hex(); + export const getTransactionFromBytes = txHex => CSL.Transaction.from_bytes(hexToBytes(txHex)); export const getTransactionWitnessSetFromBytes = witnessHex => From ee6b337bad7e454ea88db9386a4de55ad35c12cf Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Wed, 3 Jul 2024 23:45:06 +0300 Subject: [PATCH 298/464] added verifyAddressModal page --- .../receiveModals/verifyAddressModal.page.js | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 packages/e2e-tests/pages/wallet/walletTab/receiveModals/verifyAddressModal.page.js diff --git a/packages/e2e-tests/pages/wallet/walletTab/receiveModals/verifyAddressModal.page.js b/packages/e2e-tests/pages/wallet/walletTab/receiveModals/verifyAddressModal.page.js new file mode 100644 index 0000000000..73538e0aa6 --- /dev/null +++ b/packages/e2e-tests/pages/wallet/walletTab/receiveModals/verifyAddressModal.page.js @@ -0,0 +1,83 @@ +import { fiveSeconds, quarterSecond } from '../../../../helpers/timeConstants.js'; +import BasePage from '../../../basepage.js'; + +class VerifyAddressModal extends BasePage { + // locators + verifyAddressModalLocator = { + locator: 'verifyAddressDialog-dialogWindow-modalWindow', + method: 'id', + }; + verifyAddressModalTitleLocator = { + locator: 'verifyAddressDialog-dialogTitle-text', + method: 'id', + }; + closeModalButtonLocator = { + locator: 'verifyAddressDialog-closeModal-button', + method: 'id', + }; + // address + addressTextLocator = { + locator: 'verifyAddressDialog-address-text', + method: 'id', + }; + // derivation path + derivationPathTextLocator = { + locator: 'verifyAddressDialog-derivationPath-text', + method: 'id', + }; + // staking key hash + stakingKeyHashTextLocator = { + locator: 'verifyAddressDialog-stakingKeyHash-text', + method: 'id', + }; + // methods + // isDisplayed + async isDisplayed() { + this.logger.info(`ReceiveSubTab::VerifyAddressModal::isDisplayed is called.`); + const modalIsFound = await this.customWaitIsPresented( + this.verifyAddressModalLocator, + fiveSeconds, + quarterSecond + ); + const titleIsFound = await this.customWaitIsPresented( + this.verifyAddressModalTitleLocator, + fiveSeconds, + quarterSecond + ); + return modalIsFound && titleIsFound; + } + // closeModal + async closeModal() { + this.logger.info(`ReceiveSubTab::VerifyAddressModal::closeModal is called.`); + await this.click(this.closeModalButtonLocator); + } + // getVerifyAddressInfo + async getVerifyAddressInfo(isRewardAddr = false) { + this.logger.info(`ReceiveSubTab::VerifyAddressModal::getVerifyAddressInfo is called.`); + // short address + const addressShort = await this.getText(this.addressTextLocator); + // full address + const addressLinkText = await this.getLinkFromComponent(this.addressTextLocator); + const linkArr = addressLinkText.split('/'); + const addressFull = linkArr[linkArr.length - 1]; + // derivation path + const derivationPath = await this.getText(this.derivationPathTextLocator); + if (isRewardAddr) { + return { + addressShort, + addressFull, + derivationPath, + }; + } + // staking key hash + const stakingKeyHash = await this.getText(this.stakingKeyHashTextLocator); + return { + addressShort, + addressFull, + derivationPath, + stakingKeyHash, + }; + } +} + +export default VerifyAddressModal; From 0c83539cf51516af954a14f6dd83f258184e259f Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Wed, 3 Jul 2024 23:45:22 +0300 Subject: [PATCH 299/464] added method callVerifyAddress --- .../e2e-tests/pages/wallet/walletTab/receiveSubTab.page.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/e2e-tests/pages/wallet/walletTab/receiveSubTab.page.js b/packages/e2e-tests/pages/wallet/walletTab/receiveSubTab.page.js index b1cccdcc07..88581ae257 100644 --- a/packages/e2e-tests/pages/wallet/walletTab/receiveSubTab.page.js +++ b/packages/e2e-tests/pages/wallet/walletTab/receiveSubTab.page.js @@ -2,6 +2,7 @@ import WalletTab from './walletTab.page.js'; import GenerateURIModal from './receiveModals/generateURIModal.page.js'; import DisplayURIModal from './receiveModals/displayURIModal.page.js'; import { balanceReplacer } from '../../../helpers/constants.js'; +import VerifyAddressModal from './receiveModals/verifyAddressModal.page.js'; class ReceiveSubTab extends WalletTab { // locators @@ -349,6 +350,12 @@ class ReceiveSubTab extends WalletTab { } return allBalancesHidden.every(addrBalance => addrBalance === true); } + async callVerifyAddress(rowindex) { + this.logger.info(`ReceiveSubTab::callVerifyAddress is called.`); + const verifuAddrBtnLocator = this.verifyAddressButtonInRowLocator(rowindex); + await this.click(verifuAddrBtnLocator); + return new VerifyAddressModal(this.driver, this.logger); + } } export default ReceiveSubTab; From f9305d2c5ca837766c08e50187d9b6e6fd65c8d7 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Wed, 3 Jul 2024 23:45:53 +0300 Subject: [PATCH 300/464] added test --- .../test/26_verifyingAddress.test.js | 107 ++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 packages/e2e-tests/test/26_verifyingAddress.test.js diff --git a/packages/e2e-tests/test/26_verifyingAddress.test.js b/packages/e2e-tests/test/26_verifyingAddress.test.js new file mode 100644 index 0000000000..713c34a09b --- /dev/null +++ b/packages/e2e-tests/test/26_verifyingAddress.test.js @@ -0,0 +1,107 @@ +import { expect } from 'chai'; +import BasePage from '../pages/basepage.js'; +import driversPoolsManager from '../utils/driversPool.js'; +import TransactionsSubTab from '../pages/wallet/walletTab/walletTransactions.page.js'; +import ReceiveSubTab from '../pages/wallet/walletTab/receiveSubTab.page.js'; +import { customAfterEach } from '../utils/customHooks.js'; +import { getTestLogger } from '../utils/utils.js'; +import { oneMinute } from '../helpers/timeConstants.js'; +import { getRewarKeyHashFromBech32 } from '../helpers/mock-dApp-webpage/dAppTxHelper.js'; +import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; + +describe('Verify addresses', function () { + this.timeout(2 * oneMinute); + let webdriver = null; + let logger = null; + let bech32StakeAddress = ''; + let stakingKeyHexExp = ''; + + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); + logger = getTestLogger(this.test.parent.title); + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); + }); + + it('Open the Receive tab', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + await transactionsPage.goToReceiveSubMenu(); + }); + + it('Get staking key hash', async function () { + const receivePage = new ReceiveSubTab(webdriver, logger); + await receivePage.selectRewardAddrs(); + // there is only one stake address, that it is why the ubdex is 0 + bech32StakeAddress = (await receivePage.getAddressInfo(0)).addressFull; + expect(bech32StakeAddress) + .to.be.a('string') + .and.satisfy(msg => msg.startsWith('stake1')); + stakingKeyHexExp = getRewarKeyHashFromBech32(bech32StakeAddress); + }); + + it('Check base external addresses', async function () { + const receivePage = new ReceiveSubTab(webdriver, logger); + await receivePage.selectBaseExtAllAddrs(); + const addressesAmount = await receivePage.getAmountOfAddresses(); + for (let addressIndex = 0; addressIndex < addressesAmount; addressIndex++) { + const addressInfo = await receivePage.getAddressInfo(addressIndex); + const verifyAddresModalPage = await receivePage.callVerifyAddress(addressIndex); + const modalIsDisplayed = await verifyAddresModalPage.isDisplayed(); + expect(modalIsDisplayed, 'Verify address modal is not displayed').to.be.true; + const verifyInfo = await verifyAddresModalPage.getVerifyAddressInfo(); + expect(verifyInfo.addressFull, 'Full address is different').to.equal(addressInfo.addressFull); + expect(verifyInfo.derivationPath, 'Derivation path is diffirent').to.match( + /m\/1852'\/1815'\/0'\/0\/\d+/gi + ); + expect(verifyInfo.stakingKeyHash, 'Staking key hash is different').to.equal(stakingKeyHexExp); + await verifyAddresModalPage.closeModal(); + } + }); + + it('Check base internal addresses', async function () { + const receivePage = new ReceiveSubTab(webdriver, logger); + await receivePage.selectBaseInterAllAddrs(); + const addressesAmount = await receivePage.getAmountOfAddresses(); + for (let addressIndex = 0; addressIndex < addressesAmount; addressIndex++) { + const addressInfo = await receivePage.getAddressInfo(addressIndex); + const verifyAddresModalPage = await receivePage.callVerifyAddress(addressIndex); + const modalIsDisplayed = await verifyAddresModalPage.isDisplayed(); + expect(modalIsDisplayed, 'Verify address modal is not displayed').to.be.true; + const verifyInfo = await verifyAddresModalPage.getVerifyAddressInfo(); + expect(verifyInfo.addressFull, 'Full address is different').to.equal(addressInfo.addressFull); + expect(verifyInfo.derivationPath, 'Derivation path is diffirent').to.match( + /m\/1852'\/1815'\/0'\/1\/\d+/gi + ); + expect(verifyInfo.stakingKeyHash, 'Staking key hash is different').to.equal(stakingKeyHexExp); + await verifyAddresModalPage.closeModal(); + } + }); + + it('Check reward address', async function () { + const receivePage = new ReceiveSubTab(webdriver, logger); + await receivePage.selectRewardAddrs(); + const addressesAmount = await receivePage.getAmountOfAddresses(); + for (let addressIndex = 0; addressIndex < addressesAmount; addressIndex++) { + const addressInfo = await receivePage.getAddressInfo(addressIndex); + const verifyAddresModalPage = await receivePage.callVerifyAddress(addressIndex); + const modalIsDisplayed = await verifyAddresModalPage.isDisplayed(); + expect(modalIsDisplayed, 'Verify address modal is not displayed').to.be.true; + const verifyInfo = await verifyAddresModalPage.getVerifyAddressInfo(true); + expect(verifyInfo.addressFull, 'Full address is different').to.equal(addressInfo.addressFull); + expect(verifyInfo.derivationPath, 'Derivation path is diffirent').to.match( + /m\/1852'\/1815'\/0'\/2\/\d+/gi + ); + } + }); + + afterEach(function (done) { + customAfterEach(this, webdriver, logger); + done(); + }); + + after(function (done) { + const basePage = new BasePage(webdriver, logger); + basePage.closeBrowser(); + done(); + }); +}); From b1e98b0c1dd6b1ac43c79724880ca931edee7f82 Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:04 +0100 Subject: [PATCH 301/464] New translations en-us.md (fr-FR) --- .../i18n/locales/terms-of-use/ada/fr-FR.md | 110 +++++++----------- 1 file changed, 39 insertions(+), 71 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/fr-FR.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/fr-FR.md index 62a96a1ef3..ba738eec44 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/fr-FR.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/fr-FR.md @@ -1,109 +1,77 @@ -# Terms of Service Agreement +# Conditions générales de l'accord de service -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +LES PRÉSENTES CONDITIONS GÉNÉRALES ("Contrat") sont conclues entre EMURGO S.A.R.L., Ltd ("Société") et toute personne ou entité ("L'Utilisateur") qui effectue le processus de téléchargement, d'utilisation ou d'exploitation du Logiciel connu sous le nom "Yoroi cryptocurrency Wallet", de service de traitement de données, d'application, de service de communication ou autre contenu offert ou fourni par le Logiciel de la Société ("Le Logiciel"). La Société et l'Utilisateur constituent "les Parties" de ce contrat. EN CLIQUANT SUR LE BOUTON D'ACCEPTATION OU EN ACCÉDANT À, EN UTILISANT OU EN INSTALLANT TOUTE PARTIE DU LOGICIEL, L'UTILISATEUR ACCEPTE EXPRESSÉMENT ET CONSENT À ÊTRE LÉGALEMENT RESPONSABLE DE TOUTES LES CONDITIONS DU PRÉSENT CONTRAT. SI L'UTILISATEUR N'ACCEPTE PAS TOUTES LES CONDITIONS DU PRÉSENT CONTRAT, IL N'EST PAS AUTORISÉ À ACCÉDER, UTILISER OU INSTALLER TOUTE PARTIE DU LOGICIEL. -## 1. Rights and Obligations +## 1. Droits et Obligations -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. Description.** Le Logiciel constitue un porte-monnaie numérique (wallet) gratuit et open source pour crypto-monnaies. Le Logiciel ne constitue pas un compte par lequel la Société ou tout autre tiers agit en tant qu'intermédiaire financier ou dépositaire des ADA de l'Utilisateur ou d'autres crypto-monnaies. Bien que le Logiciel ait passé les tests bêta et continue d'être amélioré grâce aux retours de ses développeurs, des contributeurs open source et des bêta-testeurs, la Société ne peut pas garantir l'absence de bugs dans le Logiciel. L'Utilisateur reconnaît et accepte que l'utilisation du Logiciel est à ses risques et périls, à sa discrétion et en conformité avec les lois applicables. L'Utilisateur est responsable de la conservation de ses mots de passes, codes NIP, clés privées, clés de remboursement, clés de distributeurs automatique protégées, phrases secrètes mnémonique de sauvegarde et de récupération, mots de passe ADA et de tous les autres codes que l'Utilisateur utilise pour accéder au Logiciel ou à d'autres informations, ADAs, bons et crypto-monnaies. SI L'UTILISATEUR PERD L'ACCÈS À SON WALLET OU À SES CLÉS PRIVÉES, ET N'A PAS SAUVEGARDÉ SÉPARÉMENT SON WALLET OU SES PHRASES SECRÈTES MNÉMONIQUE DE SAUVEGARDE ET DE RÉCUPÉRATION ET SES MOTS DE PASSE CORRESPONDANTS, L'UTILISATEUR RECONNAÎT ET ACCEPTE QUE TOUT ADA OU AUTRES CRYPTO-MONNAIES SAUVEGARDÉES DANS CE WALLET DEVIENDRA INACCESSIBLE. Toute demande de transaction est irrévocable. La Société et ses actionnaires, administrateurs, dirigeants, employés, sociétés affiliées, auxiliaires et agents ne peuvent garantir la confirmation des transactions ou récupérer les clés privées ou les mots de passe de l'Utilisateur si ce dernier les perd ou les oubli(e)s. -**b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. +**b. Accessibilité.** L'Utilisateur accepte que, de temps à autre, le Logiciel peut être inaccessible ou inutilisable pour toutes raisons, y compris, sans limitation: (i) les défaillances d'équipement; (ii) les procédures de maintenance que la Société doit ou peut effectuer de temps en temps; et (iii) tout événement qui survient indépendamment de la Société ou qui n'est pas raisonnablement prévisible pour la Société. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. Équipement.** L'Utilisateur est seul responsable de fournir, de maintenir et d'en assurer la compatibilité avec le Logiciel, le matériel informatique, les logiciels et les autres exigences électroniques ou physiques nécessaires pour utiliser le Logiciel, y compris, et sans limitation, les télécommunications, l'accès à internet ainsi que toute autre équipement, programmes et services nécessaires pour accéder et utiliser le Logiciel. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. Sécurité.** L'Utilisateur est seul responsable de la sécurité, la confidentialité et l'intégrité de toute information et contenu que l'Utilisateur reçoit, transmet ou stocke sur le Logiciel. L'Utilisateur est seul responsable de tout accès autorisé ou non autorisé à ses comptes par toute autre personne. L'Utilisateur accepte qu'il est seul responsable de la confidentialité de son équipement de sécurité, de ses informations, clés et mots de passe. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. Confidentialité.** La Société s'efforcera de respecter la confidentialité de l'Utilisateur dans la mesure du possible et où cela est raisonnablement faisable. La Société ne surveillera, ne modifiera et ne révèlera aucune information personnelle de l'Utilisateur ou de son compte d'Utilisateur, y compris son contenu et l'utilisation par l'Utilisateur du Logiciel, à moins que l'Utilisateur y ait consenti préalablement, avec exception dans les cas où la Société pense de bonne foi que ceci est nécessaire pour (i) se conformer à la loi ou à d'autres exigences légales de toute autorité gouvernementale; (ii) protéger et défendre les droits ou la propriété de la Société; (iii) appliquer ou faire respecter ce contrat; (iv) protéger les intérêts d'Utilisateurs du Logiciel autre que l'Utilisateur ou toute autre personne; (v) exploiter ou effectuer, en conformité avec la loi et les autorisations légales, des travaux de maintenance et la réparation de l'équipement de la Société, y compris le Logiciel. L'Utilisateur n'a aucune attente de confidentialité par rapport à Internet en général. L'adresse IP de l'Utilisateur est transmise et enregistrée avec chaque message ou autre information que l'Utilisateur envoie depuis le Logiciel. -## 2. Taxes and Fees +## 2. Taxes et frais -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +Tous les frais de conversion de monnaie, frais de tiers, frais de vente, d'utilisation, de valeur ajoutée, de propriété personnelle et toutes autres taxes, obligations et prélèvements de toute sorte, y compris les intérêts et les pénalités y afférents, imposés maintenant ou par la suite par toute entité gouvernementale, et tous frais encourus par l'Utilisateur de par son accès, son utilisation ou par l'installation du Logiciel relèvent de la seule responsabilité de l'Utilisateur. -## 3. User Representations +## 3. Déclarations de l'Utilisateur -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +L'Utilisateur confirme et garantit à la Société que: (a) si l'Utilisateur est une personne physique, qu'il est âgé de 18 (dix-huit) ans révolus; (b) l'Utilisateur a la capacité et la permission d'être partie à ce contrat et d'accomplir les obligations prévues dans ce contrat; (c) toute information fournie à la Société par l'Utilisateur est conforme à la vérité, exacte et complète; (d) l'Utilisateur se conformera à toute loi et réglementation de toute juridiction applicable concernant l'accès, l'utilisation et l'installation du Logiciel par l'Utilisateur; (e) l'Utilisateur se conformera aux conditions de ce contrat, y compris, mais sans se limiter aux dispositions prévus par l'article 4; et (f) l'Utilisateur a fourni et fournira les informations exactes et complètes requises pour l'accès, l'utilisation ou l'installation du Logiciel. -## 4. Prohibited Uses +## 4. Utilisation non autorisée -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +L'Utilisateur est seul responsable de toute action ou actes d'omissions qui sont fait sous son compte d'utilisation, ses informations de sécurité, ses clés ou mots de passe, et accepte de ne pas utiliser le Logiciel pour, y compris, et sans limitation: (a) diffuser, sauvegarder ou transmettre des messages non-sollicités, des chaînes de lettres ou d'emails commerciaux non-sollicités; (b) diffuser ou transférer du contenu qui, pour une personne raisonnable, pourrait être abusif, obscène, pornographique, diffamatoire, harcelant, gravement injurieux, vulgaire, menaçant ou malveillant; (c) diffuser, sauvegarder ou transférer des fichiers, images, Logiciels ou autres matériels qui violent ou qui pourraient violer le droit d'auteur, une marque, un brevet, le secret des affaires/industriel ou un autre droit de la propriété intellectuelle de toute autre personne; (d) créer une fausse identité ou tenter de tromper toute autre personne sur l'identité ou l'origine de toute communication; (e) exporter, réexporter ou permettre le téléchargement de tout message ou contenu en violation de toute loi, règlementation ou restriction d'exportation et d'importation de toute juridiction applicable, ou sans les autorisations, licences et dérogations requises; (f) interférer, troubler ou tenter d'avoir un accès non-autorisé sur d'autres comptes d'utilisation du Logiciel ou de tout autre réseau informatique; ou (g) diffuser, sauvegarder ou transmettre des virus, Chevaux de Troie ou tout autre code ou programme malveillant. -## 5. Termination +## 5. Résiliation -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +Ce contrat prend effet dès son acceptation par l'Utilisateur et sera valable aussi longtemps que l'Utilisateur accède, utilise ou installe le Logiciel. La Société se réserve le droit, à sa seule discrétion, sans avis préalable, en tout temps et pour toute raison, de: (a) supprimer ou désactiver l'accès à toute ou une partie du Logiciel; (b) suspendre l'accès par l'Utilisateur ou l'utilisation à toute ou une partie du Logiciel; et (c) résilier ce contrat. -## 6. Disclaimer of Warranties +## 6. Exclusion de garanties -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +LE LOGICIEL EST FOURNI "TEL QUEL", SANS GARANTIE DE TOUTE SORTE, EXPRESSE OU IMPLICITE. L'UTILISATION DU LOGICIEL SE FAIT AUX RISQUES ET PÉRILS DE L'UTILISATEUR. LA SOCIÉTÉ NE GARANTIE PAS QUE LE LOGICIEL SERA DISPONIBLE TOUT LE TEMPS OU SANS ERREURS, ET LA SOCIÉTÉ NE GARANTIE PAS L'OBTENTION DE RÉSULTATS PAR L'UTILISATION DE CE LOGICIEL. LA SOCIÉTÉ NE DONNE AUCUNE AUTRE GARANTIE, EXPRESSEMENT OU IMPLICITEMENT. LA SOCIÉTÉ EXCLUT EXPRESSEMENT TOUTE GARANTIE DE LA QUALITÉ MARCHANDE, TOUTE GARANTIE D'ADÉQUATION À UN USAGE DÉTERMINÉ, TOUTE GARANTIE DE TITRE OU D'INTÉRÊT ET TOUTE GARANTIE DE NON-CONTREFACON. -## 7. Limitation of Liability +## 7. Limitation de responsabilité -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +EN AUCUN CAS LA SOCIÉTÉ OU SES ACTIONNAIRES, ADMINISTRATEURS, DIRIGEANTS, EMPLOYÉS, SOCIÉTÉS AFFILIÉES, AUXILIAIRES ET AGENTS, OU TOUTES AUTRES PERSONNES LUI OU LEUR FOURNISSANT DES SERVICES, NE PEUVENT ÊTRE TENUS RESPONSABLE ENVERS L'UTILISATEUR OU UN TIERS DE TOUTE UTILISATION, INTERRUPTION, RETARD OU IMPOSSIBILITÉ D'UTILISATION DU LOGICIEL, DES REVENUS OU GAINS PERDUS, DES RETARDS, DES INTERRUPTIONS ET PERTES DE SERVICES, D'AFFAIRES OU CLIENTÈLE, DES PERTES OU CORRUPTION DE DONNÉES, DES PERTES RÉSULTANT DU SYSTÈME OU DE DÉFAILLANCES DU SYSTÈME, DU MAUVAIS FONCTIONNEMENT OU DU BLOCAGE DU LOGICIEL, DES ÉCHECS DE TRANSFERTS, DE LECTURE OU DE TRANSMISSION D'INFORMATIONS, DES ÉCHECS DE MISES À JOUR OU DE PRÉSENTATIONS D'INFORMATIONS CORRECTES, DE L'INCOMPATIBILITÉ DU SYSTÈME OU DE LA FOURNITURE D'INFORMATIONS COMPTABLES ERRONÉES OU DES FAILLES DE SÉCURITÉ DU SYSTÈME, OU POUR TOUT AUTRE DOMMAGE CONSÉCUTIF, ACCIDENTEL, INDIRECT, EXEMPLAIRE, SPÉCIAL OU PUNITIF, DÉCOULANT DE OU LIEU À CE CONTRAT, LA VIOLATION DE CE CONTRAT, LE DÉLIT (Y COMPRIS LA NÉGLIGENCE) OU AUTRE, PEU IMPORTE QUE LE DOMMAGE AIT ÉTÉ PRÉVISIBLE OU QUE NOUS ÉTIONS OU NON INFORMÉS DE LA POSSIBILITÉ D'UN TEL DOMMAGE. EN AUCUN CAS LA SOCIÉTÉ OU SES ACTIONNAIRES, ADMINISTRATEURS, DIRIGEANTS, EMPLOYÉS, SOCIÉTÉS AFFILIÉES, AUXILIAIRES ET AGENTS, OU TOUTE AUTRE PERSONNE LUI FOURNISSANT DES SERVICES, NE PEUVENT ÊTRE TENUS RESPONSABLES POUR TOUTE RÉCLAMATION, DOMMAGE OU AUTRE RESPONSABILITÉ, QUE CE SOIT DANS LE CADRE D'UNE ACTION EN RESPONSABILITÉ CONTRACTUELLE, DÉLICTUELLE, DÉCOULANT DE L'ACCÈS AU COMPTE D'UTILISATEUR, DE L'UTILISATION OU DE L'INSTALLATION DU LOGICIEL. CERTAINES JURIDICTIONS INTERDISENT L'EXCLUSION OU LA LIMITATION DE LA RESPONSABILITÉ POUR DOMMAGES ACCIDENTELS OU INDIRECTS, DE SORTE QUE CETTE LIMITATION DE RESPONSABILITÉ PEUT DONC NE PAS ÊTRE APPLICABLE À L'UTILISATEUR. SI L'UTILISATEUR N'EST PAS SATISFAIT DU LOGICIEL, IL EST DE SA SEULE RESPONSABILITÉ DE NE PLUS CONTINUER D'UTILISER LE LOGICIEL. -## 8. Indemnification +## 8. Indemnisation -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +L'Utilisateur s'engage à indemniser, de dégager de toute responsabilité et de défendre la Société, ses actionnaires, administrateurs, dirigeants, employés, Sociétés affiliées, auxiliaires et agents ("les Parties indemnisées") contre toute action, cause, réclamation, dommage, dette, demande ou responsabilité, y compris les frais liés et les honoraires d'avocats, qui sont introduits ou invoqués par toute personne, découlant de ou relatifs à: (a) ce contrat; (b) l'accès, l'utilisation et l'installation du Logiciel par l'Utilisateur, y compris toute donnée ou travail transmis ou reçu par l'Utilisateur, et (c) toute utilisation inacceptable du Logiciel par toute personne, y compris, sans limitation, toute déclaration, toute donnée et tout contenu créé, transmis ou republié, interdite en vertu de l'article 4, par l'Utilisateur ou toute personne. CET INDEMNISATION COMPREND EXPRESSEMENT L'INDEMNISATION DE LA SOCIÉTÉ ET DES PARTIES INDEMNISÉES POUR TOUTE NÉGLIGENCE (Y COMPRIS TOUTE NÉGLIGENCE GRAVE PRÉSUMÉE) ET TOUT MANQUEMENT PRÉSUMÉ DE LA SOCIÉTÉ OU DE TOUTE PARTIE INDEMNISÉE. -## 9. Intellectual Property +## 9. Propriété intellectuelle -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +La Société conserve tous les droits, titres et intérêts relatifs à toutes les marques, logos, marques déposées de la Société, y compris, mais sans s'y limiter, EMURGO Co., Ltd., EMURGO, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi APP, et toute variation de ces marques, logos et marques déposées mentionnées ci-dessus. -## 10. Warnings +## 10. Avertissements -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +L'Utilisateur reconnaît que la Société n'est pas responsable du transfert, de la sauvegarde et de la conservation des clés privées et/ou des ADAs et autres crypto-monnaies de l'Utilisateur. Si l'Utilisateur ou/et les autorités co-signataires perdent, gèrent mal ou se font voler des clés privées, ou si les co-signataires refusent de fournir l'autorisation requise, l'Utilisateur reconnaît qu'il ne sera pas en mesure de récupérer ses ADAs ou autres crypto-monnaies, et que la Société n'est pas responsable de ces pertes. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +L'Utilisateur reconnaît et accepte que les transactions d'ADA ou d'autres crypto-monnaies faites par le Logiciel et/ou la compagnie risquent d'être retardées, et que la Société n'est pas responsable pour les pertes relatives à ces retards. L'Utilisateur reconnaît et accepte que la Société n'est pas responsable de toute information, contenu ou service proposé par des Logiciels tiers et sur les sites de tiers accessibles par ou liés au Logiciel et/ou à la Société. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. +En utilisant le Logiciel, l'Utilisateur reconnaît et accepte: (i) que la Société n'est pas responsable du fonctionnement et des opérations des protocoles sous-jacents et que la Société ne donne aucune garantie quant à leurs fonctionnalités, sécurité ou disponibilité; et (ii) que les protocoles sous-jacents sont soumis à des changements soudains dans leurs règles d'exploitation ("Forks"), et qu'un Fork peut affecter sensiblement la valeur ou/et la fonction de l'ADA et des autres crypto-monnaies que l'Utilisateur sauvegarde dans le Logiciel. En cas de Fork, l'Utilisateur accepte que la Société puisse temporairement suspendre les opérations du Logiciel (avec ou sans avis à l'Utilisateur) et que la Société puisse, à sa seule discrétion, (a) configurer ou reconfigurer son système ou (b) décider de ne pas supporter (ou cesser de supporter) le protocole de la Fork, à condition que l'Utilisateur ait la possibilité de retirer ses fonds du Logiciel. L'Utilisateur reconnaît et accepte que la Société n'assume absolument aucune responsabilité de quelconque nature, que ce soit à l'égard d'une branche non supportée suite à un Fork du protocole. -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +## 11. Divers -## 11. Miscellaneous +**a. Modifications.** La Société a le droit, à tout temps et sans préavis, d'ajouter ou de modifier les dispositions de ce contrat, en transmettant simplement les dispositions modifiées à l'Utilisateur par message électronique à toute adresse fournie à la Société par l'Utilisateur. L'accès et l'utilisation du Logiciel par l'Utilisateur après la notification d'un changement de conditions est considéré comme une acceptation des conditions modifiées. -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**b. Indemnité de départ.** Si une disposition ou une disposition partielle de la présente convention est ou devient invalide, illégale ou inexécutable, elle sera considérée comme modifiée dans la mesure minimale nécessaire pour la rendre valide, légale et exécutoire. Si une telle modification n'est pas possible, la disposition ou la partie de la disposition concernée est considérée supprimée. Toute modification ou suppression d'une disposition ou d'une disposition partielle en vertu du présent article n'affecte pas la validité et le caractère exécutoire du reste de ce contrat. -**b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. +**c. Intégralité de l'entente - Avis de non-responsabilité.**. La présente entente constitue l'entente intégrale entre les parties à l'égard de l'objet mentionné et remplace tous les accords ou ententes antérieures entre les parties. L'Utilisateur déclare et garantit expressément qu'il ne se fie pas à des déclarations, ententes, représentations, attentes ou ententes autres que celles expressément énoncées dans ce contrat. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**d. LE PRÉSENT CONTRAT EST ASSUJETTI À L'ARBITRAGE EXÉCUTOIRE.** L'Utilisateur accepte que tout litige ou réclamation contre toute personne découlant du présent Contrat, de quelque manière, que ce soit en relation avec celui-ci ou avec l'accès, l'utilisation ou l'installation du Logiciel par l'Utilisateur ou toute autre personne sera soumis à l'arbitrage obligatoire en vertu du Règlement d'arbitrage de la Chambre de commerce internationale par un ou plusieurs arbitres nommés conformément aux dites règles. Le lieu de l'arbitrage sera le Japon. La langue de l'arbitrage sera l'anglais. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. +**e. LANGUE.** Toute traduction du présent Contrat est faite à des fins de référence locale uniquement, et en cas d'incohérence entre les versions anglaise et non anglaise, la version anglaise du présent Contrat prévaudra à tous égards. -**e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. +## 12. Délégation et Staking -## 12. Delegation and Staking +12.1 **Récompenses.** Le montant des récompenses qu'un utilisateur peut obtenir par délégation dépend de divers facteurs, notamment, mais pas exclusivement, de la participation de l'utilisateur, des marges bénéficiaires du groupe d'enjeu et du volume d'ada délégué. Il est possible que la délégation ne génère aucune récompense pour un utilisateur en raison des facteurs mentionnés ci-dessus. Les récompenses sont gagnées à partir du début de la troisième époque sur la blockchain Cardano. -12.1 **Rewards.** The amount of Rewards a User may earn from delegation depends on various factors including, but not limited to, user participation, stakepool profit margins and the volume of ada being delegated. It is possible that delegation generates no Reward for a User due to the above-mentioned factors. Rewards are earned as of the start of the 3rd epoch on the Cardano blockchain. +12.2 **Délégation.** Les utilisateurs peuvent déléguer leur participation à l'un des différents groupes d'enjeu de la société ou à un groupe d'enjeu tiers. L'utilisateur aura le droit exclusif de déterminer le volume à déléguer à un groupe d'enjeu et pourra augmenter ou diminuer son niveau de participation à tout moment. Toute information communiquée par la société concernant les groupes d'enjeu, y compris les mesures de performance et les récompenses, ne sera donnée qu'à titre indicatif et peut ne pas être exacte. Les utilisateurs ne peuvent déléguer que si leur ada se trouve dans un wallet Daedalus mis à jour ou un wallet Yoroi mis à jour au moment de la configuration. L'utilisateur n'acquiert aucun droit automatique aux récompenses suite à la délégation de sa mise. -12.2 **Delegation.** Users may delegate their stake to one of the various stake pools of the Company or to a third party stake pool. User will have the sole right to determine the volume to be delegated to a stake pool and may increase or decrease its level of participation at any time. Any information Company shares regarding stakepools, including performance metrics and Rewards, will be for indicative purposes only and may not be accurate. Users may only delegate their stake to a stake pool if their ada is in an updated Daedalus or an updated Yoroi wallet at the time of the setup process. User does not acquire any automatic right to Rewards as a result of delegating its stake. +12.3 **Groupes d'enjeu de la compagnie.** La compagnie opèrera plusieurs groupes d'enjeu qui seront visibles sur Yoroi. Le coût, le réseau et l'équipement nécessaires pour pouvoir opérer de façon pérenne ces groupes d'enjeu seront déterminés à la seule discrétion de la compagnie. La compagnie communiquera la quantité de pourcentage qui sera partagé avec les utilisateurs dans le porte feuille Yoroi. Les gains se cumuleront à la fin de chaque époque et apparaitront automatiquement dans votre portefeuille Yoroi. -12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. - -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 ** Remboursement des Récompenses.** L'Utilisateur est responsable du paiement de toutes les taxes applicables, le cas échéant, auxquelles les Récompenses peuvent être soumises et de toutes les autres taxes qui peuvent s'appliquer à l'Utilisateur une fois que les Récompenses sont remboursées. From 078de08fb843a108419e63dc1e50d9bd310c714e Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:06 +0100 Subject: [PATCH 302/464] New translations en-us.md (Spanish) --- .../i18n/locales/terms-of-use/ada/es-ES.md | 110 +++++++----------- 1 file changed, 39 insertions(+), 71 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/es-ES.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/es-ES.md index 62a96a1ef3..0fe3fb7e6e 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/es-ES.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/es-ES.md @@ -1,109 +1,77 @@ -# Terms of Service Agreement +# Acuerdo de Términos de Servicio -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +ESTE ACUERDO DE TÉRMINOS DE SERVICIO ("Acuerdo") se realiza entre EMURGO Co. ("Empresa") y cualquier persona o entidad ("Usuario") que complete el proceso para descargar, utilizar u operar el software conocido como la aplicación de la Billetera de criptomoneda Yoroi, y el servicio de procesamiento de datos, aplicación, servicio de comunicación u otro contenido u ofrecido o suministrado con el software por la Empresa ("Software"). La Compañía y el Usuario se denominan colectivamente las "Partes"; AL HACER CLIC EN EL BOTÓN DE ACEPTACIÓN O AL ACCEDER, USAR O INSTALAR CUALQUIER PARTE DEL SOFTWARE, EL USUARIO ACEPTA Y CONSIENTE EXPRESAMENTE ESTAR LEGALMENTE OBLIGADO POR TODOS LOS TÉRMINOS DE ESTE ACUERDO. SI EL USUARIO NO ESTÁ DE ACUERDO CON TODOS LOS TÉRMINOS DE ESTE ACUERDO, NO ESTARÁ AUTORIZADO A ACCEDER, USAR O INSTALAR NINGUNA PARTE DEL SOFTWARE. -## 1. Rights and Obligations +## 1. Derechos y obligaciones -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. Descripción.** El Software funciona como una billetera digital de criptomoneda de código abierto y libre. El Software no constituye una cuenta por la cual la Compañía o cualquier otro tercero sirva como intermediarios financieros o custodios de la ADA del Usuario' o de cualquier otra divisa de criptomoneda. Aunque el Software ha sido sometido a pruebas beta y continúa siendo mejorado gracias a la retroalimentación de la comunidad de desarrolladores, de los colaboradores de código abierto y de los beta-testers, la Compañía no puede garantizar que no habrá errores en el Software. El Usuario' reconoce que el uso del del Software es por cuenta y riesgo del Usuario', a su discreción y en cumplimiento de todas las leyes aplicables. El usuario es responsable de custodiar las contraseñas de Usuario', PINs, claves privadas, claves de redención, claves de venta protegidas, frases mnemotécnicas de recuperación de copias de seguridad, contraseñas ADA y cualquier otro código que el usuario utilice para acceder al Software o a cualquier información, ADA, cupón u otra unidad de criptomoneda. SI EL USUARIO PIERDE EL ACCESO A LA BILLETERA DE CRIPTOMONEDA DEL USUARIO' O CLAVES PRIVADAS Y NO HA ALMACENADO POR SEPARADO UNA COPIA DE SEGURIDAD DE LA BILLETERA DE CRIPTOMONEDA DEL USUARIO' O UNA FRASE MNEMOTÉCNICA DE RECUPERACIÓN DE COPIA DE SEGURIDAD Y LA CONTRASEÑA O CONTRASEÑAS CORRESPONDIENTES, EL USUARIO RECONOCE Y ACEPTA QUE CUALQUIER ADA O CUALQUIER OTRO USUARIO DE CRIPTOMONEDAS ASOCIADO CON ESA BILLETERA DE CRIPTOMONEDA SERÁ INACCESIBLE. Todas las solicitudes de transacciones son irreversibles. La Compañía y sus accionistas, directores, funcionarios, empleados, afiliados y agentes no pueden garantizar la confirmación de la transacción o recuperar las claves o contraseñas privadas del Usuario' si el Usuario las pierde u olvida. -**b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. +**b. Accesibilidad.** El Usuario acepta que de vez en cuando el Software puede ser inaccesible o inoperable por cualquier razón, incluyendo, sin limitación: (i) mal funcionamiento de los equipos; (ii) procedimientos de mantenimiento periódico o reparaciones que la Compañía pueda llevar a cabo de vez en cuando; o (iii) causas fuera del control de la Compañía o que no sean razonablemente previsibles por la Compañía. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. Equipamiento.** El Usuario será el único responsable de proporcionar, mantener y asegurar la compatibilidad con el Software, todo el hardware, software, requerimientos eléctricos y otros requisitos físicos para el uso del Software por parte del Usuario', incluyendo, sin limitación, conexiones y enlaces de telecomunicaciones y acceso a Internet, navegadores web u otros equipos, programas y servicios necesarios para acceder y usar el Software. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. Seguridad.** El Usuario será el único responsable de la seguridad, confidencialidad e integridad de toda la información y contenido que reciba, transmita o almacene en el Software. El Usuario será el único responsable de cualquier acceso autorizado o no autorizado a cualquier cuenta del Usuario por cualquier persona. El usuario se compromete a asumir toda la responsabilidad de la confidencialidad de los dispositivos de seguridad del Usuario', información, claves y contraseñas. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. Privacidad.** Cuando sea razonablemente posible, la Compañía intentará respetar la privacidad del Usuario'. La Empresa no supervisará, editará ni divulgará ninguna información personal sobre el Usuario o la cuenta del Usuario', incluyendo su contenido o el uso que el Usuario' haga del Software, sin el consentimiento previo del Usuario' a menos que la Empresa crea de buena fe que dicha acción es necesaria para ello: (i) cumplir con el proceso legal u otros requisitos legales de cualquier autoridad gubernamental; (ii) proteger y defender los derechos o propiedad de la Compañía; (iii) hacer cumplir este Acuerdo; (iv) proteger los intereses de los usuarios del Software que no sean el Usuario o cualquier otra persona; o (v) operar o realizar el mantenimiento y la reparación de los servicios o equipos de la Compañía', incluyendo el Software según lo autorizado por la ley. El usuario no tiene expectativas de privacidad con respecto a Internet en general. La dirección IP del Usuario' se transmite y registra con cada mensaje u otra información que el usuario envía desde el software. -## 2. Taxes and Fees +## 2. Impuestos y tasas -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +Todos los cargos por conversión de divisas, tasas de terceros, ventas, uso, valor añadido, propiedad personal u otros impuestos, tasas o gravámenes de cualquier tipo, incluidos los intereses y penalizaciones sobre los mismos, ya sean impuestos ahora o en el futuro por cualquier entidad gubernamental, y las tasas en las que incurra el Usuario a causa del acceso del Usuario', uso o instalación del Software, serán responsabilidad exclusiva del Usuario. -## 3. User Representations +## 3. Representaciones de los usuarios -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +El usuario declara y garantiza a la Compañía que: (a) si el usuario es una persona física, el usuario es mayor de dieciocho (18) años; (b) el Usuario tiene el poder y la autoridad para entrar y cumplir con las obligaciones del Usuario' en virtud del presente Acuerdo; (c) toda la información proporcionada por el usuario a la empresa es veraz, precisa y completa; (d) el usuario cumplirá con todas las leyes y reglamentos de cualquier jurisdicción aplicable en relación con el Usuario '(e) El Usuario deberá cumplir con todos los términos y condiciones de este Acuerdo, incluyendo, sin limitación, las disposiciones establecidas en la Sección 4; y (f) El Usuario ha proporcionado y proporcionará información precisa y completa según se requiera para el acceso, uso o instalación del Software. -## 4. Prohibited Uses +## 4. Usos prohibidos -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +El Usuario es el único responsable de todos y cada uno de los actos y omisiones que se produzcan en virtud de la cuenta del Usuario', la información de seguridad, claves o contraseña, y el Usuario se compromete a no participar en el uso inaceptable del Software, lo que incluye, sin limitación, el uso del Software para: (a) diseminar, almacenar o transmitir mensajes no solicitados, cartas en cadena o correo electrónico comercial no solicitado; (b) diseminar o transmitir material que, para una persona razonable, pueda ser abusivo, obsceno, pornográfico, difamatorio, acosador, groseramente ofensivo, vulgar, amenazante o malicioso; (c) diseminar, almacenar o transmitir archivos, gráficos, software u otro material que infrinja o pueda infringir los derechos de autor, marcas comerciales, patentes, secretos comerciales u otros derechos de propiedad intelectual de cualquier persona; (d) crear una identidad falsa o intentar engañar a cualquier persona sobre la identidad u origen de cualquier comunicación; (e) exportar, reexportar o permitir la descarga de cualquier mensaje o contenido en violación de cualquier ley de exportación o importación, regulación o restricción de cualquier jurisdicción aplicable, o sin todas las aprobaciones, licencias o exenciones requeridas; (f) interferir, interrumpir o intentar obtener acceso no autorizado a otras cuentas en el Software o en cualquier otra red de ordenadores; o (g) diseminar, almacenar o transmitir virus, caballos de Troya o cualquier otro código o programa malicioso. -## 5. Termination +## 5. Terminación -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +Este Acuerdo es efectivo a partir de la aceptación del Usuario' como se establece en el mismo y continuará en pleno vigor siempre y cuando el Usuario participe en cualquier acceso, uso o instalación del Software. La Compañía se reserva el derecho, a su sola discreción y sin previo aviso, en cualquier momento y por cualquier razón, a: (a) eliminar o desactivar el acceso a la totalidad o parte del Software; (b) suspender el acceso del Usuario' a o el uso de la totalidad o parte del Software; y (c) rescindir el presente Acuerdo. -## 6. Disclaimer of Warranties +## 6. Descargo de responsabilidad de las garantías -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +EL SOFTWARE ES PROPORCIONADO "COMO ES", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA. EL USO DEL SOFTWARE ES A RIESGO DEL USUARIO'. LA COMPAÑÍA NO GARANTIZA QUE EL SOFTWARE SEA ININTERRUMPIDO O ESTÉ LIBRE DE ERRORES, NI GARANTIZA LOS RESULTADOS QUE PUEDAN OBTENERSE POR EL USO DEL SOFTWARE. LA COMPAÑÍA NO OFRECE NINGUNA OTRA GARANTÍA, EXPRESA O IMPLÍCITA. LA COMPAÑÍA RENUNCIA EXPRESAMENTE A CUALQUIER GARANTÍA DE COMERCIABILIDAD, GARANTÍA DE IDONEIDAD PARA UN PROPÓSITO PARTICULAR, GARANTÍA DE TÍTULO O INTERÉS, O GARANTÍA DE NO INFRACCIÓN. -## 7. Limitation of Liability +## 7. Límites de responsabilidad -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +EN NINGÚN CASO LA COMPAÑÍA O SUS ACCIONISTAS, DIRECTORES, FUNCIONARIOS, EMPLEADOS, AFILIADOS O AGENTES, O CUALQUIERA DE SUS RESPECTIVOS PROVEEDORES DE SERVICIOS, SERÁN RESPONSABLES ANTE EL USUARIO O CUALQUIER TERCERO POR CUALQUIER USO, INTERRUPCIÓN, DEMORA O IMPOSIBILIDAD DE USAR EL SOFTWARE, PÉRDIDA DE INGRESOS O GANANCIAS, DEMORAS, INTERRUPCIÓN O PÉRDIDA DE SERVICIOS, NEGOCIO O BUENA VOLUNTAD, PÉRDIDA O CORRUPCIÓN DE DATOS, PÉRDIDA RESULTANTE DE FALLAS EN EL SISTEMA O EN LOS SERVICIOS DEL SISTEMA, MAL FUNCIONAMIENTO O CIERRE, O FALTA DE TRANSFERENCIA PRECISA, LEER O TRANSMITIR INFORMACIÓN, NO ACTUALIZAR O PROPORCIONAR INFORMACIÓN CORRECTA, INCOMPATIBILIDAD DEL SISTEMA O SUMINISTRO DE INFORMACIÓN DE COMPATIBILIDAD INCORRECTA O INFRACCIONES EN LA SEGURIDAD DEL SISTEMA, O POR CUALQUIER DAÑO CONSECUENTE, INCIDENTAL, INDIRECTO, EJEMPLAR, ESPECIAL O PUNITIVO, YA SEA QUE SURJA DE O EN RELACIÓN CON ESTE ACUERDO, INCUMPLIMIENTO DE CONTRATO, AGRAVIO (INCLUIDA LA NEGLIGENCIA) O DE OTRO TIPO, INDEPENDIENTEMENTE DE SI DICHOS DAÑOS ERAN PREVISIBLES Y DE SI SE NOS ADVIRTIÓ DE LA POSIBILIDAD DE QUE SE PRODUJERAN TALES DAÑOS O NO. EN NINGÚN CASO LA EMPRESA O SUS ACCIONISTAS, DIRECTORES, FUNCIONARIOS, EMPLEADOS, AFILIADOS O AGENTES, O CUALQUIERA DE SUS RESPECTIVOS PROVEEDORES DE SERVICIOS, SERÁN RESPONSABLES DE CUALQUIER RECLAMO, DAÑO U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN CONTRACTUAL, EXTRACONTRACTUAL O DE OTRO TIPO, QUE SURJA DE O ESTÉ RELACIONADA DE ALGUNA MANERA CON EL ACCESO, USO O INSTALACIÓN DEL SOFTWARE POR PARTE DEL USUARIO'. ALGUNAS JURISDICCIONES PROHÍBEN LA EXCLUSIÓN O LIMITACIÓN DE DAÑOS INCIDENTALES O CONSECUENTES, POR LO QUE ESTA LIMITACIÓN DE RESPONSABILIDAD PUEDE NO APLICARSE AL USUARIO. SI EL USUARIO NO ESTÁ SATISFECHO CON EL SOFTWARE, LA ÚNICA Y EXCLUSIVA SOLUCIÓN PARA EL USUARIO' SERÁ DEJAR DE UTILIZAR EL SOFTWARE. -## 8. Indemnification +## 8. Indemnización -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +El usuario acepta indemnizar, eximir de responsabilidad y defender a la Compañía, sus accionistas, directores, funcionarios, empleados, afiliados y agentes ("Partes Indemnizadas") de y contra cualquier acción, causa, reclamación, daño, deuda, demanda o responsabilidad, incluidos los costos razonables y honorarios de abogados', alegados por cualquier persona, que surjan de o en relación con: (a) este Acuerdo; (b) el acceso del Usuario', el uso o la instalación del Software, incluyendo cualquier dato o trabajo transmitido o recibido por el usuario; y (c) cualquier uso inaceptable del Software por cualquier persona, incluyendo, sin limitación, cualquier declaración, datos o contenido hecho, transmitido o publicado de nuevo por el usuario o cualquier persona que está prohibido como inaceptable bajo la Sección 4. ESTA INDEMNIZACIÓN INCLUYE LA INDEMNIZACIÓN EXPRESA DE LA COMPAÑÍA Y DE TODAS LAS PARTES INDEMNIZADAS POR CUALQUIER SUPUESTA NEGLIGENCIA (INCLUYENDO CUALQUIER SUPUESTA NEGLIGENCIA GRAVE). U OTRA SUPUESTA MALA CONDUCTA DE LA COMPAÑÍA O DE CUALQUIER PARTE INDEMNIZADA. -## 9. Intellectual Property +## 9. Propiedad Intelectual -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +La Compañía retiene todos los derechos, títulos e intereses en y para todas las marcas, logotipos y marcas comerciales de la Compañía', incluyendo, pero no limitado a, EMURGO Co., Ltd., EMURGO, Yoroi, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, y las variaciones de la redacción de las marcas, logotipos y marcas comerciales antes mencionadas. -## 10. Warnings +## 10. Advertencias -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +El usuario reconoce que la Compañía no será responsable de la transferencia, la salvaguardia o el mantenimiento de las claves privadas y / o Usuario' de ADA o cualquier otra criptomoneda. Si el usuario y / o cualquier autoridad co-firmante pierden, maltratan o han robado las claves privadas asociadas, o si los cosignatarios del Usuario' se niegan a proporcionar la autoridad necesaria, el usuario reconoce que el usuario no puede ser capaz de recuperar los ADA de Usuario' o cualquier otra criptomoneda, y que la empresa no será responsable de dicha pérdida. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +El Usuario reconoce y acepta que los ADA o cualquier otra transacción en criptomoneda facilitada por el Software y/o la Empresa puede retrasarse, y que la Empresa no será responsable de ninguna pérdida asociada. El Usuario reconoce y acepta que la Empresa no será responsable de ningún aspecto de la información, contenido o servicios contenidos en materiales de terceros o en sitios de terceros accesibles o vinculados al Software y/o a la Empresa. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. +Al utilizar el Software, el Usuario reconoce y acepta: (i) que la Empresa no es responsable de la operación de los protocolos subyacentes y que la Empresa no garantiza su funcionalidad, seguridad o disponibilidad; y (ii) que los protocolos subyacentes están sujetos a cambios repentinos en las reglas de operación de la cadena principal ("bifurcación"), y que dichas bifurcaciones pueden afectar materialmente el valor y/o función de la ADA o de cualquier otra criptomoneda que el Usuario almacene en el Software. En el caso de una bifurcación, el Usuario acepta que la Empresa puede suspender temporalmente las operaciones del Software (con o sin previo aviso al Usuario) y que la Empresa puede, a su sola discreción, (a) configurar o reconfigurar sus sistemas o (b) decidir no apoyar (o dejar de apoyar) el protocolo bifurcado por completo, siempre y cuando, sin embargo, el Usuario tenga la oportunidad de retirar fondos del Software. El usuario reconoce y acepta que la Compañía no asume responsabilidad alguna con respecto a una rama no soportada de un protocolo bifurcado. -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +## 11. Misceláneo -## 11. Miscellaneous +**a. Enmienda.** La Compañía tendrá el derecho, en cualquier momento y sin previo aviso, de añadir o modificar los términos de este Acuerdo, simplemente entregando dichos términos modificados al Usuario por mensaje electrónico, a través de cualquier medio, y a cualquier dirección proporcionada por el Usuario a la Compañía. El acceso al Software por parte del Usuario, o el uso del mismo, luego de la fecha en que se le entreguen dichos términos modificados, se considerará que constituye la aceptación de dichos términos modificados. -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**Cesantía**. Si alguna disposición de este Acuerdo, o parte de ella, es o se vuelve inválida, ilegal o inaplicable, se considerará modificada en la medida mínima necesaria para hacerla válida, legal y aplicable. Si dicha modificación no es posible, la disposición o parte de la disposición pertinente se considerará eliminada. Cualquier modificación o supresión de una disposición, o de una parte de ella, en virtud del presente artículo no afectará a la validez y la aplicabilidad del resto del presente Acuerdo. -**b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. +**c. Acuerdo Completo - Descargo de responsabilidad **. Este Acuerdo constituye el acuerdo completo entre las Partes con respecto al asunto aquí tratado, y reemplaza todos los acuerdos o entendimientos previos entre las Partes. El Usuario declara y garantiza expresamente que no se basa en ninguna declaración, entendimiento, representación, expectativa o acuerdo que no sea el que se establece expresamente en este Acuerdo. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**d. ESTE CONTRATO ESTÁ SUJETO A UN ARBITRAJE VINCULANTE.** El Usuario acepta que todas y cada una de las disputas o reclamaciones contra cualquier persona que surjan de, o estén relacionadas de alguna manera con, este Acuerdo o con el acceso, uso o instalación del Software por parte del Usuario, o de cualquier otra persona, estarán sujetas a un arbitraje vinculante según el Reglamento de Arbitraje de la Cámara de Comercio Internacional por parte de uno o más árbitros nombrados de acuerdo con dicho Reglamento. El lugar del arbitraje será Japón. El idioma del arbitraje será el inglés. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. +**e. IDIOMA.** Cualquier traducción de este Acuerdo se hace con el propósito de referencia a nivel local solamente, y en caso de cualquier inconsistencia entre las versiones en inglés y las que no lo son, la versión en inglés de este Acuerdo prevalecerá y regirá en todos los aspectos. -**e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. +## 12. Delegación y Staking -## 12. Delegation and Staking +12.1 **Recompensas.** El monto de las Recompensas que un Usuario puede obtener por delegación depende de varios factores, entre ellos, pero no limitados a, la participación del usuario, los márgenes de ganancia de los stake pools, y el volumen de ADA que se delega. Es posible que la delegación no genere ninguna Recompensa para un Usuario debido a los factores mencionados. Las recompensas se obtienen a partir del comienzo del 3ª epoch en la blockchain de Cardano. -12.1 **Rewards.** The amount of Rewards a User may earn from delegation depends on various factors including, but not limited to, user participation, stakepool profit margins and the volume of ada being delegated. It is possible that delegation generates no Reward for a User due to the above-mentioned factors. Rewards are earned as of the start of the 3rd epoch on the Cardano blockchain. +12.2 **Delegación.** Los Usuarios pueden delegar su participación en uno de los distintos stake pools de la Empresa, o en un stake pool de terceros. El Usuario tendrá el derecho exclusivo de determinar el monto a delegar en un stake pool, y podrá aumentar o disminuir su nivel de participación en cualquier momento. Toda la información sobre las participaciones de la Empresa en relación con los stake pools, incluidas las métricas de rendimiento y las Recompensas, tendrá un carácter meramente indicativo, y es posible que no sea exacta. Los Usuarios sólo podrán delegar su participación en un stake pool si sus ADA está en Daedalus actualizado, o en la billetera Yoroi actualizada, al momento del proceso de configuración. El usuario no adquiere ningún derecho automático a las Recompensas como resultado de la delegación de su participación. -12.2 **Delegation.** Users may delegate their stake to one of the various stake pools of the Company or to a third party stake pool. User will have the sole right to determine the volume to be delegated to a stake pool and may increase or decrease its level of participation at any time. Any information Company shares regarding stakepools, including performance metrics and Rewards, will be for indicative purposes only and may not be accurate. Users may only delegate their stake to a stake pool if their ada is in an updated Daedalus or an updated Yoroi wallet at the time of the setup process. User does not acquire any automatic right to Rewards as a result of delegating its stake. +12.3 **Stake-Pools de la Empresa. ** La Empresa operará varios stake pools que serán visibles en Yoroi. El coste y los requisitos de red y de servidor para operar de forma fiable estos stake pools serán determinados por la Empresa a su entera discreción. La Empresa comunicará el porcentaje de la recompensa que se compartirá con los usuarios a través de la billetera Yoroi del Usuario. Las Recompensas se acumularán al final de cada epoch, y aparecerán automáticamente en la billetera Yoroi del Usuario. -12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. - -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 **Redimición de Recompensas.** El Usuario será responsable del pago de todos los impuestos aplicables, si los hubiera, a los que las Recompensas puedan estar sujetas, y de todos y cada uno de los demás impuestos que puedan aplicarse al Usuario una vez que las Recompensas sean redimidas. From 70b2b60cad9a08f588dd44fad223e84768dbb219 Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:08 +0100 Subject: [PATCH 303/464] New translations en-us.md (Czech) --- .../i18n/locales/terms-of-use/ada/cs-CZ.md | 72 ++++++------------- 1 file changed, 20 insertions(+), 52 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/cs-CZ.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/cs-CZ.md index 62a96a1ef3..617f0e1f22 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/cs-CZ.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/cs-CZ.md @@ -1,102 +1,70 @@ # Terms of Service Agreement -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Co., Ltd. ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties." BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. ## 1. Rights and Obligations -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. **b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. ## 2. Taxes and Fees -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. ## 3. User Representations -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. ## 4. Prohibited Uses -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. ## 5. Termination -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. ## 6. Disclaimer of Warranties -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. ## 7. Limitation of Liability -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. ## 8. Indemnification -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. ## 9. Intellectual Property -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to, EMURGO Co., Ltd., EMURGO, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. ## 10. Warnings -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. - -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. ## 11. Miscellaneous -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. **b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**c. Entire Agreement – Disclaimer of Reliance**. This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. +**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. **e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. ## 12. Delegation and Staking @@ -106,4 +74,4 @@ If you have any questions or concerns regarding the accuracy or reliability of t 12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. From 468cf76ef26af77d147c9397422db9e1781cd709 Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:09 +0100 Subject: [PATCH 304/464] New translations en-us.md (de-DE) --- .../i18n/locales/terms-of-use/ada/de-DE.md | 110 +++++++----------- 1 file changed, 39 insertions(+), 71 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/de-DE.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/de-DE.md index 62a96a1ef3..7c87dedc16 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/de-DE.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/de-DE.md @@ -1,109 +1,77 @@ -# Terms of Service Agreement +# Allgemeine Nutzungsbedingungen -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +DIESE ALLGEMEINEN NUTZUNGSBEDINGUNGEN ("Vereinbarung") gelten zwischen EMURGO Co., Ltd. ("Unternehmen") und jeder natürlichen oder juristischen Person ("Benutzer") die den Prozess zum Herunterladen, Verwenden oder Betreiben in Bezug auf die als Yoroi Kryptowährungs-Wallet-Applikation bekannte Software den Datenverarbeitungsdienst, die Anwendung, den Kommunikationsdienst oder anderer Inhalte oder die vom Unternehmen angebotenen oder mit der vom Unternehmen bereitgestellten Software abschliesst ("Software"). Das Unternehmen und der Benutzer werden gemeinsam als "Parteien." bezeichnet. DURCH ANKLICKEN DER ANNAHMETASTE ODER DURCH AKTIVIERUNG, NUTZUNG ODER INSTALLATION JEGLICHER TEILE DER SOFTWARE STIMMT DER BENUTZER AUSDRÜCKLICH ZU UND ERKLÄRT SICH DAMIT EINVERSTANDEN, AN ALLE BEDINGUNGEN DIESER VEREINBARUNG RECHTLICH GEBUNDEN ZU SEIN. WENN DER BENUTZER NICHT ALLEN BEDINGUNGEN DIESER VEREINBARUNG ZUSTIMMT, IST DER BENUTZER NICHT BERECHTIGT, AUF IRGENDEINEN TEIL DER SOFTWARE ZUZUGREIFEN, SIE ZU VERWENDEN ODER ZU INSTALLIEREN. -## 1. Rights and Obligations +## 1. Rechte und Pflichten -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. Beschreibung.** Die Software fungiert als kostenloses, Open-Source, digitaler Kryptowährungs-Wallet. Die Software stellt kein Konto dar, auf dem das Unternehmen oder andere Dritte als Finanzintermediäre oder Verwahrer der ADA des Benutzers oder einer anderen Kryptowährung fungieren. Obwohl die Software Beta-Tests durchlaufen hat und fortlaufend durch Feedback von der Entwicklergemeinschaft, Open-Source-Mitarbeitern und Beta-Testern verbessert wird, kann das Unternehmen keine Garantie für eine fehlerfreie Software abgeben. Der Benutzer anerkennt, dass die Nutzung der Software auf eigene Gefahr, Diskretion und in Übereinstimmung mit allen geltenden Gesetzen erfolgt. Der Benutzer ist dafür verantwortlich die Passwörter, PINs, Private Keys, Redemption Keys, Shielded Vending Keys, mnemonische Passphrasen für die Wiederherstellung von Backups, ADA-Passwörtern und alle anderen Codes aufzubewahren, die der Benutzer für den Zugriff auf die Software oder sonstige Informationen, ADA, Voucher oder andere Kryptowährungseinheiten verwendet. WENN DER BENUTZER DEN ZUGANG ZU DEM KRYPTOWÄHRUNGS-WALLET ODER DEN PRIVATE KEY DES BENUTZERS VERLIERT UND KEINE SEPARATE SICHERUNG DER KRYPTOWÄHRUNGS-WALLET(S) ODER DER MNEMONISCHEN PASSPHRASE(N) UND DER ENTSPRECHENDEN PASSWÖRTER FÜR DIE WIEDERHERSTELLUNG VON BACKUPS ERSTELLT HAT, STIMMT DER BENUTZER HIERMIT ZU UND ANERKENNT, DASS ADA ODER ANDERE KRYPTOWÄHRUNGEN, DIE DER BENUTZER MIT DIESEN KRYPTOWÄHRUNGS-WALLET IN VERBINDUNG GEBRACHT HAT UNZUGÄNGLICH WERDEN. Alle Transaktionsanfragen sind unwiderruflich. Das Unternehmen und seine Aktionäre, Verwaltungsräte, Geschäftsführer, Mitarbeiter, Konzerngesellschaften und Vertreter können keine Garantie für die Transaktionsbestätigung übernehmen oder die Private Keys oder Passwörter des Benutzers abrufen, wenn dieser sie verliert oder vergisst. -**b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. +**b. Zugänglichkeit.** Der Benutzer stimmt zu, dass die Software von Zeit zu Zeit aus irgendeinem Grund unzugänglich oder nicht funktionsfähig sein kann, einschliesslich, aber nicht beschränkt aus folgenden Gründen: (i) Gerätefehlfunktionen; (ii) regelmässige Wartungsverfahren oder Reparaturen, die das Unternehmen von Zeit zu Zeit durchführen kann; oder (iii) Ursachen, die ausserhalb der Kontrolle des Unternehmens liegen oder die für das Unternehmen nicht vernünftigerweise vorhersehbar sind. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. Ausstattung.** Der Benutzer ist allein verantwortlich für die Bereitstellung, Aufrechterhaltung und Sicherstellung der Kompatibilität mit der Software, aller Hardware, Software, elektrischen und anderen physikalischen Anforderungen für die Nutzung der Software durch den Benutzer, einschliesslich, aber nicht beschränkt auf Telekommunikations- und Internetzugangsverbindungen und -links, Webbrowser oder andere Geräte, Programme und Dienstleistungen, die für den Zugriff auf die Software und deren Nutzung erforderlich sind. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. Sicherheit.** Der Benutzer ist allein verantwortlich für die Sicherheit, Vertraulichkeit und Integrität aller Informationen und Inhalte, die er erhält, überträgt oder auf der Software speichert. Jeder autorisierte oder unbefugte Zugriff durch eine Drittperson auf das Benutzerkonto liegt alleine in der Verantwortung des Benutzers. Der Benutzer verpflichtet sich, die volle Verantwortung für die Vertraulichkeit der Sicherheitsvorrichtungen, Informationen, Schlüssel und Passwörter des Benutzers zu tragen. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. Datenschutz.** Wenn es vernünftigerweise durchführbar ist, wird das Unternehmen versuchen, die Privatsphäre des Benutzers zu respektieren. Das Unternehmen wird ohne vorherige Zustimmung des Benutzers keine personenbezogenen Daten über den Benutzer oder das Benutzerkonto, einschliesslich seines Inhalts oder der Nutzung der Software durch den Benutzer, überwachen, bearbeiten oder offenlegen, es sei denn, das Unternehmen ist im treuen Glauben der Ansicht, dass eine solche Massnahme erforderlich ist: (i) den rechtlichen Prozess oder andere rechtliche Anforderungen einer Regierungsbehörde einzuhalten; (ii) die Rechte oder das Eigentum des Unternehmens zu schützen und zu verteidigen; (iii) diese Vereinbarung durchzusetzen; (iv) die Interessen anderer Benutzer der Software als des Benutzers oder einer anderen Person zu schützen; oder (v) die Dienstleistungen oder Geräte des Unternehmens zu betreiben oder zu warten und zu reparieren, einschliesslich der gesetzlich zugelassenen Software. Im Hinblick auf das Internet im Allgemeinen hat der Benutzer keine Erwartungen an Datenschutz. Die IP-Adresse des Benutzers wird mit jeder Nachricht oder anderen Informationen, die der Benutzer von der Software sendet, übertragen und aufgezeichnet. -## 2. Taxes and Fees +## 2. Steuern und Gebühren -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +Alle Währungsumrechnungsgebühren, Drittanbietergebühren, Verkaufs-, Nutzungs-, Mehrwert-, Eigentums- oder andere Steuern, Zölle oder Abgaben jeglicher Art, einschliesslich Zinsen und Strafen auf solche, die jetzt oder in Zukunft von einer Regierungseinrichtung erhoben werden, sowie Gebühren, die dem Benutzer durch den Zugriff, die Nutzung oder die Installation der Software durch den Benutzer entstehen, fallen in die alleinige Verantwortung des Benutzers. -## 3. User Representations +## 3. Benutzer-Zusicherungen -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +Der Benutzer sicher hiermit zu, dass: (a) wenn der Benutzer eine natürliche Person ist, er über achtzehn Jahre(18) alt ist; (b) der Benutzer die Befugnis hat, die Verpflichtungen des Benutzers aus diesem Vertrag einzugehen und zu erfüllen; (c) alle Informationen, die der Benutzer dem Unternehmen zur Verfügung stellt, wahrheitsgemäss, genau und vollständig sind; (d) der Benutzer alle Gesetze und Vorschriften der jeweiligen Gerichtsbarkeit in Bezug auf den Zugriff, die Nutzung oder die Installation der Software einhalten wird; (e) der Benutzer verpflichtet ist, alle Bedingungen dieser Vereinbarung einzuhalten, einschliesslich, aber ohne Beschränkung auf die in Abschnitt 4 dargelegten Bestimmungen; und (f) der Benutzer genaue und vollständige Angaben, die für den Zugriff, die Nutzung oder die Installation der Software erforderlich sind, zur Verfügung gestellt hat und dies auch weiterhin tun wird. -## 4. Prohibited Uses +## 4. Verbotene Nutzung -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +Der Benutzer trägt die alleinige Verantwortung für alle Handlungen und Unterlassungen, die unter Verwendung seines Benutzerkontos, der Sicherheitsdaten, der Dateischlüssel oder des Passwortes vorgenommen werden. Darüber hinaus verpflichtet er sich, keine unzulässige Nutzung der Software vorzunehmen, einschliesslich aber ohne Einschränkungen auf die Nutzung der Software zur: (a) Verbreitung, Speicherung oder Übertragung unerwünschter Nachrichten, Kettenbriefe oder unerwünschter kommerzieller E-Mails; (b) Verbreitung oder Übertragung von Materialien, die eine vernünftige Person als missbräuchlich, obszön, pornographisch, rufschädigend, belästigend, grob anstössig, vulgär, rechts- oder sittenwidrig erachten kann; (c) Verbreitung, Speicherung oder Übertragung von Dateien, Grafiken, Software oder anderem Material, das tatsächlich oder potenziell die Urheber-, Marken- oder Patentrechte, sowie das Geschäftsgeheimnis oder andere Rechte an geistigem Eigentum einer Person verletzt; (d) Verschaffung einer falschen Identität oder anderweitiger Versuche, eine Person über die Identität oder den Ursprung einer Kommunikation irrezuführen; (e) Förderung von Ausfuhr und Wiederausfuhr oder das Herunterladen von Nachrichten oder Inhalten unter Verletzung von Export- oder Importgesetzen, Bestimmung oder Einschränkung einer anwendbaren Gerichtsbarkeit ohne der erforderlichen Genehmigungen, Lizenzen oder Lizenzfreistellungen; (f) Beeinträchtigung, Unterbrechung oder zum Versuch sich unbefugten Zugriff auf andere Konten in der Software oder ein anderes Computernetzwerk zu verschaffen; oder (g) Verbreitung, Speicherung oder Übertragung von Viren, Trojanern oder anderen schädigenden Codes oder Programmen. -## 5. Termination +## 5. Kündigung -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +Diese Vereinbarung wird mit der Annahme wirksam und bleibt in vollem Umfang in Kraft, solange der Benutzer auf die Software zugreift, diese nutzt oder installiert. Das Unternehmen behält sich das Recht vor, nach eigenem Ermessen und ohne Vorankündigung jederzeit und aus beliebigem Grund: (a) den Zugriff auf die gesamte oder einen Teil der Software zu sperren oder zu deaktivieren; (b) den Zugriff des Benutzers auf die gesamte oder einen Teil der Software zu sperren; und (c) diese Vereinbarung zu kündigen. -## 6. Disclaimer of Warranties +## 6. Gewährleistungsausschluss -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +DIE SOFTWARE WIRD "WIE SIE IST" BEREITGESTELLT, OHNE JEGLICHE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE GEWÄHRLEISTUNG. DIE NUTZUNG DER SOFTWARE ERFOLGT AUF EIGENE GEFAHR DES BENUTZERS. DAS UNTERNEHMEN GARANTIERT NICHT, DASS DIE SOFTWARE UNUNTERBROCHEN ZUR VERFÜGUNG STEHT ODER FEHLERFREI IST, NOCH GIBT DAS UNTERNEHMEN EINE GARANTIE FÜR ERGEBNISSE, DIE DURCH DIE NUTZUNG DER SOFTWARE ERZIELT WERDEN KÖNNEN. DAS UNTERNEHMEN GIBT KEINE WEITEREN AUSDRÜCKLICHEN ODER STILLSCHWEIGENDEN GARANTIEN ODER ZUSICHERUNGEN AB. DAS UNTERNEHMEN LEHNT AUSDRÜCKLICH JEGLICHE GEWÄHRLEISTUNG DER MARKTGÄNGIGKEIT, DIE GEWÄHRLEISTUNG DER EIGNUNG FÜR EINEN BESTIMMTEN ZWECK, DIE GEWÄHRLEISTUNG VON RECHT ODER RECHTSANSPRUCH ODER DIE GEWÄHRLEISTUNG DER NICHTVERLETZUNG AB. -## 7. Limitation of Liability +## 7. Haftungsbeschränkung -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +IN KEINEM FALL KÖNNEN DAS UNTERNEHMEN ODER SEINE AKTIONÄRE, VERWALTUNGSRÄTE, GESCHÄFTSFÜHRER, MITARBEITER, KONZERNGESELLSCHAFTEN, VERTRETER ODER DEREN JEWEILIGEN DIENSTLEISTER GEGENÜBER DEM BENUTZER ODER EINEM DRITTEN HAFTBAR GEMACHT WERDEN FÜR JEGLICHE NUTZUNG, UNTERBRECHUNG, VERZÖGERUNG ODER NICHTAUSFÜHRBARKEIT DER SOFTWARE, ENTGANGENE EINNAHMEN ODER GEWINNE, VERZÖGERUNGEN, UNTERBRECHUNG ODER VERLUST VON DIENSTLEISTUNGEN, VERLUSTE BETREFFEND DIE GESCHÄFTSTÄTIGKEIT ODER DEN GOODWILL, VERLUST ODER BESCHÄDIGUNG VON DATEN, VERLUST DURCH AUSFALL VON SYSTEM- ODER SYSTEMDIENSTAUSFALL, ABSCHALTUNG ODER FEHLFUNKTION, FEHLERHAFTES LESEN ODER ÜBERTRAGEN UND ÜBERMITTELN VON INFORMATIONEN, UNTERLASSUNG DER AKTUALISIERUNG ODER BEREITSTELLUNG KORREKTER INFORMATIONEN UND SYSTEMINKOMPATIBILITÄT ODER BEREITSTELLUNG FALSCHER KOMPATIBILITÄTSINFORMATIONEN ODER VERSTÖSSE GEGEN DIE SYSTEMSICHERHEIT ODER FÜR ZUFÄLLIGE, INDIREKTE, EXEMPLARISCHE, BESONDERE ODER STRAF- UND FOLGESCHÄDEN, UNABHÄNGIG DAVON, OB SIE SICH AUS ODER IM ZUSAMMENHANG MIT DIESER VEREINBARUNG, VERTRAGSBRUCH, UNERLAUBTER HANDLUNG (EINSCHLIESSLICH FAHRLÄSSIGKEIT) ODER ANDERWEITIG ERGEBEN, UNABHÄNGIG DAVON, OB SOLCHE SCHÄDEN VORHERSEHBAR WAREN UND OB WIR ÜBER DIE MÖGLICHKEIT SOLCHER SCHÄDEN INFORMIERT WURDEN ODER NICHT. -## 8. Indemnification +## 8. Schadloshaltung -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +Der Benutzer verpflichtet sich, das Unternehmen, seine Aktionäre, Verwaltungsräte, Geschäftsführer, Mitarbeiter, Konzerngesellschaften und Vertreter ("freigestellte Parteien") für alle Handlungen, Ursachen, Ansprüche, Schäden, Schulden, Forderungen oder Haftungen, einschliesslich angemessener Kosten und Anwaltskosten, die von einer Person geltend gemacht werden, zu entschädigen, schadlos zu halten und zu verteidigen, insbesondere die sich aus oder: (a) in Zusammenhang mit dieser Vereinbarung ergeben; (b) dem Zugriff, Nutzung oder Installation der Software durch den Benutzer ergeben oder damit zusammenhängen, einschliesslich aller Daten oder Arbeiten, die vom Benutzer übertragen oder empfangen wurden; und (c) jede inakzeptable Verwendung der Software durch eine Person, einschliesslich, aber ohne Einschränkung aller Aussagen, Daten oder Inhalte, die vom Benutzer oder einer Person gemacht, übertragen oder neu veröffentlicht wurden und die gemäss Abschnitt 4 verboten sind. DIESE SCHADLOSHALTUNG BEINHALTET DIE AUSDRÜCKLICHE ENTSCHÄDIGUNG DES UNTERNEHMENS UND ALLER FREIGESTELLTEN PARTEIEN FÜR JEDE ANGEBLICHE FAHRLÄSSIGKEIT (EINSCHLIESSLICH JEGLICHER GROBEN FAHRLÄSSIGKEIT) ODER EIN ANDERES ANGEBLICHES FEHLVERHALTEN DES UNTERNEHMENS ODER EINER FREIGESTELLTEN PARTEI. -## 9. Intellectual Property +## 9. Geistiges Eigentum -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +Das Unternehmen behält alle Rechte, Titel und Anteile an allen Marken, Logos und Markenzeichen des Unternehmens, einschliesslich, aber nicht beschränkt auf EMURGO Co., Ltd., EMURGO, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App und Variationen des Wortlauts der vorgenannten Marken, Logos und Markenzeichen. -## 10. Warnings +## 10. Warnhinweise -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +Der Benutzer erklärt sich damit einverstanden, dass das Unternehmen nicht für die Übertragung, Sicherung oder Aufrechterhaltung von Private Keys und/oder der ADA des Benutzers oder einer anderen Kryptowährung verantwortlich ist. Wenn der Benutzer und/oder alle Mitzeichnungsberechtigten die zugehörigen Private Keys verloren, missbraucht oder gestohlen haben oder wenn die Mitzeichnungsberechtigten sich weigern, die erforderliche Vollmacht zu erteilen, erklärt sich der Benutzer damit einverstanden, dass er gegebenfalls nicht in der Lage ist, die ADA des Benutzers oder eine andere Kryptowährung wiederherzustellen, und dass das Unternehmen für diesen Verlust nicht verantwortlich ist. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +Der Benutzer erklärt sich damit einverstanden, dass sich ADA oder andere durch die Software und/oder das Unternehmen ermöglichte Transaktionen in Kryptowährung verzögern können, und dass das Unternehmen nicht für damit verbundene Verluste verantwortlich ist. Der Benutzer erklärt sich damit einverstanden, dass das Unternehmen für keinen Aspekt der Informationen, Inhalte oder Dienstleistungen verantwortlich ist, die in Materialien von Drittanbietern oder auf Websites von Drittanbietern enthalten sind, die mit der Software und/oder dem Unternehmen zugänglich sind oder mit dieser verlinkt sind. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. +Durch die Verwendung der Software anerkennt und stimmt der Benutzer zu: (i) dass das Unternehmen nicht für den Betrieb der zugrunde liegenden Protokolle verantwortlich ist und keine Garantie für deren Funktionalität, Sicherheit oder Verfügbarkeit gibt; und (ii) dass die zugrunde liegenden Protokolle plötzlichen Änderungen der Betriebsvorschriften in der Hauptkette ("Fork") unterliegen, und dass solche Forks den Wert und/oder die Funktion des ADA oder einer anderen Kryptowährung, die der Benutzer in der Software speichert, wesentlich beeinflussen können. Im Falle eines Forks stimmt der Benutzer zu, dass das Unternehmen den Betrieb der Software vorübergehend aussetzen kann (mit oder ohne Benachrichtigung des Benutzers), und dass das Unternehmen nach eigenem Ermessen (a) seine Systeme konfigurieren oder neu konfigurieren kann oder (b) beschliessen kann, das Fork-Protokoll nicht vollständig zu unterstützen (oder nicht mehr zu unterstützen) unter der Voraussetzung, dass der Benutzer die Möglichkeit hat, Gelder von der Software abzuheben. Der Benutzer anerkennt und stimmt zu, dass das Unternehmen keinerlei Verantwortung in Bezug auf einen nicht unterstützten Zweig eines Fork-Protokolls übernimmt. -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +## 11. Sonstiges -## 11. Miscellaneous +**a. Ergänzung** Das Unternehmen ist jederzeit und ohne Vorankündigung berechtigt, die Bedingungen dieser Vereinbarung zu ergänzen oder zu ändern. Die elektronische Zustellung der geänderten Bedingungen an den Benutzer erfolgt über ein beliebiges Medium an eine Adresse, die der Benutzer dem Unternehmen zur Verfügung stellt. Der Zugriff des Benutzers auf die Software oder deren Nutzung nach der Zustellung der geänderten Bedingungen gilt als Zustimmung. -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**b. Teilbarkeit** Sollte eine Bestimmung oder Teilbestimmung dieser Vereinbarung ungültig, illegal oder nicht durchsetzbar sein oder werden, gilt sie als so weit geändert, wie es erforderlich ist, um es gültig, legal und durchsetzbar zu machen. Ist eine solche Änderung nicht möglich, so gilt die betreffende Bestimmung oder Teilbestimmung als gestrichen. Eine Änderung oder Streichung einer Bestimmung oder Teilbestimmung nach diesem Artikel berührt nicht die Gültigkeit und Durchsetzbarkeit des übrigen Teils dieser Vereinbarung. -**b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. +**c. Gesamte Vereinbarung – Haftungsausschluss** Diese Vereinbarung stellt die gesamte Vereinbarung zwischen den Parteien in Bezug auf den Gegenstand dieser Vereinbarung dar und ersetzt alle früheren Vereinbarungen oder Absprachen zwischen den Parteien. Der Benutzer versichert ausdrücklich und garantiert, dass er sich nicht auf andere als die in dieser Vereinbarung ausdrücklich genannten Erklärungen, Vereinbarungen, Vorstellungen, Erwartungen oder Vereinbarungen verlässt. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**d. DIESE VEREINBARUNG UNTERLIEGT EINEM VERBINDLICHEN SCHIEDSVERFAHREN** Der Benutzer stimmt zu, dass alle Streitigkeiten oder Ansprüche gegen eine Person, die sich aus oder in irgendeiner Weise im Zusammenhang mit dieser Vereinbarung oder dem Zugriff, der Nutzung oder der Installation der Software durch den Benutzer oder eine andere Person ergeben, unter Ausschluss des Rechtsweges durch ein Schiedsgericht entschieden werden, das auf Basis der Schiedsgerichtsordnung der Internationalen Handelskammer gebildet wird und durch einen oder mehrere Schiedsrichter, die gemäss dieser Ordnung ernannt werden, entscheidet. Schiedsort ist Japan. Sprache des Schiedsverfahrens ist English. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. +**e. SPRACHE** Jede Übersetzung dieser Vereinbarung dient nur der lokalen Referenz. Im Falle von Unstimmigkeiten zwischen der englischen und einer nicht-englischen Version hat die englische Version dieser Vereinbarung Vorrang und gilt in jeder Hinsicht. -**e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. +## 12. Delegierung und Staking -## 12. Delegation and Staking +12.1 **Belohnungen.** Die Höhe der Belohnungen, die ein Benutzer durch die Delegation verdienen kann, hängt von verschiedenen Faktoren ab, einschließlich, aber nicht beschränkt auf die Beteiligung des Benutzers, die Gewinnspanne des Stakepools und das Volumen der delegierten Adas. Es ist möglich, dass die Delegation aufgrund der oben genannten Faktoren keine Rewards für einen Benutzer generiert. Rewards werden ab dem Beginn der 3. Epoche auf der Cardano-Blockchain verdient. -12.1 **Rewards.** The amount of Rewards a User may earn from delegation depends on various factors including, but not limited to, user participation, stakepool profit margins and the volume of ada being delegated. It is possible that delegation generates no Reward for a User due to the above-mentioned factors. Rewards are earned as of the start of the 3rd epoch on the Cardano blockchain. +12.2 **Delegierung.** Benutzer können ihren Anteil an einen der verschiedenen Stakepools des Unternehmens oder an einen dritten Stakepool delegieren. Die Nutzer haben das alleinige Recht, das an einen Stakepool zu delegierende Volumen zu bestimmen und können die Höhe ihrer Beteiligung jederzeit erhöhen oder verringern. Alle Informationen, die das Unternehmen in Bezug auf die Stakepool teilt, einschließlich Leistungskennzahlen und Belohnungen, dienen lediglich als Anhaltspunkt und sind möglicherweise nicht genau. Benutzer können ihren Einsatz nur dann an einen Stakepool delegieren, wenn sich ihre Ada zum Zeitpunkt des Einrichtungsvorgangs in einer aktualisierten Daedalus- oder einer aktualisierten Yoroi-Wallets befindet. Der Benutzer erwirbt durch die Delegierung seines Stake kein automatisches Recht auf Belohnungen. -12.2 **Delegation.** Users may delegate their stake to one of the various stake pools of the Company or to a third party stake pool. User will have the sole right to determine the volume to be delegated to a stake pool and may increase or decrease its level of participation at any time. Any information Company shares regarding stakepools, including performance metrics and Rewards, will be for indicative purposes only and may not be accurate. Users may only delegate their stake to a stake pool if their ada is in an updated Daedalus or an updated Yoroi wallet at the time of the setup process. User does not acquire any automatic right to Rewards as a result of delegating its stake. +12.3 **Unternehmens Stake-Pools.** Das Unternehmen wird verschiedene Stakepools betreiben, die in Yoroi oder Seiza sichtbar sein werden. Die Kosten sowie die Netz- und Serveranforderungen für den zuverlässigen Betrieb solcher Stakepools werden vom Unternehmen nach eigenem Ermessen festgelegt. Das Unternehmen wird den prozentualen Betrag der Belohnung, der mit den Nutzern geteilt werden soll, über die Yoroi-Wallet des Nutzers mitteilen. Die Belohnungen werden am Ende jeder Epoche angesammelt und erscheinen automatisch in der Yoroi-Wallet des Benutzers. -12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. - -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 **Ertrags-Auszahlungen.** Der Benutzer ist - falls zutreffend - für die Zahlung aller anwendbaren Steuern verantwortlich, denen die Prämien unterliegen könnten, sowie für alle anderen Steuern, die nach Einlösung der Prämien auf den Benutzer zutreffen könnten. From ab5263f5246963510da73147f0f76dbc9253e2d6 Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:11 +0100 Subject: [PATCH 305/464] New translations en-us.md (Greek) --- .../i18n/locales/terms-of-use/ada/el-GR.md | 76 ++++++------------- 1 file changed, 22 insertions(+), 54 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/el-GR.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/el-GR.md index 62a96a1ef3..36defd9d8f 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/el-GR.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/el-GR.md @@ -1,102 +1,70 @@ -# Terms of Service Agreement +# Συμφωνία Όρων Παροχής Υπηρεσιών -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +ΑΥΤΗ Η ΣΥΜΦΩΝΙΑ ΟΡΩΝ ΠΑΡΟΧΗΣ ΥΠΗΡΕΣΙΩΝ ("Συμφωνία") έγινε μεταξύ της EMURGO Co., Ltd. ("Εταιρείας") και οποιουδήποτε ανθρώπου ή οντότητας ("Χρήστης") που ολοκληρώνει τη διαδικασία λήψης, εφαρμογής ή χειρίζεται το λογισμικό γνωστό ως την εφαρμογή Yoroi Πορτοφόλι κρυπτονομισμάτων και υπηρεσία διαχείρισης δεδομένων, εφαρμογή, υπηρεσία επικοινωνίας ή άλλο περιεχόμενο ή προσφερόμενο ή παρεχόμενο μαζί με το λογισμικό από την Εταιρεία ("Λογισμικο"). Η Εταιρεία και ο Χρήστης συλλογικά αναφέρονται ως "Συμβαλλόμενοι." -## 1. Rights and Obligations +## 1. Δικαιώματα και Υποχρεώσεις -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**α. Περιγραφή.** Το Λογισμικό λειτουργεί ως ελεύθερο, ανοιχτού κώδικα, ψηφιακό πορτοφόλι κρυπτονομισμάτων. Το Λογισμικό δεν συνιστά ένα λογαριασμό κατά τον οποίο η Εταιρεία ή τρίτοι συνεργάτες εξυπηρετούν ως οικονομικοί διαμεσολαβητές ή επίτροποι του-των Χρήστη'ών ADA ή οποιοδήποτε άλλου κρυπτονομίσματος. Ενώ το Λογισμικό έχει υποβληθεί σε δοκιμαστικό έλεγχο και συνεχίζει να βελτιώνεται από τις αναφορές προγραμματιστών της κοινότητας, ανοιχτού κώδικα συνεισφορές και δοκιμαστικά τεστ, η Εταιρεία δεν μπορεί να εγγυηθεί ότι δεν θα υπάρξουν σφάλματα μέσα στο Λογισμικό. Ο Χρήστης αναγνωρίζει ότι η χρήση του Λογισμικού είναι ρίσκο του ιδίου Χρήστη'ών, στη διακριτική του ευχέρεια και σε συμμόρφωση με όλους τους νόμους που ισχύουν. Ο Χρήστης είναι υπεύθυνος να κρατά ασφαλείς του κωδικούς Χρήστη'ών, PIN, προσωπικά κλειδιά, κλειδιά ανάκτησης, θωρακισμένα κλειδιά πώλησης, αντίγραφα ασφαλείας ανάκτησης μνημονικών κωδικών φράσεων, κωδικούς πρόσβασης ADA και όποιους άλλους κωδικούς ο Χρήστης χρησιμοποιεί για να αποκτήσει πρόσβαση στο Λογισμικό ή άλλη πληροφορία, ADA, απόδειξη πληρωμής ή άλλη μονάδα κρυπτονομίσματος. **b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. ## 2. Taxes and Fees -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. ## 3. User Representations -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. ## 4. Prohibited Uses -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. ## 5. Termination -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. ## 6. Disclaimer of Warranties -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. ## 7. Limitation of Liability -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. ## 8. Indemnification -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. ## 9. Intellectual Property -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to, EMURGO Co., Ltd., EMURGO, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. ## 10. Warnings -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. - -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. ## 11. Miscellaneous -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. **b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**c. Entire Agreement – Disclaimer of Reliance**. This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. +**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. **e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. ## 12. Delegation and Staking @@ -106,4 +74,4 @@ If you have any questions or concerns regarding the accuracy or reliability of t 12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. From 4c1d1ea6c700ffbc47f5be3ce10705bbb5d3a5aa Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:13 +0100 Subject: [PATCH 306/464] New translations en-us.md (Hungarian) --- .../i18n/locales/terms-of-use/ada/hu-HU.md | 72 ++++++------------- 1 file changed, 20 insertions(+), 52 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/hu-HU.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/hu-HU.md index 62a96a1ef3..617f0e1f22 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/hu-HU.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/hu-HU.md @@ -1,102 +1,70 @@ # Terms of Service Agreement -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Co., Ltd. ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties." BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. ## 1. Rights and Obligations -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. **b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. ## 2. Taxes and Fees -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. ## 3. User Representations -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. ## 4. Prohibited Uses -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. ## 5. Termination -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. ## 6. Disclaimer of Warranties -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. ## 7. Limitation of Liability -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. ## 8. Indemnification -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. ## 9. Intellectual Property -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to, EMURGO Co., Ltd., EMURGO, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. ## 10. Warnings -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. - -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. ## 11. Miscellaneous -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. **b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**c. Entire Agreement – Disclaimer of Reliance**. This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. +**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. **e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. ## 12. Delegation and Staking @@ -106,4 +74,4 @@ If you have any questions or concerns regarding the accuracy or reliability of t 12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. From 215336065a931df1da17f3f83ce8bf8539506178 Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:15 +0100 Subject: [PATCH 307/464] New translations en-us.md (Italian) --- .../i18n/locales/terms-of-use/ada/it-IT.md | 110 +++++++----------- 1 file changed, 39 insertions(+), 71 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/it-IT.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/it-IT.md index 62a96a1ef3..1add0cfe6c 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/it-IT.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/it-IT.md @@ -1,109 +1,77 @@ -# Terms of Service Agreement +# Termini del contratto di servizio -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +Le presenti condizioni dell'accordo di servizio ("accordo") è stipulato tra EMURGO Co. ("Società") e qualsiasi persona o entità ("Utente") che completa il processo per scaricare, utilizzare o utilizzare il software noto come applicazione Yoroi cryptocurrency Wallet, e il servizio di elaborazione dati, applicazione, servizio di comunicazione o altri contenuti o offerti o forniti con il software dalla Società ("Software"). La Società e l'Utente sono denominati collettivamente "Parti". FACENDO CLIC SUL PULSANTE DI ACCETTAZIONE O ACCEDENDO, UTILIZZANDO O INSTALLANDO QUALSIASI PARTE DEL SOFTWARE, L'UTENTE ACCETTA ESPRESSAMENTE E ACCETTA DI ESSERE VINCOLATO LEGALMENTE DA TUTTE LE CONDIZIONI DEL PRESENTE ACCORDO. SE L'UTENTE NON ACCETTA TUTTI I TERMINI DEL PRESENTE ACCORDO, L'UTENTE NON SARÀ AUTORIZZATO AD ACCEDERE, UTILIZZARE O INSTALLARE QUALSIASI PARTE DEL SOFTWARE. -## 1. Rights and Obligations +## 1. Diritti e obbligazioni -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. Descrizione.** Il software funziona come un portafoglio di valuta digitale, libero, open source e criptato. Il Software non costituisce un conto tramite il quale la Società o altre terze parti servono come intermediari finanziari o depositari dell'ADA dell'Utente o di qualsiasi altra valuta criptata. Mentre il Software è stato sottoposto a beta testing e continua ad essere migliorato dal feedback della comunità degli sviluppatori, dei collaboratori open-source e dei beta-tester, la Società non può garantire che non ci saranno bug nel Software. L'Utente riconosce che l'uso del Software da parte dell'Utente è a rischio, discrezione e in conformità con tutte le leggi applicabili. L'Utente è responsabile della custodia delle password, dei PIN, delle chiavi private, delle chiavi di riscatto, delle chiavi di distribuzione schermate, delle chiavi di backup, delle passphrase mnemoniche, dei codici ADA e di qualsiasi altro codice utilizzato dall'Utente per accedere al Software o a qualsiasi informazione, ADA, voucher o altra unità di crittografia valutaria. SE L'UTENTE PERDE L'ACCESSO AL PORTAFOGLIO DI VALUTA CRIPTATA O ALLE CHIAVI PRIVATE DELL'UTENTE E NON HA MEMORIZZATO SEPARATAMENTE UN BACKUP DEL PORTAFOGLIO DI VALUTA CRIPTATA DELL'UTENTE O RECUPERO DI BACKUP MNEMONICO FRASE(I) E PASSWORD CORRISPONDENTE(I), L'UTENTE RICONOSCE E ACCETTA CHE QUALSIASI ADA O QUALSIASI ALTRA VALUTA CRIPTATA CHE L'UTENTE HA ASSOCIATO A QUEL PORTAFOGLIO DI VALUTA CRIPTATA DIVENTERÀ INACCESSIBILE. Tutte le richieste di transazione sono irreversibili. La Società e i suoi azionisti, direttori, funzionari, impiegati, dipendenti, affiliati e agenti non possono garantire la conferma della transazione o recuperare le chiavi private o le password dell'Utente se l'Utente le perde o le dimentica. -**b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. +**b. Accessibilità.** L'utente accetta che di tanto in tanto il Software può essere inaccessibile o inutilizzabile per qualsiasi ragione, incluso, senza limitazioni: (i) malfunzionamenti delle apparecchiature; (ii) procedure di manutenzione periodica o riparazioni che la Società può di volta in volta intraprendere; o (iii) cause che sfuggono al controllo della Società o che non sono ragionevolmente prevedibili dalla Società. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. Atrezzature Informatiche.** L'Utente è l'unico responsabile di fornire, mantenere e garantire la compatibilità con il Software, tutti i requisiti hardware, software, elettrici e altri requisiti fisici per l'utilizzo del Software da parte dell'Utente, inclusi, senza limitazioni, connessioni e link di accesso a Internet e alle telecomunicazioni, browser web o altre apparecchiature, programmi e servizi necessari per accedere e utilizzare il Software. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. Sicurezza.** L'Utente è l'unico responsabile per la sicurezza, la riservatezza e l'integrità di tutte le informazioni e contenuti che l'Utente riceve, trasmette o memorizza sul Software. L'Utente è l'unico responsabile per qualsiasi accesso autorizzato o non autorizzato a qualsiasi account dell'Utente da parte di qualsiasi persona. L'Utente accetta di assumersi ogni responsabilità per la riservatezza dei dispositivi di sicurezza, delle informazioni, delle chiavi e delle password dell'Utente. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. Privacy.** Quando ragionevolmente possibile, la Società cercherà di rispettare la privacy dell'Utente. La Società non monitorerà, modificherà o divulgherà alcuna informazione personale sull'account dell'Utente o dell'Utente, inclusi i suoi contenuti o l'uso del Software da parte dell'Utente, senza il previo consenso dell'Utente, a meno che la Società non ritenga in buona fede che tale azione sia necessaria a tal fine: (i) rispettare le procedure legali o altri requisiti legali di qualsiasi autorità governativa; (ii) proteggere e difendere i diritti o la proprietà della Società; (iii) applicare il presente Contratto; (iv) proteggere gli interessi degli utenti del Software diversi dall'Utente o da qualsiasi altra persona; o (v) gestire o eseguire la manutenzione e la riparazione dei servizi o delle attrezzature della Società, compreso il Software come autorizzato dalla legge. L'Utente non ha alcuna aspettativa di privacy rispetto a Internet in generale. L'indirizzo IP dell'Utente viene trasmesso e registrato con ogni messaggio o altra informazione che l'Utente invia dal Software. -## 2. Taxes and Fees +## 2. Imposte e tasse -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +Tutte le spese per la conversione di valuta, le spese di terzi, le vendite, l'uso, l'uso, il valore aggiunto, la proprietà personale o altre tasse, dazi o imposte di qualsiasi tipo, compresi gli interessi e le relative sanzioni, imposte ora o in seguito da qualsiasi ente governativo, e le spese sostenute dall'Utente in ragione dell'accesso, uso o installazione del Software da parte dell'Utente sono di esclusiva responsabilità dell'Utente. -## 3. User Representations +## 3. Rappresentazioni degli utenti -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +L'utente dichiara e garantisce alla Società che: (a) se l'Utente è una persona fisica, l'Utente ha più di diciotto (18) anni; (b) l'Utente ha il potere e l'autorità di stipulare ed eseguire gli obblighi dell'Utente ai sensi del presente Contratto; (c) tutte le informazioni fornite dall'Utente alla Società sono veritiere, accurate e complete; (d) l'Utente rispetterà tutte le leggi e i regolamenti di qualsiasi giurisdizione applicabile in materia di accesso, uso o installazione del Software da parte dell'Utente; (e) L'Utente dovrà rispettare tutti i termini e le condizioni del presente Contratto, incluse, senza limitazioni, le disposizioni di cui alla Sezione 4; e (f) L'Utente ha fornito e fornirà informazioni accurate e complete come richiesto per l'accesso, l'uso o l'installazione del Software. -## 4. Prohibited Uses +## 4. Usi proibiti -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +L'Utente è l'unico responsabile per tutte le azioni e le omissioni che si verificano nel suo account, informazioni di sicurezza, chiavi o password, inoltre l'Utente si impegna a non prodigarsi in un uso non accettabile del Software, che include, senza limitazione, l'uso del Software a: (a) diffondere, memorizzare o trasmettere messaggi non richiesti, lettere a catena o e-mail commerciali non richiesti; (b) diffondere o trasmettere materiale che, ad una persona ragionevole può essere offensivo, osceno, pornografico, diffamatorio, diffamatorio, molesto, gravemente offensivo, volgare, minaccioso o maligno; (c) diffondere, memorizzare o trasmettere file, grafica, software o altro materiale che effettivamente o potenzialmente viola il diritto d'autore, marchio, brevetto, segreto commerciale o altro diritto di proprietà intellettuale di qualsiasi persona; (d) creare una falsa identità o tentare in altro modo di ingannare qualsiasi persona circa l'identità o l'origine di qualsiasi comunicazione; (e) esportare, riesportare o consentire il download di qualsiasi messaggio o contenuto in violazione di qualsiasi legge, regolamento o restrizione di qualsiasi giurisdizione applicabile, o senza tutte le necessarie approvazioni, licenze o esenzioni; (f) interferire, interrompere o tentare di ottenere l'accesso non autorizzato ad altri account sul Software o qualsiasi altra rete informatica; o (g) diffondere, memorizzare o trasmettere virus, cavalli di Troia o qualsiasi altro codice o programma maligno. -## 5. Termination +## 5. Cessazione -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +Il presente Contratto è valido a seguito dell'accettazione da parte dell'Utente come qui indicato e rimarrà in vigore fino a quando l'Utente si impegna in qualsiasi accesso, utilizzo o installazione del Software. La Società si riserva il diritto, a sua esclusiva discrezione e senza preavviso, in qualsiasi momento e per qualsiasi motivo, di: (a) rimuovere o disabilitare l'accesso a tutto o parte del Software; (b) sospendere l'accesso o l'uso di tutto o parte del Software; e (c) risolvere il presente Contratto. -## 6. Disclaimer of Warranties +## 6. Esclusione di garanzia -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +IL SOFTWARE VIENE FORNITO "COSÌ COM'È", SENZA GARANZIA DI ALCUN TIPO, ESPRESSA O IMPLICITA. L'USO DEL SOFTWARE È AD ESCLUSIVO RISCHIO DELL'UTENTE. L'AZIENDA NON GARANTISCE CHE IL SOFTWARE SARÀ ININTERROTTO O PRIVO DI ERRORI, NÉ FORNISCE ALCUNA GARANZIA IN MERITO AI RISULTATI CHE POSSONO ESSERE OTTENUTI CON L'UTILIZZO DEL SOFTWARE. L'AZIENDA NON FORNISCE ALTRE GARANZIE, ESPLICITE O IMPLICITE. L'AZIENDA DECLINA ESPRESSAMENTE QUALSIASI GARANZIA DI COMMERCIABILITÀ, GARANZIA DI IDONEITÀ PER UN PARTICOLARE SCOPO, GARANZIA DI TITOLO O INTERESSE, O GARANZIA DI NON VIOLAZIONE. -## 7. Limitation of Liability +## 7. Limitazione di responsabilità -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +IN NESSUN CASO LA SOCIETÀ O I SUOI AZIONISTI, AMMINISTRATORI, DIRIGENTI, FUNZIONARI, DIPENDENTI, AFFILIATI O AGENTI, O UNO QUALSIASI DEI SUOI O DEI LORO RISPETTIVI FORNITORI DI SERVIZI, SARÀ RESPONSABILE NEI CONFRONTI DELL'UTENTE O DI TERZI PER QUALSIASI USO, INTERRUZIONE, RITARDO O INCAPACITÀ DI UTILIZZARE IL SOFTWARE, PERDITA DI RICAVI O PROFITTI, RITARDI, INTERRUZIONE O PERDITA DI SERVIZI, ATTIVITÀ O AVVIAMENTO, PERDITA O CORRUZIONE DI DATI, PERDITA DERIVANTE DA UN GUASTO DEL SISTEMA O DEL SERVIZIO DI SISTEMA, MALFUNZIONAMENTO O ARRESTO, MANCATO TRASFERIMENTO ACCURATO, LEGGERE O TRASMETTERE INFORMAZIONI, NON AGGIORNARE O FORNIRE INFORMAZIONI CORRETTE, INCOMPATIBILITÀ DEL SISTEMA, INCOMPATIBILITÀ DEL SISTEMA O FORNITURA DI INFORMAZIONI DI COMPATIBILITÀ ERRATE O VIOLAZIONI DELLA SICUREZZA DEL SISTEMA, O PER DANNI CONSEGUENTI, INCIDENTALI, INDIRETTI, INDIRETTI, ESEMPLARI, SPECIALI O PUNITIVI, DERIVANTI DA O IN RELAZIONE AL PRESENTE ACCORDO, VIOLAZIONE DEL CONTRATTO, ILLECITO CIVILE (INCLUSA LA NEGLIGENZA) O ALTRO, INDIPENDENTEMENTE DAL FATTO CHE TALI DANNI FOSSERO PREVEDIBILI E SE SIAMO STATI AVVISATI O MENO DELLA POSSIBILITÀ DI TALI DANNI. IN NESSUN CASO L'AZIENDA O I SUOI AZIONISTI, DIRETTORI, DIRIGENTI, FUNZIONARI, DIPENDENTI, AFFILIATI O AGENTI, O UNO QUALSIASI DEI SUOI O DEI LORO RISPETTIVI FORNITORI DI SERVIZI, SARÀ RESPONSABILE PER QUALSIASI RECLAMO, DANNO O ALTRA RESPONSABILITÀ, SIA IN UN'AZIONE CONTRATTUALE, EXTRACONTRATTUALE O ALTRO, DERIVANTE DA O IN QUALSIASI MODO CONNESSO ALL'ACCESSO, ALL'USO O ALL'INSTALLAZIONE DEL SOFTWARE DA PARTE DELL'UTENTE. ALCUNE GIURISDIZIONI VIETANO L'ESCLUSIONE O LA LIMITAZIONE DI DANNI INCIDENTALI O CONSEQUENZIALI, PERTANTO QUESTA LIMITAZIONE DI RESPONSABILITÀ POTREBBE NON ESSERE APPLICABILE ALL'UTENTE. SE L'UTENTE NON È SODDISFATTO DEL SOFTWARE, L'UNICO ED ESCLUSIVO RIMEDIO DELL'UTENTE SARÀ LA SOSPENSIONE DELL'USO DEL SOFTWARE. -## 8. Indemnification +## 8. Indennizzo -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +L'utente accetta di indennizzare, tenere indenne e difendere la Società, i suoi azionisti, amministratori, dirigenti, funzionari, dipendenti, affiliati e agenti ("Parti indennizzate") da e contro qualsiasi azione, causa, reclamo, danno, debito, richiesta o responsabilità, compresi i costi ragionevoli e le spese legali, rivendicati da qualsiasi persona, derivanti da o relativi a: (a) il presente Contratto; (b) l'accesso, l'uso o l'installazione del Software da parte dell'Utente, inclusi dati o lavori trasmessi o ricevuti dall'Utente; e (c) qualsiasi uso inaccettabile del Software da parte di qualsiasi persona, incluso, senza limitazioni, qualsiasi dichiarazione, dato o contenuto fatto, trasmesso o ripubblicato dall'Utente o da qualsiasi persona che sia vietato in quanto inaccettabile ai sensi della Sezione 4. TALE INDENNIZZO INCLUDE L'INDENNIZZO ESPRESSO DELL'AZIENDA E DI TUTTE LE PARTI INDENNIZZATE PER QUALSIASI PRESUNTA NEGLIGENZA (INCLUSA QUALSIASI PRESUNTA NEGLIGENZA GRAVE). O ALTRA PRESUNTA CATTIVA CONDOTTA DELLA SOCIETÀ O DI QUALSIASI PARTE INDENNIZZATA. -## 9. Intellectual Property +## 9. Proprietà Intellettuale -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +La Società si riserva tutti i diritti, titoli e interessi in e a tutti i marchi, loghi e marchi della Società, inclusi, ma non solo, EMURGO Co., Ltd., EMURGO, EMURGO, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, e le variazioni del testo dei suddetti marchi, loghi e marchi. -## 10. Warnings +## 10. Avvertenze -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +L'utente riconosce che la Società non sarà responsabile per il trasferimento, la salvaguardia o la manutenzione delle chiavi private e/o dell'ADA dell'utente o di qualsiasi altra valuta criptata. Se l'Utente e/o le autorità co-firmatarie perdono, danneggiano o sono vittima ti furto delle chiavi private associate, o se i cofirmatari dell'Utente rifiutano di fornire l'autorità necessaria, l'Utente riconosce che l'Utente potrebbe non essere in grado di recuperare l'ADA dell'Utente o qualsiasi altra valuta criptata e che la Società non sarà responsabile di tale perdita. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +L'utente riconosce e concorda che ADA o qualsiasi altra transazione in valuta criptata facilitata dal Software e/o dalla Società può essere ritardata e che la Società non sarà responsabile di eventuali perdite associate. L'utente riconosce e concorda che la Società non sarà responsabile per qualsiasi aspetto delle informazioni, contenuto o servizi contenuti in materiali di terzi o su siti di terzi accessibili o collegati al Software e/o alla Società. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. +Utilizzando il Software, l'Utente riconosce e accetta: (i) che la Società non è responsabile del funzionamento dei protocolli sottostanti e che la Società non garantisce la loro funzionalità, sicurezza o disponibilità; e (ii) che i protocolli sottostanti sono soggetti a improvvisi cambiamenti nella catena principale delle regole operative ("forks"), e che tali forchette possono influire materialmente sul valore e/o sul funzionamento di ADA o di qualsiasi altra valuta criptata che l'Utente memorizza sul Software. In caso di fork, l'Utente accetta che la Società può sospendere temporaneamente le operazioni del Software (con o senza preavviso all'Utente) e che la Società può, a sua esclusiva discrezione, (a) configurare o riconfigurare i propri sistemi o (b) decidere di non supportare (o cessare di supportare completamente il protocollo biforcato, a condizione, tuttavia, che l'Utente abbia la possibilità di prelevare fondi dal Software. L'Utente riconosce e concorda che la Società non si assume alcuna responsabilità di alcun tipo in relazione a una filiale non supportata di un protocollo biforcato. -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +## 11. Varie -## 11. Miscellaneous +**a. Emendamento.** La Società avrà il diritto, in qualsiasi momento e senza preavviso, di aggiungere o modificare i termini del presente Accordo, semplicemente consegnando tali termini modificati all'utente tramite messaggio elettronico attraverso qualsiasi mezzo a qualsiasi indirizzo fornito alla Società dall'utente. L'accesso o l'uso del Software dopo la data in cui tali termini modificati sono stati consegnati all'Utente saranno considerati come accettazione di tali termini modificati. -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**b. Severance.** Se una qualsiasi disposizione o parte del presente Accordo è, o diventa invalido, illegale o inapplicabile, sarà considerato modificato nella misura minima necessaria per renderlo valido, legale e applicabile. Se tale modifica non è possibile, la disposizione pertinente o la disposizione parziale si considerano cancellate. Qualsiasi modifica o cancellazione di una disposizione o di una disposizione parziale ai sensi del presente articolo non pregiudica la validità e l'applicabilità del resto del presente Accordo. -**b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. +**c. Intero accordo - Dichiarazione di non responsabilità**. Il presente Accordo costituisce l'intero accordo tra le Parti in merito all'oggetto del presente documento e sostituisce tutti gli accordi o intese precedenti tra le Parti. L'utente dichiara espressamente e garantisce di non fare affidamento su dichiarazioni, intese, dichiarazioni, aspettative o accordi diversi da quelli espressamente indicati nel presente Accordo. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**d. IL PRESENTE CONTRATTO È SOGGETTO AD ARBITRATO VINCOLANTE.** L'utente accetta che qualsiasi controversia o pretesa nei confronti di qualsiasi persona derivante da o in alcun modo correlata al presente Accordo o all'accesso, utilizzo o installazione del Software da parte dell'Utente o di qualsiasi altro, la persona stessa sarà soggetta a arbitrato vincolante ai sensi delle Regole di arbitrato della Camera di commercio internazionale da parte di uno o più arbitri nominati in conformità a tali Regole. Il luogo dell'arbitrato sarà il Giappone. La lingua dell'arbitrato sarà l'inglese. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. +**e. LINGUA.** Qualsiasi traduzione del presente Accordo è fatta esclusivamente a scopo di riferimento locale e in caso di incoerenza tra la versione inglese e quella non inglese, prevarrà e governerà la versione inglese del presente Accordo sotto tutti gli aspetti. -**e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. +## 12. Delega e Staking -## 12. Delegation and Staking +12.1 **Ricompense.** La quantità di Ricompense che un Utente può guadagnare dalla delega dipende da vari fattori tra cui, ma non solo, la partecipazione degli utenti, i margini di profitto della stakepool e il volume di ada che viene delegato. È possibile che la delega non generi alcuna Ricompensa per un Utente a causa dei suddetti fattori. Le ricompense vengono guadagnate all'inizio della terza epoca sulla blockchain di Cardano. -12.1 **Rewards.** The amount of Rewards a User may earn from delegation depends on various factors including, but not limited to, user participation, stakepool profit margins and the volume of ada being delegated. It is possible that delegation generates no Reward for a User due to the above-mentioned factors. Rewards are earned as of the start of the 3rd epoch on the Cardano blockchain. +12.2 **Delega.** Gli utenti possono delegare la loro quota a uno delle varie pool della Società o a una pool di terze parti. L'utente avrà il diritto esclusivo di determinare il volume da delegare a uno stake pool e potrà aumentare o diminuire il suo livello di partecipazione in qualsiasi momento. Qualsiasi informazione condivisa dalla Società riguardo le stake pool, incluse le metriche di performance e i Premi, sarà solo a scopo indicativo e potrebbe non essere accurata. Gli utenti possono delegare la loro partecipazione a una stake pool solo se il loro ada si trova in un wallet Daedalus o Yoroi aggiornato al momento del processo di configurazione. L'utente non acquisisce alcun diritto automatico alle ricompense come risultato della delega della sua partecipazione. -12.2 **Delegation.** Users may delegate their stake to one of the various stake pools of the Company or to a third party stake pool. User will have the sole right to determine the volume to be delegated to a stake pool and may increase or decrease its level of participation at any time. Any information Company shares regarding stakepools, including performance metrics and Rewards, will be for indicative purposes only and may not be accurate. Users may only delegate their stake to a stake pool if their ada is in an updated Daedalus or an updated Yoroi wallet at the time of the setup process. User does not acquire any automatic right to Rewards as a result of delegating its stake. +12.3 **Company Stake-Pools.** La Società gestisce varie stake pool che saranno visibili su Yoroi. Il costo e i requisiti di rete e del server per operare in modo affidabile tali stake pool saranno determinati dalla Società a sua esclusiva discrezione. La Società comunicherà l'importo percentuale della Ricompensa da condividere con gli Utenti attraverso il portafoglio Yoroi dell'Utente. Le Ricompense matureranno alla fine di ogni epoca e appariranno automaticamente nel portafoglio Yoroi dell'Utente. -12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. - -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 **Rimborso dei Premi.** L'Utente è responsabile del pagamento di tutte le tasse applicabili, se presenti, a cui i Premi potrebbero essere soggetti e qualsiasi altra tassa che potrebbe essere applicata all'Utente una volta che i Premi sono stati riscattati. From 30fe401b3a230797f0988b4b3338f4d37d5ce268 Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:17 +0100 Subject: [PATCH 308/464] New translations en-us.md (ko-KR) --- .../i18n/locales/terms-of-use/ada/ko-KR.md | 102 ++++++------------ 1 file changed, 35 insertions(+), 67 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/ko-KR.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/ko-KR.md index 62a96a1ef3..2a4c714681 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/ko-KR.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/ko-KR.md @@ -1,102 +1,70 @@ -# Terms of Service Agreement +# 서비스 규약 -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +이 서비스 규약(이하 ‘본 규약’이라 합니다)은 주식회사 EMURGO(이하 ‘당사’라 합니다)와 요로이 크립토커런시 월렛이라 칭하는 어플리케이션 소프트웨어 및 상기 소프트웨어와 함께 당사가 제공 또는 작성하는 데이터프로세싱 서비스, 어플리케이션, 통신 서비스 기타 컨텐츠(이하 ‘본 소프트웨어’라 합니다)를 다운로드, 이용, 또는 조작하기 위한 절차를 완료한 자(개인 또는 법인)(이하 ‘유저’라 합니다) 간에 체결되는 것입니다. 당사 및 유저를 ‘양 당사자’라 총칭합니다. 승인 버튼을 클릭하거나, 본 소프트웨어 어느 부분에 액세스하여 본 소프트웨어의 어느 부분을 이용하거나, 또는 본 소프트웨어의 어느 부분을 설치함으로써 유저는 본 규약의 모든 조항에 법적으로 구속된다는 점에 대해 명시적으로 동의한 것이 됩니다. 본 규약의 모든 조항에 동의하지 않는 경우에는, 유저는 본 소프트웨어의 어느 부분에 대해서도 액세스, 이용 또는 설치를 할 수 없습니다. -## 1. Rights and Obligations +## 1. 권리 및 의무 -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. 서술:** 본 소프트웨어는 무료 오픈소스 암호 화폐 지갑의 기능을 갖습니다. 본 소프트웨어는 당사 또는 기타 제3자가 유저의 ADA 또는 기타 암호화폐에 대한 관리인 또는 중개하도록 구성되어 있지 않습니다. 본 소프트웨어는 베타 테스트를 진행중이며, 개발자 커뮤니티, 오픈소스 공헌자 및 베타 테스터들로부터 피드백 받아 계속해서 개선되지만, 당사는 본 소프트웨어에 버그가 없다는 것을 보증하지 않습니다. 유저는 본 소프트웨어 이용에 대한 위험성과 책임을 이에 적용되는 모든 법률에 따른다는 점을 인지하고 있습니다. 유저에게는 자신의 비밀번호, 개인식별번호(PIN), 개인 키, 환원 키, 보호된 벤딩 키, 백업된 복구 구절, ADA 패스 코드 및 기타 사용자가 소프트웨어나 기타 어떤 정보, ADA, 바우처, 또는 어떤 암호화폐 단위에 대해 접근하기 위해 사용하는 코드를 안전하게 보관할 책임이 있습니다. 만일 유저가 자신의 암호화폐 지갑의 개인키 또는 백업 복구 구절과 패스워드를 분실한다면, 유저는 관련된 해당 지갑의 모든 암호화폐에 대한 접근 권한을 잃는다는 것을 인지하고있으며 이에 동의합니다. 또한 제출된 모든 거래 요청은 철회 불가능합니다. 당사 및 주주, 이사, 임원, 종업원, 관련 회사 및 대리인은 거래 확인을 보증할 수 없으며, 유저가 유저의 프라이빗 키 또는 패스워드를 분실 또는 잊어버린 경우라 하더라도 이를 복구해 줄 수 없습니다. -**b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. +**b. 접근성:** 유저는 본 소프트웨어가 제한 없이 때때로 어떤 이유, (i)기기 고장, (ii) 정기 점검 또는 때때로 당사에 의해 수행되는 유지보수, 또는 (iii) 당사가 제어할 수 없거나 당사가 합리적으로 예측할 수 없는 원인에 의해 접근 불가하거나 조작 불능이 될 가능성이 있다는 사실에 동의합니다. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. 기기:** 유저는, 유저가 본 소프트웨어를 이용하기 위한 모든 하드웨어, 소프트웨어, 전기에 관한 요건. 기타 물리적 요건(본 소프트웨어에 액세스하여, 본 소프트웨어를 이용하기 위해 필요한 전기 통신 및 인터넷 액세스 접속과 링크, 웹브라우저, 기타 기기, 프로그램 및 서비스를 포함하나 이에 한하지 않습니다)을 제공, 유지하고, 본 소프트웨어와의 호환성을 확보하는 것에 대해 단독으로 책임을 집니다. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. 보안:** 유저는, 유저가 본 소프트웨어를 통해 송수신하거나, 본 소프트웨어상 보관하는 모든 정보 및 컨텐츠 보안, 기밀성 및 완전성에 대해 단독으로 책임을 집니다. 유저는 여하한 자에 의한 유저 계정에 대한 정규 액세스 또는 부정 액세스에 대해 단독으로 책임을 집니다. 유저는 유저의 보안 디바이스, 정보, 키 및 패스워드의 기밀성에 대해 일체의 책임을 진다는 점에 대해 동의합니다. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. 프라이버시:** 합리적으로 실시 가능한 경우에는, 당사는 유저의 프라이버시를 존중하도록 노력합니다. 당사는 유저의 사전 동의 없이 유저 또는 유저 계정(그 내용 또는 유저에 의한 본 소프트웨어 이용을 포함합니다)에 관한 개인 정보를 감시, 편집 또는 공개하지 않습니다. (단, (i)정부 당국의 법적 절차 또는 기타 법적 요건에 따르기 위해, (ii)당사의 권리 또는 재산을 보호하기 위해, (iii)본 규약을 이행하기 위해, (iv)유저 이외의 본 소프트웨어 이용자 또는 기타의 자의 권리를 보호하기 위해, 또는 (v)당사 서비스 또는 기기(법률에 의해 인정되는 경우에는 본 소프트웨어를 포함합니다)를 운용하거나, 이들의 유지보수 및 수리를 하기 위해 이러한 행위가 필요하다고 당사가 성실하게 판단한 경우에는 그렇지 않습니다) 유저는 인터넷 전반에 대해 프라이버시를 기대할 수 없습니다. 유저의 IP 주소는 유저가 본 소프트웨어에서 송신하는 각 메시지 또는 기타 정보와 함께 송신되고, 기록됩니다. -## 2. Taxes and Fees +## 2. 세금 및 수수료 -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +통화 환전 수수료, 제3자 수수료, 매출세, 사용세, 부가가치세, 동산세 기타 모든 종류의 세금, 관세와 부과금(이들에 관한 이자 및 벌금을 포함합니다)(정부기관에 의해 현재 부과된 것인지, 또는 장래에 부과되는 것인지를 불문합니다) 및 유저에 의한 본 소프트웨어에 대한 액세스, 본 소프트웨어의 이용이나 본 소프트웨어의 설치에 의해 유저에게 발생하는 수수료는 모두 유저가 단독으로 부담합니다. -## 3. User Representations +## 3. 유저의 진술 -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +유저는 당사에 대해 (a)유저가 자연인인 경우에는 유저가 18세를 넘었다는 점, (b)유저는 본 규약을 체결하여, 본 규약에 근거한 유저의 의무를 이행할 권한 및 권능을 보유한다는 점, (c)유저가 당사에 제공하는 정보는 모두 진실, 정확하고도 완전하다는 점, (d)유저는 유저에 의한 본 소프트웨어에 대한 액세스, 본 소프트웨어의 이용 또는 본 소프트웨어의 설치에 관해 관련 법역의 모든 법령을 준수한다는 점, (e)유저는 본 규약의 모든 조항(제4항에 정한 규정을 포함하나, 이에 한하지 않습니다)을 준수한다는 점 및 (f)유저는 본 소프트웨어에 대한 액세스, 본 소프트웨어의 이용 또는 본 소프트웨어의 설치에 필요한 정확하고도 완전한 정보를 제공했으며, 앞으로도 제공할 것을 진술, 보장합니다. -## 4. Prohibited Uses +## 4. 금지된 이용 -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +유저는 유저 계정, 보안 정보, 키 또는 패스워드에 의해 생성되는 모든 작위 또는 부작위에 대해 단독으로 책임을 집니다. 또한, 유저는 용인할 수 없는 본 소프트웨어의 이용((a)일방적인 메시지, 연쇄 편지 또는 일방적인 상업 전제 메일을 확산, 보존하거나, 송신하는 것, (b)일반에 모욕적, 외설적, 포르노, 중상적, 괴롭힘, 현저히 불쾌한, 음란한, 협박적, 또는 악의가 있을 가능성이 있는 자료 등을 확산하거나, 송신하는 것, (c)여하한 자의 저작권, 상표, 특허, 영업비밀 또는 기타 지적재산권을 실제로 침해했거나, 침해할 가능성이 있는 파일, 그래픽, 소프트웨어 또는 기타 자료 등을 확산, 보존, 또는 송신하는 것, (d)통신의 동일성이나 출처에 대해 다른 사람을 가장하거나 기타의 형태로 여하한 자를 오해하게 하려고 시도하는 것, (e)관련 법역의 수출입 관련 법령 또는 규칙을 위반하거나, 필요한 모든 인허가나 면제를 받지 않고 메시지 또는 컨텐츠를 수출, 재수출하거나, 이들의 다운로드를 허가하는 것, (f)본 소프트웨어 또는 기타 컴퓨터 네트워크상의 기타 계정을 방해, 중단하거나, 이러한 계정에 부정 액세스하고자 시도하는 것, 또는 (g)바이러스, 트로이 목마 기타 악성 코드 또는 프로그램을 확산, 저장하거나 송신하는 것을 목적으로 한 본 소프트웨어 이용을 포함하나, 이에 한하지 않습니다)을 하지 않는 것에 동의합니다. -## 5. Termination +## 5. 해제 -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +본 규약은 본 규약에 규정한 유저에 의한 승인으로 발효되며, 유저가 본 소프트웨어에 대한 액세스, 본 소프트웨어의 이용 또는 본 소프트웨어의 설치를 하는 동안 유효하게 존속합니다. 당사는 자기 재량으로 통지 없이 언제든지 이유 여하를 불문하고 (a)본 소프트웨어의 전부 또는 일부에 대한 액세스를 제외하거나, 무효로 하고, (b)유저에 의한 본 소프트웨어의 전부 또는 일부에 대한 액세스 또는 그 이용을 정지시키며, (c)본 규약을 해제할 권리를 보유합니다. -## 6. Disclaimer of Warranties +## 6. 보증 포기 -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +본 소프트웨어는 명시적 또는 묵시적인지를 불문하고 어떠한 종류의 보증도 없이 ‘있는 그대로’제공됩니다. 본 소프트웨어의 이용은 유저의 단독 책임에 따릅니다. 당사는 본 소프트웨어가 중단되지 않고 오류가 없다고 보증하지 않으며, 본 소프트웨어를 이용함으로써 얻을 가능성이 있는 결과에 대해서 어떠한 보증도 하지 않습니다. 당사는 명시적 또는 묵시적인지를 불문하고 그밖에 다른 어떠한 보증도 하지 않습니다. 당사는 상품성에 대한 보증, 특정 목적 적합성에 대한 보증, 소유권 또는 권리에 대한 보증 및 비침해에 대한 보증을 명확하게 포기합니다. -## 7. Limitation of Liability +## 7. 책임 제한 -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +어떠한 경우에도 당사 및 그 주주, 이사, 임원, 종업원, 관련 회사와 대리인 및 당사와 이들 서비스 제공자는 이용, 중단, 지연 또는 본 소프트웨어의 이용 불능, 수익감소 또는 일실이익, 서비스, 사업 또는 신용 지연, 중단 또는 상실, 데이터 상실 또는 파손, 시스템 또는 시스템 서비스 장애에 기인한 손실, 오작동 또는 셧다운, 정보의 정확한 전송, 판독 또는 송신이 불가능한 것, 정확한 정보를 갱신하거나 제공하지 못하는 것, 시스템 비호환성, 부정확한 호환성 정보 제공 또는 시스템 보안 침해에 대해, 또한 간접 손해 배상금, 부수적 손해 배상금, 징벌적 손해 배상금 또는 특별 손해 배상금(본 규약, 계약 위반, 불법행위(과실을 포함합니다) 또는 기타에 기인하거나 관련되었는지 여부를 불문합니다)(이러한 손해배상금이 예견 가능했는지 여부 또한 당사가 이러한 손해배상금 가능성에 대해 통지를 받았는지 여부를 불문합니다)에 대해 유저 또는 제3자에게 책임을 지지 않습니다. 어떠한 경우에도 당사 및 그 주주, 이사, 임원, 종업원, 관련 회사와 대리인 및 당사와 이들 서비스 제공자는 유저에 의한 본 소프트웨어의 액세스, 본 소프트웨어의 이용 또는 본 소프트웨어의 설치에 기인하거나, 어떠한 형태로든 관련된 모든 청구, 손해, 기타 채무(소송상, 계약상, 불법행위 또는 기타 별도의 것을 불문합니다)에 대해서도 책임을 지지 않습니다. 일부 법역에서는 부수적 손해 배상금 또는 간접 손해 배상금 제외 또는 제한을 금지하고 있으므로, 이 책임 제한이 유저에게 적용되지 않을 가능성이 있습니다. 유저가 본 소프트웨어에 만족하지 않은 경우의 유저의 유일하고도 배타적인 구제 수단은 유저에 의한 본 소프트웨어의 이용 중지로 합니다. -## 8. Indemnification +## 8. 보상 -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +유저는 (a)본 규약, (b)유저에 의한 본 소프트웨어(유저가 송수신하는 데이터 또는 저작물을 포함합니다)에 대한 액세스, 본 소프트웨어(유저가 송수신하는 데이터 또는 저작물을 포함합니다)의 이용 또는 본 소프트웨어(유저가 송수신하는 데이터 또는 저작물을 포함합니다)의 설치, 및 (c)여하한 자에 의한 본 소프트웨어의 용인되지 않는 이용(제4조에 의해 용인되지 않는 것으로 금지된 유저 또는 여하한 자에 의하여 이루어지거나, 송신되거나, 재공표된 진술, 데이터 또는 컨텐츠를 포함하나, 이에 한하지 않습니다)에 기인 또는 관련하여 여하한 자가 주장하는 여하한 소 제기, 소송, 청구, 손해, 부채, 요구 또는 채무(합리적 비용 및 변호사보수를 포함합니다)에 대해서도 당사, 그 주주, 이사, 임원, 종업원, 관련 회사 및 대리인(이하 ‘피보상 당사자’라 합니다)을 보상하고, 피보상 당사자를 면책하며, 피보상 당사자를 방어하는 데 동의합니다. 이 보상에는 당사 또는 피보상 당사자의 과실이라 여겨지는 것(중과실이라 여겨지는 것을 포함합니다) 또는 기타 위법행위라 여겨지는 것에 대한 당사 및 모든 피보상 당사자의 명시적 보상을 포함합니다. -## 9. Intellectual Property +## 9. 지적 재산 -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +당사는 당사의 모든 브랜드, 로고 및 상표(주식회사 EMURGO, EMURGO, 요로이, 요로이 크립토커런시 월렛, 요로이 월렛, 요로이 어플리케이션 및 상기 브랜드, 로고 및 상표의 표현이 변화한 것을 포함하나, 이에 한하지 않습니다)에 관한 모든 권리, 권한 및 이익을 보유합니다. -## 10. Warnings +## 10. 경고 -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +유저는 당사가 프라이빗 키 및/또는 유저의 ADA 기타 가상통화를 이동, 보관 또는 유지할 책임을 지지 않는다는 것을 인지하고 있습니다. 유저 및/또는 공동서명권자가 관련된 프라이빗 키를 분실하거나, 잘못 취급하거나, 절도 당한 경우 또는 유저의 공동서명자가 필요한 권한을 제공하는 것을 거부한 경우에는, 유저는, 유저가 자신의 ADA 기타 가상통화를 회수하지 못할 가능가능 있다는 점, 이러한 손실에 대해 당사는 책임지지 않는다는 점을 인지하고 있습니다. 유저는 본 소프트웨어 및/또는 당사에 의해 촉진되는 ADA 기타 가상 통화 거래가 지연될 가능성이 있다는 점, 지연에 따르는 어떠한 손실에 대해서도 당사는 책임지지 않는다는 점을 인지하고 있으며, 이에 동의합니다. 유저는 본 소프트웨어 및/또는 당사에 액세스 가능한 또는 연결된 제3자 자료 등 또는 제3자 사이트에 포함된 정보, 콘텐츠 또는 서비스 중 어느 하나에 대해서도 당사는 책임지지 않는다는 점을 인지하고 있으며, 이에 동의합니다. 유저는 유저가 유저 증명서를 어떠한 자연인 또는 법인(당사, 카르다노 재단, 인풋•아웃풋•에이치케이•리미티드 또는 기타 조직을 포함합니다)과도 공유하지 않음에 동의합니다. 또한 유저는 유저 증명서를 공유함으로써 유저의 ADA 기타 가상 통화를 잃을 가능성이 있다는 점을 인지하고 있으며, 이러한 손실에 대해 당사는 책임지지 않는다는 점에 동의합니다. 유저는 테스트넷 상에서 ADA를 환원함으로써, 유저는 테스트 ADA만을 환원한다는 점, 실제 ADA를 환원하기 위해서는 유저는 출시 후 메인넷 상에서 절차를 반복해야 함을 인지하고 있으며, 이에 동의합니다. 본 소프트웨어를 이용함으로써, 유저는 (i)당사가 하층 프로토콜 운용에 대해 책임을 지지 않는다는 점, 당사가 그 기능성, 보안 및 가용성에 대해 아무런 보증을 하지 않는다는 점, (ii)규칙 운용 상, 하층 프로토콜은 메인 체인의 갑작스런 변경(이하 ‘포크’라 합니다)에 의한 영향을 받을 가능성이 있다는 점, 이러한 포크는 유저가 본 소프트웨어 상에서 보관하는 ADA 기타 가상통화의 가치 및/또는 기능에 중대한 영향을 미칠 가능성이 있다는 점을 인지하고 있으며, 이에 동의합니다. 포크한 경우 유저는 당사가(유저에게 통지한 후, 또는 유저에게 통지하지 않고) 본 소프트웨어 운용을 일시적으로 정지할 수 있다는 점, 당사가 자기 재량으로 (a)자사 시스템 설정 또는 재설정을 할 수 있다는 점, 또는 (b)포크한 프로토콜을 일체 지원하지 않겠다는(또는 지원을 정지하는) 취지의 결정을 할 수 있다는 점에 동의합니다 (단, 유저에게는 본 소프트웨어에서 자금을 인출할 기회가 있습니다). 유저는 포크한 프로토콜 중 지원 대상 외 브랜치에 대해 당사는 일체 책임지지 않는다는 점을 인지하고 있으며, 이에 동의합니다. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +**a. 변경:** 당사는 유저가 당사에 신고한 주소로 어느 하나의 매체를 통해 보내는 전자 메시지로 변경 후의 조항을 유저에게 제시함으로써, 언제든지 통지 없이 본 규약의 조항을 추가하거나 변경할 수 있습니다. 이러한 변경 후 조항이 유저에게 제시된 날 이후에 유저가 본 소프트웨어에 액세스하거나, 본 소프트웨어를 이용한 경우에는 이러한 변경 후 조항이 승낙된 것으로 간주합니다. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. +**c. 완전합의-의거 포기:** 본 규약은, 본 규약의 내용에 관한 양 당사자 간의 완전한 합의를 구성하며, 양 당사자 간의 기존의 모든 합의 사항 및 양해 사항에 우선합니다. 유저는 본 규약에 명기된 것 외의 진술, 양해 사항, 표명 사항, 기대 사항 또는 합의 사항에 의거하지 않았음을 명시적으로 진술, 보장합니다. -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +## 11. 기타 -## 11. Miscellaneous +**a. 개정** 당사는 유저에 의해 제공된 주소로의 어떤 전자적 매체를 통해 수정 조항을 송부함으로 어느 때나 통보 없이 이 동의서의 조항들을 수정하거나 추가할 권한을 갖습니다. 수정일 후 소프트웨어에 접근하거나 사용한 유저'는 수정된 조항들을 받아들인 것으로 간주합니다. -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**b. 분리해석 ** 만일 이 규약의 어떤 조항이나 조항의 일부분이 무효하거나 위법하거나 시행할 수 없게 되면 최소한의 유효하고 합법적이고 시행 가능한 부분으로 수정 되는 것으로 간주합니다. 만일 이러한 수정이 불가능하다면, 관련된 조항이나 조항의 일부분은 삭제된 것으로 간주됩니다. 조항 또는 조항의 일부분의 어떠한 수정 또는 삭제는 규약의 나머지 부분의 타당성에 영향을 끼치지 않습니다. -**b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. +**c. 완전합의-의거 포기:** 본 규약은, 본 규약의 내용에 관한 양 당사자 간의 완전한 합의를 구성하며, 양 당사자 간의 기존의 모든 합의 사항 및 양해 사항에 우선합니다. 유저는 본 규약에 명기된 것 외의 진술, 양해 사항, 표명 사항, 기대 사항 또는 합의 사항에 의거하지 않았음을 명시적으로 진술, 보장합니다. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**d. 본 규약은 구속력 있는 중재에 따릅니다:** 유저는 본 규약 또는 유저나 기타의 자에 의한 본 소프트웨어에 대한 액세스, 본 소프트웨어의 이용 또는 본 소프트웨어의 설치에 기인하거나, 어떠한 형태로든 관련된 분쟁 또는 여하한 자에 대한 청구는, 모두 국제상업회의소의 중재규칙에 근거하여 선임된 1명 내지 여러 명의 중재인에 의한 동 규칙에 근거한 구속력 있는 중재에 따른다는 점에 동의합니다. 중재지는 일본으로 하며, 중재 언어는 영어로 합니다. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. - -**e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. +**e. 언어:** 본 규약의 번역은 현지에서의 참조 편의를 위해 작성되는 것이며, 영어판과 영어 외 언어판과의 사이에 불일치가 있는 경우에는, 본 규약의 영어판이 모든 점에서 우선합니다. ## 12. Delegation and Staking @@ -106,4 +74,4 @@ If you have any questions or concerns regarding the accuracy or reliability of t 12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. From 3d8c1441c5265bc1548fb281d797ade59f9a5abf Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:19 +0100 Subject: [PATCH 309/464] New translations en-us.md (Dutch) --- .../i18n/locales/terms-of-use/ada/nl-NL.md | 110 +++++++----------- 1 file changed, 39 insertions(+), 71 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/nl-NL.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/nl-NL.md index 62a96a1ef3..73128859cd 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/nl-NL.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/nl-NL.md @@ -1,109 +1,77 @@ -# Terms of Service Agreement +# Algemene voorwaarden -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +DEZE SERVICEVOORWAARDENOVEREENKOMST ("Overeenkomst") wordt gesloten tussen EMURGO Co., Ltd. ("Bedrijf") en elke persoon of entiteit ("Gebruiker") die het proces voor het downloaden, gebruiken of bedienen van de software voltooit bekend als de Yoroi cryptocurrency Wallet-applicatie, en gegevensverwerkingsdienst, applicatie, communicatiedienst of andere inhoud of aangeboden of geleverd met de software door het Bedrijf ("Software"). Het Bedrijf en de Gebruiker worden gezamenlijk de "Partijen" genoemd. DOOR OP DE ACCEPTATIEKNOP TE KLIKKEN OF EEN ONDERDEEL VAN DE SOFTWARE TE OPENEN, TE GEBRUIKEN OF TE INSTALLEREN, GAAT DE GEBRUIKER UITDRUKKELIJK AKKOORD MET ALLE VOORWAARDEN VAN DEZE OVEREENKOMST. ALS DE GEBRUIKER NIET AKKOORD GAAT MET ALLE VOORWAARDEN VAN DEZE OVEREENKOMST, IS DE GEBRUIKER NIET GEMACHTIGD OM TOEGANG TE KRIJGEN TOT ENIG ONDERDEEL VAN DE SOFTWARE, HET TE GEBRUIKEN OF TE INSTALLEREN. -## 1. Rights and Obligations +## 1. Rechten en verplichtingen -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. Omschrijving.** De software functioneert als een gratis, open source, digitale cryptovaluta-portemonnee. De software vormt geen account waarmee het bedrijf of enige andere derde partij optreedt als financiële tussenpersoon of bewaarder van de ADA van de gebruiker of enige andere crypto valuta. Hoewel de software bètatests heeft ondergaan en nog steeds wordt verbeterd door feedback van de ontwikkelaarsgemeenschap, open source-bijdragers en bètatesters, kan het bedrijf niet garanderen dat er geen bugs in de software zitten. De gebruiker erkent dat het gebruik van de software door de gebruiker voor risico en discretie van de gebruiker is en in overeenstemming met alle toepasselijke wetten. De gebruiker is verantwoordelijk voor het veilig houden van de wachtwoorden, pincodes, privésleutels, inwisselsleutels, afgeschermde verkoopsleutels, back-upherstel-geheugensteuntjes, ADA-toegangscodes en andere codes die de gebruiker gebruikt om toegang te krijgen tot de software of enige informatie, ADA, voucher of andere cryptovaluta-eenheid. ALS DE GEBRUIKER DE TOEGANG TOT DE CRYPTOVALUTA PORTEFEUILLE OFDE PRIVÉ SLEUTELS VERLIEST EN NIET APART EEN BACK-UP VAN DE CRYPTOVALUTA PORTEFEUILLE OF E HERSTEL WOORDEN TEKST EN BIJBEHOREND WACHTWOORD HEEFT OPGESLAGEN DE CRYPTOVALUTA PORTEFEUILLE ONBEREIKBAAR ZAL ZIJN GEWORDEN. Alle transactieverzoeken zijn onomkeerbaar. Het bedrijf en zijn aandeelhouders, directeuren, functionarissen, werknemers, gelieerde ondernemingen en agenten kunnen de bevestiging van transacties niet garanderen of de privésleutels of wachtwoorden van de gebruiker niet ophalen als de gebruiker ze verliest of vergeet. -**b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. +**b. Toegang tot de applicatie.** De gebruiker gaat ermee akkoord dat de software van tijd tot tijd om welke reden dan ook ontoegankelijk of onbruikbaar kan zijn, inclusief maar niet beperkt tot: (i) defecten aan de apparatuur; (ii) periodieke onderhoudsprocedures of reparaties die de onderneming van tijd tot tijd kan uitvoeren; of (iii) oorzaken buiten de controle van het bedrijf of die redelijkerwijs niet te voorzien zijn door het bedrijf. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. Apparatuur.** De gebruiker is als enige verantwoordelijk voor het leveren, onderhouden en verzekeren van compatibiliteit met de software, alle hardware, software, elektrische en andere fysieke vereisten voor het gebruik van de software door de gebruiker, inclusief maar niet beperkt tot telecommunicatie- en internettoegangsverbindingen en -links, webbrowsers of andere apparatuur, programma's en services die nodig zijn voor toegang tot en gebruik van de Software. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. Beveiliging.** Gebruiker is als enige verantwoordelijk voor de beveiliging, vertrouwelijkheid en integriteit van alle informatie en inhoud die de gebruiker ontvangt, verzendt of opslaat op de software. De gebruiker is als enige verantwoordelijk voor elke geautoriseerde of ongeoorloofde toegang tot een account van de gebruiker door een persoon. Gebruiker stemt ermee in alle verantwoordelijkheid te dragen voor de vertrouwelijkheid van de beveiligingsapparaten, informatie, sleutels en wachtwoorden van de gebruiker. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. Privacy.** Indien redelijkerwijs mogelijk, zal het bedrijf proberen de privacy van de gebruiker te respecteren. Het bedrijf zal geen persoonlijke informatie over de gebruiker of het account van de gebruiker controleren, bewerken of openbaar maken, inclusief de inhoud of het gebruik van de software door de gebruiker, zonder voorafgaande toestemming van de gebruiker, tenzij het bedrijf te goeder trouw van mening is dat een dergelijke actie nodig is om: (i) voldoen aan de juridische procedure of andere wettelijke vereisten van een overheidsinstantie; (ii) om de rechten of eigendom van de onderneming te beschermen en verdedigen; (iii) deze overeenkomst afdwingen; (iv) de belangen van gebruikers van de Software anders dan Gebruiker of enige andere persoon beschermen; of (v) onderhoud of reparatie van de diensten of apparatuur van het Bedrijf, inclusief de Software, zoals wettelijk toegestaan. De gebruiker verwacht geen privacy met betrekking tot internet in het algemeen. Het IP-adres van de gebruiker wordt verzonden en vastgelegd bij elk bericht of andere informatie die de gebruiker vanuit de software verzendt. -## 2. Taxes and Fees +## 2. Belastingen en vergoedingen -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +Alle kosten voor het omrekenen van valuta, vergoedingen voor derden, verkoop, gebruik, toegevoegde waarde, persoonlijke eigendommen of andere belastingen, heffingen of heffingen van welke aard dan ook, inclusief rente en boetes daarop, nu opgelegd of hierna door een overheidsinstantie, en vergoedingen gemaakt door Gebruiker is vanwege de toegang, het gebruik of de installatie van de software door de gebruiker de exclusieve verantwoordelijkheid van de gebruiker. -## 3. User Representations +## 3. Gebruikersvertegenwoordigingen -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +De gebruiker verklaart en garandeert aan het bedrijf dat: (a) als de gebruiker een natuurlijke persoon is, de gebruiker ouder dan achttien (18) jaar is; (b) Gebruiker de bevoegdheid en autoriteit heeft om de verplichtingen van Gebruiker uit hoofde van deze Overeenkomst aan te gaan en uit te voeren; (c) alle door de gebruiker aan het bedrijf verstrekte informatie waarheidsgetrouw, nauwkeurig en volledig is; (d) de gebruiker zal voldoen aan alle wetten en voorschriften van elk toepasselijk rechtsgebied met betrekking tot de toegang, het gebruik of de installatie van de software door de gebruiker; (e) De gebruiker moet voldoen aan alle voorwaarden van deze overeenkomst, inclusief maar niet beperkt tot de bepalingen uiteengezet in sectie 4; en (f) de gebruiker heeft en zal nauwkeurige en volledige informatie verstrekken zoals vereist voor toegang, gebruik of installatie van de software. -## 4. Prohibited Uses +## 4. Verboden gebruik -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +De gebruiker is als enige verantwoordelijk voor alle handelingen en weglatingen die zich voordoen onder het account, de beveiligingsinformatie, de sleutels of het wachtwoord van de gebruiker, en de gebruiker stemt ermee in zich niet in te laten met onaanvaardbaar gebruik van de software, waaronder, zonder beperking, gebruik van de software om: ( a) ongevraagde berichten, kettingbrieven of ongevraagde commerciële e-mail verspreiden, opslaan of verzenden; (b) materiaal te verspreiden of door te geven dat, voor een redelijk persoon, beledigend, obsceen, pornografisch, lasterlijk, intimiderend, grof beledigend, vulgair, bedreigend of kwaadaardig kan zijn; (c) bestanden, afbeeldingen, software of ander materiaal dat daadwerkelijk of mogelijk inbreuk maakt op het auteursrecht, handelsmerk, octrooi, handelsgeheim of ander intellectueel eigendomsrecht van een persoon verspreiden, opslaan of verzenden; (d) een valse identiteit te creëren of anderszins te proberen iemand te misleiden met betrekking tot de identiteit of oorsprong van enige communicatie; (e) exporteren, opnieuw exporteren of downloaden van berichten of inhoud toestaan in strijd met export- of importwetgeving, regulering of beperking van enige toepasselijke jurisdictie, of zonder alle vereiste goedkeuringen, licenties of uitzonderingen; (f) interfereren, verstoren of proberen ongeautoriseerde toegang te verkrijgen tot andere accounts op de Software of een ander computernetwerk; of (g) virussen, Trojaanse paarden of enige andere kwaadaardige code of programma verspreiden, opslaan of verzenden. -## 5. Termination +## 5. Beëindiging -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +Deze overeenkomst is van kracht na aanvaarding door de gebruiker zoals hierin uiteengezet en zal volledig van kracht blijven zolang de gebruiker zich bezighoudt met toegang, gebruik of installatie van de software. Het bedrijf behoudt zich het recht voor om, naar eigen goeddunken en zonder kennisgeving, op elk moment en om welke reden dan ook: (a) de toegang tot alle of een deel van de software te verwijderen of uit te schakelen; (b) de toegang tot of het gebruik van alle of een deel van de Software door de Gebruiker op te schorten; en (c) deze overeenkomst beëindigen. -## 6. Disclaimer of Warranties +## 6. Afwijzing van garanties -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +DE SOFTWARE WORDT GELEVERD "ZOALS GELEVERD", ZONDER ENIGE GARANTIE, EXPLICIET OF IMPLICIET. GEBRUIK VAN DE SOFTWARE IS OP EIGEN RISICO VAN DE GEBRUIKER. HET BEDRIJF GARANDEERT NIET DAT DE SOFTWARE ONONDERBROKEN OF FOUTLOOS ZAL ZIJN, EN GEEFT HET BEDRIJF GEEN ENKELE GARANTIE MET BETREKKING TOT RESULTATEN DIE KUNNEN WORDEN VERKREGEN DOOR GEBRUIK VAN DE SOFTWARE. HET BEDRIJF GEEFT GEEN ANDERE GARANTIES, EXPLICIET OF IMPLICIET. HET BEDRIJF WIJST UITDRUKKELIJK ELKE GARANTIE VAN VERKOOPBAARHEID, GARANTIE VAN GESCHIKTHEID VOOR EEN BEPAALD DOEL, GARANTIE VAN TITEL OF BELANG, OF GARANTIE VAN NIET-INBREUK AF. -## 7. Limitation of Liability +## 7. Beperking van aansprakelijkheid -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +IN GEEN GEVAL ZAL DE ONDERNEMING OF HAAR AANDEELHOUDERS, DIRECTEUREN, OFFICIEREN, WERKNEMERS, AANGESLOTEN OF AGENTEN, OF HUN OF HUN RESPECTIEVE DIENSTVERLENERS, AANSPRAKELIJK ZIJN VOOR GEBRUIKER OF ENIGE DERDE PARTIJ VOOR ENIG GEBRUIK, ONDERBREKING, VERTRAGING VAN DE SOFTWARE, VERLOREN INKOMSTEN OF WINST, VERTRAGING, ONDERBREKING OF VERLIES VAN DIENSTEN, ZAKEN OF GOODWILL, VERLIES OF CORRUPTIE VAN GEGEVENS, VERLIES ALS GEVAL VAN SYSTEEM- OF SYSTEEMDIENSTSTORING, STORING OF COMPUTERUITVAL, HET NIET NAUWKEURIG OVERZETTEN VAN INFORMATIE,LEZEN OF VERZENDEN VAN DE JUISTE INFORMATIE, SYSTEEMVERSCHILLEN OF VERSTREKKING VAN ONJUISTE COMPATIBILITEITSINFORMATIE OF FOUTEN IN SYSTEEMBEVEILIGING, OF VOOR ELKE SCHADE ALS GEVOLG VAN INCIDENTELE, INDIRECTE, BIJ GEBRUIK ALS VOORBEELD, SPECIALE OF OPZETTELIJKE SCHADE, OF HET ONTSTAAT IN HET KADER VAN DEZE OVEREENKOMST OF HIER BUITEN, SCHENDING VAN HET CONTRACT, ONRECHTMATIGE DAAD (INCLUSIEF NALATIGHEID) OF ANDERSZINS, ONGEACHT OF DERGELIJKE SCHADE TE VOORKOMEN ZIJN EN OF WIJ OF MOGELIJK WERDEN GESTELD VAN DE MOGELIJKHEID VAN ZULKE SCHADE. IN GEEN GEVAL ZAL DE ONDERNEMING OF HAAR AANDEELHOUDERS, DIRECTEUREN, OFFICIEREN, WERKNEMERS, AANGESLOTEN OF AGENTEN, OF HUN OF HUN RESPECTIEVE DIENSTVERLENERS, AANSPRAKELIJK ZIJN VOOR ENIGE CLAIM, SCHADE OF ANDERE AANSPRAKELIJKHEID, WELKE ACTIE OF CONTRACT OP ANDERE WIJZE VOORTVLOEIEND UIT OF OP EEN MANIER IN VERBAND MET DE TOEGANG VAN GEBRUIKER, GEBRUIK OF INSTALLATIE VAN DE SOFTWARE. SOMMIGE RECHTSGEBIEDEN VERBODEN DE UITSLUITING OF BEPERKING VAN INCIDENTELE OF GEVOLGSCHADE, DUS IS DEZE BEPERKING VAN AANSPRAKELIJKHEID MOGELIJK NIET VAN TOEPASSING OP DE GEBRUIKER. ALS DE GEBRUIKER NIET TEVREDEN IS MET DE SOFTWARE, ZAL DE ENIGE EN EXCLUSIEVE MOGELIJKHEID VAN DE GEBRUIKER ZIJN HET GEBRUIK VAN DE SOFTWARE TE STOPPEN. -## 8. Indemnification +## 8. Vrijwaring -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +De gebruiker stemt ermee in het bedrijf, zijn aandeelhouders, directeuren, functionarissen, werknemers, gelieerde ondernemingen en agenten ("gevrijwaarde partijen") te vrijwaren van en te verdedigen tegen en voor elke actie, oorzaak, claim, schade, schuld, eis of aansprakelijkheid, inclusief redelijke kosten en advocatenhonoraria, opgesteld door een persoon, die voortvloeit uit of verband houdt met: (a) deze overeenkomst; (b) Toegang, gebruik of installatie van de software door de gebruiker, inclusief gegevens of werk dat door de gebruiker is verzonden of ontvangen; en (c) elk onaanvaardbaar gebruik van de Software door een persoon, met inbegrip van, maar niet beperkt tot, een verklaring, gegevens of inhoud die is gemaakt, verzonden of opnieuw gepubliceerd door de Gebruiker of een persoon die volgens sectie 4 verboden is als onaanvaardbaar. DEZE VRIJWARING BEVAT DE UITDRUKKELIJKE VRIJWARING VAN DE ONDERNEMING EN ALLE VRIJWARENDE PARTIJEN VOOR ELKE BEVOEGDE NALATIGHEID (INCLUSIEF ELKE GEGEVEN GROTE NALATIGHEID). OF ANDERE VERMELDE WANGEDRAG VAN DE ONDERNEMING OF ELKE GEVRIJWAARDE PARTIJ. -## 9. Intellectual Property +## 9. Intellectueel eigendom -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +Het bedrijf behoudt alle rechten, titels en belangen in en voor alle merken, logo's en handelsmerken van het bedrijf, inclusief, maar niet beperkt tot, EMURGO Co., Ltd., EMURGO, Yoroi, Yoroi Cryptovaluta Portemonnee, Yoroi Portemonnee, Yoroi App en variaties op de bewoordingen van de bovengenoemde merken, logo's en handelsmerken. -## 10. Warnings +## 10. Waarschuwingen -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +Gebruiker erkent dat het bedrijf niet verantwoordelijk is voor het overdragen, beschermen of onderhouden van privésleutels en / of ADA van de gebruiker of enige andere cryptovaluta. Als de gebruiker en / of enige medeondertekenende autoriteit de bijbehorende privésleutels verliest, verkeerd behandelt of heeft gestolen, of als de mede-ondertekenaars van de gebruiker weigeren de vereiste autoriteit te verlenen, erkent de gebruiker dat de gebruiker de ADA van de gebruiker of enige andere cryptovaluta mogelijk niet kan herstellen, en dat het bedrijf is niet verantwoordelijk voor dergelijk verlies. De gebruiker erkent en gaat ermee akkoord dat ADA of andere cryptovaluta-transacties die door de software en / of het bedrijf worden gefaciliteerd, vertraagd kunnen zijn en dat het bedrijf niet verantwoordelijk is voor enig bijbehorend verlies. De gebruiker erkent en gaat ermee akkoord dat het bedrijf niet verantwoordelijk is voor enig aspect van de informatie, inhoud of diensten in materiaal van derden of op sites van derden die toegankelijk zijn voor of gelinkt zijn aan de software en / of het bedrijf. De gebruiker stemt ermee in dat de gebruiker nooit het certificaat van de gebruiker mag delen met een natuurlijke of rechtspersoon, inclusief het bedrijf, Cardano Foundation, Input Output HK Limited of een andere entiteit. Verder erkent de gebruiker dat het delen van het gebruikerscertificaat kan leiden tot verlies van de ADA van de gebruiker of enige andere cryptovaluta, en de gebruiker gaat ermee akkoord dat het bedrijf niet verantwoordelijk is voor dergelijk verlies. De gebruiker erkent en gaat ermee akkoord dat de gebruiker, door ADA in het “Testnet” in te wisselen, alleen test-ADA inwisselt en dat de gebruiker, om de daadwerkelijke ADA in te wisselen, de procedure in het “Openbare net” moet herhalen, zodra deze is vrijgegeven. Door de Software te gebruiken, erkent en gaat Gebruiker ermee akkoord: (i) dat het Bedrijf niet verantwoordelijk is voor de werking van de onderliggende protocollen en dat het Bedrijf geen garantie biedt voor hun functionaliteit, veiligheid of beschikbaarheid; en (ii) dat de onderliggende protocollen onderhevig zijn aan plotselinge veranderingen in de hoofdketen in de bedrijfsregels ("vorken"), en dat dergelijke vorken de waarde en / of functie van de ADA of enige andere cryptovaluta waarop de gebruiker opslaat wezenlijk kunnen beïnvloeden de software. In het geval van een splitsing stemt de gebruiker ermee in dat het bedrijf de softwareactiviteiten tijdelijk kan opschorten (met of zonder kennisgeving aan de gebruiker) en dat het bedrijf, naar eigen goeddunken, (a) zijn systemen kan configureren of opnieuw configureren of (b) kan beslissen het gesplitste protocol niet volledig te ondersteunen (of niet meer te ondersteunen), op voorwaarde echter dat de Gebruiker de mogelijkheid krijgt om geld op te nemen van de Software. Gebruiker erkent en gaat ermee akkoord dat het bedrijf absoluut geen enkele verantwoordelijkheid aanvaardt met betrekking tot een niet-ondersteunde tak van een gevorkt protocol. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +Door de Software te gebruiken, erkent en gaat Gebruiker ermee akkoord: (i) dat het Bedrijf niet verantwoordelijk is voor de werking van de onderliggende protocollen en dat het Bedrijf geen garantie biedt voor hun functionaliteit, veiligheid of beschikbaarheid; en (ii) dat de onderliggende protocollen onderhevig zijn aan plotselinge veranderingen in de operationele regels van de hoofdketen ("vorken"), en dat dergelijke vorken de waarde en / of functie van de ADA of enige andere cryptovaluta die de gebruiker opslaat wezenlijk kunnen beïnvloeden op de software. In het geval van een splitsing stemt de gebruiker ermee in dat het bedrijf de softwareactiviteiten tijdelijk kan opschorten (met of zonder kennisgeving aan de gebruiker) en dat het bedrijf, naar eigen goeddunken, (a) zijn systemen kan configureren of opnieuw configureren of (b) kan beslissen het gesplitste protocol niet volledig te ondersteunen (of niet meer te ondersteunen), op voorwaarde echter dat de Gebruiker de mogelijkheid krijgt om geld op te nemen van de Software. De gebruiker erkent en gaat ermee akkoord dat het bedrijf absoluut geen enkele verantwoordelijkheid aanvaardt met betrekking tot een niet-ondersteunde vertakking van een uitgesplitst protocol. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. +**a. Amendement.** Het bedrijf heeft het recht om op elk moment en zonder voorafgaande kennisgeving de voorwaarden van deze overeenkomst toe te voegen of te wijzigen, simpelweg door dergelijke gewijzigde voorwaarden aan de gebruiker te bezorgen via een elektronisch bericht via elk medium naar elk adres dat door de gebruiker aan het bedrijf is verstrekt. De toegang tot of het gebruik van de software door de gebruiker na de datum waarop dergelijke gewijzigde voorwaarden aan de gebruiker worden geleverd, wordt beschouwd als acceptatie van dergelijke gewijzigde voorwaarden. -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +## 11. Diversen -## 11. Miscellaneous +**b. Opzegging.** Als enige bepaling of deelbepaling van deze overeenkomst ongeldig of niet-afdwingbaar is of wordt, wordt deze geacht te zijn gewijzigd tot het minimum dat nodig is om deze geldig, legaal en afdwingbaar te maken. Indien een dergelijke wijziging niet mogelijk is, wordt de desbetreffende bepaling of deelbepaling geacht te zijn geschrapt. Elke wijziging of schrapping van een bepaling of deelbepaling krachtens dit artikel heeft geen invloed op de geldigheid en afdwingbaarheid van de rest van deze overeenkomst. -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**c. c. Gehele overeenkomst - Disclaimer van vertrouwen**. Deze overeenkomst vormt de volledige overeenkomst tussen de partijen met betrekking tot het onderwerp hiervan en vervangt alle eerdere overeenkomsten of afspraken tussen de partijen. De gebruiker verklaart en garandeert uitdrukkelijk dat hij niet vertrouwt op andere verklaringen, afspraken, verklaringen, verwachtingen of overeenkomsten dan die welke uitdrukkelijk in deze overeenkomst zijn uiteengezet. -**b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. +**d. DEZE OVEREENKOMST IS ONDERWORPEN AAN BINDENDE ARBITRAGE.** De gebruiker stemt ermee in dat alle geschillen of claims tegen een persoon die voortvloeit uit of op enigerlei wijze verband houdt met deze overeenkomst of de toegang, het gebruik of de installatie van de software door de gebruiker of een andere persoon, onderworpen zullen zijn aan bindende arbitrage onder de arbitrageregels van de Internationale Kamer van Koophandel door een of meer arbiters die zijn aangewezen in overeenstemming met de genoemde regels. De plaats van arbitrage is Japan. De taal van de arbitrage is Engels. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**e. TAAL.** Elke vertaling van deze overeenkomst is uitsluitend gemaakt voor lokale referentie en in het geval van enige tegenstrijdigheid tussen de Engelse en niet-Engelse versies, zal de Engelse versie van deze overeenkomst prevaleren en in alle opzichten gelden. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. +12.1 ** Beloningen. ** Het aantal Beloningen dat een gebruiker kan verdienen door delegatie hangt af van verschillende factoren, waaronder, maar niet beperkt tot, gebruikersparticipatie, winstmarges van de "Stakepool" en het volume van gedelegeerde Ada. Het is mogelijk dat delegatie geen beloning voor een gebruiker genereert vanwege de bovengenoemde factoren. Beloningen worden verdiend vanaf het begin van het derde periode op de Cardano Blockchain. -**e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. +## 12. Delegeren en "Staken" -## 12. Delegation and Staking +12.2 ** Delegatie. ** Gebruikers kunnen hun inzet delegeren aan een van de verschillende Stakepools van het bedrijf of van derden. De gebruiker heeft het exclusieve recht om het volume te bepalen dat aan een Stakepool moet worden gedelegeerd en kan het niveau van deelname op elk moment verhogen of verlagen. Alle informatie die het bedrijf deelt met betrekking tot Stakepools, inclusief prestatiestatistieken en beloningen, is alleen voor indicatieve doeleinden en is mogelijk niet nauwkeurig. Gebruikers mogen hun inzet alleen delegeren aan een Stakepool als hun Ada zich in een bijgewerkte Daedalus of een bijgewerkte Yoroi-portemonnee bevindt ten tijde van het installatieproces. Gebruiker verwerft geen automatisch recht op beloningen als gevolg van het delegeren van zijn inzet. -12.1 **Rewards.** The amount of Rewards a User may earn from delegation depends on various factors including, but not limited to, user participation, stakepool profit margins and the volume of ada being delegated. It is possible that delegation generates no Reward for a User due to the above-mentioned factors. Rewards are earned as of the start of the 3rd epoch on the Cardano blockchain. +12.3 **Stake pools van het Bedrijf ** Het bedrijf zal verschillende Stakepools beheren die zichtbaar zullen zijn in Yoroi. De kosten en netwerk- en serververeisten om dergelijke Stakepools op betrouwbare wijze te exploiteren, worden naar eigen goeddunken door het bedrijf bepaald. Het Bedrijf zal het percentage van de Beloning dat met Gebruikers moet worden gedeeld communiceren via de Yoroi-portemonnee van de Gebruiker. Beloningen worden aan het einde van elk tijdperk opgebouwd en verschijnen automatisch in de Yoroi-portemonnee van de gebruiker. -12.2 **Delegation.** Users may delegate their stake to one of the various stake pools of the Company or to a third party stake pool. User will have the sole right to determine the volume to be delegated to a stake pool and may increase or decrease its level of participation at any time. Any information Company shares regarding stakepools, including performance metrics and Rewards, will be for indicative purposes only and may not be accurate. Users may only delegate their stake to a stake pool if their ada is in an updated Daedalus or an updated Yoroi wallet at the time of the setup process. User does not acquire any automatic right to Rewards as a result of delegating its stake. +12.4 ** Inwisselen van beloningen. ** De gebruiker is verantwoordelijk voor de betaling van alle toepasselijke belastingen, indien van toepassing, waaraan de beloningen kunnen worden onderworpen, en alle andere belastingen die van toepassing kunnen zijn op de gebruiker zodra de beloningen zijn ingewisseld. -12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. - -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 ** Inwisselen van beloningen. ** De gebruiker is verantwoordelijk voor de betaling van alle toepasselijke belastingen, indien van toepassing, waaraan de beloningen kunnen worden onderworpen, en alle andere belastingen die van toepassing kunnen zijn op de gebruiker zodra de beloningen zijn ingewisseld. From 1f8aaa259cb3c520600b6cc7c5883b45c3d7d2fc Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:21 +0100 Subject: [PATCH 310/464] New translations en-us.md (ru-RU) --- .../i18n/locales/terms-of-use/ada/ru-RU.md | 102 ++++++------------ 1 file changed, 35 insertions(+), 67 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/ru-RU.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/ru-RU.md index 62a96a1ef3..1bcbe9b596 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/ru-RU.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/ru-RU.md @@ -1,102 +1,70 @@ -# Terms of Service Agreement +# Соглашение о предоставлении услуг -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +Настоящие положения о предоставлении услуг (далее - "Соглашение") заключаются между EMURGO Co., Ltd. (далее "Компания") и любым физическим или юридическим лицом ( далее - "Пользователь"), который завершает процесс загрузки, утилизации или эксплуатации программного обеспечения, известного как приложение криптовалютного кошелька Yoroi, а также услуги по обработке данных, приложение, коммуникационные услуги и другой контент, предлагаемый или предоставляемый программным обеспечением Компании (далее "Программа"). Компания и Пользователь, совместно далее именуются "Сторонами". ПОДТВЕРДИВ СОГЛАСИЕ, НАЖАТИЕМ КНОПКИ ИЛИ ПОЛУЧЕНИЕМ ДОСТУПА, ИСПОЛЬЗУЯ ИЛИ УСТАНАВЛИВАЯ КАКУЮ-ЛИБО ЧАСТЬ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, ПОЛЬЗОВАТЕЛЬ НЕПОСРЕДСТВЕННО ПРИНИМАЕТ УСЛОВИЯ СОГЛАШЕНИЯ И ДАЕТ СОГЛАСИЕ БЫТЬ ЮРИДИЧЕСКИ СВЯЗАННЫМ СО ВСЕМИ СОГЛАШЕНИЯМИ ДАННОГО ДОГОВОРА. ЕСЛИ ПОЛЬЗОВАТЕЛЬ НЕ ДАЕТ СВОЕ СОГЛАСИЕ НА ВСЕ УСЛОВИЯ ЭТОГО ДОГОВОРА, ПОЛЬЗОВАТЕЛЮ НЕ БУДЕТ РАЗРЕШЕН ДОСТУП, ИСПОЛЬЗОВАНИЕ ИЛИ УСТАНОВКА КАКОЙ-ЛИБО ЧАСТИ ПРОГРАММЫ. -## 1. Rights and Obligations +## 1. ПРАВА И ОБЯЗАННОСТИ -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. Описание.** Программа функционирует как бесплатный, открытый исходный код, электронный криптовалютный кошелек. Программа не является аккаунтом, с помощью которого Компания или другие третьи стороны выступают в качестве финансовых посредников или хранителей ADA пользователя или любой другой криптовалюты. Пока Программа подвергается бета-тестированию и продолжает совершенствоваться путем обратной связи с разработчиками общества, вкладчиками и бета-тестировщиками, Компания не может гарантировать, что не возникнет никаких ошибок в Программе. Пользователь осознает, что использование Программы на его риске, осмотрительности и соблюдении всех применимых законов. Пользователь несет ответственность за сохранность его паролей, PIN-кодов, личных ключей, ключей выкупа, ICO-ключей (shielded vending keys), синхронизации восстановительной мнемонической фразы. Пароли ADA и любые другие коды Пользователь использует для доступа к Программе или любой другой информации, к ADA, ваучеру или другого раздела криптовалюты. ЕСЛИ ПОЛЬЗОВАТЕЛЬ ТЕРЯЕТ ДОСТУП К СВОЕМУ КОШЕЛЬКУ ИЛИ ЛИЧНЫМ КЛЮЧАМ И НЕ ИМЕЕТ ОТДЕЛЬНО СОХРАНЕННОЙ РЕЗЕРВНОЙ КОПИИ СВОЕГО КРИПТОКОШЕЛЬКА ИЛИ РЕЗЕРВНОЙ КОПИИ ВОССТАНОВИТЕЛЬНОЙ МНЕМОНИЧЕСКОЙ ФРАЗЫ И СООТВЕТСТВУЮЩЕГО ПАРОЛЯ(ЛЕЙ), ПОЛЬЗОВАТЕЛЬ ПРИЗНАЕТ И СОГЛАШАЕТСЯ С ТЕМ, ЧТО ЛЮБАЯ ADA ИЛИ ЛЮБЫЕ ДРУГИЕ КРИПТОВАЛЮТЫ ПОЛЬЗОВАТЕЛЯ, СВЯЗАННЫЕ С ТЕМ КРИПТОКОШЕЛЬКОМ СТАНУТ НЕДОСТУПНЫ. Все запросы о проведении транзакций являются необратимыми. Компания и ее акционеры, директора, должностные лица, сотрудники, партнеры и агенты не могут гарантировать подтверждение транзакции или восстановление личных ключей Пользователя или паролей, если он их потеряет или забудет. -**b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. +**b. Доступность.** Пользователь согласен с тем, что время от времени Программа может быть недоступной или не функционировать по какой-либо причине, включая, без ограничений: (i) неисправность оборудования; (ii) периодические процедуры технического обслуживания или ремонтные работы, которые Компания может проводить время от времени; или (iii) случаи, которые не зависят от Компании или которые не в состоянии быть предвидены Компанией. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. Оборудование.** Пользователь несет полную ответственность за предоставление, поддержание и обеспечение совместимости с Программой, всем оборудованием, программным обеспечением, электрическими и другими физическими требованиями для использования Пользователем Программы, включая, без ограничений, телекоммуникации и соединения с доступом в Интернет, веб браузеры или другое оборудование, программы и сервисы, необходимые для доступа и использования Программы. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. Безопасность.** Пользователь несет полную ответственность за безопасность, конфиденциальность и целостность всей информации и содержания, которые Пользователь получает, передает или сохраняет в Программе. Пользователь несет полную ответственность за любой разрешенный или несанкционированный доступ к любому аккаунту Пользователя любым лицом. Пользователь подтверждает свое согласие нести полную ответственность за конфиденциальность устройств безопасности, информации, ключей и паролей Пользователя. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. Конфиденциальность.** Когда это практически осуществимо, Компания будет стремится соблюдать конфиденциальность Пользователя. Компания не будет отслеживать, редактировать или разглашать какую-либо личную информацию о Пользователе и его аккаунте, включая его содержимое или использование Пользователем Программы без предварительного согласия Пользователя за исключением случаев, когда Компания искренне полагает, что данные действия необходимы для: (i) соблюдения юридического (судебного) процесса или другого правового требования любого правительственного органа; (ii) охраны и защиты прав и имущества Компании (iii) обеспечения соблюдения данного Соглашения (iv) защиты интересов пользователей Программы помимо Пользователя или любого другого лица; или (v) для функционирования или проведения технического обслуживания и ремонта услуг Компании или оборудования, включая Программу в соответствии с законодательством. Пользователь не рассчитывает на конфиденциальность в отношении Интернета в целом. Пользовательский IP адрес передается и записывается с каждым сообщением или другой информацией, которую Пользователь отправляет из Программы. -## 2. Taxes and Fees +## 2. Налоги и сборы -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +Все комиссии за конвертацию валюты, сборы третьих сторон, продажи, использование, добавленная стоимость, личную собственность или другие налоги, пошлины или сборы какого-либо вида, включая проценты и штрафы по ним, будь то введенные в настоящее время или в дальнейшем любым правительственным органом,а также сборы, понесенные Пользователем по причине доступа Пользователя, использования или установки Программы является исключительно ответственностью Пользователя. -## 3. User Representations +## 3. Пользовательские заявления -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +Пользователь заявляет и гарантирует Компании, что: (a) Пользователь является физическим лицом и что Пользователь в возрасте от восемнадцати лет(18); (b) Пользователь имеет права и полномочия для заключения и выполнения обязательств Пользователя в соответствии с данным Соглашением; (с) вся информация, предоставленная для Компании Пользователем, является достоверной, точной и полной; (d) Пользователь обязуется соблюдать все законы и правила любой применимой юрисдикцией в отношении доступа Пользователя, использования или установки Программы; (e) Пользователь должен соблюдать все условия и правила настоящего Соглашения, включая, без ограничений, положения, изложенные в Разделе 4 и (f) Пользователь предоставил и будет предоставлять точную и полную информацию, необходимую для доступа, использования или установки Программы. -## 4. Prohibited Uses +## 4. Запрещенные виды использования -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +Пользователь несет всю ответственность за любые действия и упущения, происходящие в аккаунте Пользователя,информации в области безопасности, ключей или паролей, а также, Пользователь соглашается не участвовать в неприемлемом использовании Программы, которое включает, без ограничений, использование Программы для: (a) распространения, хранения и передачи незапрашиваемых сообщений, цепочки писем или незапрашиваемых коммерческих имейлов; (b) распространения или передачи материалов, которые разумному человеку могут быть оскорбительными, непристойными, порнографическими, порочащими, притесняющими, глубоко оскорбительными, вульгарными, угрожающими или злонамеренными; (c) распостранения, хранения или передачи файлов, графических объектов, программного обеспечения или других материалов, которые фактически или потенциально нарушают авторское право, товарный знак, патент, коммерческую тайну или другое право интеллектуальной собственности любого лица; (d) создания ложной личности или иной попытки введения в заблуждение любого лица в отношении личности или происхождении какого-либо сообщения; (e) экспорта, реэкспорта или разрешения загрузки любых сообщений или содержания, нарушающих любой закон об экспорте и импорте, регулировании или ограничении любой применимой юрисдикции или без всех необходимых разрешений, лицензий или изъятий; (f) вмешательства, нарушения или попытки получения несанкционированного доступа к другим аккаунтам в Программе или любой другой компьютерной сети; или (g) распостранения, хранения или передачи вирусов, "Троянских коней" или любых других вредоносных кодов или программ. -## 5. Termination +## 5. Расторжение -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +Настоящее Соглашение вступает в силу с момента его принятия Пользователем как указано в настоящем документе, и будет продолжать действовать в полную силу до тех пор, пока Пользователь осуществляет доступ, использование или установку Программы. Компания оставляет за собой право, по собственному усмотрению и без предварительного уведомления в любое время и по любой причине: (a) удалить или отключить доступ ко всем или любой части Программы; (b) приостановить доступ Пользователя или использование ко всем или любой части Программы; и (с) расторгнуть (аннулировать) данное Соглашение. -## 6. Disclaimer of Warranties +## 6. Освобождение от гарантий -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +ПРОГРАММА ПРЕДОСТАВЛЯЕТСЯ "КАК ЕСТЬ", БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ. ИСПОЛЬЗОВАНИЕ ПРОГРАММЫ ИСКЛЮЧИТЕЛЬНО НА РИСКЕ ПОЛЬЗОВАТЕЛЯ. КОМПАНИЯ НЕ ГАРАНТИРУЕТ, ЧТО ПРОГРАММА БУДЕТ РАБОТАТЬ БЕСПЕРЕБОЙНО И БЕЗ ОШИБОК, ТАКЖЕ КОМПАНИЯ НЕ ДАЕТ НИКАКИХ ГАРАНТИЙ В ОТНОШЕНИИ ЛЮБЫХ РЕЗУЛЬТАТОВ, КОТОРЫЕ МОГУТ БЫТЬ ПОЛУЧЕНЫ ПРИ ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ. КОМПАНИЯ НЕ ДАЕТ НИКАКИХ ДРУГИХ ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ. КОМПАНИЯ ОТКРЫТО ОТКАЗЫВАЕТСЯ ОТ КАКОЙ-ЛИБО ГАРАНТИИ ПРИГОДНОСТИ ТОВАРА, ГАРАНТИИ ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ, ГАРАНТИИ ПРАВА СОБСТВЕННОСТИ ИЛИ ИНТЕРЕСА, ИЛИ ГАРАНТИИ НЕНАРУШЕНИЯ (НЕВМЕШАТЕЛЬСТВА). -## 7. Limitation of Liability +## 7. Ограничение ответственности -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ НЕ МОГУТ КОМПАНИЯ ИЛИ ЕЕ АКЦИОНЕРЫ, ДИРЕКТОРА, ДОЛЖНОСТНЫЕ ЛИЦА, СОТРУДНИКИ, ПАРТНЕРЫ ЛИБО АГЕНТЫ, КТО-ТО ИЗ ЕЕ ИЛИ ИХ СООТВЕТСТВУЮЩИХ ПОСТАВЩИКОВ УСЛУГ НЕСТИ ОТВЕТСТВЕННОСТЬ ПЕРЕД ПОЛЬЗОВАТЕЛЕМ ИЛИ ЛЮБОЙ ТРЕТЬЕЙ СТОРОНОЙ ЗА ИСПОЛЬЗОВАНИЕ, ПРЕРЫВАНИЕ, ЗАДЕРЖКУ ИЛИ НЕВОЗМОЖНОСТЬ ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ, ПОТЕРИ ДОХОДОВ ИЛИ ПРИБЫЛИ, ЗАДЕРЖКУ, ПРЕРЫВАНИЕ ИЛИ ПОТЕРЮ ПРЕДОСТАВЛЯЕМЫХ УСЛУГ, БИЗНЕС ИЛИ ГУДВИЛЛ (GOODWILL), ПОТЕРЮ ИЛИ ПОВРЕЖДЕНИЕ ДАННЫХ, ПОТЕРЮ В РЕЗУЛЬТАТЕ РАБОТЫ СИСТЕМЫ ИЛИ СБОЙ ПРИ ОБСЛУЖИВАНИИ СИСТЕМЫ, НЕИСПРАВНОСТЬ ИЛИ ВЫКЛЮЧЕНИЕ, СБОЙ ТОЧНОЙ ПЕРЕДАЧИ, ЧТЕНИЯ ИЛИ ОТПРАВКУ ИНФОРМАЦИИ, СБОЙ ПРИ ОБНОВЛЕНИИ ИЛИ ПРЕДОСТАВЛЕНИИ КОРРЕКТНОЙ ИНФОРМАЦИИ, НЕСОВМЕСТИМОСТЬ СИСТЕМЫ ИЛИ ПРЕДОСТАВЛЕНИЕ НЕПРАВИЛЬНОЙ ИНФОРМАЦИИ СОВМЕСТИМОСТИ ИЛИ НАРУШЕНИЯ В СИСТЕМЕ БЕЗОПАСНОСТИ, ИЛИ ЗА ЛЮБЫЕ КОСВЕННЫЕ, СЛУЧАЙНЫЕ, НЕПРЯМЫЕ, ТИПИЧНЫЕ, ОСОБЫЕ ИЛИ ШТРАФНЫЕ УБЫТКИ, ВОЗНИКАЮЩИЕ ИЛИ СВЯЗАННЫЕ С НАСТОЯЩИМ СОГЛАШЕНИЕМ, НАРУШЕНИЕ СОГЛАШЕНИЯ, ПРАВОНАРУШЕНИЕ (ВКЛЮЧАЯ НЕБРЕЖНОСТЬ) ИЛИ ИНОЕ, НЕЗАВИСИМО ОТ ТАКИХ УБЫТКОВ, КОТОРЫЕ БЫЛИ ПРЕДСКАЗУЕМЫ И БЫЛИ ЛИ МЫ УВЕДОМЛЕНЫ О ВОЗМОЖНОСТИ ТАКИХ УБЫТКОВ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ НЕ МОГУТ КОМПАНИЯ ИЛИ ЕЕ АКЦИОНЕРЫ, ДИРЕКТОРА, ДОЛЖНОСТНЫЕ ЛИЦА, СОТРУДНИКИ, ПАРТНЕРЫ ЛИБО АГЕНТЫ, КТО-ТО ИЗ ЕЕ ИЛИ ИХ СООТВЕТСТВУЮЩИХ ПОСТАВЩИКОВ УСЛУГ НЕСТИ ОТВЕТСТВЕННОСТЬ ЗА ЛЮБОЕ ТРЕБОВАНИЕ, ПОВРЕЖДЕНИЯ ИЛИ ДРУГУЮ ОТВЕТСТВЕННОСТЬ, БУДЬ ТО В ДЕЙСТВИИ СОГЛАШЕНИЯ, ПРАВОНАРУШЕНИИ ИЛИ ИНОМ, ОБРАЗОВАННЫМ ИЛИ КАКИМ-ЛИБО ОБРАЗОМ СВЯЗАННЫМ С ДОСТУПОМ ПОЛЬЗОВАТЕЛЯ, ИСПОЛЬЗОВАНИЯ ИЛИ УСТАНОВКИ ПРОГРАММЫ. НЕКОТОРЫЕ ЮРИСДИКЦИИ ЗАПРЕЩАЮТ ИСКЛЮЧЕНИЕ ИЛИ ОГРАНИЧЕНИЕ СЛУЧАЙНЫХ ИЛИ ПОСЛЕДУЮЩИХ УБЫТКОВ, ТАКИМ ОБРАЗОМ ДАННОЕ ОГРАНИЧЕНИЕ ОТВЕТСТВЕННОСТИ МОЖЕТ БЫТЬ НЕ ПРИМЕНИМО К ПОЛЬЗОВАТЕЛЮ. ЕСЛИ ПОЛЬЗОВАТЕЛЬ НЕ УДОВЛЕТВОРЕН ПРОГРАММОЙ,ЕДИНСТВЕННЫМ И ИСКЛЮЧИТЕЛЬНЫМ СРЕДСТВОМ В РАСПОРЯЖЕНИИ ПОЛЬЗОВАТЕЛЯ ЯВЛЯЕТСЯ ОТКАЗ ОТ ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ. -## 8. Indemnification +## 8. Возмещение ущерба -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +Пользователь согласен возместить ущерб, освободить и защитить Компанию, ее акционеров, директоров, должностных лиц, сотрудников, партнеров и агентов ("Стороны, которым возмещают ущерб") от и против любого действия, приводящего к претензиям, ущербу, задолженности, требованиям и ответственности, включая разумные расходы и расходы на услуги адвоката, заявленные любым лицом, возникающие из или связанные с: (a) настоящим Соглашением; (b) доступом Пользователя, использования или установки Программы, включая любые данные или работу, переданные или полученные Пользователем; и (c) любое неприемлемое использование Программы любым лицом, включая, без ограничения, любое заявление, данные или контент, сделанные, переданные или переизданные Пользователем или любым лицом, которые запрещены как неприемлемые в соответствии с разделом 4. ДАННОЕ ВОЗМЕЩЕНИЕ УЩЕРБА ВКЛЮЧАЕТ ЧЕТКО ВЫРАЖЕННУЮ КОМПЕНСАЦИЮ КОМПАНИИ И ВСЕХ СТОРОН, КОТОРЫМ ВОЗМЕЩАЮТ УЩЕРБ ЗА ЛЮБУЮ, ПРЕДПОЛАГАЕМУЮ НЕБРЕЖНОСТЬ (ВКЛЮЧАЯ ЛЮБУЮ, ПРЕДПОЛАГАЕМУЮ ГРУБУЮ ХАЛАТНОСТЬ). ИЛИ ДРУГИЕ ПРЕДПОЛАГАЕМЫЕ ПРОСТУПКИ КОМПАНИИ ИЛИ ЛЮБОЙ СТОРОНЫ, КОТОРОЙ ВОЗМЕЩАЮТ УЩЕРБ. -## 9. Intellectual Property +## 9. Интеллектуальная собственность -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +Компания сохраняет за собой все права, названия и интересы в и на всех брендах Компании, логотипах и товарных знаках, включая, но не ограничиваясь, EMURGO Co., Ltd., EMURGO, Yoroi, Криптовалютный кошелек Yoroi (Yoroi Cryptocurrency Wallet), кошелек Yoroi (Yoroi Wallet), Приложение Yoroi (Yoroi App) и все вариации формулировок вышеупомянутых брендов, логотипов и торговых знаков. -## 10. Warnings +## 10. Предупреждения -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +Пользователь понимает, что Компания не несет ответственности за передачу, сохранность или хранение личных ключей и/или ADA Пользователя или любой другой криптовалюты. Если Пользователь и/или кто-либо, обладающий полномочиями, потеряет, допустит неправильное действие или украдет соответствующие частные ключи или если поручители Пользователя откажутся предоставить необходимые полномочия, Пользователь понимает, что не сможет восстановить ADA или любую другую криптовалюту и что Компания не несет ответственности за такой ущерб. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +Пользователь признает и соглашается с тем, что ADA или любые другие криптовалютные транзакции при содействии Программы и/или Компании могут быть отложены или задерживаться и что Компания не несет ответственности за любые, связанные с этим потери. Пользователь признает и соглашается с тем, что Компания не несет ответственности за любой аспект информации, контента или услуг, содержащиеся в любых материалах третьих сторон или на каких-либо сайтах третьих сторон, доступных или связанных с Программой и/или Компанией. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. +При использовании Программы, Пользователь признает и соглашается: (i) что Компания не несет ответственности за функционирование базовых протоколов и что Компания не гарантирует их функциональность, безопасность или доступность; и (ii) что основные протоколы подвержены внезапным изменениям мейн-чейн в правилах эксплуатации ("форки"), и что эти форки могут существенно повлиять на стоимость и/или функционирование ADA или любой другой криптовалюты, которую Пользователь хранит в Программе. В случае форка (fork), Пользователь согласен с тем, что Компания может временно приостановить деятельность Программы (с или без уведомления об этом Пользователя) и что Компания может по своему усмотрению, (a) настроить или перенастроить (переконфигурировать) свои системы или (b) принять решение не поддерживать (или прекратить поддержку) форкового протокола полностью, однако, при условии, что Пользователь будет иметь возможность выводить средства с Программы. Пользователь признает и соглашается с тем, что Компания не несет абсолютно никакой ответственности в отношении неподдерживаемого бранча форкового протокола. -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +## 11. Разное -## 11. Miscellaneous +**a. Поправка.** Компания имеет право в любое время и без предупреждения, добавлять или изменять условия данного Соглашения, просто доставляя данные измененные условия Пользователю через электронное сообщение или через любое информационное средство на любой адрес, предоставленные Компании Пользователем. Доступ Пользователя к Программе или Ее использование после даты, когда измененные условия доставлены Пользователю, считаются принятием данных измененных условий. -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**b. Разрыв.** Если какое-либо положение из часть положений настоящего Соглашения есть или становится недействительным, нелегальным или неосуществимым, оно считается модифицированным в той мере,в которой это минимально необходимо, чтобы сделать его действительным, легальным и осуществимым. Если такая модификация невозможна, соответствующее положение или части положения считаются удаленными. Любая модификация или удаление положения или части положений согласно настоящей Статьи не затрагивает законность и правомочность остальных частей положений настоящего Соглашения. -**b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. +**c. Полное Соглашение – Отказ от доверия.** Настоящее Соглашение представляет собой полное соглашение между Сторонами в отношении предмета настоящего Соглашения и заменяет все предыдущие соглашения или договоренности между сторонами. Пользователь четко заявляет и подтверждает, что он не полагается ни на какие заявления, договоренности, представления, ожидания или соглашения, отличные от тех, которые четко указаны в настоящем Соглашении. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**d. НАСТОЯЩЕЕ СОГЛАШЕНИЕ ПОДЛЕЖИТ ОБЯЗАТЕЛЬНОМУ АРБИТРАЖУ.** Пользователь согласен, что любые и все споры и претензии в отношении любого лица, возникшие или каким-либо образом связанные с настоящим Соглашением или доступом, использованием или установкой Программы Пользователем или любым другим лицом подлежат обязательному арбитражному разбирательству в соответствии с Правилами Арбитражного регламента Международной торговой палаты одним или несколькими судьями, назначенными в соответствии с этими правилами. Местом проведения арбитража является Япония. Язык арбитража - английский. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. - -**e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. +**e. Язык.** Любой перевод настоящего Соглашения предназначен только в целях местных ссылок, и в случае возникновения каких-либо несоответствий между английской и любыми не английскими версиями, английская версия настоящего Соглашения имеет преимущественную силу и регулирует во всех отношениях. ## 12. Delegation and Staking @@ -106,4 +74,4 @@ If you have any questions or concerns regarding the accuracy or reliability of t 12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. From 5d920aaba57fa83b8842f37eab9a2657c94f291f Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:22 +0100 Subject: [PATCH 311/464] New translations en-us.md (Slovak) --- .../i18n/locales/terms-of-use/ada/sk-SK.md | 72 ++++++------------- 1 file changed, 20 insertions(+), 52 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/sk-SK.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/sk-SK.md index 62a96a1ef3..617f0e1f22 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/sk-SK.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/sk-SK.md @@ -1,102 +1,70 @@ # Terms of Service Agreement -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Co., Ltd. ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties." BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. ## 1. Rights and Obligations -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. **b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. ## 2. Taxes and Fees -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. ## 3. User Representations -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. ## 4. Prohibited Uses -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. ## 5. Termination -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. ## 6. Disclaimer of Warranties -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. ## 7. Limitation of Liability -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. ## 8. Indemnification -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. ## 9. Intellectual Property -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to, EMURGO Co., Ltd., EMURGO, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. ## 10. Warnings -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. - -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. ## 11. Miscellaneous -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. **b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**c. Entire Agreement – Disclaimer of Reliance**. This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. +**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. **e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. ## 12. Delegation and Staking @@ -106,4 +74,4 @@ If you have any questions or concerns regarding the accuracy or reliability of t 12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. From 4addd9ecfa0b64a230636e0737acc588f3eb9d02 Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:24 +0100 Subject: [PATCH 312/464] New translations en-us.md (Turkish) --- .../i18n/locales/terms-of-use/ada/tr-TR.md | 110 +++++++----------- 1 file changed, 39 insertions(+), 71 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/tr-TR.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/tr-TR.md index 62a96a1ef3..758c6fc23a 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/tr-TR.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/tr-TR.md @@ -1,109 +1,77 @@ -# Terms of Service Agreement +# Hizmet Şartları Sözleşmesi -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +BU HİZMET SÖZLEŞMESİ ("Sözleşme"), EMURGO Co., Ltd. ("Şirket") ile aşağıdaki yazılımları indirme, kullanma veya kullanma işlemini tamamlayan herhangi bir kişi veya kuruluş ("Kullanıcı") arasında Yoroi kripto para Cüzdan uygulaması ve veri işleme hizmeti, uygulama, iletişim hizmeti veya diğer içerik veya Şirket tarafından sunulan veya sağlanan yazılım ("Yazılım") kullanımı, uygulaması amacıyla yapılmıştır. Şirket ve Kullanıcının her ikisine de ortaklaşa olarak "Taraflar" denilecektir. KULLANICI ONAY BUTONUNA TIKLAYARAK VEYA YAZILIMIN HERHANGİ BİR PARÇASINI İNDİREREK DÜZENLEYİP, KURARAK VEYA MONTAJIYLA, KULLANICI BU SÖZLEŞMENİN TÜM ŞARTLARINDA MUTABIK KALARAK TAMAMEN ONAYLADIĞINI KABUL ETMİŞTİR. KULLANICININ BU SÖZLEŞMENİN TÜM ŞARTLARINI KABUL ETMEMESİ HALİNDE, KULLANICIYA YAZILIMININ HERHANGİ BİR YERİNE ERİŞİM, KULLANMA VEYA İNDİRME YETKİSİ VERİLMEYECEKTİR. -## 1. Rights and Obligations +## Haklar ve Yükümlülükler -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. Tanım.** Yazılım, ücretsiz, açık kaynaklı, dijital bir kripto para birimi cüzdanı olarak işlev görür. Yazılım, Şirket'in veya diğer üçüncü tarafların Kullanıcının ADA' sının veya başka bir kripto para biriminin finansal aracıları veya emanetçileri olarak hizmet ettiği bir hesap oluşturmaz. Yazılım beta testinden geçmiş ve geliştiriciler topluluğundan, açık kaynaklı katkıda bulunanlardan ve beta test kullanıcılarından gelen geri bildirimlerle geliştirilmeye devam ederken, Şirket Yazılımda herhangi bir hata olmayacağını garanti etmez. Kullanıcı(lar), Kullanıcının Yazılımı kullanmasının Kullanıcının riski, takdir yetkisi içinde ve geçerli tüm yasalara uygun olduğunu kabul eder. Kullanıcı, Şifreleri, PIN kodları, özel anahtarlar, ödeme anahtarları, korumalı otomat anahtarları, yedekleme kurtarma anımsatıcı parolaları, ADA parolaları ve Yazılım'a veya herhangi bir bilgiye, ADA, fişe veya diğer kripto para birimine erişmek için kullandığı diğer kodların güvenliğinden sorumludur. KULLANICI KRİPTO PARA CÜZDANINA VEYA ÖZEL ANAHTARLARA ERİŞİYOR VE KULLANICI KRİTERLERİ DUVARLARINI VEYA KAZANAN BİR ŞEKİLLERİ VEYA KESİNLİKLE İLGİLİ BİR ŞEKİLLERİ VEYA KESİNLİKLE İLGİLİ BİR ŞEKİLDE VEYA KAZANIR, KRİPTO PARA CÜZDANIN BAĞLANMAMASI İLE İLGİLİ OLARAK. Tüm işlem talepleri tek yönlü özelliğine bağlı olarak, dönüşsüzlük nedeniyle rücu edilemez/geri döndürülemez. Şirket ve hissedarları, yöneticileri, memurları, çalışanları, iştirakleri ve acenteleri, işlem onayını garanti edemez veya Kullanıcı bunları kaybederse veya unutursa Kullanıcının özel anahtarlarını veya şifrelerini kurtaramaz (retrieve özelliği). -**b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. +**b. Erişilebilirlik.** Kullanıcı zaman zaman yazılıma erişilemeyeceğini veya herhangi bir nedenle uygulanamayabileceğini kabul eder, ancak bunlarla sınırlı olmamak kaydıyla: (i) ekipman arızaları; (ii) Şirketin zaman zaman üstlenebileceği periyodik bakım prosedürleri veya onarımları; veya (iii) Şirket'in kontrolünün ötesinde veya Şirket tarafından makul olarak öngörülemeyen nedenler. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. Ekipman.** Kullanıcı, Kullanıcı’ nın Yazılımı kullanımı için ve gerekli olan telekomünikasyon ve internet erişim bağlantılarını ve linklerini, web tarayıcılarını veya diğer ekipmanları, programları ve hizmetleri içeren ancak bunlarla da sınırlı olmayan Yazılımla uyumlu bütün donanımı, yazılımı, elektriği ve diğer fiziki gereksinimleri temin etmekten ve güvence altına almaktan yalnız ve ancak tek sorumlu olacaktır. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. Güvenlik.** Kullanıcı, Yazılım üzerinden aldığı, aktardığı veya üzerinde sakladığı tüm bilgi ve içeriğin güvenliğinden, gizliliğinden ve bütünlüğünden yalnız ve ancak tek sorumlu olacaktır. Herhangi bir Kullanıcı hesabına herhangi bir kişinin herhangi bir yetkili veya yetkisiz erişiminden yalnızca Kullanıcı sorumlu olacaktır. Herhangi bir Kullanıcı hesabına herhangi bir kişinin herhangi bir yetkili veya yetkisiz erişiminden yalnızca Kullanıcı sorumlu olacaktır. Kullanıcı, Kullanıcı güvenlik cihazlarının, bilgilerinin, anahtarlarının ve şifrelerinin gizliliği ile ilgili tüm sorumluluğu üstlenmeyi kabul eder. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. Gizlilik.** Kullanıcı, Kullanıcı güvenlik cihazlarının, bilgilerinin, anahtarlarının ve şifrelerinin gizliliği ile ilgili tüm sorumluluğu üstlenmeyi kabul eder.. “Şirket; (i) herhangi bir resmi makamın yasal sürecine veya diğer yasal gerekliliklerine uymak; (ii) Şirketin haklarını veya mülkiyetini korumak ve savunmak; (iii) bu sözleşmenin yürürlüğe koymak; (iv) Kullanıcı veya başka herhangi bir kişi dışındaki Yazılım kullanıcılarının çıkarlarını korumak; veya (v) Yasaların izin verdiği Yazılım dahil Şirket hizmetlerinin veya ekipmanlarının bakım ve onarımını yapmak veya yürütmek; bu tür bir eylemlerin gerekli olduğuna inanmadığı sürece, Kullanıcı veya Kullanıcının hesabı hakkında, içeriği veya Kullanıcının Yazılımı kullanımı da dahil olmak üzere, kullanıcının önceden rızası olmadan herhangi bir kişisel bilgiyi izlemeyecek, düzenlemeyecek veya ifşa etmeyecektir.” Kullanıcının genel olarak İnternet ile ilgili gizlilik beklentisi olmayacaktır. Kullanıcının IP adresi, Kullanıcının Yazılımdan gönderdiği her mesaj veya diğer bilgilerle iletilir ve kaydedilir. -## 2. Taxes and Fees +## 2. Vergiler ve Ücretler -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +Tüm para birimi dönüştürme ücretleri (Exchange Rates), üçüncü taraf ücretleri, satış, kullanım, katma değer, kişisel mülkiyet (ticari tescil, telif hakkı veya fikri mülkiyet/fikir hakları/telif hakkı) veya diğer vergiler, vergi veya harçlar, bunlarla ilgili herhangi bir devlet kurumu tarafından şimdi veya sonradan uygulanan faiz ve cezalar dahil olmak üzere her türlü vergi ve harç Kullanıcının Yazılım'a erişmesi, kullanması veya yüklemesi nedeniyle Kullanıcı olarak tamamen kullanıcının sorumluluğundadır. -## 3. User Representations +## 3. Kullanıcının Beyanları -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +Kullanıcı, başlıklar altında belirtilenleri beyan ve taahhüt eder: (a) Kullanıcı gerçek kişi ise, Kullanıcı 18 yaşından büyükse; (b) Kullanıcı, bu Sözleşme kapsamındaki Kullanıcının yükümlülüklerini yerine getirme yetkisine sahiptir; (c) Kullanıcı tarafından Şirkete verilen tüm bilgiler doğru, tam ve eksiksiz olacaktır; (d) Kullanıcı, Yazılımın erişimi, kullanımı veya kurulumu ile ilgili olarak geçerli herhangi bir yargı alanındaki tüm yasa ve düzenlemelere uyacaktır; (e) Kullanıcı, Kısım 4'te belirtilen hükümler dahil, ancak bunlarla sınırlı olmamak üzere, bu Sözleşmenin tüm hüküm ve koşullarına uyacaktır; ve (f) Kullanıcı, Yazılım'a erişim, kullanım veya kurulum için gerektiği şekilde doğru ve eksiksiz bilgi sağlayacaktır. -## 4. Prohibited Uses +## 4. Kullanım Yasakları -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +Kullanıcı, Kullanıcı hesabı, güvenlik bilgileri, anahtarlar veya parola altında meydana gelen her türlü işlem ve ihmalden tek ve yegane sorumludur ve Kullanıcı, Yazılımın sınırlama olmaksızın kabul edilemez şekilde kullanılmamasını kabul eder: (a) istenmeyen mesajları, zincir mektupları veya istenmeyen ticari e-postaları yaymak, saklamak veya iletmek; (b) makul bir kişiye hakaretamiz-sinkaflı (küfürlü), müstehcen, pornografik, küçük düşürücü, taciz edici, ağır saldırgan, kaba, tehdit edici veya kötü niyetli olabilen materyalleri yaymak veya iletmek; (c) herhangi bir kişinin telif hakkı, ticari marka, patent, ticari sır veya diğer fikri mülkiyet haklarını fiilen veya potansiyel olarak ihlal eden dosyaları, grafikleri, yazılımları veya diğer materyalleri yaymak, depolamak veya iletmek; (d) sahte bir kimlik oluşturmak veya herhangi bir kişiyi herhangi bir iletişimin kimliği veya kökeni konusunda yanıltmaya çalışmak; (e) herhangi bir ihracat veya ithalat yasasını, yürürlükteki herhangi bir yargı yetkisini düzenleyen veya kısıtlayan veya gerekli tüm onay, lisans veya muafiyetler olmaksızın herhangi bir mesaj veya içeriğin ihracatına, yeniden ihracatına veya indirilmesine izin vermek; (f) Yazılımdaki veya başka bir bilgisayar ağındaki diğer hesaplara izinsiz erişim sağlamak, bunlara müdahale etmek, kesintiye uğratmak veya yetkisiz olarak erişmeye çalışmak; veya (g) virüsleri, Truva atlarını veya diğer kötü amaçlı kodları veya programları yaymak, depolamak veya iletmek. -## 5. Termination +## 5. Fesih -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +Bu Sözleşme, Kullanıcı' nın burada belirtilen kabulü ile yürürlüğe girer ve Kullanıcı, Yazılım'a herhangi bir erişim, kullanım veya kurulum gerçekleştirdiği sürece yürürlükte kalacaktır. Şirket, tamamen kendi takdirine bağlı olarak ve bildirimde bulunmaksızın, herhangi bir zamanda ve herhangi bir nedenle aşağıdakileri yapma hakkını saklı tutar: (a) Yazılımın tamamına veya bir kısmına erişimi kaldırma veya devre dışı bırakma; (b) Kullanıcının Yazılımın tamamına veya bir kısmına erişimini veya kullanımını askıya almak; ve (c) bu Sözleşmeyi feshetmek. -## 6. Disclaimer of Warranties +## 6. Garantilerin Reddi -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +YAZILIM, HERHANGİ BİR TÜR GARANTİSİ YOK, AÇIK VEYA ZIMNİ OLMADAN "OLDUĞU GİBİ" SAĞLANIR. YAZILIMIN KULLANIMI YALNIZCA KULLANICININ RİSKİNDEDİR. ŞİRKET, YAZILIMIN KESİNTİSİZ VEYA HATASIZ OLACAĞINI GARANTİ ETMEMEKTEDİR, NE DE ŞİRKET YAZILIMIN KULLANILMASI İLE İLGİLİ HERHANGİ BİR GARANTİ VERİR. ŞİRKET, AÇIK VEYA ZIMNİ HİÇBİR GARANTİ VERMEZ. ŞİRKET, TİCARİ OLABİLİRLİK GARANTİSİ, BELİRLİ BİR AMACA UYGUNLUK GARANTİSİ, UNVAN VEYA İLGİLİ GARANTİYİ VEYA YETKİLİ OLMAYAN GARANTİ HAKKINDA AÇIKTIR. -## 7. Limitation of Liability +## 7. Sorumluluk Sınırlaması -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +ŞİRKETİN VEYA ORTAKLARIN, YÖNETİCİLERİNİN, MEMURLARININ, ÇALIŞANLARININ, İŞTİRAKLERİNİN VEYA ACENTELERİNİN VEYA HERHANGİ BİR ŞEKİLİNDE VEYA SAYGIN HİZMET SAĞLAYICILARININ HERHANGİ BİRİNİN KULLANILMASINA VEYA KULLANILMAMASINA VE YAZILIM, KAYIP GELİRLER VEYA KAZANÇLAR, GECİKMELER, KESİNTİSİZ VEYA HİZMET KAYBI, İŞLETME VEYA ŞEREFİYE, VERİ KAYBI VEYA YOLSUZLUĞU, SİSTEM VEYA SİSTEM HİZMETİ ARIZASI, ARIZA VEYA GERÇEKLEŞTİRME, BAŞVURU HATASI SİSTEM GÜVENLİĞİNDE YA DA BU GELİŞMEDE OLAN ANLAŞMAYA DAHİL OLAN HERHANGİ BİR DOĞRU, BİRLİKTE, DOLAYLI, MUHTELİF, ÖZEL VEYA CEZA HASARLARINDA GÜNCELLEŞTİRİN VEYA SUNULAN VEYA ANLAŞILAN HERHANGİ BİR GELİŞMEYE,, HAKSIZ FİİL (İHMALİ İÇEREN) YA DA DİĞER ZARARLARIN ÖLÇÜLMÜŞ OLDUĞU VE BENZERLERİNİN OLASILIĞINDAN ÖNERİLDİĞİ YERLERDEN ÖNCE BENZERİ HASARLAR. HİÇBİR ŞEKİLDE ŞİRKET VEYA HİSSEDARLAR, YÖNETİCİLER, MEMURLAR, ÇALIŞANLAR, İŞTİRAKLER VEYA ACENTELER VEYA SORUMLU HİZMET SAĞLAYICILARININ HERHANGİ BİR SÖZLEŞME VEYA SÖZLEŞMESİNİN HERHANGİ BİR ŞEKİLİNDE VEYA HERHANGİ BİR SORUMLULUĞUYLA AKSİ TAKDİRDE, KULLANICININ ERİŞİMİ, YAZILIMININ VEYA KURULUMU İLE İLGİLİ OLARAK VEYA HERHANGİ BİR YERDE KULLANILIR. BAZI YARGI YETKİLERİ OLAĞAN VEYA SONRAKİ ZARARLARIN KAPSAMINI VEYA SINIRLANDIRILMASINI YASAKLAR. KULLANICI, YAZILIMDAN TATMİN OLMAMIŞSA/MEMNUN DEĞİLSE, KULLANICI YERİ VE ÖZEL ÇÖZÜMÜ YAZILIMIN KULLANIMINI DURDURMALIDIR. -## 8. Indemnification +## 8. Tazminat -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +Kullanıcı, Şirket, hissedarları, yöneticileri, memurları, çalışanları, satış ortakları ve acentelerini ("Tazmin Edilen Taraflar") makul, dahil olmak üzere herhangi bir eylemden, neden, talep, hasar, borç veya borçtan tazmin etmeyi, zararsız tutmayı ve savunmayı kabul eder aşağıdakilerden kaynaklanan veya bunlarla ilgili olarak herhangi bir kişi tarafından iddia edilen masraflar ve avukat ücretleri: (a) bu anlaşma kapsamında; (b) Kullanıcı tarafından iletilen veya alınan herhangi bir veri veya iş dahil, Yazılımın kullanıcı erişimi, kullanımı veya kurulumu; ve (c) Yazılım'ın herhangi bir kişi tarafından kabul edilemez herhangi bir şekilde kullanılması, bunlarla sınırlı olmamak kaydıyla, Kullanıcı veya Bölüm 4'te kabul edilemez olarak yasaklanmış herhangi bir kişi tarafından yapılan, aktarılan veya yeniden yayımlanan herhangi bir ifade, veri veya içerik dahil. BU TAZMİNATA, ŞİRKETİN VE TÜM TAHMİN EDİLMİŞ BİR ZARAR İÇİN TÜM TAZMİNATİ TARAFLARIN AÇIK TAZMİNATI DAHİLDİR (HERHANGİ İDDİA EDİLEN BRÜT İHMAL DAHİL). VEYA ŞİRKETİN DİĞER İDDİA EDİLEN SUİSTİMALİ VEYA HERHANGİ TAZMİN EDİLMİŞ TARAFLAR OLMAK ÜZERE. -## 9. Intellectual Property +## 9. Fikri Mülkiyet -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +Şirket EMURGO Co., Ltd., EMURGO, Yoroi, Yoroi Kriptopara Cüzdan, Yoroi Cüzdan, Yoroi Uygulama ve yukarıda belirtilen markaların, logoların ve ticari markaların ifadelerinin varyasyonları. -## 10. Warnings +## 10. İhbarlar -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +Kullanıcı, özel anahtarların ve/veya Kullanıcının ADA'sının veya başka bir kripto para biriminin aktarılmasından, korunmasından veya korunmasından Şirket'in sorumlu olmayacağını kabul eder. Kullanıcı ve/veya birlikte imzalayan yetkililer ilişkili özel anahtarları kaybederse, yanlış kullanırsa veya çalmışsa/çaldırmışsa veya Kullanıcının yöneticileri gerekli yetkileri vermeyi reddederse, Kullanıcı Kullanıcının ADA'sını veya başka bir kripto para birimini kurtaramayabileceğini kabul eder ve Şirket bu tür kayıplardan sorumlu değildir. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +Kullanıcı, Yazılım ve/veya Şirket tarafından kolaylaştırılan ADA veya diğer kriptopara işlemlerinin ertelenebileceğini ve Şirket'in ilişkili zararlardan sorumlu olmayacağını kabul ve beyan eder. Kullanıcı, herhangi bir üçüncü taraf materyalinde veya Yazılım ve/veya Şirket ile bağlantılı veya erişilebilen herhangi bir üçüncü taraf sitesinde yer alan bilgilerin, içeriğin veya hizmetlerin herhangi bir yönünden Şirket'in sorumlu olmayacağını kabul ve beyan eder. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. +Kullanıcı, Yazılımı kullanarak: (i) Şirketin dayanak protokollerin işletilmesinden sorumlu olmadığını ve Şirket'in işlevsellik, güvenlik veya kullanılabilirliği konusunda hiçbir garanti vermediğini; ve (ii) temel protokollerin işletme kurallarında ("veri çatalları") ani ana-dizi/zincir değişikliklerine maruz kalması ve bu tür çatalların ADA'nın veya herhangi bir diğer kriptoparanın değerini ve/veya işlevini maddi olarak etkileyebileceği Yazılım üzerindeki kullanıcı bellekleri. Çatal olması durumunda, Kullanıcı Şirketin Yazılım işlemlerini geçici olarak askıya alabileceğini (Kullanıcıya bildirimde bulunarak veya bildirimde bulunmadan) ve Şirketin tamamen kendi takdirine bağlı olarak, (a) sistemlerini yapılandırabileceği veya yeniden yapılandırabileceğini veya (b) Bununla birlikte, Kullanıcı'nın Yazılımdan para çekme fırsatı bulması koşuluyla çatallı protokolü tamamen desteklememek (veya desteklemeyi bırakmak). Kullanıcı, çatallı bir protokolün desteklenmeyen bir kolu ile ilgili olarak Şirket'in hiçbir sorumluluk üstlenmediğini kabul ve beyan eder. -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +## 11. Muhtelif -## 11. Miscellaneous +**a. Değişiklik/Düzeltme.** Şirket, değiştirilen şartları, herhangi bir zamanda ve bildirimde bulunmaksızın, yalnızca Şirkete Kullanıcı tarafından sağlanan herhangi bir adrese herhangi bir aracı yoluyla elektronik mesaj yoluyla Kullanıcıya ulaştırmak suretiyle bu Sözleşmenin hükümlerini ekleme veya değiştirme hakkına sahiptir. Kullanıcının, bu tür değiştirilmiş şartların Kullanıcıya teslim tarihinden itibaren Yazılım'a erişimi veya kullanımı, bu tür değiştirilmiş şartların kabul edildiği anlamına gelecektir. -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**b. İlişik Kesme.** Bu Sözleşmenin herhangi bir hükmü veya kısmen hükmü geçersizse veya geçersiz, yasadışı veya uygulanamaz hale gelirse, geçerli, yasal ve uygulanabilir hale getirmek için gereken minimum düzeyde değiştirilmiş sayılacaktır. Böyle bir değişiklik mümkün değilse, ilgili hüküm veya kısmi hüküm silinmiş sayılacaktır. Bu madde kapsamında bir hükümde veya kısmi hükümde yapılan herhangi bir değişiklik veya silme, bu Anlaşmanın geri kalanının geçerliliğini ve uygulanabilirliğini etkilemez. -**b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. +**c. Sözleşmenin Tamamı – Güven Reddi.** İşbu Sözleşme, işbu belgenin konusuyla ilgili olarak Taraflar arasındaki tüm anlaşmayı teşkil eder ve Taraflar arasındaki önceki tüm sözleşmelerin ve anlaşmaların yerine geçer. Kullanıcı, işbu Sözleşmede açıkça belirtilenler dışında herhangi bir beyan, anlayış, beyan, beklenti veya sözleşmeye dayanmadığını açıkça beyan ve garanti eder. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**d. SÖZLEŞMENİN BAĞLAYICI TAHKİME KONU OLMASI.** Kullanıcı, bu Sözleşmeden veya herhangi bir şekilde Yazılım ile Kullanıcı veya başka bir kişi tarafından Yazılım'a erişilmesi, kullanılması veya kurulmasından kaynaklanan herhangi bir kişiye karşı her türlü anlaşmazlığın veya talebin, Tahkim Kuralları uyarınca bağlayıcı tahkime tabi olacağını kabul eder. Söz konusu Kurallar uyarınca atanan bir veya daha fazla hakem tarafından Uluslararası Ticaret Odası'nın Tahkimin yeri Japonya olacaktır. Tahkim dili İngilizce olacaktır. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. +**e. DİL.** Bu Sözleşmenin herhangi bir çevirisi yalnızca yerel referans amacıyla yapılır ve İngilizce ile İngilizce olmayan sürümler arasında herhangi bir tutarsızlık olması durumunda, bu Sözleşmenin İngilizce sürümü her bakımdan geçerli olacak ve yönetilecektir. -**e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. +## 12. Yetki Devri ve Bahis -## 12. Delegation and Staking +12.1 **Ödüller.** Kullanıcının heyetten kazanabileceği Ödüllerin miktarı, bunlarla sınırlı olmamak üzere kullanıcı katılımı, ödül havuzu kar marjları ve devredilen Ada'nın hacmi gibi çeşitli faktörlere bağlıdır. Delegasyonun yukarıda belirtilen faktörler nedeniyle Kullanıcı için Ödül üretmemesi mümkündür. Ödüller, Cardano blok zincirinde üçüncü dönem başlangıcından itibaren kazanılır. -12.1 **Rewards.** The amount of Rewards a User may earn from delegation depends on various factors including, but not limited to, user participation, stakepool profit margins and the volume of ada being delegated. It is possible that delegation generates no Reward for a User due to the above-mentioned factors. Rewards are earned as of the start of the 3rd epoch on the Cardano blockchain. +12.2 **Yetkilendirme.** Kullanıcılar, hisselerini Şirketin çeşitli bahis havuzlarından birine veya bir üçüncü taraf bahis havuzuna devredebilir. Kullanıcı, bir bahis havuzuna devredilecek hacmi belirleme hakkına sahiptir ve istediği zaman katılım seviyesini artırabilir veya azaltabilir. Performans ölçütleri ve Ödüller dahil olmak üzere, şirketin bahis havuzları ile ilgili paylaştığı bilgiler, yalnızca bilgilendirme amaçlıdır ve doğru olmayabilir. Kullanıcılar, yalnızca kurulum işlemlerinin yapıldığı sırada Ada'ları güncellenmiş bir Daedalus veya güncellenmiş bir Yoroi cüzdanındaysa, paylarını bir bahis havuzuna devredebilirler. Kullanıcı, hissesini devretmenin bir sonucu olarak herhangi bir otomatik Ödül hakkı elde etmez. -12.2 **Delegation.** Users may delegate their stake to one of the various stake pools of the Company or to a third party stake pool. User will have the sole right to determine the volume to be delegated to a stake pool and may increase or decrease its level of participation at any time. Any information Company shares regarding stakepools, including performance metrics and Rewards, will be for indicative purposes only and may not be accurate. Users may only delegate their stake to a stake pool if their ada is in an updated Daedalus or an updated Yoroi wallet at the time of the setup process. User does not acquire any automatic right to Rewards as a result of delegating its stake. +12.3 **Şirket Ödül-Havuzları.** Şirket, Yoroi veya Seiza'da görülebilecek çeşitli bahis havuzları işletecek. Bu tür ödül havuzlarını güvenilir bir şekilde işletmek için maliyet ve ağ ve sunucu gereklilikleri Şirket tarafından tamamen kendi takdirine bağlı olarak belirlenir. Bu tür ödül havuzlarını güvenilir bir şekilde işletmek için maliyet ve ağ ve sunucu gereklilikleri Şirket tarafından tamamen kendi takdirine bağlı olarak belirlenir. Ödüller her dönemin sonunda gerçekleşecek ve otomatik olarak Kullanıcının Yoroi cüzdanında görülecektir. Şirket, Kullanıcıya bahis performansını gösteren bir gösterge tablosu sağlayacaktır. -12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. - -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 ** Ödül Kazanma. ** Kullanıcı ödüllerin tabi olabileceği tüm geçerli vergilerin ve Ödüller kullanıldıktan sonra Kullanıcıya uygulanabilecek tüm diğer vergilerin ödenmesinden sorumludur. From 76cacce49b44e1c866de968bcc517032a802dc7c Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:26 +0100 Subject: [PATCH 313/464] New translations en-us.md (zh-Hans) --- .../i18n/locales/terms-of-use/ada/zh-Hans.md | 110 +++++++----------- 1 file changed, 39 insertions(+), 71 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/zh-Hans.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/zh-Hans.md index 62a96a1ef3..73bbd86b2e 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/zh-Hans.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/zh-Hans.md @@ -1,109 +1,77 @@ -# Terms of Service Agreement +# 服务协议条款 -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +本服务协议条款(下称“本协议”)由EMURGO Co., Ltd.(下称“本公司”)与完成下载、使用或操作名为“Yoroi数字加密货币钱包”的应用软件以及本公司与该软件一并提供的数据处理服务、应用、通信服务或其他内容(下称“本软件”)的任何个人或实体(下称“用户”)订立。本公司与用户合称“双方当事人”。 通过点击“我接受”按钮或访问、使用或安装本软件的任何部分,用户明确同意且承诺受本协议中的所有条款合法约束。如果用户不同意接受本协议的所有条款,用户不得被授权访问、使用或安装本软件的任何部分。 -## 1. Rights and Obligations +## 1. 权利与义务 -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. 说明。** 本软件作为一个免费、开源的数字加密货币钱包运行。本软件不构成本公司或任何其他第三方借此为用户的ADA或任何其他加密货币担任金融中介机构或保管人的账户。 本软件已进行过beta测试,并将根据来自开发者社区、开源贡献者和beta测试人员的反馈持续改进,但本公司无法保证本软件中不存在漏洞。用户认可,用户对本软件的使用由用户自行决定,由用户自担风险,且遵守所有适用法律。用户负责妥善保管其密码、PIN、私有密钥、找回密钥、屏蔽自动密钥、备份恢复助记口令、ADA密码及用户用于访问本软件或任何信息、ADA、凭证或其他加密货币单元的任何其他代码。 如果用户丢失对其加密数字货币钱包的访问权限或私有密钥,且未单独保存一份用户的加密数字货币钱包或备份恢复助记口令及相应密码的备份,则用户认可并同意,任何ADA或用户与该加密数字货币钱包关联的任何其他加密数字货币将变为无法访问。所有交易请求均不可撤销。如果用户丢失或遗忘其私有密钥或密码,本公司及其股东、董事、高管、员工、关联方和代理人均不能保证交易确认或恢复用户的私有密钥或密码。 -**b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. +**b. 可访问性。** 用户同意,本软件可能不时出于任何原因无法访问或无法操作,原因包括但不限于:(i)设备故障;(ii)定期维护程序或本公司不定时进行的维修;或(iii)超出本公司控制范围或本公司无法合理预测的原因。 -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. 设备。** 用户应自行负责提供、维护和确保用户为使用本软件所需的与本软件的兼容性、所有硬件、软件、电子的和其他物理上的要求,包括但不限于电信和互联网访问连接及链接、网页浏览器或其他访问和使用本软件所需的设备、程序和服务。 -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. 安全性。** 用户应对用户通过本软件接收、传输或存储在本软件上的所有信息和内容的安全性、保密性和完整性负全部责任。用户应对任何人对用户的任何账户的任何被授权或未被授权的访问负全部责任。用户同意对用户的安全设备、信息、密钥和密码的保密性负全部责任。 -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. 隐私权。** 在合理可行时,本公司将尝试尊重用户的隐私。未经用户事先同意,本公司将不会监控、编辑或披露任何有关用户或用户的账户的任何个人信息,包括其内容或用户对本软件的使用,但本公司真诚相信出于以下任一目的有必要实施该等行为的,则不受此限:(i)遵守法律程序或任何政府机关的其他合法要求;(ii)保护和捍卫本公司的权利或财产;(iii)执行本协议;(iv)保护除用户外的本软件的其他使用者或其他任何人的利益;或(v)在法律许可的范围内操作或进行对本公司的服务或设备(包括本软件)的维护和修理。用户对互联网相关隐私整体并无期待,用户的IP地址将与用户从本软件中发送的每条消息或其他信息一起被传输和记录。 -## 2. Taxes and Fees +## 2. 税金和费用 -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +无论是任何政府机关现在或以后征收的所有货币汇兑费用、第三方费用、销售税、使用税、增值税、个人财产税或其他税金、任何形式的关税或征税,包括与之相关的利息和罚金,以及由于用户访问、使用或安装本软件而对用户造成的费用,均由用户独自承担。 -## 3. User Representations +## 3. 用户声明 -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +用户向本公司声明与保证:(a)如果用户为自然人,则其年龄已超过十八(18)岁;(b)用户具有订立和履行用户在本协议项下义务的权利能力和授权;(c)用户向本公司提供的所有信息均真实、准确和完整;(d)用户将遵守有关用户对本软件的访问、使用或安装的任何可适用的司法管辖区的所有法律法规;(e)用户应遵守本协议的所有条款和条件,包括但不限于第4条中列明的条款;且(f)用户已提供并将提供访问、使用或安装本软件所需的准确且完整的信息。 -## 4. Prohibited Uses +## 4. 禁止用途 -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +用户应对在用户的账户、安全信息、密钥或密码下发生的所有行为和疏忽负全部责任,且用户同意不对本软件进行任何不被接受的使用,包括但不限于将本软件用以:(a)散播、存储或传输未经请求的讯息、连锁信或未经请求的商业邮件;(b)散播或传输对于理性自然人而言可能为侮辱、淫秽、色情、诽谤、骚扰、严重冒犯、粗俗、威胁或恶意的资料;(c)散播、存储或传输实际或潜在侵犯任何人的版权、商标权、专利权、商业秘密或其他知识产权的文件、图形、软件或其他资料;(d)关于任何通讯的身份或来源,创建虚假身份或企图以其他方式误导任何人;(e)违反任何适用的司法管辖区的出口或进口法律、法规或限制、或在未取得所有必要的批准、许可或豁免的情况下出口、再出口或允许下载任何信息或内容;(f)妨碍、扰乱或企图未经授权访问本软件或任何其他计算机网络上的其他帐户;或(g)散播、存储或传输病毒、特洛伊木马程序或任何其他恶意代码或程序。 -## 5. Termination +## 5. 协议终止 -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +本协议自用户按照本协议的规定接受时生效,并将在用户进行本软件的任何访问、使用或安装期间持续具有完全效力。本公司保留权利,在任何时间以任何理由不经通知、自行决定:(a)移除或禁用对本软件的全部或任一部分的访问;(b)暂停用户对本软件的全部或任一部分的访问或使用;以及(c)终止本协议。 -## 6. Disclaimer of Warranties +## 6. 免责声明 -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +本软件按现状提供,不存在任何种类的明示或默示的保证。本软件的使用须由用户承担全部风险。本公司不保证本软件会不受干扰或没有错误,也不对通过使用本软件可能获取的结果做任何保证。本公司不做其他明示或默示的保证。本公司明确否认对适销性、针对特定目的的适用性、权利或利益、或无侵权情形做出任何保证。 -## 7. Limitation of Liability +## 7. 责任限制 -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +在任何情形下,本公司或其股东、董事、高管、员工、关联方或代理人、或其各自的任何服务提供商对于本软件的任何使用、中断、延迟或无法使用,损失的收益或利润,服务的延迟、中断或丢失,商业或商誉,数据的丢失或损坏,因系统或系统服务故障而造成的损失,故障或关闭,未能准确转移、读取或传输信息,未能更新或提供正确信息,系统不兼容、或提供不正确的兼容性信息、或系统安全破坏,或任何结果的、偶发的、间接的、惩戒性、特殊的或惩罚性损害,无论是因本协议、违反合约、侵权行为(包括过失的侵权行为)或其他而引起的或与之有关,亦无论该等损害是否可预见以及本公司是否已被告知该等损害发生的可能性,均不向用户或任何第三方负责。 在任何情形下,本公司或其股东、董事、高管、员工、关联方或代理人、或其各自的任何服务提供商均不对因用户访问、使用或安装本软件而引起的或与之有任何关联的任何索赔、损害或其他责任负责,无论是在合同行为、侵权行为或其他行为当中。 某些司法管辖区禁止排除或限制偶发的或结果的损害赔偿,因此本责任限制可能不适用于用户。如果用户对本软件不满,用户的唯一且排他的救济是由用户停止对本软件的使用。 -## 8. Indemnification +## 8. 赔偿 -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +就任何人因(a)本协议;(b)用户对本软件的访问、使用或安装,包括用户传输或接收的任何数据或工作;及(c)任何人对本软件的任何不可接受的使用(包括但不限于作为第4条中规定的不可接受的内容而被禁止的由用户或任何人制作、传输或重新发布的任何声明、数据或内容)或与之相关而主张的任何诉讼、诉因、索赔、损害、债务、要求或责任,包括合理费用和律师费用,用户同意向本公司、其股东、董事、高管、员工、关联方和代理人(下称“受偿方”)赔偿、使其免受损害并维护其权益。本赔偿包括对本公司及所有受偿方因本公司或任何受偿方被主张任何过失(包括任何被主张的重大过失)或被主张的其他不当行为而做出的明示赔偿。 -## 9. Intellectual Property +## 9. 知识产权 -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +本公司保留对本公司的所有品牌、标识和商标的所有权利、所有权和利益,包括但不限于EMURGO Co., Ltd.、EMURGO、Yoroi、Yoroi Cryptocurrency Wallet、Yoroi Wallet、Yoroi App以及前述品牌、标识和商标的用语变化形式。 -## 10. Warnings +## 10. 警告 -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +用户认可,本公司不负责转让、保护或维护私有密钥和/或用户的ADA或任何其他加密数字货币。如果用户和/或任何联署当局丢失、错误处理或使关联的私有密钥失窃,或用户的联署人拒绝提供必要的授权,用户认可,用户可能无法恢复用户的ADA或任何其他数字加密货币,且本公司不为该等损失负责。 -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +用户认可并同意,通过本软件和/或本公司促成的ADA或任何其他加密数字货币交易可能会被延迟,且本公司不为任何相关损失负责。 用户认可并同意,本公司不对包含在任何第三方资料中的、或在可访问或链接至本软件和/或本公司的任何第三方网站上的信息、内容或服务的任何方面负责。 -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. +通过使用本软件,用户认可并同意:(i)本公司不负责底层协议的运行,且本公司不对其功能性、安全性或可用性做任何担保;且(ii)底层协议受制于运行规则中的突发主链变化(下称“分叉”),且该等分叉可能对用户存储在本软件上的ADA或任何其他加密数字货币的价值和/或功能有重大影响。如发生分叉,用户同意,本公司可以(在通知或不通知用户的情况下)暂时中止本软件的运行,且本公司可以自行(a)配置或重新配置其系统或(b)决定完全不支援(或停止支援)分叉协议,但前提是用户有机会从本软件中取回资金。用户认可并同意,本公司绝不就有关分叉协议的不受支援的分支承担任何责任。 -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +## 11. 其他事项 -## 11. Miscellaneous +**a.修订。** 本公司有权随时不经通知地增加或修改本协议的条款,仅通过向用户提供给本公司的任何地址发送借由任何媒介的电子信息,向用户交付该等修订后的条款。在该等修订后条款被交付给用户后,用户对本软件的访问或使用视为构成对该等修订后条款的接受。 -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**b.可分性。** 如果本协议的任何条款或条款部分为或变为无效、违法或不可执行,则应视为在使其有效、合法且可执行所必要的最低限度内被修改。如果该等修改是不可能的,则相关条款或条款部分应视为被删除。本条规定的任何对条款或条款部分的修改或删除均不影响本协议的剩余部分的有效性和可执行性。 -**b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. +**c.完整协议——信赖免责。** 本协议构成双方当事人之间就本协议内容的完整协议,并取代双方当事人之间的所有在先协议或理解。用户明确声明与保证,其不会依赖本协议中明示规定的内容以外的任何表述、理解、声明、预期或协议。 -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**d.本协议受限于有约束力的仲裁。** 用户同意,因本协议或用户或其他任何人对本软件的访问、使用或安装而引起的或与之有任何关联的针对任何人的任何争议或索赔,均应受限于由按照国际商会仲裁规则委派的一名或多名仲裁员根据该等仲裁规则做出的有约束力的仲裁。仲裁地应为日本。仲裁语言为英语。 -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. +**e.语言。** 本协议的任何翻译均仅为本地参考之用,如果英文版本与非英文版本之间发生任何不一致,在任何情况下均应以本协议的英文版本为准并有约束力。 -**e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. +## 12. 委托和质押 -## 12. Delegation and Staking +12.1 **奖励。** 用户可以从委托中获得的奖励金额取决于多种因素,包括但不限于用户参与度,权益池利润率和接受委托的ADA数量。基于上述因素,委托可能不会为用户产生任何奖励。奖励从在Cardano区块链授权后第三个时代开始时开始计算。 -12.1 **Rewards.** The amount of Rewards a User may earn from delegation depends on various factors including, but not limited to, user participation, stakepool profit margins and the volume of ada being delegated. It is possible that delegation generates no Reward for a User due to the above-mentioned factors. Rewards are earned as of the start of the 3rd epoch on the Cardano blockchain. +12.2 **委托。** 用户可以将其权益委托给公司的某一权益池或第三方权益池。用户拥有的唯一的权力是能够把握要委托给权益池的数量,并且可以随时增加或减少其参与程度。公司分享的有关权益池的任何信息,包括绩效指标和奖励,仅用于指导目的,可能不准确。如果其ADA存在于最新的Daedalus或Yoroi钱包中,用户就能将其权益委托给一个权益池。用户由于委托其权益并不会产生额外的权利。 -12.2 **Delegation.** Users may delegate their stake to one of the various stake pools of the Company or to a third party stake pool. User will have the sole right to determine the volume to be delegated to a stake pool and may increase or decrease its level of participation at any time. Any information Company shares regarding stakepools, including performance metrics and Rewards, will be for indicative purposes only and may not be accurate. Users may only delegate their stake to a stake pool if their ada is in an updated Daedalus or an updated Yoroi wallet at the time of the setup process. User does not acquire any automatic right to Rewards as a result of delegating its stake. +12.3 **公司的权益池。** 本公司将运营各种权益池,这些权益池将在Yoroi或Seiza中显示。可靠地运营此类权益池的成本以及对网络和服务器要求,应由公司自行决定。公司将通过用户的Yoroi钱包告知用户奖励的比例。奖励将在每个时代结束时产生,并自动出现在用户的Yoroi钱包中。 -12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. - -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 **提取奖励。**如果有任何可能的交易税款,应由用户承担。特别是提取奖励时有可能会产生税款。 From af3c733c4a6f30d8f333605b6e640aedfe1e1209 Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:28 +0100 Subject: [PATCH 314/464] New translations en-us.md (zh-Hant) --- .../i18n/locales/terms-of-use/ada/zh-Hant.md | 102 ++++++------------ 1 file changed, 35 insertions(+), 67 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/zh-Hant.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/zh-Hant.md index 62a96a1ef3..07b1249290 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/zh-Hant.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/zh-Hant.md @@ -1,102 +1,70 @@ -# Terms of Service Agreement +# 服務條款 -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +本服務條款(下稱「本條款」)由EMURGO Co., Ltd.(下稱「本公司」)與完成下載、使用或操作「Yoroi數位加密貨幣錢包」此一應用軟體以及本公司與該軟體一併提供之資訊處理服務、應用、通信服務或其他內容(下稱「本軟體」)之任何個人或實體(下稱「用戶」)所訂立。本公司與用戶合稱為「雙方當事人」。 透過點擊「我接受」按鈕或訪問、使用或安裝本軟體的任何部分,用戶明確同意且承諾受本條款中的所有規定合法約束。若用戶不同意接受本條款之所有規定,用戶將不被授權訪問、使用或安裝本軟體的任何部分。 -## 1. Rights and Obligations +## 1. 權利與義務 -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. 說明。** 本軟體作為一個免費、開源之數位加密貨幣錢包運行。本軟體不構成本公司或其他任何第三人借此為用戶的ADA或任何其他加密貨幣擔任金融仲介機構或保管人的帳戶。 本軟體已進行過beta測試,並將根據來自開發者社群、開源貢獻者和beta測試人員的回饋持續改進,但本公司無法保證本軟體中不存在程序錯誤。用戶承認,用戶對於本軟體之使用係由其自行決定,由其自擔風險,且遵守所有適用法律。用戶應自行負責妥善保管其密碼、PIN、私密金鑰、找回密碼、屏蔽自動密碼、備份還元助記碼、ADA密碼及用戶用於訪問本軟體或任何資訊、ADA、憑證或其他加密貨幣單位的任何其他代碼。 若用戶喪失對其數位加密貨幣錢包之存取權限或私密金鑰,且未單獨保存一份用戶的數位加密貨幣錢包或備份還元助記碼及相應密碼的備份,則用戶承認並同意,任何ADA或用戶與該數位加密貨幣錢包關聯之任何其他數位加密貨幣將變為無法訪問。所有交易請求均不可撤銷。若用戶喪失或遺忘其私密金鑰或密碼,本公司及本公司之股東、董事、管理人員、員工、關係人及代理人均不能保證交易確認或恢復用戶的私密金鑰或密碼。 -**b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. +**b. 可訪問性。** 用戶同意,本軟體可能出於任何原因而不定時地無法訪問或無法操作,原因包括但不限於:(i)設備故障;(ii)定期性維護程序或本公司不定時進行的維修;或(iii)超出本公司控制範圍或本公司無法合理預見之原因。 -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. 設備。** 用戶應自行負責提供、維護並確保用戶為使用本軟體所需之與本軟體的相容性、所有硬體、軟體、電子的及其他物理上的要求,包括但不限於電信與網路連線之連接及連結、網頁瀏覽器或其他訪問及使用本軟體所需之設備、程式與服務。 -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. 安全性。** 用戶應自行就其透過本軟體接收、傳輸或儲存於本軟體內之所有資訊及內容的安全性、機密性與完整性負責。用戶應自行就任何有經授權或未經授權之任何人進入用戶之任何帳戶一事負責。用戶同意對用戶之安全設備、資訊、金鑰和密碼的機密性,負擔全部責任。 -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. 隱私權。** 於合理可行之情況下,本公司將會試圖尊重用戶的隱私權。未經用戶事先同意,本公司將不會監控、編輯或揭露任何有關用戶或用戶帳戶的任何個人資料,包括其內容或用戶對於本軟體的使用。但若有本公司基於誠信原則認為為了以下任一目的,採取該等行為係屬必要者,不在此限:(i)遵守法律程序或任何政府機關之其他合法要求;(ii)保護及捍衛本公司之權利或財產;(iii)執行本條款;(iv)保護除用戶外之本軟體的其他使用者或其他任何人的利益;或(v)在法律許可之範圍內,操作或進行對本公司的服務或設備(包括本軟體)之維護和修理。用戶對於網路相關隱私整體並無期待。用戶之IP位址,透過用戶自本軟體中發送之各訊息或其他資訊,被傳輸並記錄。 -## 2. Taxes and Fees +## 2. 稅金與費用 -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +無論是任何政府機關現在或以後課徵之所有貨幣兌換費用、第三人費用、銷售稅、使用稅、增值稅、個人財產稅或其他稅金、任何形式之稅金課徵,包括與之相關的利息及罰金(鍰),以及由於用戶訪問、使用或安裝本軟體而對用戶造成之費用,均由用戶獨自負擔。 -## 3. User Representations +## 3. 用戶聲明 -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +用戶向本公司聲明與保證:(a)如果用戶為自然人,用戶年齡已超過十八(18)歲;(b)用戶具有訂立並履行用戶在本條款內之義務的權能及授權;(c)用戶向本公司提供的所有資訊均真實、正確且完整;(d)用戶將遵守有關用戶訪問、使用或安裝本軟體之任何可適用的司法管轄區的所有法律法規;(e)用戶應遵守本條款內的所有規定及條件,包括但不限於第4條中列明之規定;且(f)用戶已提供並將提供訪問、使用或安裝本軟體所需之正確且完整的資訊。 -## 4. Prohibited Uses +## 4. 禁止之使用 -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +用戶應自行對於在用戶的帳戶、安全資訊、金鑰或密碼下發生的所有行為及疏漏負責,且用戶同意不會進行本軟體不允許之使用,包括但不限於將本軟體用以:(a)散播、儲存或傳輸未經請求之訊息、連鎖信或未經請求之商業電子郵件;(b)散播或傳輸對於理性自然人而言可能為侮辱、淫穢、色情、誹謗、騷擾、嚴重冒犯、粗俗、威脅或惡意的資料;(c)散播、儲存或傳輸實際或潛在地侵害任何人的著作權、商標權、專利權、營業秘密或其他智慧財產權的檔案、圖形、軟體或其他資料;(d)關於任何通訊的身份或來源,創設虛假身份或企圖以其他方式誤導任何人;(e)違反任何可適用的司法管轄區的出口或進口法律、法規或限制、或是並未取得所有必須的核准、許可或豁免的情況下出口、再出口或允許下載任何資訊或內容;(f)妨礙、擾亂或企圖未經授權訪問本軟體或任何其他電腦網路上的其他帳戶;或(g)散播、儲存或傳輸病毒、特洛伊木馬程式或任何其他惡意代碼或程式。 -## 5. Termination +## 5. 終止 -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +本條款自用戶依本條款之規定接受時生效,並將在用戶實行本軟體的任何訪問、使用或安裝期間,繼續完全有效。本公司保留依單獨裁量隨時以任何理由且無需通知之以下權利:(a)移除或禁止訪問本軟體之全部或任一部分;(b)暫停用戶對本軟體之全部或任一部分的訪問或使用;以及(c)終止本條款。 -## 6. Disclaimer of Warranties +## 6. 免責聲明 -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +本軟體按現狀提供,不存在任何種類的明示或默示之保證。本軟體的使用須由用戶承擔全部風險。本公司不保證本軟體不會受到干擾或不會發生錯誤,也不對經由使用本軟體可能獲得的任何結果做任何保證。本公司不做其他明示或默示之保證。本公司明確否認對於可銷性、針對特定用途的適合性、權利或利益、或非侵權情形做出任何保證。 -## 7. Limitation of Liability +## 7. 責任限制 -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +在任何情形下,本公司或其股東、董事、管理人員、員工、關係人或代理人、或其各自的任何服務提供者,對於本軟體的任何使用、中斷、延遲或無法使用,損失的收益或利潤,服務的延遲、中斷或喪失,業務或商譽,資料之遺失或毀損,因系統或系統服務故障而造成的損失,故障或停機,未能正確移轉、讀取或傳輸資訊,未能更新或提供正確資訊,系統不相容、或提供不正確的相容性資訊、或系統安全性之違反,或任何結果的、偶發的、間接的、懲戒性、特殊的或懲罰性損害,無論是因本條款、違反契約、侵權行為(包括過失之侵權行為)或其他原因而生,或是與之有關者,亦無論該等損害是否可預見以及本公司是否已被告知該等損害發生之可能性,均不向用戶或任何第三人負責。 在任何情形下,本公司或其股東、董事、管理人員、員工、關係人或代理人、或其各自的任何服務提供者,均不對因用戶訪問、使用或安裝本軟體而引起的或與之有任何關聯的任何請求、損害或其他責任負責,無論係依契約、侵權行為或其他主張而提起之訴訟。 某些司法管轄區禁止排除或限制偶發的或結果的損害賠償,因此本責任限制可能不適用於用戶。若用戶對於本軟體並不滿意,用戶之唯一且排他之救濟是由用戶逕自停止使用本軟體。 -## 8. Indemnification +## 8. 賠償 -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +用戶同意賠償、維護並使本公司、其股東、董事、管理人員、員工、關係人及代理人(下稱「受償方」)免受因(a)本條款;(b)用戶對本軟體之訪問、使用或安裝,包括用戶傳輸或接收的任何資料或工作;及(c)任何人對本軟體進行任何不允許之使用(包括但不限於作為第4條所規定之不允許事項,而被禁止由用戶或任何人製作、傳輸或重新發佈之任何聲明、資料或內容)所導致或與之相關的任何人主張的一切訴訟、訴因、請求、損害、債務、要求、或責任,包括合理費用及律師費用。本賠償包括對於本公司及所有受償方因本公司或任何受償方受主張之任何過失(包括任何主張之重大過失)或受主張之其他不當行為而做出的明示賠償。 -## 9. Intellectual Property +## 9. 智慧財產權 -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +本公司保留對本公司的所有品牌、標識與商標之所有權利、所有權及利益,包括但不限於EMURGO Co., Ltd.、EMURGO、Yoroi、Yoroi Cryptocurrency Wallet、Yoroi Wallet、Yoroi App以及前述品牌、標識與商標之用語表達之變化。 -## 10. Warnings +## 10. 警告 -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +用戶承認,本公司不負責轉讓、保護或維護私密金鑰及/或用戶之ADA或任何其他數位加密貨幣。若用戶及/或任何聯署機構喪失、錯誤地處理或使相關之私密金鑰失竊,或用戶的聯署人拒絕提供必要之授權,用戶承認用戶可能無法恢復用戶的ADA或任何其他數位加密貨幣,且本公司不為該等損失負責。 -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +用戶承認並同意,通過本軟體及/或本公司促成的ADA或任何其他數位加密貨幣交易可能會有延遲,且本公司不為任何相關損失負責。 用戶承認並同意,本公司不對包含在任何第三人資料中的、或在可訪問或連結至本軟體及/或本公司之任何第三人網站上的資訊、內容或服務的任何方面負責。 -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. +透過使用本軟體,用戶承認並同意:(i)本公司不負責底層協定之運作,且本公司不對其功能性、安全性或可利用性做任何擔保;且(ii)底層協定受制於運作規則中的突發主鏈變化(下稱「分叉」),且該等分叉可能對用戶儲存在本軟體上的ADA或任何其他數位加密貨幣之價值及/或功能有重大影響。如發生分叉,用戶同意本公司得(在通知或不通知用戶之情況下)暫時中止本軟體的運行,且本公司得自行(a)配置或重新配置其系統或(b)決定完全不支援(或停止支援)分叉協定,但前提是用戶有機會從本軟體中取回資金。用戶承認並同意,關於分叉協定中不受支援的分叉,本公司絕不承擔任何責任。 -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +## 11. 其他事項 -## 11. Miscellaneous +**a.修訂。** 本公司有權隨時且無需通知地增加或修改本條款之規定,僅透過向用戶提供給本公司的任何地址發送透過任何媒介之電子訊息,向用戶交付該等修訂後之規定。在該等修訂後之規定被交付給用戶後,用戶對於本軟體之訪問或使用視為構成對於該等修訂後規定之承認。 -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**b.可分性。** 若本條款之任何規定或部分規定係無效或變為無效、違法或無法執行,則應視為在使其有效、合法且可執行所必要之最低限度內被修改。若該修改是不可能的,則相關規定或部分規定應視為被刪除。依本條所為之,任何對於規定或部分規定的修改或刪除,均不影響本條款其餘部分之有效性及可執行性。 -**b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. +**c.完全合意——信賴免責。** 本條款構成雙方當事人之間就本條款內容之完全合意,並取代雙方當事人之間所有先前之協議或理解。用戶明確聲明並保證,其不會信賴本條款中明示規定內容以外之任何表述、理解、聲明、預期或協議。 -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**d.本條款受限於具拘束力的仲裁。** 用戶同意,因本條款或用戶或其他任何人對本軟體之訪問、使用或安裝所引起或與之有任何關聯的針對任何人的任何爭議或請求,均應受限於由按照國際商會仲裁規則委派的一名或多名仲裁人根據該仲裁規則做出之具拘束力的仲裁。仲裁地應為日本。仲裁語言為英文。 -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. - -**e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. +**e.語言。** 本條款之任何翻譯均僅為當地參考之用,若英文版本與非英文版本之間有任何不一致,在任何情況下均應以本條款之英文版本為準並有拘束力。 ## 12. Delegation and Staking @@ -106,4 +74,4 @@ If you have any questions or concerns regarding the accuracy or reliability of t 12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. From b12841296438be43008ce2c3523e3985128d1320 Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:29 +0100 Subject: [PATCH 315/464] New translations en-us.md (Vietnamese) --- .../i18n/locales/terms-of-use/ada/vi-VN.md | 110 +++++++----------- 1 file changed, 39 insertions(+), 71 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/vi-VN.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/vi-VN.md index 62a96a1ef3..415c173768 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/vi-VN.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/vi-VN.md @@ -1,109 +1,77 @@ -# Terms of Service Agreement +# Thỏa thuận điều khoản dịch vụ -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +THỎA THUẬN ĐIỀU KHOẢN DỊCH VỤ NÀY ("Thỏa thuận") được lập giữa EMURGO Co., Ltd. ("Công ty") và bất kỳ cá nhân hoặc tổ chức nào ("Người dùng") hoàn thành quy trình tải xuống, sử dụng hoặc vận hành phần mềm được gọi là ứng dụng Ví tiền mã hóa Yoroi và dịch vụ xử lý dữ liệu, ứng dụng, dịch vụ liên lạc hoặc nội dung khác hoặc do Công ty ("Phần mềm") cung cấp hoặc cung cấp phần mềm. Công ty và Người dùng được gọi chung là "Các bên." BẰNG CÁCH NHẤP VÀO NÚT CHẤP NHẬN HOẶC TRUY CẬP, SỬ DỤNG HOẶC CÀI ĐẶT BẤT KỲ PHẦN NÀO CỦA PHẦN MỀM, NGƯỜI DÙNG ĐỒNG Ý RÕ RÀNG VÀ ĐỒNG Ý CHỊU RÀNG BUỘC PHÁP LÝ BỞI TẤT CẢ CÁC ĐIỀU KHOẢN CỦA THỎA THUẬN NÀY. NẾU NGƯỜI DÙNG KHÔNG ĐỒNG Ý VỚI TẤT CẢ CÁC ĐIỀU KHOẢN CỦA THỎA THUẬN NÀY, NGƯỜI DÙNG SẼ KHÔNG ĐƯỢC CẤP PHÉP TRUY CẬP, SỬ DỤNG HOẶC CÀI ĐẶT BẤT KỲ PHẦN NÀO CỦA PHẦN MỀM. -## 1. Rights and Obligations +## 1. Quyền và Nghĩa vụ -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. Mô tả.** Phần mềm hoạt động như một ví tiền mã hóa mã nguồn mở, miễn phí. Phần mềm không tạo thành tài khoản mà Công ty hoặc bất kỳ bên thứ ba nào khác đóng vai trò là trung gian tài chính hoặc người giám sát ADA của Người dùng hoặc bất kỳ loại tiền mã hóa nào khác. Mặc dù Phần mềm đã trải qua thử nghiệm beta và tiếp tục được cải thiện nhờ phản hồi từ cộng đồng nhà phát triển, những người đóng góp nguồn mở và người thử nghiệm beta, Công ty không thể đảm bảo rằng sẽ không có lỗi trong Phần mềm. Người dùng thừa nhận rằng việc sử dụng Phần mềm của Người dùng là rủi ro, quyết định của Người dùng và tuân thủ tất cả các luật hiện hành. Người dùng chịu trách nhiệm bảo quản an toàn mật khẩu, mã PIN, khóa cá nhân, khóa phần thưởng, khóa bán hàng tự động được bảo vệ, cụm mật khẩu ghi nhớ khôi phục dự phòng, mật mã ADA và bất kỳ mã nào khác mà Người dùng sử dụng để truy cập Phần mềm hoặc bất kỳ thông tin nào, ADA, chứng từ hoặc đơn vị tiền điện tử khác. NẾU NGƯỜI DÙNG MẤT QUYỀN TRUY CẬP VÀO VÍ TIỀN MÃ HÓA HOẶC KHÓA RIÊNG TƯ CỦA NGƯỜI DÙNG VÀ KHÔNG LƯU TRỮ RIÊNG BẢN SAO DỰ PHÒNG VÍ TIỀN MÃ HÓA CỦA NGƯỜI DÙNG HOẶC BẢN DỰ PHÒNG KHÔI PHỤC (CỤM TỪ MNEMONIC VÀ (CÁC) MẬT KHẨU tương ứng), NGƯỜI DÙNG XÁC NHẬN VÀ ĐỒNG Ý RẰNG BẤT KỲ ADA HOẶC BẤT KỲ NGƯỜI DÙNG TIỀN MÃ HÓA NÀO KHÁC ĐÃ LIÊN KẾT VỚI VÍ TIỀN MÃ HÓA ĐÓ SẼ KHÔNG THỂ TRUY CẬP ĐƯỢC. Tất cả các yêu cầu giao dịch là không thể đảo ngược. Công ty và các cổ đông, giám đốc, cán bộ, nhân viên, chi nhánh và đại lý của Công ty không thể đảm bảo xác nhận giao dịch hoặc lấy lại khóa cá nhân hoặc mật khẩu của Người dùng nếu Người dùng làm mất hoặc quên chúng. -**b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. +**b. Khả năng truy cập.** Người dùng đồng ý rằng đôi khi Phần mềm có thể không truy cập được hoặc không hoạt động vì bất kỳ lý do gì, bao gồm: (i) trục trặc thiết bị; (ii) các thủ tục bảo trì định kỳ hoặc sửa chữa mà Công ty có thể thực hiện tùy từng thời điểm; hoặc (iii) các nguyên nhân nằm ngoài tầm kiểm soát của Công ty hoặc Công ty không thể dự đoán một cách hợp lý. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. Trang thiết bị.** Người dùng phải tự chịu trách nhiệm về việc cung cấp, duy trì và đảm bảo tính tương thích với Phần mềm, tất cả phần cứng, phần mềm, điện và các thứ liên quan khác yêu cầu đối với việc sử dụng Phần mềm của Người dùng, bao gồm nhưng không giới hạn, kết nối và truy cập internet, trình duyệt web hoặc các trang thiết bị, chương trình và dịch vụ khác cần thiết để truy cập và sử dụng Phần mềm. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. Bảo mật.** Người dùng phải tự chịu trách nhiệm về tính bảo mật, và tính toàn vẹn của tất cả thông tin và nội dung mà Người dùng nhận, truyền qua hoặc lưu trữ trên Phần mềm. Người dùng sẽ tự chịu trách nhiệm về mọi truy cập được phép hoặc trái phép vào bất kỳ tài khoản nào của Người dùng bởi bất kỳ người nào. Người dùng đồng ý chịu mọi trách nhiệm về tính bảo mật của thiết bị bảo mật, thông tin, khóa và mật khẩu của Người dùng. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. Quyền riêng tư.** Khi có thể thực hiện được một cách hợp lý, Công ty sẽ cố gắng tôn trọng quyền riêng tư của Người dùng. Công ty sẽ không giám sát, chỉnh sửa hoặc tiết lộ bất kỳ thông tin cá nhân nào về Người dùng hoặc tài khoản của Người dùng, bao gồm cả nội dung hoặc việc Người dùng sử dụng Phần mềm mà không có sự đồng ý trước của Người dùng trừ khi Công ty tin vào thiện chí rằng hành động đó là cần thiết để: (i) tuân thủ quy trình pháp lý hoặc các yêu cầu pháp lý khác của bất kỳ cơ quan chính phủ nào; (ii) bảo vệ quyền hoặc tài sản của Công ty; (iii) Thỏa thuận này thi hành; (iv) bảo vệ lợi ích của người dùng Phần mềm hoặc bất kỳ người nào khác; hoặc (v) vận hành hoặc tiến hành bảo trì và sửa chữa các dịch vụ hoặc thiết bị của Công ty, bao gồm cả Phần mềm theo sự cho phép của pháp luật. Người dùng không có kỳ vọng về quyền riêng tư đối với Internet nói chung. Địa chỉ IP của Người dùng sử dụng để truyền và ghi lại với mỗi tin nhắn hoặc thông tin khác mà Người dùng gửi từ Phần mềm. -## 2. Taxes and Fees +## 2. Thuế và phí -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +Tất cả các khoản phí chuyển đổi tiền tệ, phí bên thứ ba, bán hàng, sử dụng, giá trị gia tăng, tài sản cá nhân hoặc thuế khác, thuế hoặc phí dưới bất kỳ hình thức nào, bao gồm tiền lãi và tiền phạt, cho dù được áp dụng ngay bây giờ hoặc sau này bởi bất kỳ tổ chức chính phủ nào và các khoản phí phát sinh bởi Người dùng vì lý do truy cập, sử dụng hoặc cài đặt Phần mềm của Người dùng sẽ hoàn toàn do Người dùng chịu trách nhiệm. -## 3. User Representations +## 3. Đại diện người dùng -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +Người dùng tuyên bố và bảo đảm với Công ty rằng: (a) nếu Người dùng là một cá nhân, thì Người dùng trên mười tám (18) tuổi; (b) Người dùng có quyền và thẩm quyền để tham gia và thực hiện các nghĩa vụ của Người dùng theo Thỏa thuận này; (c) tất cả thông tin do Người dùng cung cấp cho Công ty là trung thực, chính xác và đầy đủ; (d) Người dùng sẽ tuân thủ tất cả các luật và quy định của bất kỳ khu vực, quốc gia hiện hành nào liên quan đến việc truy cập, sử dụng hoặc cài đặt Phần mềm của Người dùng; (e) Người dùng phải tuân thủ tất cả các điều khoản và điều kiện của Thỏa thuận này, bao gồm, nhưng không giới hạn, các điều khoản quy định tại Mục 4; (f) Người dùng đã cung cấp và sẽ cung cấp thông tin chính xác và đầy đủ theo yêu cầu để truy cập, sử dụng hoặc cài đặt Phần mềm. -## 4. Prohibited Uses +## 4. Các điều cấm sử dụng -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +Người dùng tự chịu trách nhiệm về bất kỳ hay tất cả các hành vi trong tài khoản, thông tin bảo mật, khóa hoặc mật khẩu của Người dùng và Người dùng đồng ý không tham gia vào việc sử dụng Phần mềm không được chấp nhận. Không sử dụng Phần mềm Phần mềm để: (a) phổ biến, lưu trữ hoặc truyền các tin nhắn không mong muốn, thư hoặc email thương mại không mong muốn; (b) phổ biến hoặc truyền tài liệu mà đối với một người bình thường có thể là lạm dụng, tục tĩu, khiêu dâm, phỉ báng, quấy rối, xúc phạm nghiêm trọng, thô tục, đe dọa hoặc ác ý; (c) phổ biến, lưu trữ hoặc truyền các tệp, đồ họa, phần mềm hoặc tài liệu khác thực sự hoặc có khả năng vi phạm bản quyền, thương hiệu, bằng sáng chế, bí mật thương mại hoặc quyền sở hữu trí tuệ khác của bất kỳ người nào; (d) tạo danh tính giả hoặc cố gắng đánh lừa bất kỳ người nào về danh tính hoặc nguồn gốc của bất kỳ thông tin liên lạc nào; (e)nhập vào, xuất ra hoặc tải xuống bất kỳ tin nhắn hoặc nội dung nào vi phạm bất kỳ luật, quy định hoặc hạn chế nào ở bất kỳ khu vực, lãnh thổ nào hoặc không có tất cả các phê duyệt, giấy phép hoặc miễn trừ cần thiết; (f) can thiệp, làm gián đoạn hoặc cố gắng giành quyền truy cập trái phép vào các tài khoản khác trên Phần mềm hoặc bất kỳ mạng máy tính nào khác; hoặc (g) phổ biến, lưu trữ hoặc truyền vi-rút, ngựa thành Troia hoặc bất kỳ mã hoặc chương trình độc hại nào khác. -## 5. Termination +## 5. Chấm dứt -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +Thỏa thuận này có hiệu lực khi Người dùng chấp nhận như được nêu ở đây và sẽ tiếp tục có hiệu lực đầy đủ miễn là Người dùng tham gia vào bất kỳ hoạt động truy cập, sử dụng hoặc cài đặt Phần mềm nào. Công ty bảo lưu quyền, theo quyết định riêng của mình và không cần thông báo, vào bất kỳ lúc nào và vì bất kỳ lý do gì, để: (a) xóa hoặc vô hiệu hóa quyền truy cập vào tất cả hoặc bất kỳ phần nào của Phần mềm; (b) đình chỉ quyền truy cập hoặc sử dụng của Người dùng đối với tất cả hoặc bất kỳ phần nào của Phần mềm; và (c) chấm dứt Thỏa thuận này. -## 6. Disclaimer of Warranties +## 6. Từ chối trách nhiệm -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +PHẦN MỀM ĐƯỢC CUNG CẤP "AS IS", MÀ KHÔNG CÓ BẤT KỲ HÌNH THỨC BẢO HÀNH NÀO, RÕ RÀNG HAY NGỤ Ý. VIỆC SỬ DỤNG PHẦN MỀM LÀ RỦI RO DUY NHẤT CỦA NGƯỜI DÙNG. CÔNG TY KHÔNG ĐẢM BẢO RẰNG PHẦN MỀM SẼ KHÔNG BỊ GIÁN ĐOẠN HOẶC KHÔNG CÓ LỖI, CÔNG TY CŨNG KHÔNG ĐẢM BẢO ĐỐI VỚI BẤT KỲ KẾT QUẢ NÀO CÓ THỂ ĐẠT ĐƯỢC KHI SỬ DỤNG PHẦN MỀM. CÔNG TY KHÔNG ĐƯA RA BẢO ĐẢM KHÁC, RÕ RÀNG HAY NGỤ Ý. CÔNG TY TUYỆT ĐỐI TUYỆT ĐỐI BẤT KỲ SỰ BẢO ĐẢM NÀO VỀ KHẢ NĂNG BÁN ĐƯỢC, BẢO ĐẢM SỰ PHÙ HỢP CHO MỘT MỤC ĐÍCH CỤ THỂ, BẢO ĐẢM VỀ QUYỀN SỞ HỮU HOẶC LÃI SUẤT HOẶC BẢO ĐẢM VỀ VIỆC KHÔNG VI PHẠM. -## 7. Limitation of Liability +## 7. Giới hạn trách nhiệm pháp lý -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +TRONG MỌI TRƯỜNG HỢP CÔNG TY HOẶC CỔ ĐÔNG, GIÁM ĐỐC, CÁN BỘ, NHÂN VIÊN, CÔNG TY LIÊN KẾT HOẶC ĐẠI LÝ, HOẶC BẤT KỲ CÔNG TY HOẶC CÁC NHÀ CUNG CẤP DỊCH VỤ CỦA HỌ, KHÔNG CHỊU TRÁCH NHIỆM PHÁP LÝ VỚI NGƯỜI DÙNG HOẶC BÊN THỨ BA VỀ BẤT KỲ VIỆC SỬ DỤNG, GIÁN ĐOẠN, CHẬM TRỄ HOẶC KHÔNG THỂ SỬ DỤNG CÔNG TY PHẦN MỀM, DOANH THU HOẶC LỢI NHUẬN MẤT, SỰ TRỄ CHẬM, GIÁN ĐOẠN HOẶC MẤT DỊCH VỤ, DOANH NGHIỆP, MẤT HOẶC LỖI DỮ LIỆU, MẤT DO HỆ THỐNG HOẶC LỖI DỊCH VỤ HỆ THỐNG, SỰ CỐ HOẶC TẮT, KHÔNG CHUYỂN, ĐỌC HOẶC TRUYỀN THÔNG TIN CHÍNH XÁC, KHÔNG THỂ TẮT ĐẾN CẬP NHẬT HOẶC CUNG CẤP THÔNG TIN ĐÚNG, HỆ THỐNG KHÔNG TƯƠNG THÍCH HOẶC CUNG CẤP THÔNG TIN TƯƠNG THÍCH KHÔNG CHÍNH XÁC HOẶC VI PHẠM BẢO MẬT HỆ THỐNG, HOẶC CHO BẤT KỲ THIỆT HẠI NÀO, NGẪU NHIÊN, GIÁN TIẾP, LÀM MẪU, ĐẶC BIỆT HOẶC TRÁCH NHIỆM, DÙ PHÁT SINH NGOÀI HOẶC LIÊN QUAN ĐẾN THỎA THUẬN NÀY, VI PHẠM HỢP ĐỒNG, TORT (BAO GỒM SƠ SUẤT) HAY CÁCH NÀO KHÁC, BẤT CỨ THIỆT HẠI ĐÓ CÓ CÓ THỂ DỰ ĐOÁN ĐƯỢC KHÔNG VÀ DÙ CHÚNG TÔI CÓ ĐƯỢC TƯ VẤN VỀ KHẢ NĂNG CỦA NHỮNG THIỆT HẠI ĐÓ KHÔNG. TRONG MỌI TRƯỜNG HỢP CÔNG TY HOẶC CỔ ĐÔNG, GIÁM ĐỐC, CÁN BỘ, NHÂN VIÊN, CÔNG TY LIÊN KẾT HOẶC ĐẠI LÝ, HOẶC BẤT KỲ CÔNG TY HOẶC NHÀ CUNG CẤP DỊCH VỤ CỦA CÔNG TY, PHẢI CHỊU TRÁCH NHIỆM PHÁP LÝ VỀ BẤT KỲ KHIẾU NẠI, THIỆT HẠI HOẶC TRÁCH NHIỆM PHÁP LÝ KHÁC NÀO, DÙ LÀ TRONG MỘT HÀNH ĐỘNG HỢP ĐỒNG, NGOẠI TỆ HOẶC NGOÀI RA, PHÁT SINH TỪ HOẶC BẤT KỲ CÁCH NÀO LIÊN QUAN ĐẾN VIỆC TRUY CẬP, SỬ DỤNG HOẶC CÀI ĐẶT PHẦN MỀM CỦA NGƯỜI DÙNG. MỘT SỐ KHU VỰC PHÁP LUẬT CẤM LOẠI TRỪ HOẶC GIỚI HẠN CÁC THIỆT HẠI NGẪU NHIÊN HOẶC DO HẬU QUẢ, DO VẬY, TRÁCH NHIỆM PHÁP LÝ BẮT BUỘC NÀY CÓ THỂ KHÔNG ÁP DỤNG CHO NGƯỜI DÙNG. NẾU NGƯỜI DÙNG KHÔNG HÀI LÒNG VỚI PHẦN MỀM, BỆNH VIỆN DUY NHẤT VÀ ĐỘC QUYỀN CỦA NGƯỜI DÙNG LÀ NGƯỜI DÙNG NGỪNG SỬ DỤNG PHẦN MỀM. -## 8. Indemnification +## 8. Bồi thường -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +Người dùng đồng ý bồi thường, giữ và bảo vệ Công ty, các cổ đông, giám đốc, cán bộ, nhân viên, chi nhánh và đại lý ("Bên được bồi thường") khỏi và chống lại mọi hành động, nguyên nhân, khiếu nại, thiệt hại, nợ, yêu cầu hoặc trách nhiệm pháp lý, bao gồm chi phí hợp lý và phí luật sư, được khẳng định bởi bất kỳ người nào, phát sinh từ hoặc liên quan đến: (a) Thỏa thuận này; (b) Quyền truy cập, sử dụng hoặc cài đặt Phần mềm của Người dùng, bao gồm mọi dữ liệu hoặc công việc được Người dùng truyền hoặc nhận; và (c) bất kỳ việc sử dụng Phần mềm nào không được chấp nhận bởi bất kỳ người nào, bao gồm, nhưng không giới hạn, bất kỳ tuyên bố, dữ liệu hoặc nội dung nào do Người dùng hoặc bất kỳ người nào thực hiện, truyền tải hoặc tái xuất bản mà bị cấm là không thể chấp nhận được theo Mục 4. BỒI THƯỜNG BỒI THƯỜNG NÀY BAO GỒM SỰ BỒI THƯỜNG RÕ RÀNG CỦA CÔNG TY VÀ TẤT CẢ CÁC BÊN ĐƯỢC BỒI THƯỜNG CHO BẤT KỲ SƠ CỨU NÀO (BAO GỒM BẤT KỲ SƠ SUẤT TỔNG THỂ BỊ CÁO CHẾ NÀO). HOẶC HÀNH VI SAI TRAI CÁO BUỘC KHÁC CỦA CÔNG TY HOẶC BẤT KỲ BÊN ĐƯỢC BỒI THƯỜNG NÀO. -## 9. Intellectual Property +## 9. Sở hữu trí tuệ -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +Công ty giữ lại tất cả các quyền, quyền sở hữu và lợi ích nội tại và đối với tất cả các nhãn hiệu, logo và nhãn hiệu của Công ty, bao gồm nhưng không giới hạn ở EMURGO Co., Ltd., EMURGO, Yoroi, Ví tiền mã hóa Yoroi, Ví Yoroi, Ứng dụng Yoroi và các biến thể từ ngữ của các thương hiệu, logo và nhãn hiệu nói trên. -## 10. Warnings +## 10. Cảnh báo -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +Người dùng thừa nhận rằng Công ty sẽ không chịu trách nhiệm chuyển giao, bảo vệ hoặc duy trì khóa riêng và/hoặc ADA của Người dùng hoặc bất kỳ loại tiền mã hóa nào khác. Nếu Người dùng và/hoặc bất kỳ cơ quan đồng ký tên nào làm mất, xử lý sai hoặc đánh cắp khóa cá nhân được liên kết hoặc nếu người đồng ký tên của Người dùng từ chối cung cấp quyền hạn cần thiết, Người dùng thừa nhận rằng Người dùng có thể không khôi phục được quyền của Người dùng ADA hoặc bất kỳ loại tiền mã hóa nào khác và Công ty sẽ không chịu trách nhiệm về tổn thất đó. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +Người dùng thừa nhận và đồng ý rằng ADA hoặc bất kỳ giao dịch tiền mã hóa nào khác được hỗ trợ bởi Phần mềm và/hoặc Công ty có thể bị trì hoãn và Công ty sẽ không chịu trách nhiệm cho bất kỳ tổn thất nào liên quan. Người dùng thừa nhận và đồng ý rằng Công ty sẽ không chịu trách nhiệm về bất kỳ khía cạnh nào của thông tin, nội dung hoặc dịch vụ có trong bất kỳ tài liệu của bên thứ ba nào hoặc trên bất kỳ trang web của bên thứ ba nào có thể truy cập hoặc liên kết với Phần mềm và/hoặc Công ty. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. +Bằng cách sử dụng Phần mềm, Người dùng thừa nhận và đồng ý: (i) rằng Công ty không chịu trách nhiệm về hoạt động của các giao thức cơ bản và Công ty không đảm bảo về chức năng, bảo mật hoặc tính khả dụng của chúng; và (ii) rằng các giao thức cơ bản phải chịu những thay đổi đột ngột của chuỗi chính trong quy tắc vận hành ("phân tách") và rằng các phân nhánh như vậy có thể ảnh hưởng nghiêm trọng đến giá trị và/hoặc chức năng của ADA hoặc bất kỳ loại tiền điện tử nào khác mà Người dùng lưu trữ trên Phần mềm. Trong trường hợp phân nhánh, Người dùng đồng ý rằng Công ty có thể tạm thời đình chỉ hoạt động của Phần mềm (có hoặc không có thông báo cho Người dùng) và Công ty có thể, theo quyết định riêng của mình, (a) định cấu hình hoặc định cấu hình lại hệ thống của mình hoặc (b) quyết định tuy nhiên, không hỗ trợ (hoặc ngừng hỗ trợ) hoàn toàn giao thức phân nhánh, với điều kiện là Người dùng sẽ có cơ hội rút tiền từ Phần mềm. Người dùng thừa nhận và đồng ý rằng Công ty hoàn toàn không chịu bất kỳ trách nhiệm nào đối với nhánh không được hỗ trợ của giao thức phân nhánh. -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +## 11. Khác -## 11. Miscellaneous +**a. Sửa đổi.** Công ty sẽ có quyền, bất cứ lúc nào và không cần thông báo, bổ sung hoặc sửa đổi các điều khoản của Thỏa thuận này, chỉ bằng cách gửi các điều khoản sửa đổi đó cho Người dùng bằng tin nhắn điện tử thông qua bất kỳ phương tiện nào tới bất kỳ địa chỉ nào được cung cấp cho Công ty bởi Người dùng. Việc Người dùng truy cập hoặc sử dụng Phần mềm sau ngày các điều khoản sửa đổi đó được gửi tới Người dùng sẽ được coi là cấu thành sự chấp nhận các điều khoản sửa đổi đó. -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**b. Chấm dứt.** Nếu bất kỳ điều khoản hoặc một phần điều khoản nào của Thỏa thuận này, hoặc trở nên không hợp lệ, bất hợp pháp hoặc không thể thi hành, thì nó sẽ được coi là đã sửa đổi ở mức tối thiểu cần thiết để làm cho nó hợp lệ, hợp pháp và có thể thực thi được. Nếu không thể sửa đổi như vậy, điều khoản hoặc điều khoản một phần có liên quan sẽ được coi là bị xóa. Mọi sửa đổi hoặc xóa một điều khoản hoặc một phần điều khoản theo Điều khoản này sẽ không ảnh hưởng đến hiệu lực và khả năng thực thi của phần còn lại của Thỏa thuận này. -**b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. +**c. Toàn bộ Thỏa thuận – Tuyên bố miễn trừ trách nhiệm**. Thỏa thuận này cấu thành toàn bộ thỏa thuận giữa các Bên liên quan đến chủ đề của thỏa thuận này và thay thế tất cả các thỏa thuận hoặc hiểu biết trước đây giữa các Bên. Người dùng tuyên bố và đảm bảo rõ ràng rằng họ không dựa vào bất kỳ tuyên bố, sự hiểu biết, tuyên bố, kỳ vọng hoặc thỏa thuận nào ngoài những điều được quy định rõ ràng trong Thỏa thuận này. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**d. THỎA THUẬN NÀY PHỤ THUỘC THEO PHÉP TRỌNG TÀI RÀNG BUỘC.** Người dùng đồng ý rằng bất kỳ và tất cả các tranh chấp hoặc khiếu nại chống lại bất kỳ người nào phát sinh từ hoặc theo bất kỳ cách nào liên quan đến Thỏa thuận này hoặc việc truy cập, sử dụng hoặc cài đặt Phần mềm của Người dùng hoặc bất kỳ bên nào khác. người đó sẽ phải chịu sự phân xử ràng buộc theo Quy tắc Trọng tài của Phòng Thương mại Quốc tế bởi một hoặc nhiều trọng tài viên được chỉ định theo Quy tắc nói trên. Địa điểm của trọng tài sẽ là Nhật Bản. Ngôn ngữ của trọng tài sẽ là tiếng Anh. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. +**e. NGÔN NGỮ.** Bất kỳ bản dịch nào của Thỏa thuận này chỉ được thực hiện cho mục đích tham khảo tại địa phương và trong trường hợp có bất kỳ sự mâu thuẫn nào giữa bản tiếng Anh và bất kỳ phiên bản nào không phải tiếng Anh, thì bản tiếng Anh của Thỏa thuận này sẽ được ưu tiên áp dụng và chi phối mọi khía cạnh. -**e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. +## 12. Ủy thác và Cổ phần -## 12. Delegation and Staking +12.1 **Phần thưởng.** Số lượng Phần thưởng mà Người dùng có thể kiếm được từ việc ủy quyền tùy thuộc vào nhiều yếu tố bao gồm nhưng không giới hạn ở sự tham gia của người dùng, tỷ suất lợi nhuận của stakepool và khối lượng quảng cáo được ủy quyền. Có thể việc ủy quyền không tạo ra Phần thưởng cho Người dùng do các yếu tố nêu trên. Phần thưởng kiếm được kể từ khi bắt đầu kỷ nguyên thứ 3 trên chuỗi khối Cardano. -12.1 **Rewards.** The amount of Rewards a User may earn from delegation depends on various factors including, but not limited to, user participation, stakepool profit margins and the volume of ada being delegated. It is possible that delegation generates no Reward for a User due to the above-mentioned factors. Rewards are earned as of the start of the 3rd epoch on the Cardano blockchain. +12.2 **Ủy quyền.** Người dùng có thể ủy quyền cổ phần của họ cho một trong các nhóm cổ phần khác nhau của Công ty hoặc cho nhóm cổ phần(Stake pool) của bên thứ ba. Người dùng sẽ có quyền duy nhất để xác định khối lượng được ủy quyền cho một nhóm cổ phần và có thể tăng hoặc giảm mức độ tham gia của nó bất kỳ lúc nào. Bất kỳ thông tin nào Công ty chia sẻ liên quan đến các bên liên quan, bao gồm chỉ số hiệu suất và Phần thưởng, sẽ chỉ dành cho mục đích biểu thị và có thể không chính xác. Người dùng chỉ có thể ủy quyền cổ phần của họ cho nhóm cổ phần nếu ada của họ nằm trong Daedalus cập nhật hoặc ví Yoroi cập nhật tại thời điểm thiết lập. Người dùng không có bất kỳ quyền tự động nào đối với Phần thưởng do ủy quyền cổ phần của mình. -12.2 **Delegation.** Users may delegate their stake to one of the various stake pools of the Company or to a third party stake pool. User will have the sole right to determine the volume to be delegated to a stake pool and may increase or decrease its level of participation at any time. Any information Company shares regarding stakepools, including performance metrics and Rewards, will be for indicative purposes only and may not be accurate. Users may only delegate their stake to a stake pool if their ada is in an updated Daedalus or an updated Yoroi wallet at the time of the setup process. User does not acquire any automatic right to Rewards as a result of delegating its stake. +12.3 **Các nhóm cổ phần của Công ty.** Công ty sẽ vận hành các nhóm cổ phần khác nhau sẽ hiển thị trong Yoroi. Các yêu cầu về chi phí, mạng và máy chủ để vận hành một cách đáng tin cậy các nhóm cổ phần đó sẽ do Công ty toàn quyền quyết định. Công ty sẽ thông báo tỷ lệ phần trăm Phần thưởng sẽ được chia sẻ với Người dùng thông qua ví Yoroi của Người dùng. Phần thưởng sẽ tích lũy vào cuối mỗi kỷ nguyên và sẽ tự động xuất hiện trong ví Yoroi của Người dùng. -12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. - -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 **Nhận phần thưởng.** Người dùng phải chịu trách nhiệm thanh toán tất cả các loại thuế hiện hành, nếu có, mà Phần thưởng có thể phải chịu và bất kỳ và tất cả các loại thuế khác có thể áp dụng cho Người dùng sau khi Phần thưởng được nhận. From 7911dc8256ac055be425a10e3f89035176b90ca0 Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:32 +0100 Subject: [PATCH 316/464] New translations en-us.md (Portuguese, Brazilian) --- .../i18n/locales/terms-of-use/ada/pt-BR.md | 102 ++++++------------ 1 file changed, 35 insertions(+), 67 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/pt-BR.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/pt-BR.md index 62a96a1ef3..0488538cab 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/pt-BR.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/pt-BR.md @@ -1,102 +1,70 @@ -# Terms of Service Agreement +# Acordo de Termos e Condições -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +Este contrato de Termos de Serviço ("Acordo") é realizado entre EMURGO Co., Ltd ("Companhia") e qualquer pessoa ou entidade ("Usuário") que complete o processo de download, utilize, ou opere o software conhecido como aplicativo Yoroi Wallet de criptomoedas, e o serviço de processamento de dados, aplicação, comunicação ou qualquer outro conteúdo oferecido ou provido pelo software da companhia ("Software"). A Companhia e o Usuário são coletivamente referidos como "Partes". AO PRESSIONAR O BOTÃO ACEITAR OU ACESSAR, USAR OU INSTALAR QUALQUER PARTE DO SOFTWARE, É ENTENDIDO QUE O USUÁRIO EXPRESSAMENTE CONCORDA E CONSENTE EM SER LEGALMENTE RESPONSABILIZADO POR TODOS OS TERMOS DESTE ACORDO. SE O USUÁRIO NÃO CONCORDA COM TODOS OS TERMOS DESTE ACORDO, O USUÁRIO NÃO ESTÁ AUTORIZADO A ACESSAR, USAR OU INSTALAR QUALQUER PARTE DESSE SOFTWARE. -## 1. Rights and Obligations +## 1. Direitos e Obrigações -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. Descrição. ** O Software funciona como uma carteira de criptomoeda digital gratuita e de código aberto. O Software não constitui uma conta pela qual a Empresa ou quaisquer outros terceiros sirvam como intermediários financeiros ou custodiantes da ADA do Usuário ou qualquer outra criptomoeda. Enquanto o Software estiver passando por testes beta e continuar a ser aprimorado pelos comentários da comunidade de desenvolvedores, colaboradores de código aberto e testadores beta, a Empresa não pode garantir que não haverá bugs no Software. O Usuário reconhece que corre risco durante o uso do Software, discrição e conformidade com todas as leis aplicáveis. O Usuário é responsável por proteger as senhas, PINs, chaves privadas, chaves de resgate, chaves de venda protegidas, senhas mnemônicas de recuperação de backup, códigos de acesso ADA e outros códigos utilizados pelo Usuário para acessar o Software ou qualquer informação, ADA, voucher ou outra unidade de criptomoeda. SE O USUÁRIO PERDER ACESSO À CARTEIRA DE CRIPTOCURRÊNCIA OU ÀS CHAVES PRIVADAS E NÃO ARMAZENAR SEPARADAMENTE UM BACKUP DA CARTEIRA DE CRIPTOCURRÊNCIA OU RECUPERAR A (S) FRASE (S) MENMÓNICA (S) DE CRIMPROCURRÊNCIA E A SENHA CORRESPONDENTE (S) ASSOCIADA, A CARTEIRA SERÁ INACESSÍVEL. Todas as solicitações de transação são irreversíveis. A Empresa e seus acionistas, diretores, executivos, funcionários, afiliados e agentes não podem garantir a confirmação da transação ou recuperar as chaves ou senhas privadas do Usuário se o Usuário as perder ou esquecer. -**b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. +** b. Acessibilidade. ** O usuário concorda que, de tempos em tempos, o Software poderá ficar inacessível ou inoperável por qualquer motivo, incluindo, sem limitação: (i) mau funcionamento do equipamento; (ii) procedimentos ou reparos periódicos de manutenção que a Companhia possa realizar periodicamente; ou (iii) causas fora do controle da Companhia ou que não sejam razoavelmente previsíveis pela Companhia. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +** c. Equipamento. ** O Usuário será o único responsável por fornecer, manter e garantir a compatibilidade com o Software, todos os requisitos de hardware, software, elétrica e outros requisitos físicos para o uso do Software pelo Usuário, incluindo, sem limitação, conexões de telecomunicações e acesso à Internet e links, navegadores da web ou outros equipamentos, programas e serviços necessários para acessar e usar o Software. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +** d. Segurança. ** O Usuário será o único responsável pela segurança, confidencialidade e integridade de todas as informações e conteúdos que o Usuário recebe, transmite ou armazena no Software. O Usuário será o único responsável por qualquer acesso autorizado ou não autorizado a qualquer conta do Usuário por qualquer pessoa. O Usuário concorda em assumir toda a responsabilidade pela confidencialidade dos dispositivos, informações, chaves e senhas de segurança do Usuário. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +** e. Privacidade. ** Quando razoavelmente praticável, a Empresa tentará respeitar a privacidade do Usuário. A Empresa não monitora, edita ou divulga nenhuma informação pessoal sobre a conta do Usuário ou Usuário, incluindo seu conteúdo ou o uso do Software pelo Usuário, sem o consentimento prévio do Usuário, a menos que a Empresa acredite de boa fé que tal ação é necessária para: (i) cumprir o processo legal ou outros requisitos legais de qualquer autoridade governamental; (ii) proteger e defender os direitos ou propriedades da Companhia; (iii) fazer cumprir este Contrato; (iv) proteger os interesses dos usuários do Software que não sejam o Usuário ou qualquer outra pessoa; ou (v) operar ou realizar manutenção e reparo dos serviços ou equipamentos da Companhia, incluindo o Software conforme autorizado por lei. O usuário não tem expectativa de privacidade em relação à Internet em geral. O endereço IP do usuário é transmitido e gravado com cada mensagem ou outra informação que o usuário envia do software. -## 2. Taxes and Fees +## 2. Impostos e Taxas -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +Todas as cobranças de conversão de moeda, taxas de terceiros, vendas, uso, valor agregado, bens pessoais ou outros impostos, taxas ou impostos de qualquer espécie, incluindo juros e multas, sobre impostos agora ou a seguir por qualquer entidade governamental e taxas incorridas ao Usuário em razão do acesso, uso ou instalação do Software será de exclusiva responsabilidade do Usuário. -## 3. User Representations +## 3. Representações do usuário -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +O Usuário declara e garante à Empresa que: (a) se o Usuário for uma pessoa natural, o Usuário tenha mais de dezoito (18) anos; (b) O Usuário tem o poder e a autoridade para celebrar e executar as obrigações do Usuário sob este Contrato; (c) todas as informações fornecidas pelo Usuário à Empresa são verdadeiras, precisas e completas; (d) O Usuário cumprirá todas as leis e regulamentos de qualquer jurisdição aplicável em relação ao acesso, uso ou instalação do Software; (e) O Usuário deve cumprir todos os termos e condições deste Contrato, incluindo, sem limitação, as disposições estabelecidas na Seção 4; e (f) O Usuário forneceu e fornecerá informações precisas e completas, conforme necessário para acesso, uso ou instalação do Software. -## 4. Prohibited Uses +## 4. Usos Proibidos -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +O Usuário é o único responsável por todos e quaisquer atos e omissões que ocorram na conta, informações de segurança, chaves ou senha do Usuário, e concorda em não se envolver em uso inaceitável do Software, que inclui, sem limitação, uso do Software para: ( a) disseminar, armazenar ou transmitir mensagens não solicitadas, correntes ou e-mail comercial não solicitado; (b) disseminar ou transmitir material que, para uma pessoa razoável, possa ser abusivo, obsceno, pornográfico, difamatório, hostil, ofensivo, vulgar, ameaçador ou malicioso; (c) disseminar, armazenar ou transmitir arquivos, gráficos, software ou outro material que viole de fato ou potencialmente os direitos autorais, marca registrada, patente, segredo comercial ou outro direito de propriedade intelectual de qualquer pessoa; (d) criar uma identidade falsa ou tentar enganar qualquer pessoa quanto à identidade ou origem de qualquer comunicação; (e) exportar, reexportar ou permitir o download de qualquer mensagem ou conteúdo que viole qualquer lei de exportação ou importação, regulamento ou restrição de qualquer jurisdição aplicável ou sem todas as aprovações, licenças ou isenções necessárias; (f) interferir, interromper ou tentar obter acesso não autorizado a outras contas no Software ou em qualquer outra rede de computadores; ou (g) ​​disseminar, armazenar ou transmitir vírus, cavalos de Troia ou qualquer outro código ou programa malicioso. -## 5. Termination +## 5. Rescisão -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +Este Contrato entra em vigor com a aceitação do Usuário, conforme estabelecido neste documento, e continuará em vigor, desde que o Usuário se envolva em qualquer acesso, uso ou instalação do Software. A Empresa reserva-se o direito, a seu exclusivo critério e sem aviso prévio, a qualquer momento e por qualquer motivo, de: (a) remover ou desativar o acesso a todo ou parte do Software; (b) suspender o acesso do Usuário ou o uso de todo ou parte do Software; e (c) rescindir este Contrato. -## 6. Disclaimer of Warranties +## 6. Isenção de Garantias -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +O SOFTWARE É FORNECIDO "TAL COMO ESTÁ", SEM GARANTIA DE QUALQUER TIPO, EXPRESSA OU IMPLÍCITA. O USO DO SOFTWARE É DE RISCO ÚNICO DO USUÁRIO. A EMPRESA NÃO GARANTE QUE O SOFTWARE SERÁ ININTERRUPTO OU LIVRE DE ERROS, NEM A EMPRESA GARANTIA QUALQUER RESULTADO QUE PODE SER OBTIDO PELO USO DO SOFTWARE. A EMPRESA NÃO OFERECE OUTRAS GARANTIAS, EXPRESSAS OU IMPLÍCITAS. A EMPRESA EXPRESSAMENTE EXCLUSIVAMENTE QUALQUER GARANTIA DE COMERCIALIZAÇÃO, GARANTIA DE ADEQUAÇÃO A UM PROPÓSITO PARTICULAR, GARANTIA DE TÍTULO OU INTERESSE OU GARANTIA DE NÃO INFRAÇÃO. -## 7. Limitation of Liability +## 7. Limitação de responsabilidade -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +EM NENHUM CASO A EMPRESA OU SEUS ACIONISTAS, DIRETORES, FUNCIONÁRIOS, AFILIADOS OU AGENTES, OU QUALQUER DE SEUS OU SEUS PRESTADORES DE SERVIÇOS RESPECTIVOS, SERÃO RESPONSÁVEIS PELO USUÁRIO OU QUALQUER TERCEIRA PARTE PARA QUALQUER USO, INTERRUPÇÃO, ATRASO OU INABILIDADE SOFTWARE, RECEITAS OU LUCROS PERDIDOS, ATRASOS, INTERRUPÇÃO OU PERDA DE SERVIÇOS, NEGÓCIOS OU BENS, PERDA OU CORRUPÇÃO DE DADOS, PERDA RESULTANTE DE FALHA EM SERVIÇO DO SISTEMA OU DO SISTEMA, FUNCIONAMENTO OU DESLIGAMENTO, FALHA EM TRANSFERIR, INFORMAÇÃO OU TRANSMISSÃO PRECISA, LER OU TRANSMISSAR ATUALIZAR OU FORNECER INFORMAÇÕES CORRETAS, INCOMPATIBILIDADE DO SISTEMA OU FORNECIMENTO DE INFORMAÇÕES DE COMPATIBILIDADE INCORRETA OU QUEBRA-SE DA SEGURANÇA DO SISTEMA, OU QUAISQUER DANOS CONSEQÜENCIAIS, INCIDENTAIS, INDIRETOS, EXEMPLARES, ESPECIAIS OU PUNITIVOS, SEJA CONCEBIDO DESTE CONTRATO, TORT (INCLUINDO NEGLIGÊNCIA) OU DE OUTRO MODO, INDEPENDENTE QUANTO DANOS FORAM PREVISÍVEIS E SE NÓS FORAMOS OU NÃO AVISADOS DA POSSIBILIDADE DE TAIS DANOS. EM NENHUM CASO A EMPRESA OU SEUS ACIONISTAS, DIRETORES, FUNCIONÁRIOS, AFILIADOS OU AGENTES, OU QUALQUER DE SEUS OU SEUS RESPECTIVOS PRESTADORES DE SERVIÇOS, SERÃO RESPONSÁVEIS POR QUALQUER REIVINDICAÇÃO, DANO OU OUTRA RESPONSABILIDADE, SEJA EM AÇÃO DE CONTRATO, ATOR DE OUTRA FORMA, DECORRENTE OU DE QUALQUER FORMA RELACIONADA AO ACESSO, USO OU INSTALAÇÃO DO SOFTWARE DO USUÁRIO. ALGUMAS JURISDIÇÕES PROIBEM A EXCLUSÃO OU LIMITAÇÃO DE DANOS INCIDENTAIS OU CONSEQÜENCIAIS, POR ISSO, ESTA LIMITAÇÃO DE RESPONSABILIDADE PODE NÃO SE APLICAR AO USUÁRIO. Se o usuário não estiver satisfeito com o software, o recurso exclusivo do usuário será interromper o uso do software. -## 8. Indemnification +## 8. Indenização -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +O Usuário concorda em indenizar, isentar e defender a Empresa, seus acionistas, diretores, executivos, funcionários, afiliadas e agentes ("Partes Indenizadas") de e contra qualquer ação, causa, reclamação, dano, dívida, demanda ou responsabilidade, incluindo razoáveis custos e honorários advocatícios, declarados por qualquer pessoa, decorrentes ou relacionados a: (a) este Contrato; (b) acesso, uso ou instalação do Software pelo Usuário, incluindo quaisquer dados ou trabalhos transmitidos ou recebidos pelo Usuário; e (c) qualquer uso inaceitável do Software por qualquer pessoa, incluindo, sem limitação, qualquer declaração, dado ou conteúdo feito, transmitido ou republicado pelo Usuário ou qualquer pessoa que seja proibida como inaceitável na Seção 4. ESTA INDENIZAÇÃO INCLUI A INDENIZAÇÃO EXPRESSA DA EMPRESA E DE TODAS AS PARTES INDENIZADAS POR QUALQUER NEGLIGÊNCIA ALEGADA (INCLUINDO QUALQUER ALEGAÇÃO DE NEGLIGÊNCIA BRUTA). OU OUTRA ALEGAÇÃO MÁ CONTAUTA DA EMPRESA OU QUALQUER PARTE INDENIZADA. -## 9. Intellectual Property +## 9. Propriedade Intelectual -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +A Empresa mantém todos os direitos, títulos e interesses de e para todas as marcas, logotipos e marcas comerciais da Empresa, incluindo, entre outros, EMURGO Co., Ltd., EMURGO, Yoroi, Carteira de criptomoedas Yoroi, Carteira Yoroi, Yoroi App e variações da redação das marcas, logotipos e marcas comerciais acima mencionados. -## 10. Warnings +## 10. Advertências -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +O Usuário reconhece que a Empresa não será responsável por transferir, salvaguardar ou manter chaves privadas e / ou ADA do Usuário ou qualquer outra criptomoeda. Se o Usuário e / ou qualquer autoridade de co-assinatura perder, manipular incorretamente ou tiver roubado chaves privadas associadas, ou se os assinantes do usuário se recusarem a fornecer a autoridade necessária, o Usuário reconhecerá que o Usuário pode não ser capaz de recuperar a ADA do Usuário ou qualquer outra criptomoeda e que a empresa não será responsável por tal perda. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +O Usuário reconhece e concorda que a ADA ou qualquer outra transação de criptomoeda facilitada pelo Software e / ou pela Empresa pode estar atrasada e que a Empresa não será responsável por nenhuma perda associada. O Usuário reconhece e concorda que a Empresa não será responsável por nenhum aspecto das informações, conteúdo ou serviços contidos em materiais de terceiros ou em sites de terceiros acessíveis ou vinculados ao Software e / ou à Empresa. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. +Ao usar o Software, o Usuário reconhece e concorda: (i) que a Empresa não é responsável pela operação dos protocolos subjacentes e que a Empresa não oferece garantia de sua funcionalidade, segurança ou disponibilidade; e (ii) que os protocolos subjacentes estão sujeitos a mudanças repentinas da cadeia principal nas regras operacionais ("forks") e que esses forks podem afetar materialmente o valor e / ou a função da ADA ou qualquer outra criptomoeda que o Usuário armazena em o software. No caso de uma bifurcação, o Usuário concorda que a Empresa pode suspender temporariamente as operações do Software (com ou sem aviso prévio ao Usuário) e que a Empresa pode, a seu exclusivo critério, (a) configurar ou reconfigurar seus sistemas ou (b) decidir não apoiar (ou deixar de apoiar) o protocolo bifurcado inteiramente, desde que, no entanto, o Usuário tenha a oportunidade de retirar fundos do Software. O Usuário reconhece e concorda que a Empresa não assume absolutamente nenhuma responsabilidade em relação a uma ramificação não suportada de um protocolo bifurcado. -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +## 11. Diversos -## 11. Miscellaneous +** a. Alteração. ** A Empresa terá o direito, a qualquer momento e sem aviso prévio, de adicionar ou modificar os termos deste Contrato, simplesmente entregando esses termos alterados ao Usuário por mensagem eletrônica, por qualquer meio, para qualquer endereço fornecido pelo usuário a empresa. O acesso ou uso do Software pelo Usuário após a data em que esses termos alterados forem entregues ao Usuário será considerado como aceitação desses termos alterados. -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +** b. Indenização. ** Se qualquer disposição ou parte deste Contrato for, ou se tornar inválido, ilegal ou inexequível, ele será considerado modificado na extensão mínima necessária para torná-lo válido, legal e aplicável. Se tal modificação não for possível, a disposição ou parte da disposição relevante será considerada excluída. Qualquer modificação ou exclusão de uma provisão ou provisão parcial nos termos deste artigo não afetará a validade e aplicabilidade do restante deste Contrato. -**b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. +** c. Contrato completo - Isenção de responsabilidade **. Este Contrato constitui o contrato completo entre as Partes com relação ao assunto deste documento e substitui todos os acordos ou entendimentos anteriores entre as Partes. O Usuário expressa e garante expressamente que não está confiando em quaisquer declarações, entendimentos, representações, expectativas ou acordos que não sejam expressamente estabelecidos neste Contrato. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +** d. ESTE CONTRATO ESTÁ SUJEITO A ARBITRAGEM OBRIGATÓRIA. ** O Usuário concorda que toda e qualquer disputa ou reclamação contra qualquer pessoa decorrente de ou de alguma forma relacionada a este Contrato ou ao acesso, uso ou instalação do Software pelo Usuário ou qualquer outra pessoa estará sujeita a arbitragem vinculativa sob as Regras de Arbitragem da Câmara de Comércio Internacional por um ou mais árbitros nomeados de acordo com as referidas Regras. O local da arbitragem será o Japão. O idioma da arbitragem deve ser o inglês. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. - -**e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. +** e. IDIOMA. ** Qualquer tradução deste Contrato é feita apenas para fins de referência local e, no caso de qualquer inconsistência entre as versões em inglês e outras que não sejam em inglês, a versão em inglês deste Contrato prevalecerá e prevalecerá em todos os aspectos. ## 12. Delegation and Staking @@ -106,4 +74,4 @@ If you have any questions or concerns regarding the accuracy or reliability of t 12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. From 538b48722caaa451224eb9c50fad124054fb0cd2 Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:35 +0100 Subject: [PATCH 317/464] New translations en-us.md (id-ID) --- .../i18n/locales/terms-of-use/ada/id-ID.md | 102 ++++++------------ 1 file changed, 35 insertions(+), 67 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/id-ID.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/id-ID.md index 62a96a1ef3..d50abf4abb 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/id-ID.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/id-ID.md @@ -1,102 +1,70 @@ -# Terms of Service Agreement +# Perjanjian Ketentuan Layanan -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +PERJANJIAN KETENTUAN LAYANAN INI ("Perjanjian") dibuat antara EMURGO Co., Ltd. ("Perusahaan") dan setiap orang atau entitas ("Pengguna") yang menyelesaikan proses untuk mengunduh, menggunakan, atau mengoperasikan perangkat lunak yang dikenal sebagai Aplikasi Yoroi cryptocurrency Wallet, dan layanan pemrosesan data, aplikasi, layanan komunikasi atau konten lainnya atau ditawarkan atau disediakan dengan perangkat lunak oleh Perusahaan ("Perangkat Lunak"). Perusahaan dan Pengguna secara kolektif disebut sebagai "Para Pihak." DENGAN MENGKLIK TOMBOL PENERIMAAN ATAU MENGAKSES, MENGGUNAKAN ATAU MENGINSTAL BAGIAN DARI PERANGKAT LUNAK, PENGGUNA MENYETUJUI SECARA EKSPRESI KEPADA DAN PERSETUJUAN UNTUK DIADAKAN SECARA SECARA HUKUM DENGAN SEMUA PERSYARATAN PERJANJIAN INI. JIKA PENGGUNA TIDAK MENYETUJUI SEMUA PERSYARATAN PERJANJIAN INI, PENGGUNA TIDAK AKAN berwenang untuk MENGAKSES, MENGGUNAKAN ATAU MENGINSTAL BAGIAN DARI PERANGKAT LUNAK. -## 1. Rights and Obligations +## 1. Hak dan Kewajiban -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. Deskripsi.** Perangkat Lunak berfungsi sebagai dompet cryptocurrency digital gratis dan open source. Perangkat Lunak ini bukan merupakan akun di mana Perusahaan atau pihak ketiga lainnya yang berfungsi sebagai perantara keuangan atau penjaga para pengguna ADA atau mata uang kripto lain. Sementara Perangkat Lunak telah menjalani pengujian beta dan terus ditingkatkan dengan feedback dari komunitas developer, kontributor open-source dan beta-tester, Perusahaan tidak dapat menjamin bahwa tidak akan ada bug dalam Perangkat Lunak. Pengguna mengakui bahwa penggunaan Perangkat Lunak oleh Pengguna adalah risiko, kebijaksanaan dan kepatuhan Pengguna terhadap semua hukum yang berlaku. Pengguna bertanggung jawab atas penyimpanan kata sandi, PIN, private key, redemption key, shielded vending key, backup pemulihan frasa sandi mnemonik, passcode ADA dan kode lain apa pun yang digunakan Pengguna untuk mengakses Perangkat Lunak atau informasi, ADA, voucher, atau unit cryptocurrency lainnya. JIKA PENGGUNA KEHILANGAN AKSES KE WALLET CRYPTOCURRENCY ATAU PRIVATE KEY DAN TIDAK MENYIMPAN BACKUP WALLET CRYPTOCURRENCY ATAU BACKUP RECOVERY FRASA MNEMONIC DAN KATA SANDI YANG BERKAITAN, PENGGUNA MENGAKUI DAN MENYETUJUI BAHWA ADA ATAU CRYPTOCURRENCY LAIN NYA YANG BERKAITAN DENGAN WALLET CRYPTOCURRENCY AKAN MENJADI TIDAK DAPAT DIAKSES. Semua permintaan transaksi tidak dapat dibatalkan. Perusahaan dan pemegang saham, direktur, pejabat, karyawan, afiliasi, dan agennya tidak dapat menjamin konfirmasi transaksi atau mengembalikan private key atau kata sandi Pengguna jika Pengguna kehilangan atau melupakannya. -**b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. +**b. Aksesibilitas.** Pengguna setuju bahwa dari waktu ke waktu Perangkat Lunak mungkin tidak dapat diakses atau tidak dapat dioperasikan karena alasan apa pun, termasuk, tanpa batasan: (i) kerusakan peralatan; (ii) prosedur pemeliharaan berkala atau perbaikan yang dapat dilakukan Perusahaan dari waktu ke waktu; atau (iii) dikarenakan hal yang ada di luar kendali Perusahaan atau yang tidak dapat diperkirakan secara wajar oleh Perusahaan. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. Peralatan.** Pengguna bertanggung jawab penuh untuk menyediakan, memelihara, dan memastikan kompatibilitas dengan Perangkat Lunak, semua perangkat keras, perangkat lunak, listrik, dan persyaratan fisik lainnya untuk penggunaan Perangkat Lunak oleh Pengguna, tanpa batasan, telekomunikasi dan koneksi akses internet dan link, browser web atau peralatan lainnya, program, dan layanan yang diperlukan untuk mengakses dan menggunakan Perangkat Lunak. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. Keamanan.** Pengguna sepenuhnya bertanggung jawab atas keamanan, kerahasiaan, dan integritas semua informasi dan konten yang diterima Pengguna, ditransmisikan, atau disimpan di Perangkat Lunak. Pengguna bertanggung jawab penuh atas akses yang diizinkan atau tidak ke akun Pengguna apa pun oleh siapa pun. Pengguna setuju untuk memegang semua tanggung jawab atas kerahasiaan perangkat keamanan, informasi, kunci, dan kata sandi Pengguna. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. Privasi.** Ketika dapat dipraktikkan secara wajar, Perusahaan akan berusaha untuk menghormati privasi Pengguna. Perusahaan tidak akan memantau, mengedit, atau mengungkapkan informasi pribadi apa pun tentang Pengguna atau akun Pengguna, termasuk kontennya atau penggunaan Perangkat Lunak oleh Pengguna, tanpa persetujuan Pengguna sebelumnya kecuali jika Perusahaan yakin dengan itikad baik bahwa tindakan tersebut diperlukan untuk: (i) mematuhi proses hukum atau persyaratan hukum lainnya dari otoritas pemerintah mana pun; (ii) melindungi dan membela hak atau properti Perusahaan; (iii) menegakkan Perjanjian ini; (iv) melindungi kepentingan pengguna Perangkat Lunak selain Pengguna atau orang lain; atau (v) mengoperasikan atau melakukan pemeliharaan dan perbaikan layanan atau peralatan Perusahaan, termasuk Perangkat Lunak sebagaimana diizinkan oleh hukum. Pengguna tidak memiliki ekspektasi privasi sehubungan dengan Internet secara umum. Alamat IP pengguna dikirimkan dan dicatat dengan setiap pesan atau informasi lain yang dikirimkan Pengguna dari Perangkat Lunak. -## 2. Taxes and Fees +## 2. Pajak dan Biaya -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +Semua biaya konversi mata uang, biaya pihak ketiga, penjualan, penggunaan, nilai tambah, properti pribadi atau pajak lainnya, bea atau pungutan dalam bentuk apa pun, termasuk bunga dan denda atasnya, baik yang dikenakan sekarang atau selanjutnya oleh entitas pemerintah, dan biaya yang dikeluarkan oleh Pengguna dengan alasan akses, penggunaan, atau instalasi Perangkat Lunak oleh Pengguna menjadi tanggung jawab Pengguna. -## 3. User Representations +## 3. Representasi Pengguna -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +Pengguna menyatakan dan menjamin kepada Perusahaan bahwa: (a) jika Pengguna adalah orang yang secara alami berusia di atas delapan belas (18); (B) Pengguna memiliki kekuatan dan otoritas untuk masuk dan melakukan kewajiban Pengguna berdasarkan Perjanjian ini; (c) semua informasi yang diberikan oleh Pengguna kepada Perusahaan adalah benar, akurat dan lengkap; (D) Pengguna akan mematuhi semua hukum dan peraturan dari yurisdiksi yang berlaku sehubungan dengan akses, penggunaan, atau instalasi Perangkat Lunak oleh Pengguna; (e) Pengguna harus mematuhi semua syarat dan ketentuan Perjanjian ini, termasuk, tanpa batasan, ketentuan yang ditetapkan pada Bagian 4; dan (f) Pengguna telah menyediakan dan akan memberikan informasi yang akurat dan lengkap sebagaimana diperlukan untuk mengakses, menggunakan, atau menginstal Perangkat Lunak. -## 4. Prohibited Uses +## 4. Penggunaan Dilarang -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +Pengguna bertanggung jawab penuh atas setiap dan semua tindakan dan kelalaian yang terjadi di bawah akun Pengguna, informasi keamanan, kunci atau kata sandi, dan Pengguna setuju untuk tidak terlibat dalam penggunaan Perangkat Lunak yang tidak dapat diterima, yang meliputi, tanpa batasan, penggunaan Perangkat Lunak untuk: ( a) menyebarkan, menyimpan atau mengirimkan pesan yang tidak diminta, surat berantai atau email komersial yang tidak diminta; (B) menyebarluaskan atau mengirimkan materi kepada orang yang kejam, cabul, pornografi, memfitnah, melecehkan, sangat ofensif, vulgar, mengancam atau jahat; (c) menyebarluaskan, menyimpan atau mengirimkan file, grafik, perangkat lunak, atau materi lain yang benar-benar atau berpotensi melanggar hak cipta, merek dagang, paten, rahasia dagang, atau hak kekayaan intelektual lainnya dari siapa pun; (d) membuat identitas palsu atau untuk mencoba menyesatkan orang lain mengenai identitas atau asal komunikasi apa pun; (e) mengekspor, mengekspor kembali atau mengizinkan pengunduhan pesan atau konten apa pun yang melanggar undang-undang ekspor atau impor, peraturan, atau pembatasan yurisdiksi apa pun yang berlaku, atau tanpa semua persetujuan, lisensi, atau pengecualian yang diperlukan; (f) mengganggu, mengganggu atau berupaya mendapatkan akses tidak sah ke akun lain pada Perangkat Lunak atau jaringan komputer lainnya; atau (g) ​​menyebarkan, menyimpan atau mengirimkan virus, Trojan horse atau kode atau program jahat lainnya. -## 5. Termination +## 5. Penghentian -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +Perjanjian ini berlaku setelah penerimaan Pengguna sebagaimana ditentukan di sini dan akan terus berlaku penuh selama Pengguna masih mengakses, penggunaan atau instalasi Perangkat Lunak. Perusahaan berhak, atas kebijakannya sendiri dan tanpa pemberitahuan, kapan saja dan dengan alasan apa pun, untuk: (a) menghapus atau menonaktifkan akses ke semua atau sebagian dari Perangkat Lunak; (B) menangguhkan akses Pengguna ke atau menggunakan semua atau sebagian dari Perangkat Lunak; dan (c) mengakhiri Perjanjian ini. -## 6. Disclaimer of Warranties +## 6. Penolakan Jaminan -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +PERANGKAT LUNAK INI DISEDIAKAN "SEBAGAIMANA ADANYA", TANPA JAMINAN APA PUN, BAIK TERSURAT MAUPUN TERSIRAT. PENGGUNAAN PERANGKAT LUNAK INI ADALAH RISIKO PENGGUNA SENDIRI. PERUSAHAAN TIDAK MENJAMIN BAHWA PERANGKAT LUNAK TERSEBUT TIDAK AKAN TERGANGGU ATAU BEBAS DARI KESALAHAN, JUGA TIDAK ADA PERUSAHAAN YANG MEMBERIKAN JAMINAN ATAS HASIL APA PUN YANG MUNGKIN DIPEROLEH DENGAN MENGGUNAKAN PERANGKAT LUNAK TERSEBUT. PERUSAHAAN SECARA TEGAS MENYANGKAL SEGALA JAMINAN YANG DAPAT DIPERJUALBELIKAN, JAMINAN KESESUAIAN UNTUK TUJUAN TERTENTU, JAMINAN HAK ATAU KEPENTINGAN, ATAU JAMINAN TIDAK ADA PELANGGARAN. -## 7. Limitation of Liability +## 7. Batasan Tanggung Jawab -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +DALAM HAL APA PUN PERUSAHAAN ATAU PEMEGANG SAHAM, DIREKTUR, PEJABAT, KARYAWAN, AFILIASI ATAU AGENNYA, ATAU SALAH SATU DARI PENYEDIA LAYANANNYA TIDAK BERTANGGUNG JAWAB KEPADA PENGGUNA ATAU PIHAK KETIGA MANA PUN ATAS SEGALA PENGGUNAAN, GANGGUAN, KETERLAMBATAN ATAU KETIDAKMAMPUAN UNTUK MENGGUNAKAN PERANGKAT LUNAK, PENDAPATAN ATAU LABA YANG HILANG, KETERLAMBATAN, GANGGUAN ATAU KEHILANGAN LAYANAN, BISNIS ATAU ITIKAD BAIK, KEHILANGAN ATAU KERUSAKAN DATA, KEHILANGAN YANG DISEBABKAN OLEH KEGAGALAN SISTEM ATAU LAYANAN SISTEM, KEGAGALAN FUNGSI ATAU SHUTDOWN, KEGAGALAN UNTUK MENTRANSFER SECARA AKURAT, MEMBACA ATAU MENGIRIMKAN INFORMASI, KEGAGALAN UNTUK MEMPERBARUI ATAU MEMBERIKAN INFORMASI YANG BENAR, KETIDAKSESUAIAN SISTEM ATAU PENYEDIAAN INFORMASI KOMPATIBILITAS YANG SALAH ATAU PELANGGARAN DALAM KEAMANAN SISTEM, ATAU UNTUK SEGALA KONSEKUENSI, INSIDENTAL, TIDAK LANGSUNG, KERUSAKAN KHUSUS, BAIK YANG TIMBUL DARI ATAU SEHUBUNGAN DENGAN PERJANJIAN INI, PELANGGARAN KONTRAK, TORT (TERMASUK KELALAIAN) ATAU SEBALIKNYA, TERLEPAS DARI APAKAH KERUSAKAN TERSEBUT DAPAT DIPERKIRAKAN DAN APAKAH KAMI DIBERITAHU ATAU TIDAK KEMUNGKINAN KERUSAKAN TERSEBUT. DALAM HAL APA PUN PERUSAHAAN ATAU PEMEGANG SAHAM, DIREKTUR, PEJABAT, KARYAWAN, AFILIASI ATAU AGENNYA, ATAU PENYEDIA LAYANANNYA MASING-MASING, TIDAK BERTANGGUNG JAWAB ATAS KLAIM, KERUSAKAN, ATAU TANGGUNG JAWAB LAIN, BAIK DALAM TINDAKAN KONTRAK, KESALAHAN ATAU JIKA TIDAK, YANG TIMBUL DARI ATAU DENGAN CARA APA PUN TERKAIT DENGAN AKSES, PENGGUNAAN, ATAU PEMASANGAN PERANGKAT LUNAK PENGGUNA. BEBERAPA YURISDIKSI MELARANG PENGECUALIAN ATAU PEMBATASAN KERUSAKAN INSIDENTAL ATAU KONSEKUENSIAL, SEHINGGA PEMBATASAN TANGGUNG JAWAB INI MUNGKIN TIDAK BERLAKU BAGI PENGGUNA. JIKA PENGGUNA TIDAK PUAS DENGAN PERANGKAT LUNAK, SOLUSI SATU-SATUNYA DAN EKSKLUSIF PENGGUNA ADALAH BAGI PENGGUNA UNTUK MENGHENTIKAN PENGGUNAAN PERANGKAT LUNAK. -## 8. Indemnification +## 8. Ganti rugi -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +Pengguna setuju untuk mengganti rugi, tidak membahayakan, dan membela Perusahaan, pemegang saham, direktur, pejabat, karyawan, afiliasi, dan agennya ("Pihak Ganti Rugi") dari dan terhadap tindakan apa pun, menyebabkan, mengklaim, merusak, utang, permintaan atau kewajiban, termasuk biaya dan biaya pengacara, ditegaskan oleh siapa saja, yang timbul dari atau berkaitan dengan: (a) Perjanjian ini; (b) Akses, penggunaan, atau instalasi Perangkat Lunak oleh Pengguna, termasuk data atau pekerjaan apa pun yang dikirimkan atau diterima oleh Pengguna; dan (c) setiap penggunaan Perangkat Lunak yang tidak dapat diterima oleh siapa pun, termasuk, namun tidak terbatas pada, pernyataan, data atau konten apa pun yang dibuat, ditransmisikan atau diterbitkan ulang oleh Pengguna atau siapa pun yang dilarang sebagai tidak dapat diterima berdasarkan Bagian 4. GANTI RUGI INI MENCAKUP GANTI RUGI TEGAS DARI PERUSAHAAN DAN SEMUA PIHAK YANG DIBERI GANTI RUGI UNTUK SETIAP KELALAIAN YANG DITUDUHKAN (TERMASUK SEGALA KELALAIAN YANG DITUDUHKAN). ATAU DUGAAN PELANGGARAN PERUSAHAAN ATAU PIHAK YANG MENDAPAT GANTI RUGI APA PUN. -## 9. Intellectual Property +## 9. Properti Intelektual -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +Perusahaan memiliki semua hak, kepemilikan, dan kepentingan dalam dan untuk semua merek, logo, dan merek dagang Perusahaan, termasuk, tetapi tidak terbatas pada, EMURGO Co., Ltd., EMURGO, Yoroi, Wallet Cryptocurrency Yoroi, Wallet Yoroi, Aplikasi Yoroi, dan variasi kata-kata dari merek, logo, dan merek dagang yang disebutkan di atas. -## 10. Warnings +## 10. Peringatan -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +Pengguna mengakui bahwa Perusahaan tidak akan bertanggung jawab untuk mentransfer, menjaga, atau memelihara private key dan / atau ADA Pengguna atau mata uang kripto lain. Jika Pengguna dan / atau otoritas penandatanganan bersama kehilangan, salah penanganan, atau telah kecurian private key terkait, atau jika pengguna menolak untuk memberikan otoritas yang diperlukan, Pengguna mengakui bahwa Pengguna mungkin tidak dapat memulihkan ADA Pengguna atau cryptocurrency lainnya, dan bahwa Perusahaan tidak akan bertanggung jawab atas kerugian tersebut. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +Pengguna mengakui dan menyetujui bahwa ADA atau transaksi cryptocurrency lainnya yang difasilitasi oleh Perangkat Lunak dan / atau Perusahaan dapat ditunda, dan bahwa Perusahaan tidak akan bertanggung jawab atas kerugian terkait. Pengguna mengakui dan menyetujui bahwa Perusahaan tidak akan bertanggung jawab atas segala aspek informasi, konten, atau layanan yang terkandung dalam materi pihak ketiga atau pada situs pihak ketiga mana pun yang dapat diakses atau ditautkan dengan Perangkat Lunak dan / atau Perusahaan. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. +Dengan menggunakan Perangkat Lunak, Pengguna mengakui dan menyetujui: (i) bahwa Perusahaan tidak bertanggung jawab atas pengoperasian protokol yang mendasarinya dan bahwa Perusahaan tidak memberikan jaminan fungsionalitas, keamanan, atau ketersediaannya; dan (ii) bahwa protokol yang mendasarinya mengikuti perubahan main-chain dalam aturan operasi ("fork"), dan bahwa fork tersebut secara material dapat mempengaruhi nilai, dan / atau fungsi ADA atau cryptocurrency lain yang disimpan oleh Pengguna. Perangkat Lunak. Jika terjadi fork, Pengguna setuju bahwa Perusahaan dapat untuk sementara menangguhkan operasi Perangkat Lunak (dengan atau tanpa pemberitahuan kepada Pengguna) dan bahwa Perusahaan dapat melakukan, atas kebijakannya sendiri, (a) mengkonfigurasi atau mengkonfigurasi ulang sistemnya atau (b) memutuskan tidak untuk mendukung (atau menghentikan dukungan) protokol fork sepenuhnya, asalkan, bahwa Pengguna akan memiliki kesempatan untuk menarik dana dari Perangkat Lunak. Pengguna mengakui dan menyetujui bahwa Perusahaan sama sekali tidak bertanggung jawab sehubungan dengan cabang dari protokol fork yang tidak didukung. -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +## 11. Lain-lain -## 11. Miscellaneous +**a. Amandemen.** Perusahaan berhak, kapan saja dan tanpa pemberitahuan, untuk menambah atau memodifikasi ketentuan Perjanjian ini, hanya dengan memberikan ketentuan yang diubah tersebut kepada Pengguna melalui pesan elektronik melalui media apa pun ke alamat apa pun yang diberikan kepada Perusahaan oleh Pengguna. Akses Pengguna ke atau penggunaan Perangkat Lunak setelah tanggal ketentuan yang diubah tersebut dikirimkan kepada Pengguna akan dianggap sebagai penerimaan terhadap ketentuan yang diubah tersebut. -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**b. Pemutusan.** Jika ada ketentuan atau bagian-ketentuan dari Perjanjian ini adalah, atau menjadi tidak valid, ilegal atau tidak dapat dilaksanakan, itu akan dianggap dimodifikasi sampai batas minimum yang diperlukan untuk membuatnya valid, sah dan dapat ditegakkan. Jika modifikasi semacam itu tidak dimungkinkan, ketentuan yang relevan atau ketentuan bagian akan dianggap dihapus. Setiap modifikasi atau penghapusan ketentuan atau bagian-ketentuan dalam Pasal ini tidak akan mempengaruhi validitas dan keberlakuan dari sisa Perjanjian ini. -**b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. +**c. Seluruh Perjanjian - Penyangkalan Kepercayaan**. Perjanjian ini merupakan seluruh perjanjian antara Para Pihak berkenaan dengan masalah pokok perjanjian ini dan menggantikan semua perjanjian atau pemahaman sebelumnya antara Para Pihak. Pengguna secara tegas menyatakan dan menjamin bahwa itu tidak bergantung pada pernyataan, pemahaman, representasi, harapan atau perjanjian selain dari yang secara tegas diatur dalam Perjanjian ini. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**d. PERJANJIAN INI BERGANTUNG PADA ARBITRASI YANG MENGIKAT.** Pengguna setuju bahwa setiap dan semua perselisihan atau klaim terhadap siapa pun yang timbul dari atau dengan cara apa pun terkait dengan Perjanjian ini atau akses, penggunaan atau instalasi Perangkat Lunak oleh Pengguna atau orang lain harus bergantung pada arbitrase yang mengikat berdasarkan Peraturan Arbitrase Ruang Dagang Internasional oleh satu atau lebih arbiter yang ditunjuk sesuai dengan Aturan tersebut. Lokasi arbitrase adalah Jepang. Bahasa arbitrase adalah bahasa Inggris. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. - -**e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. +**e. BAHASA.** Semua Terjemahan dalam Perjanjian ini dibuat untuk tujuan rujukan lokal dan jika terjadi ketidakkonsistenan antara versi bahasa Inggris dan non-Inggris, versi bahasa Inggris dari Perjanjian ini yang akan berlaku dan mengatur dalam segala hal. ## 12. Delegation and Staking @@ -106,4 +74,4 @@ If you have any questions or concerns regarding the accuracy or reliability of t 12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. From ea5f538d3ec9ce4826d3ac0710c003d484407f40 Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:37 +0100 Subject: [PATCH 318/464] New translations en-us.md (Croatian) --- .../i18n/locales/terms-of-use/ada/hr-HR.md | 72 ++++++------------- 1 file changed, 20 insertions(+), 52 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/hr-HR.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/hr-HR.md index 62a96a1ef3..617f0e1f22 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/hr-HR.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/hr-HR.md @@ -1,102 +1,70 @@ # Terms of Service Agreement -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Co., Ltd. ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties." BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. ## 1. Rights and Obligations -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. **b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. ## 2. Taxes and Fees -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. ## 3. User Representations -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. ## 4. Prohibited Uses -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. ## 5. Termination -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. ## 6. Disclaimer of Warranties -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. ## 7. Limitation of Liability -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. ## 8. Indemnification -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. ## 9. Intellectual Property -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to, EMURGO Co., Ltd., EMURGO, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. ## 10. Warnings -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. - -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. ## 11. Miscellaneous -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. **b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**c. Entire Agreement – Disclaimer of Reliance**. This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. +**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. **e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. ## 12. Delegation and Staking @@ -106,4 +74,4 @@ If you have any questions or concerns regarding the accuracy or reliability of t 12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. From a832ca4eadb5eab913d11b569e26c6ce2242e38b Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 10:40:09 +0100 Subject: [PATCH 319/464] New translations en-us.md (ja-JP) --- .../i18n/locales/terms-of-use/ada/ja-JP.md | 102 ++++++------------ 1 file changed, 35 insertions(+), 67 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/ja-JP.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/ja-JP.md index 2cf69f4877..c2d6afc522 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/ja-JP.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/ja-JP.md @@ -1,102 +1,70 @@ -# Terms of Service Agreement +# サービス規約 -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +このサービス規約(以下「本規約」といいます。)は、株式会社EMURGO(以下「当社」といいます。)と、ヨロイクリプトカレンシーウォレットと称するアプリケーションとしてのソフトウェアおよび上記ソフトウェアとともに当社により提供または作成されるデータプロセシングサービス、アプリケーション、通信サービスその他コンテンツ(以下「本ソフトウェア」といいます。)をダウンロードし、利用し、または操作するための手続を完了した者(個人又は法人)(以下「ユーザー」といいます。)との間で締結されるものです。当社およびユーザーを「両当事者」と総称します。 承認ボタンをクリックする、あるいは本ソフトウェアのいずれかの部分にアクセスし、本ソフトウェアのいずれかの部分を利用し、または本ソフトウェアのいずれかの部分をインストールすることにより、ユーザーは、本規約のすべての条項に法的に拘束されることについて明示的に同意したこととなります。本規約のすべての条項に同意しない場合には、ユーザーは、本ソフトウェアのいずれの部分もアクセスし、利用し、またはインストールすることができないものとします。 -## 1. Rights and Obligations +## 1. 権利および義務 -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. 種類** 本ソフトウェアは、無償のオープンソースの仮想通貨ウォレットとして機能します。本ソフトウェアは、当社またはその他の第三者がユーザーのADAその他の仮想通貨に関する金融仲介業者または管理業者となるアカウントを構成するものではありません。 本ソフトウェアはベータ・テストを受けており、デベロッパーコミュニティ、オープンソースコントリビューターおよびベータテスターからのフィードバックにより引き続き改良されますが、当社は、本ソフトウェアにバグがないことを保証するものではありません。ユーザーは、ユーザーによる本ソフトウェアの利用はユーザーの責任、裁量によるものであり、かつ、適用されるすべての法律に従うことを承知しています。ユーザーは、本ソフトウェアまたは何らかの情報、ADA、バウチャーその他の仮想通貨ユニットにアクセスするためにユーザーが利用するユーザーのパスワード、個人識別番号(PIN)、プライベートキー、還元キー、保護されたベンディングキー(shielded Vending Key)、バックアップリカバリー・ニーモニックパスフレーズ(backup recovery mnemonic passphrases)、ADAパスコードおよびその他のコードを保管する責任を負います。 ユーザーがユーザーの仮想通貨ウォレットまたはプライベートキーへのアクセスを失ったものの、ユーザーの仮想通貨ウォレットまたはバックアップリカバリー・ニーモニックフレーズおよび対応するパスワードのバックアップを別途保存していなかった場合には、ユーザーは、ユーザーが当該仮想通貨ウォレットに関連づけていたADAその他の仮想通貨にアクセスできなくなることを承知しており、これに同意します。なお、いずれの取引要求も撤回できません。当社ならびにその株主、取締役、役員、従業員、関連会社および代理人は、取引確認を保証することができず、ユーザーがユーザーのプライベートキーまたはパスワードを紛失または失念した場合であってもそれらを取り戻すことができません。 -**b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. +**b. アクセシビリティ** ユーザーは、本ソフトウェアが何らかの理由((i)機器の故障、(ii)当社が随時実施することのある定期メンテナンス手続または定期修理、または(iii)当社が制御できないまたは当社が合理的に予見できない原因を含みますが、これらに限られません。)により随時アクセス不能または操作不能となる可能性があることに同意します。 -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. 機器** ユーザーは、ユーザーが本ソフトウェアを利用するためのすべてのハードウェア、ソフトウェア、電気に関する要件その他の物理的要件(本ソフトウェアにアクセスし、本ソフトウェアを利用するために必要な電気通信ならびにインターネットアクセス接続およびリンク、ウェブブラウザその他の機器、プログラムおよびサービスを含みますが、これらに限られません。)を提供し、維持し、本ソフトウェアとの互換性を確保することについて単独で責任を負うものとします。 -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. セキュリティ** ユーザーは、ユーザーが本ソフトウェアを通じて送受信し、または本ソフトウェア上で保存するすべての情報およびコンテンツのセキュリティ、機密性および完全性について単独で責任を負うものとします。ユーザーは、いずれかの者によるユーザーのアカウントへの正規のアクセスまたは不正なアクセスについて単独で責任を負うものとします。ユーザーは、ユーザーのセキュリティデバイス、情報、キーおよびパスワードの機密性について一切の責任を負うことに同意します。 -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. プライバシー** 合理的に実施可能な場合には、当社は、ユーザーのプライバシーを尊重するよう努めます。当社は、ユーザーの事前の同意なくユーザーまたはユーザーのアカウント(その内容またはユーザーによる本ソフトウェアの利用を含みます。)に関する個人情報を監視し、編集し、または開示しません(但し、(i)政府当局の法的手続またはその他の法的要件に従うために、(ii)当社の権利または財産を守るために、(iii)本規約を履行するために、(iv)ユーザー以外の本ソフトウェアの利用者またはその他の者の権利を保護するために、または(v)当社のサービスまたは機器(法律により認められる場合には本ソフトウェアを含みます。)を運用し、またはそれらのメンテナンスおよび修理を行うためにかかる行為が必要であると当社が誠実に判断した場合については、この限りでありません。)。ユーザーは、インターネット全般についてプライバシーを期待できません。ユーザーのIPアドレスは、ユーザーが本ソフトウェアから送信する各メッセージまたはその他の情報とともに送信され、記録されます。 -## 2. Taxes and Fees +## 2. 税金および手数料 -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +通貨両替手数料、第三者の手数料、売上税、使用税、付加価値税、動産税その他のあらゆる種類の税金、関税および賦課金(これらに係る利息および罰金を含みます。)(政府機関により現在課せられているものか、または将来課せられるものかを問いません。)、ならびにユーザーによる本ソフトウェアへのアクセス、本ソフトウェアの利用または本ソフトウェアのインストールによりユーザーに生じる手数料は、すべてユーザーが単独で負担するものとします。 -## 3. User Representations +## 3. ユーザーの表明 -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +ユーザーは、当社に対し、(a)ユーザーが自然人である場合には、ユーザーが18歳を超えていること、(b)ユーザーは本規約を締結し、本規約に基づくユーザーの義務を履行する権限および権能を有していること、(c)ユーザーが当社に提供する情報はすべて真実、正確かつ完全であること、(d)ユーザーはユーザーによる本ソフトウェアへのアクセス、本ソフトウェアの利用または本ソフトウェアのインストールに関して関係法域のすべての法令を遵守すること、(e)ユーザーは本規約のすべての条項(第4条に定める規定を含みますが、これに限られません。)を遵守すること、ならびに(f)ユーザーは本ソフトウェアへのアクセス、本ソフトウェアの利用または本ソフトウェアのインストールに必要な正確かつ完全な情報を提供しており、今後も提供することを表明し、保証します。 -## 4. Prohibited Uses +## 4. 禁止される利用 -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +ユーザーは、ユーザーのアカウント、セキュリティ情報、キーまたはパスワードにより生じるすべての作為および不作為について単独で責任を負います。また、ユーザーは、容認できない本ソフトウェアの利用((a)一方的なメッセージ、チェーンレターまたは一方的な商業電子メールを拡散し、保存し、または送信すること、(b)一般に侮辱的である、卑猥である、猥褻である、中傷的である、嫌がらせである、著しく不快である、淫らである、脅迫的であるまたは悪意のある可能性のある資料等を拡散し、または送信すること、(c)いずれかの者の著作権、商標、特許、営業秘密またはその他の知的財産権を実際に侵害しているかまたは侵害する可能性のあるファイル、画像、ソフトウェアまたはその他の資料等を拡散し、保存し、または送信すること、(d)通信の同一性もしくは出所について、別人になりすます、またはその他の形でいずれかの者を誤解させようと試みること、(e)関係法域の輸出入関係法令もしくは規則に違反して、または必要なすべての許認可もしくは免除を受けずにメッセージまたはコンテンツを輸出し、再輸出し、またはそれらのダウンロードを許可すること、(f)本ソフトウェアまたはその他のコンピュータネットワーク上のその他のアカウントを妨害し、中断し、またはかかるアカウントに不正にアクセスしようと試みること、または(g)ウイルス、トロイの木馬その他の悪意のあるコードまたはプログラムを拡散し、保存し、または送信することを目的とした本ソフトウェアの利用を含みますが、これらに限られません。)を行わないことに同意します。 -## 5. Termination +## 5. 解除 -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +本規約は、本規約に規定するユーザーによる承認をもって発効し、ユーザーが本ソフトウェアへのアクセス、本ソフトウェアの利用または本ソフトウェアのインストールを行う間有効に存続するものとします。当社は、自己の裁量で、通知なく、いつでも理由の如何を問わず(a)本ソフトウェアの全部または一部へのアクセスを除外し、または無効とし、(b)ユーザーによる本ソフトウェアの全部または一部へのアクセスまたはその利用を停止し、(c)本規約を解除する権利を有します。 -## 6. Disclaimer of Warranties +## 6. 保証の放棄 -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +本ソフトウェアは、明示または黙示を問わずいかなる種類の保証もない「現状有姿」で提供されます。本ソフトウェアの利用は、ユーザーの単独の責任によります。当社は、本ソフトウェアが中断されずエラーフリーであることを保証せず、本ソフトウェアを利用することにより得られる可能性のある結果についても何ら保証しません。当社は、明示または黙示を問わずその他の保証を行いません。当社は、商品性の保証、特定目的適合性の保証、所有権または権利の保証および不侵害の保証を明確に放棄します。 -## 7. Limitation of Liability +## 7. 責任の限定 -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +いかなる場合であっても、当社ならびにその株主、取締役、役員、従業員、関連会社および代理人ならびに当社およびこれらのサービスプロバイダは、利用、中断、遅延または本ソフトウェアの利用不能、収益減または逸失利益、サービス、事業または信用の遅延、中断または喪失、データの喪失または破損、システムまたはシステムサービスの障害に起因する損失、誤作動またはシャットダウン、情報の正確な転送、読み取りまたは送信ができないこと、正確な情報を更新しまたは提供できないこと、システムの非互換性、不正確な互換性情報の提供またはシステムセキュリティの侵害について、また、間接損害賠償金、付随的損害賠償金、懲罰的損害賠償金または特別損害賠償金(本規約、契約違反、不法行為(過失を含みます。)またはその他に起因または関連するか否かを問いません。)(かかる損害賠償金が予見可能であったか否か、また、当社らがかかる損害賠償金の可能性について通知を受けていたか否かを問いません。)について、ユーザーまたは第三者に対し責任を負わないものとします。 いかなる場合であっても、当社ならびにその株主、取締役、役員、従業員、関連会社または代理人ならびに当社およびこれらのサービスプロバイダは、ユーザーによる本ソフトウェアへのアクセス、本ソフトウェアの利用または本ソフトウェアのインストールに起因し、または何らかの形で関連するいかなる請求、損害その他の債務(訴訟上、契約上、不法行為上またはその他の別を問いません。)についても責任を負わないものとします。 一部の法域では付随的損害賠償金または間接損害賠償金の除外または制限を禁止しているため、この責任の限定がユーザーに適用されない可能性があります。ユーザーが本ソフトウェアに満足していない場合におけるユーザーの唯一かつ排他的な救済手段は、ユーザーによる本ソフトウェアの利用の中止とします。 -## 8. Indemnification +## 8. 補償 -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +ユーザーは、(a)本規約、(b)ユーザーによる本ソフトウェア(ユーザーが送受信するデータまたは著作物を含みます。)へのアクセス、本ソフトウェア(ユーザーが送受信するデータまたは著作物を含みます。)の利用または本ソフトウェア(ユーザーが送送受信するデータまたは著作物を含みます。)のインストール、および(c)いずれかの者による本ソフトウェアの容認されない利用(第4条により容認されないものとして禁止されている、ユーザーまたはいずれかの者により行われ、送信され、または再公表される陳述、データまたはコンテンツを含みますが、これらに限られません。)に起因または関連していずれかの者が主張するいかなる訴え、訴訟、請求、損害、負債、要求または債務(合理的な費用および弁護士報酬を含みます。)についても当社、その株主、取締役、役員、従業員、関連会社および代理人(以下「被補償当事者」といいます。)を補償し、被補償当事者を免責し、被補償当事者を防御することに同意します。この補償には、当社または被補償当事者の過失とされるもの(重過失とされるものを含みます。)またはその他の違法行為とされるものに対する当社およびすべての被補償当事者の明示の補償を含みます。 -## 9. Intellectual Property +## 9. 知的財産 -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +当社は、当社のすべてのブランド、ロゴおよび商標(株式会社EMURGO、EMURGO、ヨロイ、ヨロイクリプトカレンシーウォレット、ヨロイウォレット、ヨロイアプリならびに上記のブランド、ロゴおよび商標の表現が変化したものを含みますが、これらに限られません。)に関するすべての権利、権限および利益を有します。 -## 10. Warnings +## 10. 警告 -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +ユーザーは、当社がプライベートキーおよび/またはユーザーのADAその他の仮想通貨を移動させ、保管し、または維持する責任を負わないものとすることを承知しています。ユーザーおよび/または共同署名権者が関連するプライベートキーを紛失し、その取扱いを誤り、もしくは窃取された場合またはユーザーの共同署名者が必要な権限を提供することを拒否した場合には、ユーザーは、ユーザーがユーザーのADAその他の仮想通貨を回収できなくなる可能性があること、また、かかる損失について当社は責任を負わないものとすることを承知しています。 ユーザーは、本ソフトウェアおよび/または当社により促進されるADAその他の仮想通貨の取引が遅延する可能性があること、また、遅延に伴ういかなる損失についても当社は責任を負わないものとすることを承知しており、これに同意します。 ユーザーは、本ソフトウェアおよび/または当社にアクセス可能なまたはリンクする第三者の資料等または第三者のサイトに含まれる情報、コンテンツまたはサービスのいずれの側面についても当社は責任を負わないものとすることを承知しており、これに同意します。 ユーザーは、ユーザーがユーザーの証明書をいかなる自然人または法人(当社、カルダノ財団、インプット・アウトプット・エイチケイ・リミテッドまたはその他の組織を含みます。)とも共有しないことに同意します。また、ユーザーは、ユーザーの証明書を共有することによりユーザーのADAその他の仮想通貨が失われる可能性があることを承知しており、かかる損失について当社は責任を負わないものとすることに同意します。 ユーザーは、テストネット上でADAを還元することによりユーザーはテストADAのみを還元すること、また、実際のADAを還元するためには、ユーザーはリリース後にメインネット上で手続を繰り返さなければならないことを承知しており、これに同意します。 本ソフトウェアを利用することにより、ユーザーは、(i)当社が下層プロトコルの運用について責任を負わないこと、また、当社がその機能性、セキュリティおよび可用性について何ら保証しないこと、(ii)規則の運用上、下層プロトコルはメインチェーンの突然の変更(以下「フォーク」といいます。)による影響を受ける可能性があること、また、かかるフォークはユーザーが本ソフトウェア上で保管するADAその他の仮想通貨の価値および/または機能に重大な影響を及ぼす可能性があることを承知しており、これらに同意します。フォークした場合、ユーザーは、当社が(ユーザーに通知した上で、またはユーザーに通知することなく)本ソフトウェアの運用を一時的に停止することができること、また、当社が自己の裁量で(a)自社システムの設定または再設定を行うことができること、または(b)フォークしたプロトコルを一切サポートしない(またはサポートを停止する)旨決定することができることに同意します(但し、ユーザーは、本ソフトウェアから資金を引き出す機会を有するものとします。)。ユーザーは、フォークしたプロトコルのうちサポート対象外のブランチについて当社は一切責任を負わないことを承知しており、これに同意します。 -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +**a. 変更** 当社は、ユーザーから当社に届け出のあったアドレス宛てのいずれかの媒体を通じた電子メッセージにより、変更後の条項をユーザーに提示することにより、いつでも通知なく本規約の条項を追加し、または変更することができるものとします。かかる変更後の条項がユーザーに提示された日の後にユーザーが本ソフトウェアにアクセスし、または本ソフトウェアを利用した場合には、かかる変更後の条項が承諾されたものとみなします。 -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. +**b. 分離解釈** 本規約のいずれかの規定またはいずれかの規定の一部が無効、違法または強制執行不能であるか、無効、違法または強制執行不能となる場合には、当該規定または当該規定の一部は、有効、適法かつ強制執行可能とするために必要な最小限度で変更されたものとみなします。かかる変更を行えない場合には、当該規定または当該規定の一部は削除されたものとみなします。本条に基づくいずれかの規定またはいずれかの規定の一部の変更または削除は、本規約の残りの規定の有効性および強制執行可能性に影響を及ぼさないものとします。 -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +## 11. その他 -## 11. Miscellaneous +**a. 変更 **当社は、ユーザーから当社に届け出のあったアドレス宛てのいずれかの媒体を通じた電子メッセージにより、変更後の条項をユーザーに提示することにより、いつでも通知なく本規約の条項を追加し、または変更することができるものとします。かかる変更後の条項がユーザーに提示された日の後にユーザーが本ソフトウェアにアクセスし、または本ソフトウェアを利用した場合には、かかる変更後の条項が承諾されたものとみなします。 -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**b. 分離解釈 **本規約のいずれかの規定またはいずれかの規定の一部が無効、違法または強制執行不能であるか、無効、違法または強制執行不能となる場合には、当該規定または当該規定の一部は、有効、適法かつ強制執行可能とするために必要な最小限度で変更されたものとみなします。かかる変更を行えない場合には、当該規定または当該規定の一部は削除されたものとみなします。本条に基づくいずれかの規定またはいずれかの規定の一部の変更または削除は、本規約の残りの規定の有効性および強制執行可能性に影響を及ぼさないものとします。 -**b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. +**c. 完全合意 – 依拠の放棄** 本規約は、本規約の内容に関する両当事者間の完全な合意を構成し、両当事者間における従前のすべての合意事項および了解事項に優先します。ユーザーは、本規約に明記されるもの以外の陳述、了解事項、表明事項、期待事項または合意事項に依拠していないことを明示的に表明し、保証します。 -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**d. 本規約は、拘束力のある仲裁に服します** ユーザーは、本規約またはユーザーもしくはその他の者による本ソフトウェアへのアクセス、本ソフトウェアの利用もしくは本ソフトウェアのインストールに起因し、または何らかの点で関連する紛争またはいずれかの者に対する請求はすべて国際商業会議所の仲裁規則に基づき選任される1名ないし複数名の仲裁人による同規則に基づく拘束力のある仲裁に服するものとすることに同意します。また、仲裁地は日本とし、仲裁言語は英語とします。 -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. - -**e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. +**e. 言語** 本規約の翻訳は、現地における参照の便宜のためにのみ作成されるものであり、英語版と英語以外の言語版との間に齟齬がある場合には本規約の英語版がすべての点において優先するものとします。 ## 12. 委任とステーキング @@ -106,4 +74,4 @@ If you have any questions or concerns regarding the accuracy or reliability of t 12.3 **当社のステークプール** 当社は、複数のステークプールを運営し、当該ステークプールはヨロイで可視化されます。かかるステークプールを確実に運営するためのコストならびにネットワークおよびサーバー要件は、当社の単独の裁量で決定されるものとします。当社は、ユーザーと共有する報酬額の割合をユーザーのヨロイウォレット経由で通知します。報酬は、各エポックの終了時に発生し、ユーザーのヨロイウォレットに自動的に表示されます。 -12.4 ** 報酬の引き出し** ユーザーは、報酬に課される可能性のあるすべての税金(該当する場合)、および報酬の引き出し後にユーザーに課される可能性のあるその他すべての税金の支払いに責任を負うものとします。 \ No newline at end of file +12.4 ** 報酬の引き出し** ユーザーは、報酬に課される可能性のあるすべての税金(該当する場合)、および報酬の引き出し後にユーザーに課される可能性のあるその他すべての税金の支払いに責任を負うものとします。 From 8a7c6992c8d30692c76a12000fdb3d58910e75de Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Mon, 1 Jul 2024 15:54:37 +0300 Subject: [PATCH 320/464] minor fixes --- .../transactionsModals/editMemoModal.page.js | 9 +++------ .../transactionsModals/memoWarningModal.page.js | 6 +++--- .../wallet/walletTab/walletTransactions.page.js | 17 ++++++++++++----- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/editMemoModal.page.js b/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/editMemoModal.page.js index 754fa3b71f..c9351a322e 100644 --- a/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/editMemoModal.page.js +++ b/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/editMemoModal.page.js @@ -56,7 +56,7 @@ class EditMemoDialog extends BasePage { await this.click(this.editMemoDialogCloseButtonLocator); } // * enter memo - async enterMemo(memoText, oldMessage) { + async enterMemo(memoText) { this.logger.info(`EditMemoDialog::enterMemo is called. Memo text: ${memoText}`); await this.click(this.editMemoDialogInputLocator); await this.clearInputAll(this.editMemoDialogInputLocator); @@ -73,11 +73,8 @@ class EditMemoDialog extends BasePage { async pressSave() { this.logger.info(`EditMemoDialog::pressSave is called.`); await this.click(this.editMemoDialogSaveButtonLocator); - const modalIsNotDisplayed = await this.customWaiter( - async () => { - const modalsWebElems = await this.findElements(this.editMemoDialogWindowLocator); - return modalsWebElems.length === 0; - }, + const modalIsNotDisplayed = await this.customWaitIsPresented( + this.editMemoDialogWindowLocator, fiveSeconds, quarterSecond ); diff --git a/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/memoWarningModal.page.js b/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/memoWarningModal.page.js index 8ee4436ef5..8617aab9b5 100644 --- a/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/memoWarningModal.page.js +++ b/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/memoWarningModal.page.js @@ -25,7 +25,7 @@ class MemoWarningModal extends BasePage { method: 'id', }; // * understandBtn - undesrtandButtonLocator = { + understandButtonLocator = { locator: 'memoNoExternalStorageDialog-iunderstand-button', method: 'id', }; @@ -54,13 +54,13 @@ class MemoWarningModal extends BasePage { // * confirm adding async understandAdding() { this.logger.info(`MemoWarningModal::understandAdding is called`); - await this.click(this.undesrtandButtonLocator); + await this.click(this.understandButtonLocator); return new AddMemoDialog(this.driver, this.logger); } // * confirm editing async understandEditing() { this.logger.info(`MemoWarningModal::understandEditing is called`); - await this.click(this.undesrtandButtonLocator); + await this.click(this.understandButtonLocator); return new EditMemoDialog(this.driver, this.logger); } } diff --git a/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js b/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js index def244b5cf..104ec6732b 100644 --- a/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js +++ b/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js @@ -1,5 +1,4 @@ import { - defaultWaitTimeout, fiveSeconds, quarterSecond, twoSeconds, @@ -162,10 +161,18 @@ export class TransactionsSubTab extends WalletTab { // methods async isDisplayed() { this.logger.info(`TransactionsSubTab::isDisplayed is called`); - const submenuState = await this.customWaitIsPresented(this.transactionsSubmenuItemLocator, fiveSeconds, quarterSecond); - const summaryState = await this.customWaitIsPresented(this.walletSummaryBoxLocator, fiveSeconds, quarterSecond); - - return submenuState && summaryState; + const submenuState = await this.customWaitIsPresented( + this.transactionsSubmenuItemLocator, + fiveSeconds, + quarterSecond + ); + const summaryState = await this.customWaitIsPresented( + this.walletSummaryBoxLocator, + fiveSeconds, + quarterSecond + ); + + return submenuState && summaryState; } async isWalletEmpty() { this.logger.info(`TransactionsSubTab::isWalletEmpty is called`); From d263abb41d54e0e51e1b3da2c0d105f97d956a14 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Mon, 1 Jul 2024 15:55:06 +0300 Subject: [PATCH 321/464] added id for delete memo modal --- .../app/components/wallet/memos/DeleteMemoDialog.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/yoroi-extension/app/components/wallet/memos/DeleteMemoDialog.js b/packages/yoroi-extension/app/components/wallet/memos/DeleteMemoDialog.js index d875f7abb2..d0eb168793 100644 --- a/packages/yoroi-extension/app/components/wallet/memos/DeleteMemoDialog.js +++ b/packages/yoroi-extension/app/components/wallet/memos/DeleteMemoDialog.js @@ -83,6 +83,7 @@ export default class DeleteMemoDialog extends Component { closeOnOverlayClick={false} closeButton={} onClose={onClose} + id='deleteMemoDialog' >
    { error ? () : null } From e76b74f36b259f02e62237cec4b4922a5d554b4a Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Mon, 1 Jul 2024 15:59:28 +0300 Subject: [PATCH 322/464] added delete memo page --- .../deleteMemoModal.page.js | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 packages/e2e-tests/pages/wallet/walletTab/transactionsModals/deleteMemoModal.page.js diff --git a/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/deleteMemoModal.page.js b/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/deleteMemoModal.page.js new file mode 100644 index 0000000000..4f9072ff9a --- /dev/null +++ b/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/deleteMemoModal.page.js @@ -0,0 +1,78 @@ +import { + defaultWaitTimeout, + fiveSeconds, + quarterSecond, +} from '../../../../helpers/timeConstants.js'; +import BasePage from '../../../basepage.js'; + +class DeleteMemoModal extends BasePage { + // locators + deleteDialogWindowLocator = { + locator: 'deleteMemoDialog-dialogWindow-modalWindow', + method: 'id', + }; + deleteDialogTitleLocator = { + locator: 'deleteMemoDialog-dialogTitle-text', + method: 'id', + }; + deleteDialogCloseButtonLocator = { + locator: 'deleteMemoDialog-closeModal-button', + method: 'id', + }; + cancelButtonLocator = { + locator: 'deleteMemoDialog-cancel-button', + method: 'id', + }; + deleteButtonLocator = { + locator: 'deleteMemoDialog-delete-button', + method: 'id', + }; + // methods + // * isDisplayed + async isDisplayed() { + this.logger.info(`DeleteMemoModal::isDisplayed is called`); + const windowState = await this.customWaitIsPresented( + this.deleteDialogWindowLocator, + fiveSeconds, + quarterSecond + ); + const titleState = await this.customWaitIsPresented( + this.deleteDialogTitleLocator, + fiveSeconds, + quarterSecond + ); + return windowState && titleState; + } + // * modal is not displayed + async isNotDisplayed() { + this.logger.info(`DeleteMemoModal::isNotDisplayed is called`); + const notPresented = await this.customWaiter( + async () => { + const allElements = await this.findElements(this.deleteDialogWindowLocator); + return allElements.length === 0; + }, + defaultWaitTimeout, + quarterSecond + ); + if (!notPresented) { + throw new Error('The Delete Memo modal is still displayed after 10 seconds'); + } + } + // * cancel + async pressCancel() { + this.logger.info(`DeleteMemoModal::pressCancel is called`); + await this.click(this.cancelButtonLocator); + } + // * close + async closeDialog() { + this.logger.info(`DeleteMemoModal::closeDialog is called`); + await this.click(this.deleteDialogCloseButtonLocator); + } + // * delete + async confirmDeleting() { + this.logger.info(`DeleteMemoModal::confirmDeleting is called`); + await this.click(this.deleteButtonLocator); + } +} + +export default DeleteMemoModal; From 024662dd455a495642d0cfc63f6e8ebf0b1e52d7 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Mon, 1 Jul 2024 16:00:28 +0300 Subject: [PATCH 323/464] added deleteMemo method --- .../transactionsModals/editMemoModal.page.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/editMemoModal.page.js b/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/editMemoModal.page.js index c9351a322e..2a3abc4ed5 100644 --- a/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/editMemoModal.page.js +++ b/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/editMemoModal.page.js @@ -1,5 +1,6 @@ import { fiveSeconds, quarterSecond } from '../../../../helpers/timeConstants.js'; import BasePage from '../../../basepage.js'; +import DeleteMemoModal from './deleteMemoModal.page.js'; class EditMemoDialog extends BasePage { // locators @@ -83,6 +84,23 @@ class EditMemoDialog extends BasePage { throw new Error('Save memo modal is still displayed after 5 seconds'); } } + + // * delete message by pressing cross button + async deleteMemo(confrimDeleting = true) { + this.logger.info(`EditMemoDialog::deleteMemo is called`); + await this.click(this.editMemoDialogDeleteButtonLocator); + const deleteModal = new DeleteMemoModal(this.driver, this.logger); + const deleteModalState = await deleteModal.isDisplayed(); + if (!deleteModalState) { + throw new Error('Save memo modal is still displayed after 5 seconds'); + } + if (confrimDeleting) { + await deleteModal.confirmDeleting(); + await deleteModal.isNotDisplayed(); + } else { + await deleteModal.pressCancel(); + } + } } export default EditMemoDialog; From 03dc62dddb26285cdcc7c626a18630fd49c25d70 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Mon, 1 Jul 2024 16:02:34 +0300 Subject: [PATCH 324/464] added method thereIsNoMemo --- .../wallet/walletTab/walletTransactions.page.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js b/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js index 104ec6732b..96da201884 100644 --- a/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js +++ b/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js @@ -1,6 +1,7 @@ import { fiveSeconds, quarterSecond, + threeSeconds, twoSeconds, } from '../../../helpers/timeConstants.js'; import WalletTab from './walletTab.page.js'; @@ -473,6 +474,21 @@ export class TransactionsSubTab extends WalletTab { this.logger.info(`TransactionsSubTab::getMemoMessage::result ${result}`); return result; } + async thereIsNoMemo(groupIndex, txIndex) { + this.logger.info( + `TransactionsSubTab::thereIsNoMemo is called. Group index: ${groupIndex}, tx index: ${txIndex}` + ); + const memoMsgLocator = this.txMemoContentTextLocator(groupIndex, txIndex); + const noMemoState = await this.customWaiter( + async () => { + const allElements = await this.findElements(memoMsgLocator); + return allElements.length === 0; + }, + threeSeconds, + quarterSecond + ); + return noMemoState; + } } export default TransactionsSubTab; From e47cc49ed2dfb9dc1e03076e80a207c7bf40ef59 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Mon, 1 Jul 2024 16:02:58 +0300 Subject: [PATCH 325/464] added test for deleting a memo --- .../e2e-tests/test/24_deletingMemo.test.js | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 packages/e2e-tests/test/24_deletingMemo.test.js diff --git a/packages/e2e-tests/test/24_deletingMemo.test.js b/packages/e2e-tests/test/24_deletingMemo.test.js new file mode 100644 index 0000000000..6b903565bc --- /dev/null +++ b/packages/e2e-tests/test/24_deletingMemo.test.js @@ -0,0 +1,93 @@ +import BasePage from '../pages/basepage.js'; +import { customAfterEach } from '../utils/customHooks.js'; +import TransactionsSubTab from '../pages/wallet/walletTab/walletTransactions.page.js'; +import { expect } from 'chai'; +import { getTestLogger } from '../utils/utils.js'; +import { oneMinute } from '../helpers/timeConstants.js'; +import driversPoolsManager from '../utils/driversPool.js'; +import AddNewWallet from '../pages/addNewWallet.page.js'; + +describe('Deleting a memo', function () { + this.timeout(2 * oneMinute); + let webdriver = null; + let logger = null; + const oldMemo = 'j1hKEo4Er4FDLFAtGBo07jIcXBSOqx9D16U0sUIl'; + + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); + logger = getTestLogger(this.test.parent.title); + }); + + it('Prepare DB and storages', async function () { + const addWalletPage = new AddNewWallet(webdriver, logger); + const state = await addWalletPage.isDisplayed(); + expect(state).to.be.true; + await addWalletPage.prepareDBAndStorage('testWallet1MemoAdded'); + await addWalletPage.refreshPage(); + }); + + it('Check transactions page', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + await transactionsPage.waitPrepareWalletBannerIsClosed(); + const txPageIsDisplayed = await transactionsPage.isDisplayed(); + expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; + }); + + it('Expand tx', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + await transactionsPage.clickOnTxRow(0, 0); + }); + + it('Delete memo', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + const memoMessage = await transactionsPage.getMemoMessage(0, 0); + expect(memoMessage).to.equal(oldMemo); + + // click edit memo + const memoWarningModal = await transactionsPage.clickEditMemo(0, 0); + const warningIsDisplayed = await memoWarningModal.isDisplayed(); + expect(warningIsDisplayed).to.be.true; + + const editMemoModal = await memoWarningModal.understandEditing(); + const editMemoModalIsDisplayed = await editMemoModal.isDisplayed(); + expect(editMemoModalIsDisplayed).to.be.true; + + // click delete memo + await editMemoModal.deleteMemo(); + }); + + // check the memo displayed message + it('Check deleted memo', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + await transactionsPage.clickOnTxRow(0, 0); + const noMemo = await transactionsPage.thereIsNoMemo(0, 0); + expect(noMemo).to.be.true; + const memosInDB = await transactionsPage.getInfoFromIndexedDB('TxMemo'); + expect(memosInDB.length).to.equal(0); + }); + + // reload the page + it('Refresh page', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + await transactionsPage.refreshPage(); + }); + + // check the memo displayed message again + it('Check deleted memo again', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + await transactionsPage.clickOnTxRow(0, 0); + const noMemo = await transactionsPage.thereIsNoMemo(0, 0); + expect(noMemo).to.be.true; + }); + + afterEach(function (done) { + customAfterEach(this, webdriver, logger); + done(); + }); + + after(function (done) { + const basePage = new BasePage(webdriver, logger); + basePage.closeBrowser(); + done(); + }); +}); From 3805a79291488aac105c177b3ae4185bb3fdf657 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Mon, 1 Jul 2024 19:21:09 +0300 Subject: [PATCH 326/464] added the method customWaitIsNotPresented --- packages/e2e-tests/pages/basepage.js | 16 ++++++++++++++++ .../transactionsModals/editMemoModal.page.js | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/e2e-tests/pages/basepage.js b/packages/e2e-tests/pages/basepage.js index 923571bc1f..83e1e2b80d 100644 --- a/packages/e2e-tests/pages/basepage.js +++ b/packages/e2e-tests/pages/basepage.js @@ -335,6 +335,22 @@ class BasePage { ); return result; } + async customWaitIsNotPresented( + locator, + timeout = defaultWaitTimeout, + repeatPeriod = defaultRepeatPeriod + ) { + this.logger.info(`BasePage::customWaitIsNotPresented is called.`); + const result = await this.customWaiter( + async () => { + const elemsPresented = await this.findElements(locator); + return elemsPresented.length === 0; + }, + timeout, + repeatPeriod + ); + return result; + } async waitPresentedAndAct( locator, funcToCall, diff --git a/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/editMemoModal.page.js b/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/editMemoModal.page.js index 2a3abc4ed5..ddbc3dc6ee 100644 --- a/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/editMemoModal.page.js +++ b/packages/e2e-tests/pages/wallet/walletTab/transactionsModals/editMemoModal.page.js @@ -74,7 +74,7 @@ class EditMemoDialog extends BasePage { async pressSave() { this.logger.info(`EditMemoDialog::pressSave is called.`); await this.click(this.editMemoDialogSaveButtonLocator); - const modalIsNotDisplayed = await this.customWaitIsPresented( + const modalIsNotDisplayed = await this.customWaitIsNotPresented( this.editMemoDialogWindowLocator, fiveSeconds, quarterSecond From b229c0b576b104b24cf5b44dfed61df6061fb758 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Mon, 1 Jul 2024 19:52:12 +0300 Subject: [PATCH 327/464] replaced waitFoElement --- .../e2e-tests/pages/walletCommonBase.page.js | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/packages/e2e-tests/pages/walletCommonBase.page.js b/packages/e2e-tests/pages/walletCommonBase.page.js index 8754ef6d4e..cbc0e94703 100644 --- a/packages/e2e-tests/pages/walletCommonBase.page.js +++ b/packages/e2e-tests/pages/walletCommonBase.page.js @@ -132,13 +132,10 @@ class WalletCommonBase extends BasePage { } ); - const adaBalance = await this.waitPresentedAndAct( - this.walletBalanceTextLocator, - async () => { - const rawBalanceText = await this.getText(this.walletBalanceTextLocator); - return Number(rawBalanceText.split(' ')[0]); - } - ); + const adaBalance = await this.waitPresentedAndAct(this.walletBalanceTextLocator, async () => { + const rawBalanceText = await this.getText(this.walletBalanceTextLocator); + return Number(rawBalanceText.split(' ')[0]); + }); const [fiatBalance, fiatCurrency] = await this.waitPresentedAndAct( this.walletFiatBalanceTextLocator, @@ -221,8 +218,10 @@ class WalletCommonBase extends BasePage { } async openChangeWalletModal() { this.logger.info(`WalletCommonBase::openChangeWalletModal is called`); - const selectWalletBtnElem = await this.waitForElement(this.selectedWalletButtonLocator); - await selectWalletBtnElem.click(); + await this.waitPresentedAndAct( + this.selectedWalletButtonLocator, + async () => await this.click(this.selectedWalletButtonLocator) + ); await this.waitForElement(this.changeWalletDialogLocator); } async addNewWallet() { From 844edbfa990e7ff4db48265822f9275fb044c6ee Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Mon, 1 Jul 2024 20:08:17 +0300 Subject: [PATCH 328/464] added function description --- packages/e2e-tests/pages/basepage.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/e2e-tests/pages/basepage.js b/packages/e2e-tests/pages/basepage.js index 83e1e2b80d..b4176259ac 100644 --- a/packages/e2e-tests/pages/basepage.js +++ b/packages/e2e-tests/pages/basepage.js @@ -351,6 +351,14 @@ class BasePage { ); return result; } + /** + * The function wait until the passed element is found and call the passed function + * @param {{locator: string, method: id}} locator Element locator + * @param {object} funcToCall A function that should be called when the element is found + * @param {number} timeout Total time of search in milliseconds. Default values is **5000** milliseconds + * @param {number} repeatPeriod The time after which it is necessary to repeat the check. Default value is **250** milliseconds + * @returns {Promise} + */ async waitPresentedAndAct( locator, funcToCall, From 15c84c52c774c779ce0da14581fb19346f230d48 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Mon, 1 Jul 2024 20:33:28 +0300 Subject: [PATCH 329/464] updated loading txs --- .../pages/wallet/walletTab/walletTransactions.page.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js b/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js index 96da201884..03458bbd79 100644 --- a/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js +++ b/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js @@ -357,18 +357,18 @@ export class TransactionsSubTab extends WalletTab { return loaderIsNotDisplayed; } async _loadMore() { - const showMoreIsDisplayed = this.showMoreBtnIsDisplayed(); - const loaderIsDisplayed = this.loaderIsDisplayed(); - if (!(await showMoreIsDisplayed) && !(await loaderIsDisplayed)) { + const showMoreIsDisplayed = await this.showMoreBtnIsDisplayed(); + const loaderIsDisplayed = await this.loaderIsDisplayed(); + if (!showMoreIsDisplayed && !loaderIsDisplayed) { return false; } - if (await showMoreIsDisplayed) { + if (showMoreIsDisplayed) { await this.scrollIntoView(this.showMoreTxsButtonLocator); await this.click(this.showMoreTxsButtonLocator); await this.sleep(quarterSecond); return true; } - if (await loaderIsDisplayed) { + if (loaderIsDisplayed) { await this.scrollIntoView(this.txsLoaderSpinnerLocator); const result = await this.waitLoaderIsNotDisplayed(fiveSeconds, quarterSecond); if (!result) { From 4642ac59c4901075d7cc653ef3ea4f0dcdf8419b Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 2 Jul 2024 14:02:39 +0300 Subject: [PATCH 330/464] added id for the eye icon on top bar wallet info panel --- .../app/components/topbar/NavWalletDetailsRevamp.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/yoroi-extension/app/components/topbar/NavWalletDetailsRevamp.js b/packages/yoroi-extension/app/components/topbar/NavWalletDetailsRevamp.js index fd3c99b5bc..cbe4eac732 100644 --- a/packages/yoroi-extension/app/components/topbar/NavWalletDetailsRevamp.js +++ b/packages/yoroi-extension/app/components/topbar/NavWalletDetailsRevamp.js @@ -158,6 +158,7 @@ export default class NavWalletDetailsRevamp extends Component { }, }} color="primary" + id={amountDisplayId + '-showHideBalance-button'} > {shouldHideBalance ? : } From 2ae31f32caea8f51f85c1dae5706de896d68e3e4 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 2 Jul 2024 14:03:18 +0300 Subject: [PATCH 331/464] added locator for the eye icon --- packages/e2e-tests/pages/walletCommonBase.page.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/e2e-tests/pages/walletCommonBase.page.js b/packages/e2e-tests/pages/walletCommonBase.page.js index cbc0e94703..dbda470d25 100644 --- a/packages/e2e-tests/pages/walletCommonBase.page.js +++ b/packages/e2e-tests/pages/walletCommonBase.page.js @@ -57,6 +57,10 @@ class WalletCommonBase extends BasePage { locator: 'topBar:selectedWallet-availableFiatBalance-text', method: 'id', }; + walletGideBalanceButtonLocator = { + locator: 'topBar:selectedWallet-showHideBalance-button', + method: 'id', + } // change wallet modal window changeWalletDialogLocator = { locator: 'changeWalletDialog-dialogWindow-modalWindow', From 0fed20b9383dc7c5b713a855f338967fa9a6c7b5 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 2 Jul 2024 14:03:31 +0300 Subject: [PATCH 332/464] added a template for the test --- .../e2e-tests/test/25_hideShowBalance.test.js | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 packages/e2e-tests/test/25_hideShowBalance.test.js diff --git a/packages/e2e-tests/test/25_hideShowBalance.test.js b/packages/e2e-tests/test/25_hideShowBalance.test.js new file mode 100644 index 0000000000..16cfc25d31 --- /dev/null +++ b/packages/e2e-tests/test/25_hideShowBalance.test.js @@ -0,0 +1,54 @@ +import BasePage from '../pages/basepage.js'; +import { customAfterEach } from '../utils/customHooks.js'; +import TransactionsSubTab from '../pages/wallet/walletTab/walletTransactions.page.js'; +import { expect } from 'chai'; +import { getTestLogger } from '../utils/utils.js'; +import { oneMinute } from '../helpers/timeConstants.js'; +import driversPoolsManager from '../utils/driversPool.js'; +import AddNewWallet from '../pages/addNewWallet.page.js'; + +describe('Deleting a memo', function () { + this.timeout(2 * oneMinute); + let webdriver = null; + let logger = null; + const oldMemo = 'j1hKEo4Er4FDLFAtGBo07jIcXBSOqx9D16U0sUIl'; + + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); + logger = getTestLogger(this.test.parent.title); + }); + + it('Prepare DB and storages', async function () { + const addWalletPage = new AddNewWallet(webdriver, logger); + const state = await addWalletPage.isDisplayed(); + expect(state).to.be.true; + await addWalletPage.prepareDBAndStorage('testWallet1MemoAdded'); + await addWalletPage.refreshPage(); + }); + + it('Check transactions page', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + await transactionsPage.waitPrepareWalletBannerIsClosed(); + const txPageIsDisplayed = await transactionsPage.isDisplayed(); + expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; + }); + + // check the default state. The balance should be displayed + // click hide balance + // check balance on the the top bar wallet info panel + // check balance in a collapsed tx + // check balance in an expanded tx + // check balance on Receive tab + // add checking Staking page when testnetwork is added + + afterEach(function (done) { + customAfterEach(this, webdriver, logger); + done(); + }); + + after(function (done) { + const basePage = new BasePage(webdriver, logger); + basePage.closeBrowser(); + done(); + }); +}); From 1ea29673e367b14d1dc57e2e13dfa1113682e520 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 2 Jul 2024 14:19:59 +0300 Subject: [PATCH 333/464] moved preparing db and wait tx page into separate function from tests --- packages/e2e-tests/helpers/restoreWalletHelper.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/packages/e2e-tests/helpers/restoreWalletHelper.js b/packages/e2e-tests/helpers/restoreWalletHelper.js index 50d5439c50..a6d35b4763 100644 --- a/packages/e2e-tests/helpers/restoreWalletHelper.js +++ b/packages/e2e-tests/helpers/restoreWalletHelper.js @@ -96,3 +96,18 @@ export const createWallet = async (webdriver, logger, testWalletName) => { ); return walletInfo; }; + +export const preloadDBAndStorage = async (webdriver, logger, templateName) => { + const addWalletPage = new AddNewWallet(webdriver, logger); + const state = await addWalletPage.isDisplayed(); + expect(state).to.be.true; + await addWalletPage.prepareDBAndStorage(templateName); + await addWalletPage.refreshPage(); +}; + +export const waitTxPage = async (webdriver, logger) => { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + await transactionsPage.waitPrepareWalletBannerIsClosed(); + const txPageIsDisplayed = await transactionsPage.isDisplayed(); + expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; +}; From 9c8b259a6d17fbfad55c4d63056dad9d3df6fd8a Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 2 Jul 2024 19:29:11 +0300 Subject: [PATCH 334/464] added id for addresses amounts --- .../components/wallet/transactions/TransactionRevamp.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/components/wallet/transactions/TransactionRevamp.js b/packages/yoroi-extension/app/components/wallet/transactions/TransactionRevamp.js index 9573d8add6..c7f88c0d23 100644 --- a/packages/yoroi-extension/app/components/wallet/transactions/TransactionRevamp.js +++ b/packages/yoroi-extension/app/components/wallet/transactions/TransactionRevamp.js @@ -510,7 +510,13 @@ export default class TransactionRevamp extends Component { {this.generateAddressButton(request.address.address)} - + {renderAmount(request.address.value.getDefaultEntry())} {request.address.value.nonDefaultEntries().map(entry => ( From 64a9be932d36e443b8c7bb2accf51295e80dc1d8 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 2 Jul 2024 20:23:43 +0300 Subject: [PATCH 335/464] added constant for balance replacer --- packages/e2e-tests/helpers/constants.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/e2e-tests/helpers/constants.js b/packages/e2e-tests/helpers/constants.js index cf28bf61e1..429b1bed9a 100644 --- a/packages/e2e-tests/helpers/constants.js +++ b/packages/e2e-tests/helpers/constants.js @@ -124,3 +124,5 @@ export const yoroiObject = Object.freeze({ export const Colors = Object.freeze({ errorRed: 'rgb(255, 19, 81)', }); + +export const balanceReplacer = '******'; From 48517d724b146472f4567fcd197bc3640fdbbfe8 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 2 Jul 2024 20:24:37 +0300 Subject: [PATCH 336/464] added methods for hiding and showing balance on the top bar panel --- .../e2e-tests/pages/walletCommonBase.page.js | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/packages/e2e-tests/pages/walletCommonBase.page.js b/packages/e2e-tests/pages/walletCommonBase.page.js index dbda470d25..515d3888da 100644 --- a/packages/e2e-tests/pages/walletCommonBase.page.js +++ b/packages/e2e-tests/pages/walletCommonBase.page.js @@ -1,3 +1,4 @@ +import { balanceReplacer } from '../helpers/constants.js'; import { defaultWaitTimeout, fiveSeconds, @@ -57,10 +58,10 @@ class WalletCommonBase extends BasePage { locator: 'topBar:selectedWallet-availableFiatBalance-text', method: 'id', }; - walletGideBalanceButtonLocator = { + walletBalanceVisibilityButtonLocator = { locator: 'topBar:selectedWallet-showHideBalance-button', method: 'id', - } + }; // change wallet modal window changeWalletDialogLocator = { locator: 'changeWalletDialog-dialogWindow-modalWindow', @@ -285,6 +286,34 @@ class WalletCommonBase extends BasePage { nfts, }; } + async showHideBalance() { + this.logger.info(`WalletCommonBase::showHideBalance is called`); + await this.click(this.walletBalanceVisibilityButtonLocator); + await this.sleep(500); + } + async balanceIsHiddenOnTopPanel() { + this.logger.info(`WalletCommonBase::showHideBalance is called`); + + const adaBalanceIsHidden = await this.waitPresentedAndAct( + this.walletBalanceTextLocator, + async () => { + const rawBalanceText = await this.getText(this.walletBalanceTextLocator); + const balanceStr = rawBalanceText.split(' ')[0]; + return balanceStr === balanceReplacer; + } + ); + + const fiatBalanceIsHidden = await this.waitPresentedAndAct( + this.walletFiatBalanceTextLocator, + async () => { + const rawFiatBalanceText = await this.getText(this.walletFiatBalanceTextLocator); + const fiatBalanceStr = rawFiatBalanceText.split(' ')[0]; + return fiatBalanceStr === balanceReplacer; + } + ); + + return adaBalanceIsHidden && fiatBalanceIsHidden; + } } export default WalletCommonBase; From 4268c00d1ebb970bb14042066230f7da901c3553 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 2 Jul 2024 20:25:49 +0300 Subject: [PATCH 337/464] added methods for checking balance in txs --- .../walletTab/walletTransactions.page.js | 85 ++++++++++++++++++- 1 file changed, 81 insertions(+), 4 deletions(-) diff --git a/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js b/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js index 03458bbd79..0d082c0c4b 100644 --- a/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js +++ b/packages/e2e-tests/pages/wallet/walletTab/walletTransactions.page.js @@ -8,6 +8,7 @@ import WalletTab from './walletTab.page.js'; import ExportTransactionsModal from './transactionsModals/exportTransactionModal.page.js'; import { convertPrettyDateToNormal, convertPrettyTimeToNormal } from '../../../utils/utils.js'; import MemoWarningModal from './transactionsModals/memoWarningModal.page.js'; +import { balanceReplacer } from '../../../helpers/constants.js'; export class TransactionsSubTab extends WalletTab { // locators @@ -44,8 +45,8 @@ export class TransactionsSubTab extends WalletTab { }; txRowLocator = (groupIndex, txIndex) => { return { - locator: `wallet:transactions:transactionsList:transactionsGroup_${groupIndex}-transaction_${txIndex}-box`, - method: 'id', + locator: `#wallet\\:transactions\\:transactionsList\\:transactionsGroup_${groupIndex}-transaction_${txIndex}-box > div`, + method: 'css', }; }; txTypeTextLocator = (groupIndex, txIndex) => { @@ -108,12 +109,24 @@ export class TransactionsSubTab extends WalletTab { method: 'id', }; }; + txFromAddressAmountTextLocator = (groupIndex, txIndex, fromAddressIndex) => { + return { + locator: `wallet:transactions:transactionsList:transactionsGroup_${groupIndex}:transaction_${txIndex}:txFullInfo:fromAddresses:address_${fromAddressIndex}-amount-text`, + method: 'id', + }; + }; txToAddressTextLocator = (groupIndex, txIndex, toAddressIndex) => { return { locator: `wallet:transactions:transactionsList:transactionsGroup_${groupIndex}:transaction_${txIndex}:txFullInfo:toAddresses:address_${toAddressIndex}-address-text`, method: 'id', }; }; + txToAddressAmountTextLocator = (groupIndex, txIndex, toAddressIndex) => { + return { + locator: `wallet:transactions:transactionsList:transactionsGroup_${groupIndex}:transaction_${txIndex}:txFullInfo:toAddresses:address_${toAddressIndex}-amount-text`, + method: 'id', + }; + }; txAddMemoButtonLocator = (groupIndex, txIndex) => { return { locator: `wallet:transactions:transactionsList:transactionsGroup_${groupIndex}:transaction_${txIndex}:txFullInfo-addMemo-button`, @@ -232,9 +245,9 @@ export class TransactionsSubTab extends WalletTab { } const txAmountString = await this.getText(this.txAmountTextLocator(groupIndex, txIndex)); const txAmount = parseFloat(txAmountString.split(' ')[0]); - await this.click(this.txRowLocator(groupIndex, txIndex)); + await this.clickOnTxRow(groupIndex, txIndex); const txHashId = await this.getTxHashID(groupIndex, txIndex); - await this.click(this.txRowLocator(groupIndex, txIndex)); + await this.clickOnTxRow(groupIndex, txIndex); const txInfo = { txType, txTime, @@ -489,6 +502,70 @@ export class TransactionsSubTab extends WalletTab { ); return noMemoState; } + async _allCollapsedTxsBalanceHiddenInGroup(groupObject) { + this.logger.info(`TransactionsSubTab::_allCollapsedTxsBalanceHiddenInGroup is called`); + const { groupIndex } = groupObject; + const result = []; + const allTxs = await this.findElements(this.txsInGroupLocator(groupIndex)); + for (let txIndex = 0; txIndex < allTxs.length; txIndex++) { + const txFeeString = await this.getText(this.txFeeTextLocator(groupIndex, txIndex)); + const txAmountRawString = await this.getText(this.txAmountTextLocator(groupIndex, txIndex)); + const txAmountString = txAmountRawString.split(' ')[0]; + + const txFeeHiddenState = txFeeString === balanceReplacer || txFeeString === '-'; + const txAmountHiddenState = txAmountString === balanceReplacer; + + result.push(txFeeHiddenState && txAmountHiddenState); + } + return result; + } + async _allExpandedTxsBalanceHiddenInGroup(groupObject) { + this.logger.info(`TransactionsSubTab::_allCollapsedTxsBalanceHiddenInGroup is called`); + const { groupIndex } = groupObject; + const result = []; + const allTxs = await this.findElements(this.txsInGroupLocator(groupIndex)); + for (let txIndex = 0; txIndex < allTxs.length; txIndex++) { + await this.clickOnTxRow(groupIndex, txIndex); + // check all from addresses + const amountFromAddrs = await this.__getAmountOfFromAddresses(groupIndex, txIndex); + for (let addrFromIndex = 0; addrFromIndex < amountFromAddrs; addrFromIndex++) { + const addrFromAmountRawStr = await this.getText( + this.txFromAddressAmountTextLocator(groupIndex, txIndex, addrFromIndex) + ); + const addrFromAmountStr = addrFromAmountRawStr.split(' ')[0]; + result.push(addrFromAmountStr === balanceReplacer); + } + // check all to addresses + const amountToAddrs = await this.__getAmountOfToAddresses(groupIndex, txIndex); + for (let addrToIndex = 0; addrToIndex < amountToAddrs; addrToIndex++) { + const addrToAmountRawStr = await this.getText(this.txToAddressAmountTextLocator(groupIndex, txIndex, addrToIndex)); + const addrToAmountStr = addrToAmountRawStr.split(' ')[0]; + result.push(addrToAmountStr === balanceReplacer); + } + await this.clickOnTxRow(groupIndex, txIndex); + } + return result; + } + async balanceIsHiddenInCollapsedTxs() { + this.logger.info(`TransactionsSubTab::balanceIsHiddenInCollapsedTxs is called`); + const allGroups = await this.__getTxsGroups(); + const allTxsBalanceHidden = []; + for (const group of allGroups) { + const txsBalanceHiddenInGroup = await this._allCollapsedTxsBalanceHiddenInGroup(group); + allTxsBalanceHidden.push(...txsBalanceHiddenInGroup); + } + return allTxsBalanceHidden.every(txBalanceHidden => txBalanceHidden === true); + } + async balanceIsHiddenInExpandedTxs() { + this.logger.info(`TransactionsSubTab::balanceIsHiddenInCollapsedTxs is called`); + const allGroups = await this.__getTxsGroups(); + const allTxsBalanceHidden = []; + for (const group of allGroups) { + const expandedTxsBalanceHiddenInGroup = await this._allExpandedTxsBalanceHiddenInGroup(group); + allTxsBalanceHidden.push(...expandedTxsBalanceHiddenInGroup); + } + return allTxsBalanceHidden.every(txBalanceHidden => txBalanceHidden === true); + } } export default TransactionsSubTab; From e26447b1f05e770e6c79381ca05218b68047d523 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 2 Jul 2024 20:26:57 +0300 Subject: [PATCH 338/464] added checks --- .../e2e-tests/test/25_hideShowBalance.test.js | 72 ++++++++++++++----- 1 file changed, 54 insertions(+), 18 deletions(-) diff --git a/packages/e2e-tests/test/25_hideShowBalance.test.js b/packages/e2e-tests/test/25_hideShowBalance.test.js index 16cfc25d31..23458fe1bb 100644 --- a/packages/e2e-tests/test/25_hideShowBalance.test.js +++ b/packages/e2e-tests/test/25_hideShowBalance.test.js @@ -5,39 +5,75 @@ import { expect } from 'chai'; import { getTestLogger } from '../utils/utils.js'; import { oneMinute } from '../helpers/timeConstants.js'; import driversPoolsManager from '../utils/driversPool.js'; -import AddNewWallet from '../pages/addNewWallet.page.js'; +import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; +import { testWallet1 } from '../utils/testWallets.js'; -describe('Deleting a memo', function () { +describe('Hide and show balance', function () { this.timeout(2 * oneMinute); let webdriver = null; let logger = null; - const oldMemo = 'j1hKEo4Er4FDLFAtGBo07jIcXBSOqx9D16U0sUIl'; before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); + await preloadDBAndStorage(webdriver, logger, 'testWallet1MemoAdded'); + await waitTxPage(webdriver, logger); }); - - it('Prepare DB and storages', async function () { - const addWalletPage = new AddNewWallet(webdriver, logger); - const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; - await addWalletPage.prepareDBAndStorage('testWallet1MemoAdded'); - await addWalletPage.refreshPage(); - }); - - it('Check transactions page', async function () { + // check the default state. The balance should be displayed + it('Check default state', async function () { const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.waitPrepareWalletBannerIsClosed(); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; + const walletInfo = await transactionsPage.getSelectedWalletInfo(); + expect(walletInfo.balance, 'The wallet balance is different').to.equal(testWallet1.balance); + expect(walletInfo.name, `The wallet name is incorrect`).to.equal(testWallet1.name); + expect(walletInfo.plate, `The wallet plate is incorrect`).to.equal(testWallet1.plate); }); - - // check the default state. The balance should be displayed // click hide balance + it('Hide balance', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + await transactionsPage.showHideBalance(); + }); + it('Check balance is hidden on the top bar wallet info', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + const balanceIsHidden = await transactionsPage.balanceIsHiddenOnTopPanel(); + expect(balanceIsHidden, 'Balance is not hidden').to.be.true; + }); + it('Check balance is hidden in collapsed txs', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + const collapsedTxsBalanceHidden = await transactionsPage.balanceIsHiddenInCollapsedTxs(); + expect(collapsedTxsBalanceHidden, 'Balance is not hidden in collapsed txs').to.be.true; + }); + // check balance in an expanded tx + it('Check balance is hidden in expanded txs', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + const expandedTxsBalanceHidden = await transactionsPage.balanceIsHiddenInExpandedTxs(); + expect(expandedTxsBalanceHidden, 'Balance is not hidden in expanded txs').to.be.true; + }); + // check balance on Receive tab + // add checking Staking page when testnetwork is added + // click show balance + it('Show balance', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + await transactionsPage.goToWalletTab(); + await transactionsPage.showHideBalance(); + }); // check balance on the the top bar wallet info panel + it('Check balance is shown on the top bar wallet info', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + const balanceIsHidden = await transactionsPage.balanceIsHiddenOnTopPanel(); + expect(balanceIsHidden, 'Balance is hidden').to.be.false; + }); // check balance in a collapsed tx + it('Check balance is shown in collapsed txs', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + const collapsedTxsBalanceHidden = await transactionsPage.balanceIsHiddenInCollapsedTxs(); + expect(collapsedTxsBalanceHidden, 'Balance is hidden in collapsed txs').to.be.false; + }); // check balance in an expanded tx + it('Check balance is shown in expanded txs', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + const expandedTxsBalanceHidden = await transactionsPage.balanceIsHiddenInExpandedTxs(); + expect(expandedTxsBalanceHidden, 'Balance is hidden in expanded txs').to.be.false; + }); // check balance on Receive tab // add checking Staking page when testnetwork is added From edf069379445eefbbaa554536333a75aa93d8b91 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 2 Jul 2024 20:50:12 +0300 Subject: [PATCH 339/464] added method allAddressesBalancesHidden on Receive page --- .../pages/wallet/walletTab/receiveSubTab.page.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/packages/e2e-tests/pages/wallet/walletTab/receiveSubTab.page.js b/packages/e2e-tests/pages/wallet/walletTab/receiveSubTab.page.js index 6a0739dbde..059a6237a9 100644 --- a/packages/e2e-tests/pages/wallet/walletTab/receiveSubTab.page.js +++ b/packages/e2e-tests/pages/wallet/walletTab/receiveSubTab.page.js @@ -1,6 +1,7 @@ import WalletTab from './walletTab.page.js'; import BasePage from '../../basepage.js'; import { twoSeconds, quarterSecond } from '../../../helpers/timeConstants.js'; +import { balanceReplacer } from '../../../helpers/constants.js'; class GenerateURIModal extends BasePage { // locators @@ -378,7 +379,7 @@ class ReceiveSubTab extends WalletTab { return allAddrs.length; } /** - * + * Getting an address info from the Receive page * @param {number} rowIndex An index of a row in the addresses table starting from 0 * @returns {Promise<{address: string, balance: number}>} */ @@ -442,7 +443,7 @@ class ReceiveSubTab extends WalletTab { return new DisplayURIModal(this.driver, this.logger); } /** - * + * Generating the Payment URI with the selected address * @param {number} rowIndex An index of a row in the addresses table starting from 0 * @param {string} adaAmount ADA amount to receive * @returns {Promise<{address: string, amount: string, genLink: string}>} @@ -474,6 +475,16 @@ class ReceiveSubTab extends WalletTab { this.logger.info(`ReceiveSubTab::getCurrentReceiveAddr::address - "${address}"`); return address; } + async allAddressesBalancesHidden() { + this.logger.info(`ReceiveSubTab::allAddressesBalancesHidden is called.`); + const addrsAmount = await this.getAmountOfAddresses(); + const allBalancesHidden = []; + for (let rowIndex = 0; rowIndex < addrsAmount; rowIndex++) { + const addrBalanceText = await this.getText(this.addressBalanceTextInRowLocator(rowIndex)); + allBalancesHidden.push(addrBalanceText === balanceReplacer || '-'); + } + return allBalancesHidden.every(addrBalance => addrBalance === true); + } } export default ReceiveSubTab; From ac613e19b5776b79665dd893299e6c2f43eb1b2a Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 2 Jul 2024 20:50:35 +0300 Subject: [PATCH 340/464] added checks for the Receive page --- .../e2e-tests/test/25_hideShowBalance.test.js | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/packages/e2e-tests/test/25_hideShowBalance.test.js b/packages/e2e-tests/test/25_hideShowBalance.test.js index 23458fe1bb..e6b67db330 100644 --- a/packages/e2e-tests/test/25_hideShowBalance.test.js +++ b/packages/e2e-tests/test/25_hideShowBalance.test.js @@ -1,6 +1,7 @@ import BasePage from '../pages/basepage.js'; import { customAfterEach } from '../utils/customHooks.js'; import TransactionsSubTab from '../pages/wallet/walletTab/walletTransactions.page.js'; +import ReceiveSubTab from '../pages/wallet/walletTab/receiveSubTab.page.js'; import { expect } from 'chai'; import { getTestLogger } from '../utils/utils.js'; import { oneMinute } from '../helpers/timeConstants.js'; @@ -49,11 +50,24 @@ describe('Hide and show balance', function () { expect(expandedTxsBalanceHidden, 'Balance is not hidden in expanded txs').to.be.true; }); // check balance on Receive tab + it('Check balances are hidden on Receive page', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + await transactionsPage.goToReceiveSubMenu(); + const receivePage = new ReceiveSubTab(webdriver, logger); + await receivePage.selectBaseExtHasBalanceAddrs(); + const balanceExtAddrHidden = await receivePage.allAddressesBalancesHidden(); + expect(balanceExtAddrHidden, 'Balances of external addresses are not hidden').to.be.true; + await receivePage.selectBaseInterHasBalanceAddrs(); + const balanceInterAddrHidden = await receivePage.allAddressesBalancesHidden(); + expect(balanceInterAddrHidden, 'Balances of internal addresses are not hidden').to.be.true; + }); // add checking Staking page when testnetwork is added // click show balance it('Show balance', async function () { + const receivePage = new ReceiveSubTab(webdriver, logger); + await receivePage.goToWalletTab(); + await receivePage.goToTransactionsSubMenu(); const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.goToWalletTab(); await transactionsPage.showHideBalance(); }); // check balance on the the top bar wallet info panel @@ -75,6 +89,17 @@ describe('Hide and show balance', function () { expect(expandedTxsBalanceHidden, 'Balance is hidden in expanded txs').to.be.false; }); // check balance on Receive tab + it('Check balances are shown on Receive page', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + await transactionsPage.goToReceiveSubMenu(); + const receivePage = new ReceiveSubTab(webdriver, logger); + await receivePage.selectBaseExtHasBalanceAddrs(); + const balanceExtAddrHidden = await receivePage.allAddressesBalancesHidden(); + expect(balanceExtAddrHidden, 'Balances of external addresses are hidden').to.be.false; + await receivePage.selectBaseInterHasBalanceAddrs(); + const balanceInterAddrHidden = await receivePage.allAddressesBalancesHidden(); + expect(balanceInterAddrHidden, 'Balances of internal addresses are hidden').to.be.false; + }); // add checking Staking page when testnetwork is added afterEach(function (done) { From d53685f725033fd24bebe03356026913d44f0e62 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Tue, 2 Jul 2024 20:55:47 +0300 Subject: [PATCH 341/464] added issue number and moved to blacklist --- .../25_hideShowBalance.test.js | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) rename packages/e2e-tests/test/{ => blacklist}/25_hideShowBalance.test.js (89%) diff --git a/packages/e2e-tests/test/25_hideShowBalance.test.js b/packages/e2e-tests/test/blacklist/25_hideShowBalance.test.js similarity index 89% rename from packages/e2e-tests/test/25_hideShowBalance.test.js rename to packages/e2e-tests/test/blacklist/25_hideShowBalance.test.js index e6b67db330..371f859482 100644 --- a/packages/e2e-tests/test/25_hideShowBalance.test.js +++ b/packages/e2e-tests/test/blacklist/25_hideShowBalance.test.js @@ -1,14 +1,15 @@ -import BasePage from '../pages/basepage.js'; -import { customAfterEach } from '../utils/customHooks.js'; -import TransactionsSubTab from '../pages/wallet/walletTab/walletTransactions.page.js'; -import ReceiveSubTab from '../pages/wallet/walletTab/receiveSubTab.page.js'; +import BasePage from '../../pages/basepage.js'; +import { customAfterEach } from '../../utils/customHooks.js'; +import TransactionsSubTab from '../../pages/wallet/walletTab/walletTransactions.page.js'; +import ReceiveSubTab from '../../pages/wallet/walletTab/receiveSubTab.page.js'; import { expect } from 'chai'; -import { getTestLogger } from '../utils/utils.js'; -import { oneMinute } from '../helpers/timeConstants.js'; -import driversPoolsManager from '../utils/driversPool.js'; -import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; -import { testWallet1 } from '../utils/testWallets.js'; +import { getTestLogger } from '../../utils/utils.js'; +import { oneMinute } from '../../helpers/timeConstants.js'; +import driversPoolsManager from '../../utils/driversPool.js'; +import { preloadDBAndStorage, waitTxPage } from '../../helpers/restoreWalletHelper.js'; +import { testWallet1 } from '../../utils/testWallets.js'; +// Issue https://emurgo.atlassian.net/browse/YOEXT-1218 describe('Hide and show balance', function () { this.timeout(2 * oneMinute); let webdriver = null; From 411c5fad2e5e29fbc419eec25a6931d2dac1723b Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Wed, 3 Jul 2024 12:58:22 +0300 Subject: [PATCH 342/464] moved preparing DB into before step --- .../e2e-tests/test/04_removingWallet.test.js | 18 +++----------- .../test/05_removingWallet_2.test.js | 24 +++++++------------ .../e2e-tests/test/06_renamingWallet.test.js | 19 +++------------ .../test/07_changingPassword.test.js | 17 +++---------- .../e2e-tests/test/08_downloadingLogs.test.js | 19 +++------------ .../test/09_exportTransactions.test.js | 19 +++------------ .../test/10_exportTxsNegative.test.js | 19 +++------------ .../test/18_changingLanguageSettings.test.js | 19 +++------------ .../e2e-tests/test/19_changingFiat.test.js | 21 ++++------------ .../test/20_changingCardanoExplorer.test.js | 19 +++------------ .../e2e-tests/test/21_checkingTOS.test.js | 19 +++------------ packages/e2e-tests/test/22_addingMemo.test.js | 19 +++------------ packages/e2e-tests/test/23_editMemo.test.js | 19 +++------------ .../e2e-tests/test/24_deletingMemo.test.js | 19 +++------------ 14 files changed, 48 insertions(+), 222 deletions(-) diff --git a/packages/e2e-tests/test/04_removingWallet.test.js b/packages/e2e-tests/test/04_removingWallet.test.js index 0175d0fef2..cb7ff1be67 100644 --- a/packages/e2e-tests/test/04_removingWallet.test.js +++ b/packages/e2e-tests/test/04_removingWallet.test.js @@ -8,6 +8,7 @@ import SettingsTab from '../pages/wallet/settingsTab/settingsTab.page.js'; import WalletSubTab from '../pages/wallet/settingsTab/walletSubTab.page.js'; import AddNewWallet from '../pages/addNewWallet.page.js'; import driversPoolsManager from '../utils/driversPool.js'; +import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; describe('Removing a wallet, one wallet is added', function () { this.timeout(2 * oneMinute); @@ -17,21 +18,8 @@ describe('Removing a wallet, one wallet is added', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - }); - - it('Prepare DB and storages', async function () { - const addWalletPage = new AddNewWallet(webdriver, logger); - const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; - await addWalletPage.prepareDBAndStorage('testWallet1'); - await addWalletPage.refreshPage(); - }); - - it('Check transactions page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.waitPrepareWalletBannerIsClosed(); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); }); it('Remove wallet', async function () { diff --git a/packages/e2e-tests/test/05_removingWallet_2.test.js b/packages/e2e-tests/test/05_removingWallet_2.test.js index 61fb7f163b..8dd16002e6 100644 --- a/packages/e2e-tests/test/05_removingWallet_2.test.js +++ b/packages/e2e-tests/test/05_removingWallet_2.test.js @@ -4,7 +4,12 @@ import { testWallet1, testWallet2 } from '../utils/testWallets.js'; import { expect } from 'chai'; import { getTestLogger } from '../utils/utils.js'; import { oneMinute } from '../helpers/timeConstants.js'; -import { checkCorrectWalletIsDisplayed, restoreWallet } from '../helpers/restoreWalletHelper.js'; +import { + checkCorrectWalletIsDisplayed, + restoreWallet, + preloadDBAndStorage, + waitTxPage, +} from '../helpers/restoreWalletHelper.js'; import SettingsTab from '../pages/wallet/settingsTab/settingsTab.page.js'; import WalletSubTab from '../pages/wallet/settingsTab/walletSubTab.page.js'; import WalletCommonBase from '../pages/walletCommonBase.page.js'; @@ -20,21 +25,8 @@ describe('Removing the first wallet, two wallets is added', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - }); - - it('Prepare DB and storages', async function () { - const addWalletPage = new AddNewWallet(webdriver, logger); - const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; - await addWalletPage.prepareDBAndStorage('testWallet1'); - await addWalletPage.refreshPage(); - }); - - it('Check transactions page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.waitPrepareWalletBannerIsClosed(); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); }); // restore the second wallet diff --git a/packages/e2e-tests/test/06_renamingWallet.test.js b/packages/e2e-tests/test/06_renamingWallet.test.js index a0c0d3cdc5..31427bafc3 100644 --- a/packages/e2e-tests/test/06_renamingWallet.test.js +++ b/packages/e2e-tests/test/06_renamingWallet.test.js @@ -8,7 +8,7 @@ import SettingsTab from '../pages/wallet/settingsTab/settingsTab.page.js'; import WalletSubTab from '../pages/wallet/settingsTab/walletSubTab.page.js'; import TransactionsSubTab from '../pages/wallet/walletTab/walletTransactions.page.js'; import driversPoolsManager from '../utils/driversPool.js'; -import AddNewWallet from '../pages/addNewWallet.page.js'; +import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; describe('Renaming the wallet', function () { this.timeout(2 * oneMinute); @@ -19,21 +19,8 @@ describe('Renaming the wallet', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - }); - - it('Prepare DB and storages', async function () { - const addWalletPage = new AddNewWallet(webdriver, logger); - const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; - await addWalletPage.prepareDBAndStorage('testWallet1'); - await addWalletPage.refreshPage(); - }); - - it('Check transactions page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.waitPrepareWalletBannerIsClosed(); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); }); it('Go to Wallet subtub in Settings', async function () { diff --git a/packages/e2e-tests/test/07_changingPassword.test.js b/packages/e2e-tests/test/07_changingPassword.test.js index c2633d4ac4..9ac828348c 100644 --- a/packages/e2e-tests/test/07_changingPassword.test.js +++ b/packages/e2e-tests/test/07_changingPassword.test.js @@ -12,7 +12,7 @@ import WalletTab from '../pages/wallet/walletTab/walletTab.page.js'; import SendSubTab from '../pages/wallet/walletTab/sendSubTab.page.js'; import { PASSWORDS_DONT_MATCH, PASSWORD_TOO_SHORT, WRONG_PASSWORD } from '../helpers/messages.js'; import driversPoolsManager from '../utils/driversPool.js'; -import AddNewWallet from '../pages/addNewWallet.page.js'; +import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; describe('Changing wallet password', function () { this.timeout(2 * oneMinute); @@ -22,19 +22,8 @@ describe('Changing wallet password', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - }); - - it('Prepare DB and storages', async function () { - const addWalletPage = new AddNewWallet(webdriver, logger); - const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; - await addWalletPage.prepareDBAndStorage('testWallet1'); - await addWalletPage.refreshPage(); - }); - - it('Check transactions page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.waitPrepareWalletBannerIsClosed(); + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); }); const oldPassword = getPassword(); diff --git a/packages/e2e-tests/test/08_downloadingLogs.test.js b/packages/e2e-tests/test/08_downloadingLogs.test.js index d63b9e1231..33492f7022 100644 --- a/packages/e2e-tests/test/08_downloadingLogs.test.js +++ b/packages/e2e-tests/test/08_downloadingLogs.test.js @@ -12,7 +12,7 @@ import { oneMinute } from '../helpers/timeConstants.js'; import SettingsTab from '../pages/wallet/settingsTab/settingsTab.page.js'; import SupportSubTab from '../pages/wallet/settingsTab/supportSubTab.page.js'; import driversPoolsManager from '../utils/driversPool.js'; -import AddNewWallet from '../pages/addNewWallet.page.js'; +import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; describe('Downloading logs for support', function () { this.timeout(2 * oneMinute); @@ -22,24 +22,11 @@ describe('Downloading logs for support', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); cleanDownloads(); }); - it('Prepare DB and storages', async function () { - const addWalletPage = new AddNewWallet(webdriver, logger); - const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; - await addWalletPage.prepareDBAndStorage('testWallet1'); - await addWalletPage.refreshPage(); - }); - - it('Check transactions page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.waitPrepareWalletBannerIsClosed(); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; - }); - it('Go to Settings -> Support', async function () { const transactionsPage = new TransactionsSubTab(webdriver, logger); await transactionsPage.goToSettingsTab(); diff --git a/packages/e2e-tests/test/09_exportTransactions.test.js b/packages/e2e-tests/test/09_exportTransactions.test.js index 6d0aa52623..5bb597171f 100644 --- a/packages/e2e-tests/test/09_exportTransactions.test.js +++ b/packages/e2e-tests/test/09_exportTransactions.test.js @@ -14,7 +14,7 @@ import { import { oneMinute } from '../helpers/timeConstants.js'; import driversPoolsManager from '../utils/driversPool.js'; import { compareExportedTxsAndDisplayedTxs } from '../helpers/customChecks.js'; -import AddNewWallet from '../pages/addNewWallet.page.js'; +import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; describe('Export transactions, positive', function () { this.timeout(2 * oneMinute); @@ -24,24 +24,11 @@ describe('Export transactions, positive', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); cleanDownloads(); }); - it('Prepare DB and storages', async function () { - const addWalletPage = new AddNewWallet(webdriver, logger); - const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; - await addWalletPage.prepareDBAndStorage('testWallet1'); - await addWalletPage.refreshPage(); - }); - - it('Check transactions page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.waitPrepareWalletBannerIsClosed(); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; - }); - // Open the export txs modal window it('Open the export modal window', async function () { const transactionsPage = new TransactionsSubTab(webdriver, logger); diff --git a/packages/e2e-tests/test/10_exportTxsNegative.test.js b/packages/e2e-tests/test/10_exportTxsNegative.test.js index 7b831d89b2..f78cd46aa3 100644 --- a/packages/e2e-tests/test/10_exportTxsNegative.test.js +++ b/packages/e2e-tests/test/10_exportTxsNegative.test.js @@ -12,7 +12,7 @@ import { import { oneMinute } from '../helpers/timeConstants.js'; import driversPoolsManager from '../utils/driversPool.js'; import { Colors } from '../helpers/constants.js'; -import AddNewWallet from '../pages/addNewWallet.page.js'; +import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; describe('Export transactions, negative cases', function () { this.timeout(2 * oneMinute); @@ -22,24 +22,11 @@ describe('Export transactions, negative cases', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); cleanDownloads(); }); - it('Prepare DB and storages', async function () { - const addWalletPage = new AddNewWallet(webdriver, logger); - const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; - await addWalletPage.prepareDBAndStorage('testWallet1'); - await addWalletPage.refreshPage(); - }); - - it('Check transactions page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.waitPrepareWalletBannerIsClosed(); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; - }); - describe('Both dates are 00/00/0000', function () { it('Open the export modal window', async function () { const transactionsPage = new TransactionsSubTab(webdriver, logger); diff --git a/packages/e2e-tests/test/18_changingLanguageSettings.test.js b/packages/e2e-tests/test/18_changingLanguageSettings.test.js index 7f849d1614..d6edb7d5bf 100644 --- a/packages/e2e-tests/test/18_changingLanguageSettings.test.js +++ b/packages/e2e-tests/test/18_changingLanguageSettings.test.js @@ -7,7 +7,7 @@ import { oneMinute } from '../helpers/timeConstants.js'; import SettingsTab from '../pages/wallet/settingsTab/settingsTab.page.js'; import driversPoolsManager from '../utils/driversPool.js'; import GeneralSubTab from '../pages/wallet/settingsTab/generalSubTab.page.js'; -import AddNewWallet from '../pages/addNewWallet.page.js'; +import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; describe('Changing language through the Settings', function () { this.timeout(2 * oneMinute); @@ -17,6 +17,8 @@ describe('Changing language through the Settings', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); }); const testData = [ @@ -46,21 +48,6 @@ describe('Changing language through the Settings', function () { }, ]; - it('Prepare DB and storages', async function () { - const addWalletPage = new AddNewWallet(webdriver, logger); - const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; - await addWalletPage.prepareDBAndStorage('testWallet1'); - await addWalletPage.refreshPage(); - }); - - it('Check transactions page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.waitPrepareWalletBannerIsClosed(); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; - }); - it('Open General settings', async function () { const transactionsPage = new TransactionsSubTab(webdriver, logger); await transactionsPage.goToSettingsTab(); diff --git a/packages/e2e-tests/test/19_changingFiat.test.js b/packages/e2e-tests/test/19_changingFiat.test.js index 871b68d7d9..5f043af25c 100644 --- a/packages/e2e-tests/test/19_changingFiat.test.js +++ b/packages/e2e-tests/test/19_changingFiat.test.js @@ -7,7 +7,7 @@ import { oneMinute } from '../helpers/timeConstants.js'; import SettingsTab from '../pages/wallet/settingsTab/settingsTab.page.js'; import driversPoolsManager from '../utils/driversPool.js'; import GeneralSubTab from '../pages/wallet/settingsTab/generalSubTab.page.js'; -import AddNewWallet from '../pages/addNewWallet.page.js'; +import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; describe('Changing fiat currencies', function () { this.timeout(2 * oneMinute); @@ -18,26 +18,13 @@ describe('Changing fiat currencies', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); + prices = await getCurrenciesPrices(); }); const testData = ['BRL', 'ETH', 'BTC', 'KRW', 'CNY', 'EUR', 'JPY', 'USD', 'ADA']; - it('Prepare DB and storages', async function () { - const addWalletPage = new AddNewWallet(webdriver, logger); - const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; - await addWalletPage.prepareDBAndStorage('testWallet1'); - await addWalletPage.refreshPage(); - }); - - it('Check transactions page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.waitPrepareWalletBannerIsClosed(); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; - prices = await getCurrenciesPrices(); - }); - for (const testDatum of testData) { describe(`Changing fiat currency to ${testDatum}`, function () { it('Open General settings', async function () { diff --git a/packages/e2e-tests/test/20_changingCardanoExplorer.test.js b/packages/e2e-tests/test/20_changingCardanoExplorer.test.js index 5ad3b5b0c9..3cfb58de64 100644 --- a/packages/e2e-tests/test/20_changingCardanoExplorer.test.js +++ b/packages/e2e-tests/test/20_changingCardanoExplorer.test.js @@ -7,7 +7,7 @@ import { oneMinute } from '../helpers/timeConstants.js'; import SettingsTab from '../pages/wallet/settingsTab/settingsTab.page.js'; import driversPoolsManager from '../utils/driversPool.js'; import BlockchainSubTab from '../pages/wallet/settingsTab/blockchainSubTab.page.js'; -import AddNewWallet from '../pages/addNewWallet.page.js'; +import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; describe('Changing explorer', function () { this.timeout(2 * oneMinute); @@ -17,6 +17,8 @@ describe('Changing explorer', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); }); const testData = [ @@ -42,21 +44,6 @@ describe('Changing explorer', function () { }, ]; - it('Prepare DB and storages', async function () { - const addWalletPage = new AddNewWallet(webdriver, logger); - const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; - await addWalletPage.prepareDBAndStorage('testWallet1'); - await addWalletPage.refreshPage(); - }); - - it('Check transactions page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.waitPrepareWalletBannerIsClosed(); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; - }); - for (const testDatum of testData) { describe(`Changing Cardano explorer to ${testDatum.explorerName}`, function () { it('Open Blockchain settings', async function () { diff --git a/packages/e2e-tests/test/21_checkingTOS.test.js b/packages/e2e-tests/test/21_checkingTOS.test.js index ebe3e9d1f0..106d869ab7 100644 --- a/packages/e2e-tests/test/21_checkingTOS.test.js +++ b/packages/e2e-tests/test/21_checkingTOS.test.js @@ -7,7 +7,7 @@ import { oneMinute } from '../helpers/timeConstants.js'; import SettingsTab from '../pages/wallet/settingsTab/settingsTab.page.js'; import driversPoolsManager from '../utils/driversPool.js'; import TermOfServiceAgreementSubTab from '../pages/wallet/settingsTab/tosSubTab.page.js'; -import AddNewWallet from '../pages/addNewWallet.page.js'; +import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; describe('Checking Term Of Service Agreement', function () { this.timeout(2 * oneMinute); @@ -17,21 +17,8 @@ describe('Checking Term Of Service Agreement', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - }); - - it('Prepare DB and storages', async function () { - const addWalletPage = new AddNewWallet(webdriver, logger); - const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; - await addWalletPage.prepareDBAndStorage('testWallet1'); - await addWalletPage.refreshPage(); - }); - - it('Check transactions page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.waitPrepareWalletBannerIsClosed(); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; + await preloadDBAndStorage(webdriver, logger, 'testWallet1MemoAdded'); + await waitTxPage(webdriver, logger); }); it('Open Term Of User Agreement', async function () { diff --git a/packages/e2e-tests/test/22_addingMemo.test.js b/packages/e2e-tests/test/22_addingMemo.test.js index bc629fd571..ade581a6d4 100644 --- a/packages/e2e-tests/test/22_addingMemo.test.js +++ b/packages/e2e-tests/test/22_addingMemo.test.js @@ -7,7 +7,7 @@ import { getTestLogger } from '../utils/utils.js'; import { oneMinute } from '../helpers/timeConstants.js'; import driversPoolsManager from '../utils/driversPool.js'; import { getTestString } from '../helpers/constants.js'; -import AddNewWallet from '../pages/addNewWallet.page.js'; +import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; describe('Adding a memo to a completed Tx', function () { this.timeout(2 * oneMinute); @@ -18,21 +18,8 @@ describe('Adding a memo to a completed Tx', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - }); - - it('Prepare DB and storages', async function () { - const addWalletPage = new AddNewWallet(webdriver, logger); - const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; - await addWalletPage.prepareDBAndStorage('testWallet1'); - await addWalletPage.refreshPage(); - }); - - it('Check transactions page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.waitPrepareWalletBannerIsClosed(); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); }); // open the latests tx diff --git a/packages/e2e-tests/test/23_editMemo.test.js b/packages/e2e-tests/test/23_editMemo.test.js index 1e9951f33c..0087c6abda 100644 --- a/packages/e2e-tests/test/23_editMemo.test.js +++ b/packages/e2e-tests/test/23_editMemo.test.js @@ -7,7 +7,7 @@ import { getTestLogger } from '../utils/utils.js'; import { oneMinute } from '../helpers/timeConstants.js'; import driversPoolsManager from '../utils/driversPool.js'; import { getTestString } from '../helpers/constants.js'; -import AddNewWallet from '../pages/addNewWallet.page.js'; +import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; describe('Editing a memo', function () { this.timeout(2 * oneMinute); @@ -19,21 +19,8 @@ describe('Editing a memo', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - }); - - it('Prepare DB and storages', async function () { - const addWalletPage = new AddNewWallet(webdriver, logger); - const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; - await addWalletPage.prepareDBAndStorage('testWallet1MemoAdded'); - await addWalletPage.refreshPage(); - }); - - it('Check transactions page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.waitPrepareWalletBannerIsClosed(); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; + await preloadDBAndStorage(webdriver, logger, 'testWallet1MemoAdded'); + await waitTxPage(webdriver, logger); }); it('Expand tx', async function () { diff --git a/packages/e2e-tests/test/24_deletingMemo.test.js b/packages/e2e-tests/test/24_deletingMemo.test.js index 6b903565bc..9bd63b1d1a 100644 --- a/packages/e2e-tests/test/24_deletingMemo.test.js +++ b/packages/e2e-tests/test/24_deletingMemo.test.js @@ -5,7 +5,7 @@ import { expect } from 'chai'; import { getTestLogger } from '../utils/utils.js'; import { oneMinute } from '../helpers/timeConstants.js'; import driversPoolsManager from '../utils/driversPool.js'; -import AddNewWallet from '../pages/addNewWallet.page.js'; +import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; describe('Deleting a memo', function () { this.timeout(2 * oneMinute); @@ -16,21 +16,8 @@ describe('Deleting a memo', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - }); - - it('Prepare DB and storages', async function () { - const addWalletPage = new AddNewWallet(webdriver, logger); - const state = await addWalletPage.isDisplayed(); - expect(state).to.be.true; - await addWalletPage.prepareDBAndStorage('testWallet1MemoAdded'); - await addWalletPage.refreshPage(); - }); - - it('Check transactions page', async function () { - const transactionsPage = new TransactionsSubTab(webdriver, logger); - await transactionsPage.waitPrepareWalletBannerIsClosed(); - const txPageIsDisplayed = await transactionsPage.isDisplayed(); - expect(txPageIsDisplayed, 'The transactions page is not displayed').to.be.true; + await preloadDBAndStorage(webdriver, logger, 'testWallet1MemoAdded'); + await waitTxPage(webdriver, logger); }); it('Expand tx', async function () { From a8678bed7aba9aa9641ead753ba522fef674bc5c Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Wed, 3 Jul 2024 16:35:20 +0300 Subject: [PATCH 343/464] minor change of using wallet db template --- packages/e2e-tests/test/blacklist/25_hideShowBalance.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/e2e-tests/test/blacklist/25_hideShowBalance.test.js b/packages/e2e-tests/test/blacklist/25_hideShowBalance.test.js index 371f859482..f2546bec45 100644 --- a/packages/e2e-tests/test/blacklist/25_hideShowBalance.test.js +++ b/packages/e2e-tests/test/blacklist/25_hideShowBalance.test.js @@ -18,7 +18,7 @@ describe('Hide and show balance', function () { before(async function () { webdriver = await driversPoolsManager.getDriverFromPool(); logger = getTestLogger(this.test.parent.title); - await preloadDBAndStorage(webdriver, logger, 'testWallet1MemoAdded'); + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); await waitTxPage(webdriver, logger); }); // check the default state. The balance should be displayed From 0b40cd43a2c864dfd73eba58661e66e7cb34626f Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Wed, 3 Jul 2024 16:36:37 +0300 Subject: [PATCH 344/464] updates in receiveSubTab --- .../receiveModals/displayURIModal.page.js | 51 ++++++ .../receiveModals/generateURIModal.page.js | 101 +++++++++++ .../wallet/walletTab/receiveSubTab.page.js | 166 ++---------------- 3 files changed, 167 insertions(+), 151 deletions(-) create mode 100644 packages/e2e-tests/pages/wallet/walletTab/receiveModals/displayURIModal.page.js create mode 100644 packages/e2e-tests/pages/wallet/walletTab/receiveModals/generateURIModal.page.js diff --git a/packages/e2e-tests/pages/wallet/walletTab/receiveModals/displayURIModal.page.js b/packages/e2e-tests/pages/wallet/walletTab/receiveModals/displayURIModal.page.js new file mode 100644 index 0000000000..5ab07a7c48 --- /dev/null +++ b/packages/e2e-tests/pages/wallet/walletTab/receiveModals/displayURIModal.page.js @@ -0,0 +1,51 @@ +import BasePage from '../../../basepage.js'; + +class DisplayURIModal extends BasePage { + // locators + uriDisplayModalLocator = { + locator: 'uriDisplayDialog-dialogWindow-modalWindow', + method: 'id', + }; + uriDisplayModalTitleLocator = { + locator: 'uriDisplayDialog-dialogTitle-text', + method: 'id', + }; + closeModalButtonLocator = { + locator: 'uriDisplayDialog-closeModal-button', + method: 'id', + }; + linkTextLocator = { + locator: 'uriDisplayDialog-address-text', + method: 'id', + }; + copyLinkButtonLocator = { + locator: 'uriDisplayDialog-copyAddress-button', + method: 'id', + }; + // methods + /** + * Getting a generated link right from the component itself + * @returns {Promise} + */ + async getGeneratedLink() { + this.logger.info(`ReceiveSubTab::DisplayURIModal::getGeneratedLink is called.`); + return await this.getText(this.linkTextLocator); + } + /** + * Getting a generated link by clicking on the copy button near the text field. + * The address will be saved into clipboard. + */ + async copyGeneratedLink() { + this.logger.info(`ReceiveSubTab::DisplayURIModal::copyGeneratedLink is called.`); + await this.click(this.copyGeneratedLink); + } + /** + * Closing the modal window + */ + async closeModalWindow() { + this.logger.info(`ReceiveSubTab::DisplayURIModal::closeModalWindow is called.`); + await this.click(this.closeModalButtonLocator); + } +} + +export default DisplayURIModal; diff --git a/packages/e2e-tests/pages/wallet/walletTab/receiveModals/generateURIModal.page.js b/packages/e2e-tests/pages/wallet/walletTab/receiveModals/generateURIModal.page.js new file mode 100644 index 0000000000..40340e302b --- /dev/null +++ b/packages/e2e-tests/pages/wallet/walletTab/receiveModals/generateURIModal.page.js @@ -0,0 +1,101 @@ +import BasePage from '../../../basepage.js'; +import { twoSeconds, quarterSecond } from '../../../../helpers/timeConstants.js'; + +class GenerateURIModal extends BasePage { + // locators + generateURIModalLocator = { + locator: 'uriGenerateDialog-dialogWindow-modalWindow', + method: 'id', + }; + generateURIModalTitleLocator = { + locator: 'uriGenerateDialog-dialogTitle-text', + method: 'id', + }; + generateButtonLocator = { + locator: 'uriGenerateDialog-generate-button', + method: 'id', + }; + closeModalButtonLocator = { + locator: 'uriGenerateDialog-closeModal-button', + method: 'id', + }; + receiverAddressTextLocator = { + locator: '//input[starts-with(@id, "receiver--")]', // unfortunately, I didn't find a way to make a proper ID + method: 'xpath', + }; + amountToSendInputLocator = { + locator: '//input[starts-with(@id, "amount--")]', // unfortunately, I didn't find a way to make a proper ID + method: 'xpath', + }; + inputErrorMessageFieldLocator = { + locator: '//p[starts-with(@id, "amount--") and contains(@id, "-helper-text")]', + method: 'xpath', + }; + // methods + /** + * Getting a receiver address from the disabled receiver input + * @returns {Promise} A bech32 string format address + */ + async getReceiverAddress() { + this.logger.info(`ReceiveSubTab::GenerateURIModal::getReceiverAddress is called.`); + const address = await this.getAttribute(this.receiverAddressTextLocator, 'value'); + this.logger.info(`ReceiveSubTab::GenerateURIModal::getReceiverAddress::address - "${address}"`); + return address; + } + /** + * Entering amount to send + * @param {string} adaAmount Amount to send + */ + async enterReceiveAmount(adaAmount) { + this.logger.info(`ReceiveSubTab::GenerateURIModal::enterReceiveAmount is called.`); + await this.click(this.amountToSendInputLocator); + await this.input(this.amountToSendInputLocator, adaAmount); + } + /** + * Pressing the button "Generate". + * The method contains a waiter with 2 seconds timeout + */ + async generateLink() { + this.logger.info(`ReceiveSubTab::GenerateURIModal::generateLink is called.`); + const buttonIsEnabled = await this.customWaiter( + async () => { + const buttonlIsEnabled = await this.getAttribute(this.generateButtonLocator, 'disabled'); + return buttonlIsEnabled === null; + }, + twoSeconds, + quarterSecond + ); + if (buttonIsEnabled) { + await this.click(this.generateButtonLocator); + } else { + throw new Error('The Continue button is disabled'); + } + } + /** + * Getting the error message of amount input field + * @returns {Promise} + */ + async getAmountErrorMessage() { + this.logger.info(`ReceiveSubTab::GenerateURIModal::getAmountErrorMessage is called.`); + + const messageAppeared = await this.customWaiter( + async () => { + const displayedText = await this.getText(this.inputErrorMessageFieldLocator); + return displayedText !== ''; + }, + twoSeconds, + quarterSecond + ); + if (messageAppeared) { + const errMsg = await this.getText(this.inputErrorMessageFieldLocator); + this.logger.info( + `ReceiveSubTab::GenerateURIModal::getAmountErrorMessage:errMsg - "${errMsg}"` + ); + return errMsg; + } else { + return ''; + } + } +} + +export default GenerateURIModal; diff --git a/packages/e2e-tests/pages/wallet/walletTab/receiveSubTab.page.js b/packages/e2e-tests/pages/wallet/walletTab/receiveSubTab.page.js index 059a6237a9..b1cccdcc07 100644 --- a/packages/e2e-tests/pages/wallet/walletTab/receiveSubTab.page.js +++ b/packages/e2e-tests/pages/wallet/walletTab/receiveSubTab.page.js @@ -1,153 +1,8 @@ import WalletTab from './walletTab.page.js'; -import BasePage from '../../basepage.js'; -import { twoSeconds, quarterSecond } from '../../../helpers/timeConstants.js'; +import GenerateURIModal from './receiveModals/generateURIModal.page.js'; +import DisplayURIModal from './receiveModals/displayURIModal.page.js'; import { balanceReplacer } from '../../../helpers/constants.js'; -class GenerateURIModal extends BasePage { - // locators - generateURIModalLocator = { - locator: 'uriGenerateDialog-dialogWindow-modalWindow', - method: 'id', - }; - generateURIModalTitleLocator = { - locator: 'uriGenerateDialog-dialogTitle-text', - method: 'id', - }; - generateButtonLocator = { - locator: 'uriGenerateDialog-generate-button', - method: 'id', - }; - closeModalButtonLocator = { - locator: 'uriGenerateDialog-closeModal-button', - method: 'id', - }; - receiverAddressTextLocator = { - locator: '//input[starts-with(@id, "receiver--")]', // unfortunately, I didn't find a way to make a proper ID - method: 'xpath', - }; - amountToSendInputLocator = { - locator: '//input[starts-with(@id, "amount--")]', // unfortunately, I didn't find a way to make a proper ID - method: 'xpath', - }; - inputErrorMessageFieldLocator = { - locator: '//p[starts-with(@id, "amount--") and contains(@id, "-helper-text")]', - method: 'xpath', - }; - // methods - /** - * Getting a receiver address from the disabled receiver input - * @returns {Promise} A bech32 string format address - */ - async getReceiverAddress() { - this.logger.info(`ReceiveSubTab::GenerateURIModal::getReceiverAddress is called.`); - const address = await this.getAttribute(this.receiverAddressTextLocator, 'value'); - this.logger.info(`ReceiveSubTab::GenerateURIModal::getReceiverAddress::address - "${address}"`); - return address; - } - /** - * Entering amount to send - * @param {string} adaAmount Amount to send - */ - async enterReceiveAmount(adaAmount) { - this.logger.info(`ReceiveSubTab::GenerateURIModal::enterReceiveAmount is called.`); - await this.click(this.amountToSendInputLocator); - await this.input(this.amountToSendInputLocator, adaAmount); - } - /** - * Pressing the button "Generate". - * The method contains a waiter with 2 seconds timeout - */ - async generateLink() { - this.logger.info(`ReceiveSubTab::GenerateURIModal::generateLink is called.`); - const buttonIsEnabled = await this.customWaiter( - async () => { - const buttonlIsEnabled = await this.getAttribute(this.generateButtonLocator, 'disabled'); - return buttonlIsEnabled === null; - }, - twoSeconds, - quarterSecond - ); - if (buttonIsEnabled) { - await this.click(this.generateButtonLocator); - } else { - throw new Error('The Continue button is disabled'); - } - } - /** - * Getting the error message of amount input field - * @returns {Promise} - */ - async getAmountErrorMessage() { - this.logger.info(`ReceiveSubTab::GenerateURIModal::getAmountErrorMessage is called.`); - - const messageAppeared = await this.customWaiter( - async () => { - const displayedText = await this.getText(this.inputErrorMessageFieldLocator); - return displayedText !== ''; - }, - twoSeconds, - quarterSecond - ); - if (messageAppeared) { - const errMsg = await this.getText(this.inputErrorMessageFieldLocator); - this.logger.info( - `ReceiveSubTab::GenerateURIModal::getAmountErrorMessage:errMsg - "${errMsg}"` - ); - return errMsg; - } else { - return ''; - } - } -} - -class DisplayURIModal extends BasePage { - // locators - uriDisplayModalLocator = { - locator: 'uriDisplayDialog-dialogWindow-modalWindow', - method: 'id', - }; - uriDisplayModalTitleLocator = { - locator: 'uriDisplayDialog-dialogTitle-text', - method: 'id', - }; - closeModalButtonLocator = { - locator: 'uriDisplayDialog-closeModal-button', - method: 'id', - }; - linkTextLocator = { - locator: 'uriDisplayDialog-address-text', - method: 'id', - }; - copyLinkButtonLocator = { - locator: 'uriDisplayDialog-copyAddress-button', - method: 'id', - }; - // methods - /** - * Getting a generated link right from the component itself - * @returns {Promise} - */ - async getGeneratedLink() { - this.logger.info(`ReceiveSubTab::DisplayURIModal::getGeneratedLink is called.`); - return await this.getText(this.linkTextLocator); - } - /** - * Getting a generated link by clicking on the copy button near the text field. - * The address will be saved into clipboard. - */ - async copyGeneratedLink() { - this.logger.info(`ReceiveSubTab::DisplayURIModal::copyGeneratedLink is called.`); - await this.click(this.copyGeneratedLink); - } - /** - * Closing the modal window - */ - async closeModalWindow() { - this.logger.info(`ReceiveSubTab::DisplayURIModal::closeModalWindow is called.`); - await this.click(this.closeModalButtonLocator); - } -} - class ReceiveSubTab extends WalletTab { // locators // * base addresses menu item @@ -378,18 +233,26 @@ class ReceiveSubTab extends WalletTab { const allAddrs = await this.findElements(this.generalAddrRowLocator); return allAddrs.length; } + async getFullAddressFromRow(rowIndex) { + this.logger.info(`ReceiveSubTab::getFullAddressFromRow is called. Row index: ${rowIndex}`); + const linkText = await this.getLinkFromComponent(this.addressTextInRowLocator(rowIndex)); + const splittedLink = linkText.split('/'); + return splittedLink[splittedLink.length - 1]; + } /** * Getting an address info from the Receive page * @param {number} rowIndex An index of a row in the addresses table starting from 0 - * @returns {Promise<{address: string, balance: number}>} + * @returns {Promise<{addressShort: string, addressFull: string, balance: number}>} */ async getAddressInfo(rowIndex) { this.logger.info(`ReceiveSubTab::getAddressInfo is called. Row index: ${rowIndex}`); - const shortAddr = await this.getText(this.addressTextInRowLocator(rowIndex)); + const addressShort = await this.getText(this.addressTextInRowLocator(rowIndex)); + const addressFull = await this.getFullAddressFromRow(rowIndex); const addrBalanceText = await this.getText(this.addressBalanceTextInRowLocator(rowIndex)); if (addrBalanceText === '-') { return { - address: shortAddr, + addressShort, + addressFull, balance: 0, }; } @@ -397,7 +260,8 @@ class ReceiveSubTab extends WalletTab { const matchResult = [...addrBalanceText.matchAll(regexp)]; const addrBalance = parseFloat(matchResult[0]); return { - address: shortAddr, + addressShort, + addressFull, balance: addrBalance, }; } From c2b1e7a1d667907a8ff599afb97b7a47b2bdfa6c Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Wed, 3 Jul 2024 23:44:06 +0300 Subject: [PATCH 345/464] added ids on Verify addres modal --- .../app/components/wallet/receive/VerifyAddressDialog.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/yoroi-extension/app/components/wallet/receive/VerifyAddressDialog.js b/packages/yoroi-extension/app/components/wallet/receive/VerifyAddressDialog.js index b56c35488f..0c0e10d65d 100644 --- a/packages/yoroi-extension/app/components/wallet/receive/VerifyAddressDialog.js +++ b/packages/yoroi-extension/app/components/wallet/receive/VerifyAddressDialog.js @@ -95,6 +95,7 @@ class VerifyAddressDialog extends Component { closeOnOverlayClick={false} closeButton={} onClose={this.props.cancel} + id='verifyAddressDialog' > {this.renderQrCode()} {this.renderAddressBlock()} @@ -183,7 +184,7 @@ class VerifyAddressDialog extends Component { {intl.formatMessage(globalMessages.stakingKeyHashLabel)} -
    +
    {stakingKey} @@ -275,7 +276,9 @@ class VerifyAddressDialog extends Component { {intl.formatMessage(globalMessages.derivationPathLabel)}
    -
    {toDerivationPathString(addressing.path)}
    +
    + {toDerivationPathString(addressing.path)} +

    From 7da002bad20dafb16c1bdce2c1f63a771e76e617 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Wed, 3 Jul 2024 23:44:27 +0300 Subject: [PATCH 346/464] added function getRewarKeyHashFromBech32 --- .../e2e-tests/helpers/mock-dApp-webpage/dAppTxHelper.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/e2e-tests/helpers/mock-dApp-webpage/dAppTxHelper.js b/packages/e2e-tests/helpers/mock-dApp-webpage/dAppTxHelper.js index 44feb139fe..c9d29bab20 100644 --- a/packages/e2e-tests/helpers/mock-dApp-webpage/dAppTxHelper.js +++ b/packages/e2e-tests/helpers/mock-dApp-webpage/dAppTxHelper.js @@ -87,6 +87,12 @@ export const getAddressFromBytes = changeAddress => export const getAddressFromBech32 = addressBech32 => CSL.Address.from_bech32(addressBech32); +export const getRewarKeyHashFromBech32 = rewardAddressBech32 => + CSL.RewardAddress.from_address(CSL.Address.from_bech32(rewardAddressBech32)) + .payment_cred() + .to_keyhash() + .to_hex(); + export const getTransactionFromBytes = txHex => CSL.Transaction.from_bytes(hexToBytes(txHex)); export const getTransactionWitnessSetFromBytes = witnessHex => From 7c7328228917bd312a69d786bd89f8ae40d548cf Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Wed, 3 Jul 2024 23:45:06 +0300 Subject: [PATCH 347/464] added verifyAddressModal page --- .../receiveModals/verifyAddressModal.page.js | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 packages/e2e-tests/pages/wallet/walletTab/receiveModals/verifyAddressModal.page.js diff --git a/packages/e2e-tests/pages/wallet/walletTab/receiveModals/verifyAddressModal.page.js b/packages/e2e-tests/pages/wallet/walletTab/receiveModals/verifyAddressModal.page.js new file mode 100644 index 0000000000..73538e0aa6 --- /dev/null +++ b/packages/e2e-tests/pages/wallet/walletTab/receiveModals/verifyAddressModal.page.js @@ -0,0 +1,83 @@ +import { fiveSeconds, quarterSecond } from '../../../../helpers/timeConstants.js'; +import BasePage from '../../../basepage.js'; + +class VerifyAddressModal extends BasePage { + // locators + verifyAddressModalLocator = { + locator: 'verifyAddressDialog-dialogWindow-modalWindow', + method: 'id', + }; + verifyAddressModalTitleLocator = { + locator: 'verifyAddressDialog-dialogTitle-text', + method: 'id', + }; + closeModalButtonLocator = { + locator: 'verifyAddressDialog-closeModal-button', + method: 'id', + }; + // address + addressTextLocator = { + locator: 'verifyAddressDialog-address-text', + method: 'id', + }; + // derivation path + derivationPathTextLocator = { + locator: 'verifyAddressDialog-derivationPath-text', + method: 'id', + }; + // staking key hash + stakingKeyHashTextLocator = { + locator: 'verifyAddressDialog-stakingKeyHash-text', + method: 'id', + }; + // methods + // isDisplayed + async isDisplayed() { + this.logger.info(`ReceiveSubTab::VerifyAddressModal::isDisplayed is called.`); + const modalIsFound = await this.customWaitIsPresented( + this.verifyAddressModalLocator, + fiveSeconds, + quarterSecond + ); + const titleIsFound = await this.customWaitIsPresented( + this.verifyAddressModalTitleLocator, + fiveSeconds, + quarterSecond + ); + return modalIsFound && titleIsFound; + } + // closeModal + async closeModal() { + this.logger.info(`ReceiveSubTab::VerifyAddressModal::closeModal is called.`); + await this.click(this.closeModalButtonLocator); + } + // getVerifyAddressInfo + async getVerifyAddressInfo(isRewardAddr = false) { + this.logger.info(`ReceiveSubTab::VerifyAddressModal::getVerifyAddressInfo is called.`); + // short address + const addressShort = await this.getText(this.addressTextLocator); + // full address + const addressLinkText = await this.getLinkFromComponent(this.addressTextLocator); + const linkArr = addressLinkText.split('/'); + const addressFull = linkArr[linkArr.length - 1]; + // derivation path + const derivationPath = await this.getText(this.derivationPathTextLocator); + if (isRewardAddr) { + return { + addressShort, + addressFull, + derivationPath, + }; + } + // staking key hash + const stakingKeyHash = await this.getText(this.stakingKeyHashTextLocator); + return { + addressShort, + addressFull, + derivationPath, + stakingKeyHash, + }; + } +} + +export default VerifyAddressModal; From f7e66a3a4180324d43c8c51b47b00d431a7aebb5 Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Wed, 3 Jul 2024 23:45:22 +0300 Subject: [PATCH 348/464] added method callVerifyAddress --- .../e2e-tests/pages/wallet/walletTab/receiveSubTab.page.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/e2e-tests/pages/wallet/walletTab/receiveSubTab.page.js b/packages/e2e-tests/pages/wallet/walletTab/receiveSubTab.page.js index b1cccdcc07..88581ae257 100644 --- a/packages/e2e-tests/pages/wallet/walletTab/receiveSubTab.page.js +++ b/packages/e2e-tests/pages/wallet/walletTab/receiveSubTab.page.js @@ -2,6 +2,7 @@ import WalletTab from './walletTab.page.js'; import GenerateURIModal from './receiveModals/generateURIModal.page.js'; import DisplayURIModal from './receiveModals/displayURIModal.page.js'; import { balanceReplacer } from '../../../helpers/constants.js'; +import VerifyAddressModal from './receiveModals/verifyAddressModal.page.js'; class ReceiveSubTab extends WalletTab { // locators @@ -349,6 +350,12 @@ class ReceiveSubTab extends WalletTab { } return allBalancesHidden.every(addrBalance => addrBalance === true); } + async callVerifyAddress(rowindex) { + this.logger.info(`ReceiveSubTab::callVerifyAddress is called.`); + const verifuAddrBtnLocator = this.verifyAddressButtonInRowLocator(rowindex); + await this.click(verifuAddrBtnLocator); + return new VerifyAddressModal(this.driver, this.logger); + } } export default ReceiveSubTab; From 3c81a0ada7c656d9f284aa7b95f207363d5cdc0a Mon Sep 17 00:00:00 2001 From: Denis Nebytov Date: Wed, 3 Jul 2024 23:45:53 +0300 Subject: [PATCH 349/464] added test --- .../test/26_verifyingAddress.test.js | 107 ++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 packages/e2e-tests/test/26_verifyingAddress.test.js diff --git a/packages/e2e-tests/test/26_verifyingAddress.test.js b/packages/e2e-tests/test/26_verifyingAddress.test.js new file mode 100644 index 0000000000..713c34a09b --- /dev/null +++ b/packages/e2e-tests/test/26_verifyingAddress.test.js @@ -0,0 +1,107 @@ +import { expect } from 'chai'; +import BasePage from '../pages/basepage.js'; +import driversPoolsManager from '../utils/driversPool.js'; +import TransactionsSubTab from '../pages/wallet/walletTab/walletTransactions.page.js'; +import ReceiveSubTab from '../pages/wallet/walletTab/receiveSubTab.page.js'; +import { customAfterEach } from '../utils/customHooks.js'; +import { getTestLogger } from '../utils/utils.js'; +import { oneMinute } from '../helpers/timeConstants.js'; +import { getRewarKeyHashFromBech32 } from '../helpers/mock-dApp-webpage/dAppTxHelper.js'; +import { preloadDBAndStorage, waitTxPage } from '../helpers/restoreWalletHelper.js'; + +describe('Verify addresses', function () { + this.timeout(2 * oneMinute); + let webdriver = null; + let logger = null; + let bech32StakeAddress = ''; + let stakingKeyHexExp = ''; + + before(async function () { + webdriver = await driversPoolsManager.getDriverFromPool(); + logger = getTestLogger(this.test.parent.title); + await preloadDBAndStorage(webdriver, logger, 'testWallet1'); + await waitTxPage(webdriver, logger); + }); + + it('Open the Receive tab', async function () { + const transactionsPage = new TransactionsSubTab(webdriver, logger); + await transactionsPage.goToReceiveSubMenu(); + }); + + it('Get staking key hash', async function () { + const receivePage = new ReceiveSubTab(webdriver, logger); + await receivePage.selectRewardAddrs(); + // there is only one stake address, that it is why the ubdex is 0 + bech32StakeAddress = (await receivePage.getAddressInfo(0)).addressFull; + expect(bech32StakeAddress) + .to.be.a('string') + .and.satisfy(msg => msg.startsWith('stake1')); + stakingKeyHexExp = getRewarKeyHashFromBech32(bech32StakeAddress); + }); + + it('Check base external addresses', async function () { + const receivePage = new ReceiveSubTab(webdriver, logger); + await receivePage.selectBaseExtAllAddrs(); + const addressesAmount = await receivePage.getAmountOfAddresses(); + for (let addressIndex = 0; addressIndex < addressesAmount; addressIndex++) { + const addressInfo = await receivePage.getAddressInfo(addressIndex); + const verifyAddresModalPage = await receivePage.callVerifyAddress(addressIndex); + const modalIsDisplayed = await verifyAddresModalPage.isDisplayed(); + expect(modalIsDisplayed, 'Verify address modal is not displayed').to.be.true; + const verifyInfo = await verifyAddresModalPage.getVerifyAddressInfo(); + expect(verifyInfo.addressFull, 'Full address is different').to.equal(addressInfo.addressFull); + expect(verifyInfo.derivationPath, 'Derivation path is diffirent').to.match( + /m\/1852'\/1815'\/0'\/0\/\d+/gi + ); + expect(verifyInfo.stakingKeyHash, 'Staking key hash is different').to.equal(stakingKeyHexExp); + await verifyAddresModalPage.closeModal(); + } + }); + + it('Check base internal addresses', async function () { + const receivePage = new ReceiveSubTab(webdriver, logger); + await receivePage.selectBaseInterAllAddrs(); + const addressesAmount = await receivePage.getAmountOfAddresses(); + for (let addressIndex = 0; addressIndex < addressesAmount; addressIndex++) { + const addressInfo = await receivePage.getAddressInfo(addressIndex); + const verifyAddresModalPage = await receivePage.callVerifyAddress(addressIndex); + const modalIsDisplayed = await verifyAddresModalPage.isDisplayed(); + expect(modalIsDisplayed, 'Verify address modal is not displayed').to.be.true; + const verifyInfo = await verifyAddresModalPage.getVerifyAddressInfo(); + expect(verifyInfo.addressFull, 'Full address is different').to.equal(addressInfo.addressFull); + expect(verifyInfo.derivationPath, 'Derivation path is diffirent').to.match( + /m\/1852'\/1815'\/0'\/1\/\d+/gi + ); + expect(verifyInfo.stakingKeyHash, 'Staking key hash is different').to.equal(stakingKeyHexExp); + await verifyAddresModalPage.closeModal(); + } + }); + + it('Check reward address', async function () { + const receivePage = new ReceiveSubTab(webdriver, logger); + await receivePage.selectRewardAddrs(); + const addressesAmount = await receivePage.getAmountOfAddresses(); + for (let addressIndex = 0; addressIndex < addressesAmount; addressIndex++) { + const addressInfo = await receivePage.getAddressInfo(addressIndex); + const verifyAddresModalPage = await receivePage.callVerifyAddress(addressIndex); + const modalIsDisplayed = await verifyAddresModalPage.isDisplayed(); + expect(modalIsDisplayed, 'Verify address modal is not displayed').to.be.true; + const verifyInfo = await verifyAddresModalPage.getVerifyAddressInfo(true); + expect(verifyInfo.addressFull, 'Full address is different').to.equal(addressInfo.addressFull); + expect(verifyInfo.derivationPath, 'Derivation path is diffirent').to.match( + /m\/1852'\/1815'\/0'\/2\/\d+/gi + ); + } + }); + + afterEach(function (done) { + customAfterEach(this, webdriver, logger); + done(); + }); + + after(function (done) { + const basePage = new BasePage(webdriver, logger); + basePage.closeBrowser(); + done(); + }); +}); From c270413cf5a062e7414860fe51896553f804e43d Mon Sep 17 00:00:00 2001 From: Patriciu Nista Date: Mon, 1 Jul 2024 00:31:15 +0200 Subject: [PATCH 350/464] added new DS vars --- packages/yoroi-extension/app/App.js | 21 +- .../experimental/YoroiPalette/YoroiPalette.js | 154 +++--- .../YoroiTheme/YoroiThemesPage.js | 4 +- .../general-setting/ThemeSettingsBlock.js | 23 +- .../app/styles/context/layout.js | 2 +- .../app/styles/context/mode.js | 8 +- .../app/styles/globalStyles.js | 2 + .../app/styles/overrides/Button.js | 512 ++++++------------ .../app/styles/overrides/Checkbox.js | 51 +- .../app/styles/overrides/Chip.js | 110 +--- .../app/styles/overrides/FormControl.js | 30 +- .../app/styles/overrides/FormHelperText.js | 52 +- .../app/styles/overrides/InputLabel.js | 58 +- .../app/styles/overrides/Menu.js | 23 +- .../app/styles/overrides/MenuItem.js | 52 +- .../app/styles/overrides/OutlinedInput.js | 94 +--- .../app/styles/overrides/Select.js | 17 +- .../app/styles/overrides/TabPanel.js | 16 +- .../app/styles/overrides/Tabs.js | 108 +--- .../app/styles/overrides/TextField.js | 36 +- .../app/styles/overrides/Tooltip.js | 41 +- .../app/styles/overrides/legacy/Button.js | 429 +++++++++++++++ .../app/styles/overrides/legacy/Checkbox.js | 54 ++ .../app/styles/overrides/legacy/Chip.js | 171 ++++++ .../styles/overrides/legacy/FormControl.js | 40 ++ .../styles/overrides/legacy/FormHelperText.js | 44 ++ .../app/styles/overrides/legacy/InputLabel.js | 51 ++ .../app/styles/overrides/legacy/Menu.js | 31 ++ .../app/styles/overrides/legacy/MenuItem.js | 65 +++ .../styles/overrides/legacy/OutlinedInput.js | 89 +++ .../app/styles/overrides/legacy/Select.js | 26 + .../app/styles/overrides/legacy/TabPanel.js | 23 + .../app/styles/overrides/legacy/Tabs.js | 104 ++++ .../app/styles/overrides/legacy/TextField.js | 23 + .../app/styles/overrides/legacy/Tooltip.js | 41 ++ .../overrides/{revamp => legacy}/index.js | 0 .../app/styles/overrides/revamp/Button.js | 210 ------- .../app/styles/overrides/revamp/Checkbox.js | 19 - .../app/styles/overrides/revamp/Chip.js | 81 --- .../styles/overrides/revamp/FormControl.js | 24 - .../styles/overrides/revamp/FormHelperText.js | 14 - .../app/styles/overrides/revamp/InputLabel.js | 17 - .../app/styles/overrides/revamp/Menu.js | 16 - .../app/styles/overrides/revamp/MenuItem.js | 31 -- .../styles/overrides/revamp/OutlinedInput.js | 43 -- .../app/styles/overrides/revamp/Select.js | 15 - .../app/styles/overrides/revamp/TabPanel.js | 13 - .../app/styles/overrides/revamp/Tabs.js | 40 -- .../app/styles/overrides/revamp/TextField.js | 45 -- .../app/styles/overrides/revamp/Tooltip.js | 18 - packages/yoroi-extension/app/styles/themes.js | 15 +- .../themes/base-palettes/dark-palette.js | 62 +++ .../themes/base-palettes/light-palette.js | 56 ++ .../app/styles/themes/common-theme.js | 169 ++++-- .../app/styles/themes/dark-theme-base.js | 130 +++++ .../app/styles/themes/dark-theme-mui.js | 44 ++ .../themes/{ => legacy}/classic-theme.js | 4 +- .../app/styles/themes/legacy/common-theme.js | 61 +++ .../themes/{ => legacy}/modern-theme.js | 4 +- .../app/styles/themes/light-theme-base.js | 159 ++++++ .../app/styles/themes/light-theme-mui.js | 44 ++ .../app/styles/themes/revamp/common-theme.js | 114 ---- .../styles/themes/revamp/dark-theme-mui.js | 44 -- .../styles/themes/revamp/light-theme-mui.js | 44 -- .../app/styles/themes/themed-palettes/dark.js | 41 ++ .../styles/themes/themed-palettes/light.js | 41 ++ .../app/styles/themes/tokens/tokens.js | 66 +++ 67 files changed, 2434 insertions(+), 1855 deletions(-) create mode 100644 packages/yoroi-extension/app/styles/overrides/legacy/Button.js create mode 100644 packages/yoroi-extension/app/styles/overrides/legacy/Checkbox.js create mode 100644 packages/yoroi-extension/app/styles/overrides/legacy/Chip.js create mode 100644 packages/yoroi-extension/app/styles/overrides/legacy/FormControl.js create mode 100644 packages/yoroi-extension/app/styles/overrides/legacy/FormHelperText.js create mode 100644 packages/yoroi-extension/app/styles/overrides/legacy/InputLabel.js create mode 100644 packages/yoroi-extension/app/styles/overrides/legacy/Menu.js create mode 100644 packages/yoroi-extension/app/styles/overrides/legacy/MenuItem.js create mode 100644 packages/yoroi-extension/app/styles/overrides/legacy/OutlinedInput.js create mode 100644 packages/yoroi-extension/app/styles/overrides/legacy/Select.js create mode 100644 packages/yoroi-extension/app/styles/overrides/legacy/TabPanel.js create mode 100644 packages/yoroi-extension/app/styles/overrides/legacy/Tabs.js create mode 100644 packages/yoroi-extension/app/styles/overrides/legacy/TextField.js create mode 100644 packages/yoroi-extension/app/styles/overrides/legacy/Tooltip.js rename packages/yoroi-extension/app/styles/overrides/{revamp => legacy}/index.js (100%) delete mode 100644 packages/yoroi-extension/app/styles/overrides/revamp/Button.js delete mode 100644 packages/yoroi-extension/app/styles/overrides/revamp/Checkbox.js delete mode 100644 packages/yoroi-extension/app/styles/overrides/revamp/Chip.js delete mode 100644 packages/yoroi-extension/app/styles/overrides/revamp/FormControl.js delete mode 100644 packages/yoroi-extension/app/styles/overrides/revamp/FormHelperText.js delete mode 100644 packages/yoroi-extension/app/styles/overrides/revamp/InputLabel.js delete mode 100644 packages/yoroi-extension/app/styles/overrides/revamp/Menu.js delete mode 100644 packages/yoroi-extension/app/styles/overrides/revamp/MenuItem.js delete mode 100644 packages/yoroi-extension/app/styles/overrides/revamp/OutlinedInput.js delete mode 100644 packages/yoroi-extension/app/styles/overrides/revamp/Select.js delete mode 100644 packages/yoroi-extension/app/styles/overrides/revamp/TabPanel.js delete mode 100644 packages/yoroi-extension/app/styles/overrides/revamp/Tabs.js delete mode 100644 packages/yoroi-extension/app/styles/overrides/revamp/TextField.js delete mode 100644 packages/yoroi-extension/app/styles/overrides/revamp/Tooltip.js create mode 100644 packages/yoroi-extension/app/styles/themes/base-palettes/dark-palette.js create mode 100644 packages/yoroi-extension/app/styles/themes/base-palettes/light-palette.js create mode 100644 packages/yoroi-extension/app/styles/themes/dark-theme-base.js create mode 100644 packages/yoroi-extension/app/styles/themes/dark-theme-mui.js rename packages/yoroi-extension/app/styles/themes/{ => legacy}/classic-theme.js (96%) create mode 100644 packages/yoroi-extension/app/styles/themes/legacy/common-theme.js rename packages/yoroi-extension/app/styles/themes/{ => legacy}/modern-theme.js (96%) create mode 100644 packages/yoroi-extension/app/styles/themes/light-theme-base.js create mode 100644 packages/yoroi-extension/app/styles/themes/light-theme-mui.js delete mode 100644 packages/yoroi-extension/app/styles/themes/revamp/common-theme.js delete mode 100644 packages/yoroi-extension/app/styles/themes/revamp/dark-theme-mui.js delete mode 100644 packages/yoroi-extension/app/styles/themes/revamp/light-theme-mui.js create mode 100644 packages/yoroi-extension/app/styles/themes/themed-palettes/dark.js create mode 100644 packages/yoroi-extension/app/styles/themes/themed-palettes/light.js create mode 100644 packages/yoroi-extension/app/styles/themes/tokens/tokens.js diff --git a/packages/yoroi-extension/app/App.js b/packages/yoroi-extension/app/App.js index d673c45e94..f287b14e40 100644 --- a/packages/yoroi-extension/app/App.js +++ b/packages/yoroi-extension/app/App.js @@ -1,26 +1,27 @@ // @flow -import { Component } from 'react'; import type { Node } from 'react'; +import type { RouterHistory } from 'react-router-dom'; +import type { StoresMap } from './stores'; +import type { ActionsMap } from './actions'; +import { Component } from 'react'; import { observer } from 'mobx-react'; import { Router } from 'react-router-dom'; -import type { RouterHistory } from 'react-router-dom'; import { addLocaleData, IntlProvider } from 'react-intl'; import { observable, autorun, runInAction } from 'mobx'; import { Routes } from './Routes'; import { locales, translations } from './i18n/translations'; -import type { StoresMap } from './stores'; -import type { ActionsMap } from './actions'; -import ThemeManager from './ThemeManager'; -import environment from './environment'; -import MaintenancePage from './containers/MaintenancePage'; -import CrashPage from './containers/CrashPage'; import { Logger } from './utils/logging'; import { LayoutProvider } from './styles/context/layout'; import { ColorModeProvider } from './styles/context/mode'; import { CssBaseline } from '@mui/material'; import { globalStyles } from './styles/globalStyles'; -import Support from './components/widgets/Support'; import { changeToplevelTheme, MuiThemes } from './styles/themes'; +import { THEMES } from './styles/themes'; +import ThemeManager from './ThemeManager'; +import environment from './environment'; +import MaintenancePage from './containers/MaintenancePage'; +import CrashPage from './containers/CrashPage'; +import Support from './components/widgets/Support'; // https://github.com/yahoo/react-intl/wiki#loading-locale-data addLocaleData(locales); @@ -81,7 +82,7 @@ class App extends Component { // which looks ugly but at least it's readable. '--default-font': !environment.isProduction() ? 'wingdings' : 'Times New Roman', }); - const currentTheme = stores.profile.currentTheme; + const currentTheme = stores.profile.currentTheme || THEMES.YOROI_BASE; changeToplevelTheme(currentTheme); diff --git a/packages/yoroi-extension/app/components/experimental/YoroiPalette/YoroiPalette.js b/packages/yoroi-extension/app/components/experimental/YoroiPalette/YoroiPalette.js index 3831c35e9f..747497df42 100644 --- a/packages/yoroi-extension/app/components/experimental/YoroiPalette/YoroiPalette.js +++ b/packages/yoroi-extension/app/components/experimental/YoroiPalette/YoroiPalette.js @@ -1,98 +1,90 @@ // @flow import { Component } from 'react'; import { observer } from 'mobx-react'; -import styles from './YoroiPalette.scss' +import styles from './YoroiPalette.scss'; import type { Node } from 'react'; -import { classicTheme } from '../../../styles/themes/classic-theme' -import { modernTheme } from '../../../styles/themes/modern-theme' +import { classicTheme } from '../../../styles/themes/legacy/classic-theme'; +import { modernTheme } from '../../../styles/themes/legacy/modern-theme'; import classNames from 'classnames'; -import { ReactComponent as ArrowDown } from '../../../assets/images/down-arrow.inline.svg'; +import { ReactComponent as ArrowDown } from '../../../assets/images/down-arrow.inline.svg'; import { getMainYoroiPalette, formatPalette } from '../../../styles/globalStyles'; -import type { DesignToken } from '../../../styles/globalStyles' +import type { DesignToken } from '../../../styles/globalStyles'; /** * @todos * 1. Print transaction status * 2. Print the actual theme object */ -type Props = {||} +type Props = {||}; -type Theme = 'classic' | 'modern' +type Theme = 'classic' | 'modern'; type State = {| - currentTheme: Theme -|} + currentTheme: Theme, +|}; const themes = { - classic: classicTheme, - modern: modernTheme -} + classic: classicTheme, + modern: modernTheme, +}; @observer export default class YoroiPalettePage extends Component { + state: State = { + currentTheme: 'classic', + }; - state: State = { - currentTheme: 'classic', - } - - switchTheme(theme: Theme): void { - this.setState({ currentTheme: theme }) - } + switchTheme(theme: Theme): void { + this.setState({ currentTheme: theme }); + } - render(): Node { + render(): Node { + const { currentTheme } = this.state; + const palette = getMainYoroiPalette(themes[currentTheme]); + const { designTokens, nameToHex } = formatPalette(palette, themes[currentTheme]); + return ( +
    +
    + + +
    - const { currentTheme } = this.state - const palette = getMainYoroiPalette(themes[currentTheme]) - const { designTokens, nameToHex } = formatPalette(palette, themes[currentTheme]) - return ( -
    -
    - - +
    +

    Design tokens

    +
    + {designTokens.map(color => ( +
      {this.renderRow(color).map(node => node)}
    + ))}
    +
    -
    -

    Design tokens

    -
    - { - designTokens.map(color => ( -
      - {this.renderRow(color).map(node => node)} -
    - )) - } -
    +

    Colors Direct Hex Colors

    + {nameToHex.map(color => ( +
    + +
    {String(color.hex)}
    +
    {color.name}
    - -

    Colors Direct Hex Colors

    - {nameToHex.map((color) => ( -
    - -
    - {String(color.hex)} -
    -
    {color.name}
    -
    - ))} -
    - ) + ))} +
    + ); } renderRow(color: DesignToken): Node[] { @@ -103,7 +95,7 @@ export default class YoroiPalettePage extends Component { }, { text: color.path.join('-'), - classnames: [styles.flexWithMargin, styles.designTokens] + classnames: [styles.flexWithMargin, styles.designTokens], }, { text: color.child, @@ -112,13 +104,13 @@ export default class YoroiPalettePage extends Component { { text: color.parent, classnames: [styles.flexWithMargin, styles.parent], - } - ] + }, + ]; - const nodes = [] + const nodes = []; - for(let i = 0; i < subRows.length; i++) { - const subRow = subRows[i] + for (let i = 0; i < subRows.length; i++) { + const subRow = subRows[i]; nodes.push( <>
  • @@ -133,11 +125,15 @@ export default class YoroiPalettePage extends Component { />
    {subRow.text}
  • - {i < subRows.length -1 &&
  • } + {i < subRows.length - 1 && ( +
  • + +
  • + )} - ) + ); } - return nodes + return nodes; } -} \ No newline at end of file +} diff --git a/packages/yoroi-extension/app/components/experimental/YoroiTheme/YoroiThemesPage.js b/packages/yoroi-extension/app/components/experimental/YoroiTheme/YoroiThemesPage.js index 59cd283fa0..4394fc699f 100644 --- a/packages/yoroi-extension/app/components/experimental/YoroiTheme/YoroiThemesPage.js +++ b/packages/yoroi-extension/app/components/experimental/YoroiTheme/YoroiThemesPage.js @@ -3,8 +3,8 @@ import { Component } from 'react'; import { observer } from 'mobx-react'; import styles from './YoroiThemesPage.scss' import type { Node } from 'react'; -import { classicTheme } from '../../../styles/themes/classic-theme' -import { modernTheme } from '../../../styles/themes/modern-theme' +import { classicTheme } from '../../../styles/themes/legacy/classic-theme'; +import { modernTheme } from '../../../styles/themes/legacy/modern-theme'; import classNames from 'classnames'; type Props = {||} diff --git a/packages/yoroi-extension/app/components/settings/categories/general-setting/ThemeSettingsBlock.js b/packages/yoroi-extension/app/components/settings/categories/general-setting/ThemeSettingsBlock.js index 23d876694a..72164d5223 100644 --- a/packages/yoroi-extension/app/components/settings/categories/general-setting/ThemeSettingsBlock.js +++ b/packages/yoroi-extension/app/components/settings/categories/general-setting/ThemeSettingsBlock.js @@ -79,7 +79,7 @@ type Props = {| +onExternalLinkClick: MouseEvent => void, |}; -const NEW_THEME = THEMES.YOROI_REVAMP; +const NEW_THEME = THEMES.YOROI_BASE; const OLD_THEME = `${THEMES.YOROI_MODERN}-${THEMES.YOROI_CLASSIC}`; @observer export default class ThemeSettingsBlock extends Component { @@ -90,7 +90,7 @@ export default class ThemeSettingsBlock extends Component { render(): Node { const { currentTheme, onSubmit, onExternalLinkClick } = this.props; const { intl } = this.context; - const isRevampLayout = currentTheme === THEMES.YOROI_REVAMP; + const isRevampLayout = currentTheme === THEMES.YOROI_BASE; const blogLink = ( { py: !isRevampLayout && '24px', }} > - { /> - {false && currentTheme === THEMES.YOROI_REVAMP && environment.isDev() && ( + {false && currentTheme === THEMES.YOROI_BASE && environment.isDev() && ( )} - {currentTheme !== THEMES.YOROI_REVAMP && ( + {currentTheme !== THEMES.YOROI_BASE && ( - { > {intl.formatMessage(messages.selectColorTheme)} - - + diff --git a/packages/yoroi-extension/app/styles/context/layout.js b/packages/yoroi-extension/app/styles/context/layout.js index cf49ff9b18..8dc955f4ec 100644 --- a/packages/yoroi-extension/app/styles/context/layout.js +++ b/packages/yoroi-extension/app/styles/context/layout.js @@ -18,7 +18,7 @@ const LayoutContext = React.createContext(); const LayoutProvider = (props: Object): Node => { const { layout } = props; - const localLayout: Layouts = layout === THEMES.YOROI_REVAMP ? 'REVAMP' : 'CLASSIC'; + const localLayout: Layouts = layout === THEMES.YOROI_BASE ? 'REVAMP' : 'CLASSIC'; return ( { - if (currentTheme === THEMES.YOROI_REVAMP) return getDesignTokens(mode); + if (currentTheme === THEMES.YOROI_BASE) return getDesignTokens(mode); return MuiThemes[currentTheme]; }, [mode, currentTheme]); diff --git a/packages/yoroi-extension/app/styles/globalStyles.js b/packages/yoroi-extension/app/styles/globalStyles.js index 2b5b38eb0b..7603aa38ec 100644 --- a/packages/yoroi-extension/app/styles/globalStyles.js +++ b/packages/yoroi-extension/app/styles/globalStyles.js @@ -68,6 +68,8 @@ export const formatPalette = (palette: any, theme: any): FormatedPalette => { }; export function getMainYoroiPalette(theme: Object): { [string]: string | number } { + // if (theme.name === 'light-theme' || theme.name === 'dark-theme') return {}; + return { /* CSS variables follow the same name as mui using kebab case syntax diff --git a/packages/yoroi-extension/app/styles/overrides/Button.js b/packages/yoroi-extension/app/styles/overrides/Button.js index 1d582cb28a..9fe568dd04 100644 --- a/packages/yoroi-extension/app/styles/overrides/Button.js +++ b/packages/yoroi-extension/app/styles/overrides/Button.js @@ -1,429 +1,229 @@ // @flow -import { revampBaseTheme } from '../themes/revamp/light-theme-mui'; -const ClassicButton: any = { +import { lightThemeBase } from '../themes/light-theme-base'; +import { darkThemeBase } from '../themes/dark-theme-base'; + +const { palette: darkThemePalette } = darkThemeBase; +const { palette: lightThemePalette } = lightThemeBase; +const ltDs = lightThemePalette.ds; +const dtDs = darkThemePalette.ds; + +const ButtonCommonProps: Object = { styleOverrides: { root: { - fontSize: '0.875rem', - borderRadius: 0, - border: 0, + fontSize: '1rem', + borderRadius: 8, fontWeight: 500, - minHeight: 44, - minWidth: 230, - padding: '12px 20px', - textTransform: 'none', + fontFamily: 'Rubik', + lineHeight: '19px', + textTransform: 'uppercase', + padding: '16px', + boxShadow: 'none', + '&.MuiButton-sizeLarge': { height: '56px' }, + '&.MuiButton-sizeMedium': { padding: '13px 24px' }, + '&.MuiButton-sizeSmall': { padding: '7px' }, + '&.MuiButton-sizeFlat': { padding: '13px 24px', height: 'unset' }, + '&:hover': { boxShadow: 'none' }, + '& span.MuiButton-startIcon': { + marginLeft: '0px', + marginRight: '6px', + }, }, }, - defaultProps: { disableRipple: true }, + defaultProps: { disableRipple: false }, +}; + +// Button in Figam: https://bit.ly/3Ky4uvo +export const LightButton: any = { + ...ButtonCommonProps, variants: [ { props: { variant: 'primary' }, - style: { - backgroundColor: 'var(--yoroi-comp-button-primary-background)', - color: 'var(--yoroi-comp-button-primary-text)', - ':hover': { - backgroundColor: 'var(--yoroi-comp-button-primary-background-hover)', - }, - '&.Mui-active': { - backgroundColor: 'var(--yoroi-comp-button-primary-background-active)', - }, - '&.Mui-disabled': { - opacity: 0.4, - color: 'var(--yoroi-comp-button-primary-text)', - }, - '& .MuiLoadingButton-loadingIndicator': { - color: 'var(--yoroi-comp-button-primary-text)', - }, - }, + style: getContainedStyles('primary', ltDs), }, { props: { variant: 'secondary' }, + style: getOutlinedStyles('primary', ltDs), + }, + { + props: { variant: 'tertiary', color: 'primary' }, + style: getTertiaryStyles('primary', ltDs), + }, + { + props: { variant: 'tertiary', color: 'secondary' }, + style: getTertiaryStyles('grayscale', ltDs), + }, + { + props: { variant: 'destructive' }, style: { - backgroundColor: 'var(--yoroi-comp-button-flat-background)', - color: 'var(--yoroi-comp-button-flat-text)', - border: 0, - ':hover': { - backgroundColor: 'var(--yoroi-comp-button-flat-background-hover)', - }, - '&.Mui-active': { - backgroundColor: 'var(--yoroi-comp-button-flat-background-active)', + backgroundColor: ltDs.sys_magenta_c500, + color: ltDs.white_static, + ':hover': { backgroundColor: ltDs.sys_magenta_c600 }, + ':active': { backgroundColor: ltDs.sys_magenta_c700 }, + ':focus': { + backgroundColor: ltDs.sys_magenta_c500, + outline: '2px solid', + outlineColor: ltDs.sys_yellow_c500, }, '&.Mui-disabled': { - color: 'var(--yoroi-comp-button-flat-text)', - opacity: 0.4, - }, - '& .MuiLoadingButton-loadingIndicator': { - color: 'var(--yoroi-comp-button-flat-text)', + color: ltDs.white_static, + backgroundColor: ltDs.sys_magenta_c300, + cursor: 'not-allowed', + pointerEvents: 'unset', }, + '& .MuiLoadingButton-loadingIndicator': { color: ltDs.white_static }, + '& .MuiButton-startIcon svg': { fill: ltDs.white_static }, + '& .MuiButton-startIcon svg path': { fill: ltDs.white_static }, }, }, { - props: { variant: 'danger' }, + props: { variant: 'segmented' }, style: { - backgroundColor: 'var(--yoroi-comp-button-danger-background)', - color: 'var(--yoroi-comp-button-danger-text)', - border: 0, + minWidth: 'unset', + maxWidth: 'unset', + width: '40px', + height: '40px', + padding: '8px', + color: 'ds.gray_c200', + '&.MuiButton-sizeMedium': { padding: '8px', height: '40px' }, ':hover': { - backgroundColor: 'var(--yoroi-comp-button-danger-background-hover)', - }, - '&.Mui-active': { - backgroundColor: 'var(--yoroi-comp-button-danger-background-active)', - }, - '&.Mui-disabled': { - opacity: 0.4, - color: 'var(--yoroi-comp-button-danger-text)', + color: 'ds.gray_c50', }, - '& .MuiLoadingButton-loadingIndicator': { - color: 'var(--yoroi-comp-button-danger-background)', + '&.active': { + backgroundColor: ltDs.gray_c200, + ':hover': { + backgroundColor: ltDs.gray_c50, + }, }, }, }, ], }; -const ModernButton: any = { - styleOverrides: { - root: { - fontSize: '1rem', - borderRadius: 8, - fontWeight: 500, - fontFamily: 'Rubik', - minHeight: 52, - minWidth: 230, - lineHeight: '18px', - textTransform: 'uppercase', - padding: '16px', - height: 52, - }, - }, - defaultProps: { disableRipple: true }, +// Button in Figam: https://bit.ly/3Ky4uvo +export const DarkButton: any = { + ...ButtonCommonProps, variants: [ { props: { variant: 'primary' }, - style: { - backgroundColor: 'var(--yoroi-comp-button-primary-background)', - color: 'var(--yoroi-comp-button-primary-text)', - ':hover': { - backgroundColor: 'var(--yoroi-comp-button-primary-background-hover)', - }, - '&.Mui-active': { - backgroundColor: 'var(--yoroi-comp-button-primary-background-active)', - }, - '&.Mui-disabled': { - opacity: 0.4, - color: 'var(--yoroi-comp-button-primary-text)', - }, - '& .MuiLoadingButton-loadingIndicator': { - color: 'var(--yoroi-comp-button-primary-text)', - }, - }, - }, - { - props: { variant: 'secondary-blue' }, - style: { - backgroundColor: 'var(--yoroi-comp-button-secondary-background)', - color: 'var(--yoroi-comp-button-primary-text)', - border: '2px solid', - borderColor: 'var(--yoroi-comp-button-primary-border)', - ':hover': { - color: 'var(--yoroi-comp-button-primary-text)', - borderColor: 'var(--yoroi-comp-button-primary-border-hover)', - backgroundColor: 'var(--yoroi-comp-button-primary-background-hover)', - }, - '&.Mui-active': { - backgroundColor: 'var(--yoroi-comp-button-primary-background-active)', - }, - '&.Mui-disabled': { - border: '2px solid', - opacity: 0.4, - borderColor: 'var(--yoroi-comp-button-primary-border)', - color: 'var(--yoroi-comp-button-primary-text)', - }, - '& .MuiLoadingButton-loadingIndicator': { - color: 'var(--yoroi-comp-button-primary-text)', - }, - }, + style: getContainedStyles('primary', dtDs), }, { props: { variant: 'secondary' }, - style: { - backgroundColor: 'var(--yoroi-comp-button-secondary-background)', - color: 'var(--yoroi-comp-button-secondary-text)', - border: '2px solid', - borderColor: 'var(--yoroi-comp-button-secondary-border)', - ':hover': { - color: 'var(--yoroi-comp-button-secondary-text)', - borderColor: 'var(--yoroi-comp-button-secondary-border-hover)', - backgroundColor: 'var(--yoroi-comp-button-secondary-background-hover)', - }, - '&.Mui-active': { - backgroundColor: 'var(--yoroi-comp-button-secondary-background-active)', - }, - '&.Mui-disabled': { - border: '2px solid', - opacity: 0.4, - borderColor: 'var(--yoroi-comp-button-secondary-border)', - color: 'var(--yoroi-comp-button-secondary-text)', - }, - '& .MuiLoadingButton-loadingIndicator': { - color: 'var(--yoroi-comp-button-secondary-text)', - }, - }, + style: getOutlinedStyles('primary', dtDs), }, { - props: { variant: 'ternary' }, - style: { - minWidth: '160px', - minHeight: '44px', - height: '44px', - fontSize: '0.875rem', - backgroundColor: 'transparent', - color: 'var(--yoroi-palette-gray-600)', - border: '1px solid', - borderColor: 'var(--yoroi-palette-gray-400)', - ':hover': { - borderColor: 'var(--yoroi-palette-gray-500)', - }, - '&.Mui-active': { - backgroundColor: 'var(--yoroi-palette-gray-50)', - }, - '&.Mui-disabled': { - border: '1px solid', - opacity: 0.4, - borderColor: 'var(--yoroi-palette-gray-400)', - color: 'var(--yoroi-palette-gray-600)', - }, - '& .MuiLoadingButton-loadingIndicator': { - color: 'var(--yoroi-palette-gray-600)', - }, - }, + props: { variant: 'tertiary', color: 'primary' }, + style: getTertiaryStyles('primary', dtDs), }, { - props: { variant: 'danger' }, - style: { - backgroundColor: 'var(--yoroi-comp-button-danger-background)', - color: 'var(--yoroi-comp-button-danger-text)', - border: 0, - ':hover': { - backgroundColor: 'var(--yoroi-comp-button-danger-background-hover)', - }, - '&.Mui-active': { - backgroundColor: 'var(--yoroi-comp-button-danger-background-active)', - }, - '&.Mui-disabled': { - color: 'var(--yoroi-comp-button-danger-text)', - opacity: 0.4, - }, - '& .MuiLoadingButton-loadingIndicator': { - color: 'var(--yoroi-comp-button-danger-background)', - }, - }, + props: { variant: 'tertiary', color: 'secondary' }, + style: getTertiaryStyles('grayscale', dtDs), }, - // Todo: this button `varient` should be part of the new revam design system { - props: { variant: 'rv-primary' }, + props: { variant: 'destructive' }, style: { - minWidth: 'unset', - minHeight: 'unset', - width: 'unset', - height: 'unset', - // Todo: get the colors from the design system - backgroundColor: '#4B6DDE', - color: 'var(--yoroi-palette-common-white)', - border: 1, - ':hover': { - backgroundColor: '#3154CB', - }, - '&.Mui-active': { - backgroundColor: '#1737A3', + backgroundColor: dtDs.sys_magenta_c500, + color: dtDs.white_static, + ':hover': { backgroundColor: dtDs.sys_magenta_c600 }, + ':active': { backgroundColor: dtDs.sys_magenta_c700 }, + ':focus': { + backgroundColor: dtDs.sys_magenta_c500, + outline: '2px solid', + outlineColor: dtDs.sys_yellow_c500, }, '&.Mui-disabled': { - color: '#C4CFF5', - opacity: 0.4, - }, - '& .MuiLoadingButton-loadingIndicator': { - color: '#C4CFF5', + color: dtDs.white_static, + backgroundColor: dtDs.sys_magenta_c300, + cursor: 'not-allowed', + pointerEvents: 'unset', }, + '& .MuiLoadingButton-loadingIndicator': { color: dtDs.white_static }, + '& .MuiButton-startIcon svg': { fill: dtDs.white_static }, + '& .MuiButton-startIcon svg path': { fill: dtDs.white_static }, }, }, ], }; -function makeContainedBtnStyles(color: 'primary' | 'secondary'): Object { +function getContainedStyles(variant: 'primary' | 'secondary', themePalette: Object): Object { return { - backgroundColor: revampBaseTheme.palette[color].main, - color: revampBaseTheme.palette.common.white, - ':hover': { - backgroundColor: revampBaseTheme.palette[color][600], - }, - ':active': { - backgroundColor: revampBaseTheme.palette[color][700], - }, + backgroundColor: themePalette[`${variant}_c500`], + color: themePalette.gray_cmin, + ':hover': { backgroundColor: themePalette[`${variant}_c600`] }, + ':active': { backgroundColor: themePalette[`${variant}_c700`] }, ':focus': { - backgroundColor: revampBaseTheme.palette[color][500], + backgroundColor: themePalette[`${variant}_c500`], + outline: '2px solid', + outlineColor: themePalette.sys_yellow_c500, }, '&.Mui-disabled': { - color: revampBaseTheme.palette.common.white, - backgroundColor: revampBaseTheme.palette[color][200], - }, - '& .MuiLoadingButton-loadingIndicator': { - color: revampBaseTheme.palette.common.white, - }, + color: themePalette.gray_cmin, + backgroundColor: themePalette[`${variant}_c300`], + cursor: 'not-allowed', + pointerEvents: 'unset', + }, + '& .MuiLoadingButton-loadingIndicator': { color: themePalette.gray_cmin }, + '& .MuiButton-startIcon svg': { fill: themePalette.gray_cmin }, + '& .MuiButton-startIcon svg path': { fill: themePalette.gray_cmin }, }; } -function makeOutlinedBtnStyles(color: 'primary' | 'secondary'): Object { +function getOutlinedStyles(variant: 'primary' | 'secondary', themePalette: Object): Object { return { backgroundColor: 'transparent', - color: revampBaseTheme.palette[color][500], + color: themePalette[`${variant}_c500`], border: '2px solid', - borderColor: revampBaseTheme.palette[color][500], + borderColor: themePalette[`${variant}_c500`], ':hover': { border: '2px solid', - color: revampBaseTheme.palette[color][600], - borderColor: revampBaseTheme.palette[color][600], - }, - ':active': { - borderColor: revampBaseTheme.palette[color][700], + color: themePalette[`${variant}_c600`], + borderColor: themePalette[`${variant}_c600`], }, + ':active': { borderColor: themePalette[`${variant}_c700`] }, ':focus': { - borderColor: revampBaseTheme.palette[color][500], + borderColor: themePalette[`${variant}_c500`], + outline: '2px solid', + outlineColor: themePalette.sys_yellow_c500, }, '&.Mui-disabled': { border: '2px solid', - borderColor: revampBaseTheme.palette[color][200], - color: revampBaseTheme.palette[color][200], - }, - '& .MuiLoadingButton-loadingIndicator': { - color: revampBaseTheme.palette[color][600], - }, + borderColor: themePalette[`${variant}_c200`], + color: themePalette[`${variant}_c200`], + cursor: 'not-allowed', + pointerEvents: 'unset', + }, + '& .MuiLoadingButton-loadingIndicator': { color: themePalette[`${variant}_c600`] }, + '& .MuiButton-startIcon svg': { fill: themePalette[`${variant}_c500`] }, + '& .MuiButton-startIcon svg path': { fill: themePalette[`${variant}_c500`] }, }; } -// Button in Figam: https://bit.ly/3Ky4uvo -const RevampButton: any = { - styleOverrides: { - root: { - fontSize: '1rem', - borderRadius: 8, - fontWeight: 500, - fontFamily: 'Rubik', - lineHeight: '19px', - textTransform: 'uppercase', - padding: '16px', - '&.MuiButton-sizeLarge': { - height: '56px', - }, - '&.MuiButton-sizeMedium': { - padding: '10px', - height: '48px', - }, - '&.MuiButton-sizeSmall': { - padding: '7px', - height: '32px', - }, - boxShadow: 'none', - ':hover': { - boxShadow: 'none', - }, - }, - }, - defaultProps: { disableRipple: false }, - variants: [ - { - props: { variant: 'contained', color: 'primary' }, - style: makeContainedBtnStyles('primary'), - }, - { - props: { variant: 'contained', color: 'secondary' }, - style: makeContainedBtnStyles('secondary'), - }, - { - props: { variant: 'outlined', color: 'primary' }, - style: makeOutlinedBtnStyles('primary'), - }, - { - props: { variant: 'outlined', color: 'secondary' }, - style: makeOutlinedBtnStyles('secondary'), - }, - { - props: { variant: 'ternary' }, - style: { - width: '160px', - height: '48px', - padding: '8px', - fontSize: '0.875rem', - backgroundColor: 'transparent', - color: revampBaseTheme.palette.grayscale[600], - border: '1px solid', - borderColor: revampBaseTheme.palette.grayscale[400], - ':hover': { - borderColor: revampBaseTheme.palette.grayscale[500], - }, - '&.Mui-active': { - backgroundColor: revampBaseTheme.palette.grayscale[50], - }, - '&.Mui-disabled': { - border: '1px solid', - opacity: 0.4, - borderColor: revampBaseTheme.palette.grayscale[400], - color: revampBaseTheme.palette.grayscale[600], - }, - '& .MuiLoadingButton-loadingIndicator': { - color: revampBaseTheme.palette.grayscale[600], - }, - }, +function getTertiaryStyles(variant: 'primary' | 'grayscale', themePalette: Object): Object { + return { + backgroundColor: 'transparent', + color: themePalette[`${variant}_c500`], + ':hover': { + backgroundColor: themePalette.gray_c50, + color: themePalette[`${variant}_c600`], }, - { - props: { variant: 'contained', color: 'error' }, - style: { - backgroundColor: revampBaseTheme.palette.magenta[300], - color: revampBaseTheme.palette.common.white, - border: 0, - ':hover': { - backgroundColor: revampBaseTheme.palette.magenta[100], - }, - '&.Mui-active': { - backgroundColor: revampBaseTheme.palette.magenta[300], - }, - '&.Mui-disabled': { - backgroundColor: revampBaseTheme.palette.magenta[300], - color: revampBaseTheme.palette.common.white, - opacity: 0.4, - }, - '& .MuiLoadingButton-loadingIndicator': { - color: revampBaseTheme.palette.magenta[300], - }, - }, + ':active': { + backgroundColor: themePalette.gray_c100, + color: themePalette[`${variant}_c700`], }, - { - props: { variant: 'outlined', color: 'error' }, - style: { - backgroundColor: revampBaseTheme.palette.common.white, - color: revampBaseTheme.palette.magenta[500], - border: '2px solid', - borderColor: revampBaseTheme.palette.magenta[500], - ':hover': { - border: '2px solid', - color: revampBaseTheme.palette.magenta[400], - borderColor: revampBaseTheme.palette.magenta[400], - }, - ':active': { - borderColor: revampBaseTheme.palette.magenta[400], - }, - ':focus': { - borderColor: revampBaseTheme.palette.magenta[400], - }, - '&.Mui-disabled': { - border: '2px solid', - opacity: 0.4, - }, - '& .MuiLoadingButton-loadingIndicator': { - color: revampBaseTheme.palette.magenta[500], - }, - }, + ':focus': { + outline: '2px solid', + outlineColor: themePalette.sys_yellow_c500, }, - ], -}; - -export { ClassicButton, ModernButton, RevampButton }; + '&.Mui-disabled': { + border: '2px solid', + borderColor: themePalette[`${variant}_c200`], + color: themePalette[`${variant}_c200`], + cursor: 'not-allowed', + pointerEvents: 'unset', + }, + '& .MuiLoadingButton-loadingIndicator': { color: themePalette[`${variant}_c600`] }, + '& .MuiButton-startIcon svg': { fill: themePalette[`${variant}_c500`] }, + '& .MuiButton-startIcon svg path': { fill: themePalette[`${variant}_c500`] }, + }; +} diff --git a/packages/yoroi-extension/app/styles/overrides/Checkbox.js b/packages/yoroi-extension/app/styles/overrides/Checkbox.js index 6ceabccf7b..97dafe2e76 100644 --- a/packages/yoroi-extension/app/styles/overrides/Checkbox.js +++ b/packages/yoroi-extension/app/styles/overrides/Checkbox.js @@ -1,54 +1,19 @@ // @flow -import { lightTheme } from '../themes/revamp/light-theme-base'; -const ClassicCheckbox = { +const Checkbox: any = { styleOverrides: { - root: { - padding: 0, - marginRight: '18px', - color: 'var(--yoroi-comp-checkbox-background-active)', - '&.Mui-checked': { - color: 'var(--yoroi-comp-checkbox-background-active)', - }, - '&.Mui-disabled': { - color: 'var(--yoroi-comp-checkbox-border-disabled)', - }, - }, - }, -}; - -const ModernCheckbox = { - styleOverrides: { - root: { - padding: 0, - marginRight: '18px', - color: 'var(--yoroi-comp-checkbox-border)', - '&.Mui-checked': { - color: 'var(--yoroi-comp-checkbox-background-active)', - }, - '&.Mui-disabled': { - color: 'var(--yoroi-comp-checkbox-border-disabled)', - }, - }, - }, -}; - -const RevampCheckbox: any = { - styleOverrides: { - root: { + root: ({ theme }) => ({ padding: 0, marginRight: '18px', borderRadius: '2px', - color: 'primary.500', - '&.Mui-checked': { - color: 'primary.500', - }, + color: theme.palette.ds.gray_c800, + '&.Mui-checked': { color: theme.palette.ds.primary_c500 }, '&.Mui-disabled': { - color: lightTheme.palette.grayscale[400], - backgroundColor: lightTheme.palette.grayscale[400], + color: theme.palette.ds.gray_c400, + backgroundColor: theme.palette.ds.gray_c400, }, - }, + }), }, }; -export { ClassicCheckbox, ModernCheckbox, RevampCheckbox }; +export { Checkbox }; diff --git a/packages/yoroi-extension/app/styles/overrides/Chip.js b/packages/yoroi-extension/app/styles/overrides/Chip.js index 0038f727d2..aca24d2ea8 100644 --- a/packages/yoroi-extension/app/styles/overrides/Chip.js +++ b/packages/yoroi-extension/app/styles/overrides/Chip.js @@ -1,5 +1,6 @@ // @flow -const ClassicChip = { + +const ChipCommonProps = { styleOverrides: { root: { minWidth: '87px', @@ -15,89 +16,11 @@ const ClassicChip = { border: 'none', }, }, - variants: [ - { - props: { variant: 'pending' }, - style: { - background: 'var(--yoroi-palette-tx-status-pending-background)', - color: 'var(--yoroi-palette-tx-status-pending-text)', - }, - }, - { - props: { variant: 'high' }, - style: { - background: 'var(--yoroi-palette-tx-status-high-background)', - color: 'var(--yoroi-palette-tx-status-high-text)', - }, - }, - { - props: { variant: 'failed' }, - style: { - background: 'var(--yoroi-palette-tx-status-failed-background)', - color: 'var(--yoroi-palette-tx-status-failed-text)', - }, - }, - { - props: { variant: 'medium' }, - style: { - background: 'var(--yoroi-palette-tx-status-medium-background)', - color: 'var(--yoroi-palette-tx-status-medium-text)', - }, - }, - { - props: { variant: 'low' }, - style: { - background: 'var(--yoroi-palette-tx-status-low-background)', - color: 'var(--yoroi-palette-tx-status-low-text)', - }, - }, - { - props: { variant: 'autocomplete' }, - style: { - minWidth: 'auto', - borderRadius: '2px', - margin: '5px 3px 0 3px', - textTransform: 'lowercase', - padding: '3px 0 3px 6px', - background: '#daa49a', - height: '28px', - display: 'flex', - alignItems: 'center', - color: '#f9fafb', - fontSize: '0.9rem', - fontWeight: 300, - span: { - padding: 0, - marginLeft: '2px', - paddingRight: '10px', - }, - '& .MuiChip-deleteIcon': { - color: 'inherit', - }, - '&:hover': { - background: '#daa49a', - }, - }, - }, - ], + defaultProps: { readOnly: true }, }; -const ModernChip = { - styleOverrides: { - root: { - minWidth: '87px', - textAlign: 'center', - fontSize: '0.75rem', - lineHeight: '21px', - letterSpacing: '1px', - textTransform: 'uppercase', - borderRadius: '8px', - paddingTop: '3px', - height: '25px', - userSelect: 'none', - border: 'none', - }, - }, +export const Chip = { + ...ChipCommonProps, variants: [ { props: { variant: 'pending' }, @@ -142,30 +65,17 @@ const ModernChip = { textTransform: 'lowercase', margin: '5px 4px 0 4px', padding: '3px 0 4px 3px', - background: 'var(--yoroi-palette-gray-50)', + background: 'ds.gray_c50', height: '30px', display: 'flex', alignItems: 'center', fontSize: '0.875rem', - color: 'var(--yoroi-palette-gray-900)', + color: 'ds.gray_c900', letterSpacing: 0, - span: { - padding: 0, - paddingRight: '9px', - paddingLeft: '7px', - }, - '& .MuiChip-deleteIcon': { - color: 'inherit', - }, - '&:hover': { - background: 'var(--yoroi-palette-gray-50)', - }, + span: { padding: 0, paddingRight: '9px', paddingLeft: '7px' }, + '& .MuiChip-deleteIcon': { color: 'inherit' }, + '&:hover': { background: 'ds.gray_c50' }, }, }, ], - defaultProps: { - readOnly: true, - }, }; - -export { ClassicChip, ModernChip }; diff --git a/packages/yoroi-extension/app/styles/overrides/FormControl.js b/packages/yoroi-extension/app/styles/overrides/FormControl.js index f211175c24..68ad6ef07c 100644 --- a/packages/yoroi-extension/app/styles/overrides/FormControl.js +++ b/packages/yoroi-extension/app/styles/overrides/FormControl.js @@ -1,35 +1,19 @@ // @flow -const ClassicFormControl = { - styleOverrides: { - root: { - paddingBottom: '20px', - marginBottom: '10px', - }, - }, - defaultProps: { - variant: 'outlined', - fullWidth: true, - }, -}; -const ModernFormControl = { +const FormControl = { styleOverrides: { - root: { + root: ({ theme }: any): any => ({ paddingBottom: '20px', marginBottom: '10px', marginTop: '7px', '&:hover': { '& .MuiInputLabel-root': { - color: 'var(--yoroi-comp-input-text-focus)', - '&.Mui-disabled': { - color: 'var(--yoroi-comp-input-border-disabled)', - }, - '&.Mui-error': { - color: 'var(--yoroi-comp-input-error)', - }, + color: theme.palette.ds.gray_c900, + '&.Mui-disabled': { color: theme.palette.ds.gray_c200 }, + '&.Mui-error': { color: theme.palette.ds.sys_magenta_c500 }, }, }, - }, + }), }, defaultProps: { variant: 'outlined', @@ -37,4 +21,4 @@ const ModernFormControl = { }, }; -export { ClassicFormControl, ModernFormControl }; +export { FormControl }; diff --git a/packages/yoroi-extension/app/styles/overrides/FormHelperText.js b/packages/yoroi-extension/app/styles/overrides/FormHelperText.js index 3e13091604..e2d2801f3c 100644 --- a/packages/yoroi-extension/app/styles/overrides/FormHelperText.js +++ b/packages/yoroi-extension/app/styles/overrides/FormHelperText.js @@ -1,44 +1,14 @@ // @flow -const ClassicFormHelperText = { + +const FormHelperText = { styleOverrides: { - root: { - color: 'var(--yoroi-comp-input-helper-text)', - marginLeft: 0, - marginTop: 0, - fontWeight: 400, - position: 'absolute', - bottom: '-2px', - '&.Mui-disabled': { - color: 'var(--yoroi-comp-input-helper-text-disabled)', - }, - '&.Mui-error': { - color: 'var(--yoroi-comp-input-error)', - }, - }, - }, - defaultProps: { - variant: 'outlined', - }, -}; -const ModernFormHelperText = { - styleOverrides: { - root: { - color: 'var(--yoroi-comp-input-helper-text)', - marginTop: 0, - marginLeft: '14px', - fontWeight: 400, - position: 'absolute', - bottom: '-2px', - '&.Mui-disabled': { - color: 'var(--yoroi-comp-input-helper-text-disabled)', - }, - '&.Mui-error': { - color: 'var(--yoroi-comp-input-error)', - }, - }, - }, - defaultProps: { - variant: 'outlined', - }, + root: ({ theme }: any): any => ({ + color: theme.palette.ds.gray_c600, + fontSize: '0.75rem', + '&.Mui-disabled': { color: theme.palette.ds.gray_c200 }, + '&.Mui-error': { color: theme.palette.ds.sys_magenta_c500 }, + }), + }, + defaultProps: { variant: 'outlined' }, }; -export { ClassicFormHelperText, ModernFormHelperText }; +export { FormHelperText }; diff --git a/packages/yoroi-extension/app/styles/overrides/InputLabel.js b/packages/yoroi-extension/app/styles/overrides/InputLabel.js index 792f13b250..aad4dc4881 100644 --- a/packages/yoroi-extension/app/styles/overrides/InputLabel.js +++ b/packages/yoroi-extension/app/styles/overrides/InputLabel.js @@ -1,51 +1,17 @@ // @flow -const ClassicInputLabel = { - styleOverrides: { - root: { - color: 'var(--yoroi-comp-input-placeholder)', - position: 'relative', - top: 'unset', - transform: 'none', - marginBottom: '10px', - letterSpacing: '1.12px', - fontWeight: 500, - '&.Mui-focused': { - color: 'var(--yoroi-comp-input-text-focus)', - }, - '&.Mui-disabled': { - color: 'var(--yoroi-comp-input-placeholder-disabled)', - }, - '&.Mui-error': { - color: 'var(--yoroi-comp-input-error)', - }, - }, - }, - defaultProps: { - variant: 'outlined', - shrink: false, - }, -}; -const ModernInputLabel = { + +const InputLabel = { styleOverrides: { - root: { - color: 'var(--yoroi-comp-input-placeholder)', - '&::first-letter': { - textTransform: 'uppercase' - }, - '&.Mui-focused': { - color: 'var(--yoroi-comp-input-text-focus)', - }, - '&.Mui-disabled': { - color: 'var(--yoroi-comp-input-placeholder-disabled)', - }, - '&.Mui-error': { - color: 'var(--yoroi-comp-input-error)', - }, - }, - }, - defaultProps: { - variant: 'outlined', + root: ({ theme }: any): any => ({ + color: theme.palette.ds.gray_c900, + lineHeight: '24px', + '&::first-letter': { textTransform: 'uppercase' }, + '&.Mui-focused': { color: theme.palette.ds.gray_c900 }, + '&.Mui-disabled': { color: theme.palette.ds.gray_c200 }, + '&.Mui-error': { color: theme.palette.ds.sys_magenta_c500 }, + }), }, + defaultProps: { variant: 'outlined' }, }; -export { ClassicInputLabel, ModernInputLabel }; +export { InputLabel }; diff --git a/packages/yoroi-extension/app/styles/overrides/Menu.js b/packages/yoroi-extension/app/styles/overrides/Menu.js index 2096637801..2699ab248d 100644 --- a/packages/yoroi-extension/app/styles/overrides/Menu.js +++ b/packages/yoroi-extension/app/styles/overrides/Menu.js @@ -1,19 +1,6 @@ // @flow -const ClassicMenu = { - styleOverrides: { - root: { - '& .MuiMenu-paper': { - maxHeight: '500px', - borderRadius: 0, - }, - '& .MuiMenu-list': { - padding: 0, - boxShadow: '0 3px 7px 0 rgba(74,74,74,0.16)', - }, - }, - }, -}; -const ModernMenu = { + +const Menu = { styleOverrides: { root: { '& .MuiMenu-paper': { @@ -22,10 +9,8 @@ const ModernMenu = { boxShadow: '0 3px 7px 0 rgba(74,74,74,0.16)', marginTop: '4px', }, - '& .MuiMenu-list': { - padding: 0, - }, + '& .MuiMenu-list': { padding: 0 }, }, }, }; -export { ClassicMenu, ModernMenu }; +export { Menu }; diff --git a/packages/yoroi-extension/app/styles/overrides/MenuItem.js b/packages/yoroi-extension/app/styles/overrides/MenuItem.js index b1ae80259b..4962cfef38 100644 --- a/packages/yoroi-extension/app/styles/overrides/MenuItem.js +++ b/packages/yoroi-extension/app/styles/overrides/MenuItem.js @@ -1,55 +1,21 @@ // @flow -const ClassicMenuItem = { + +const MenuItem = { styleOverrides: { root: { padding: '14px 20px', - backgroundColor: 'var(--yoroi-comp-menu-item-background)', - height: 50, - color: 'var(--yoroi-comp-menu-item-text)', - '&:hover': { - background: 'var(--yoroi-comp-menu-item-background-highlighted)', - }, - '&.Mui-selected': { - background: 'var(--yoroi-comp-menu-item-background-highlighted)', - '&:hover': { - backgroundColor: 'var(--yoroi-comp-menu-item-background-highlighted)', - }, - '&::after': { - content: '""', - position: 'absolute', - borderColor: 'var(--yoroi-comp-menu-item-checkmark)', - borderStyle: 'solid', - borderWidth: '0 2px 2px 0', - height: '9px', - margin: '0 2px 3px auto', - transform: 'rotate(45deg)', - width: '5px', - right: '22px', - }, - }, - }, - }, -}; -const ModernMenuItem = { - styleOverrides: { - root: { - padding: '14px 20px', - backgroundColor: 'var(--yoroi-comp-menu-item-background)', + bgcolor: 'ds.gray_cmin', height: 45, - color: 'var(--yoroi-comp-menu-item-text)', - '&:hover': { - background: 'var(--yoroi-comp-menu-item-background-highlighted)', - }, + color: 'ds.gray_c900', + '&:hover': { background: 'ds.gray_c50' }, '&.Mui-selected': { - background: 'var(--yoroi-comp-menu-item-background-highlighted)', + background: 'ds.gray_c50', position: 'relative', - '&:hover': { - backgroundColor: 'var(--yoroi-comp-menu-item-background-highlighted)', - }, + '&:hover': { backgroundColor: 'ds.gray_c50' }, '&::after': { content: '""', position: 'absolute', - borderColor: 'var(--yoroi-comp-menu-item-checkmark)', + borderColor: 'ds.secondary_c300', borderStyle: 'solid', borderWidth: '0 2px 2px 0', height: '9px', @@ -62,4 +28,4 @@ const ModernMenuItem = { }, }, }; -export { ClassicMenuItem, ModernMenuItem }; +export { MenuItem }; diff --git a/packages/yoroi-extension/app/styles/overrides/OutlinedInput.js b/packages/yoroi-extension/app/styles/overrides/OutlinedInput.js index dd7fff2dd5..03f9aded23 100644 --- a/packages/yoroi-extension/app/styles/overrides/OutlinedInput.js +++ b/packages/yoroi-extension/app/styles/overrides/OutlinedInput.js @@ -1,89 +1,43 @@ // @flow -const ClassicOutlinedInput = { + +const OutlinedInput = { styleOverrides: { - root: { + root: ({ theme }: any): any => ({ paddingRight: '16px', + '&:hover .MuiOutlinedInput-notchedOutline': { borderColor: theme.palette.ds.gray_c900 }, '& .MuiOutlinedInput-notchedOutline': { - borderColor: 'var(--yoroi-comp-input-border)', - borderRadius: 0, - backgroundColor: 'var(--yoroi-comp-input-background)', - letterSpacing: 'initial', - }, - '&:hover .MuiOutlinedInput-notchedOutline': { - borderColor: 'var(--yoroi-comp-input-border-focus)', - }, - '&.Mui-focused .MuiOutlinedInput-notchedOutline': { - borderColor: 'var(--yoroi-comp-input-border-focus)', - }, - '&.Mui-disabled .MuiOutlinedInput-notchedOutline': { - borderColor: 'var(--yoroi-comp-input-border-disabled)', - backgroundColor: 'var(--yoroi-comp-input-background-disabled)', - color: 'var(--yoroi-comp-input-text-disabled)', - }, - '&.Mui-error .MuiOutlinedInput-notchedOutline': { - borderColor: 'var(--yoroi-comp-input-error)', - }, - '& .MuiOutlinedInput-input': { - height: '1.2em', - '&.Mui-disabled': { - color: 'var(--yoroi-comp-input-text-disabled)', - WebkitTextFillColor: 'var(--yoroi-comp-input-text-disabled)', - }, - }, - '& svg': { - color: 'var(--yoroi-comp-input-border)', - }, - '&.Mui-focused svg': { - color: 'var(--yoroi-comp-input-helper-text)', - }, - '&.Mui-disabled svg': { - color: 'var(--yoroi-comp-input-border-disabled)', - }, - }, - }, -}; -const ModernOutlinedInput = { - styleOverrides: { - root: { - paddingRight: '16px', - height: '56px', - '&:hover .MuiOutlinedInput-notchedOutline': { - borderColor: 'var(--yoroi-comp-input-border-focus)', - }, - '& .MuiOutlinedInput-notchedOutline': { - borderColor: 'var(--yoroi-comp-input-border)', + borderColor: theme.palette.ds.gray_c400, borderRadius: 8, - backgroundColor: 'var(--yoroi-comp-input-background)', + backgroundColor: 'transparent', letterSpacing: 'initial', }, '&.Mui-focused .MuiOutlinedInput-notchedOutline': { - borderColor: 'var(--yoroi-comp-input-border-focus)', - border: '2px solid', + borderColor: theme.palette.ds.gray_c900, + borderWidth: '2px', + }, + '&.Mui-focused.Mui-error .MuiOutlinedInput-notchedOutline': { + borderColor: theme.palette.ds.sys_magenta_c500, + borderWidth: '2px', }, '&.Mui-disabled .MuiOutlinedInput-notchedOutline': { - borderColor: 'var(--yoroi-comp-input-border-disabled)', - backgroundColor: 'var(--yoroi-comp-input-background-disabled)', - color: 'var(--yoroi-comp-input-text-disabled)', + borderColor: theme.palette.ds.gray_c200, + backgroundColor: 'transparent', + color: theme.palette.ds.gray_c200, }, '&.Mui-error .MuiOutlinedInput-notchedOutline': { - borderColor: 'var(--yoroi-comp-input-error)', + borderColor: theme.palette.ds.sys_magenta_c500, + borderWidth: '2px', }, '& .MuiOutlinedInput-input': { '&.Mui-disabled': { - color: 'var(--yoroi-comp-input-text-disabled)', - WebkitTextFillColor: 'var(--yoroi-comp-input-text-disabled)', + color: theme.palette.ds.gray_c200, + WebkitTextFillColor: theme.palette.ds.gray_c200, }, }, - '& svg': { - color: 'var(--yoroi-comp-input-border)', - }, - '&.Mui-focused svg': { - color: 'var(--yoroi-comp-input-helper-text)', - }, - '&.Mui-disabled svg': { - color: 'var(--yoroi-comp-input-border-disabled)', - }, - }, + '& svg': { color: theme.palette.ds.gray_c400 }, + '&.Mui-focused svg': { color: theme.palette.ds.gray_c600 }, + '&.Mui-disabled svg': { color: theme.palette.ds.gray_c200 }, + }), }, }; -export { ClassicOutlinedInput, ModernOutlinedInput }; +export { OutlinedInput }; diff --git a/packages/yoroi-extension/app/styles/overrides/Select.js b/packages/yoroi-extension/app/styles/overrides/Select.js index be248d5c21..6433330854 100644 --- a/packages/yoroi-extension/app/styles/overrides/Select.js +++ b/packages/yoroi-extension/app/styles/overrides/Select.js @@ -1,20 +1,9 @@ // @flow -const ClassicSelect = { - styleOverrides: { - icon: { - color: 'var(--yoroi-comp-menu-icon)', - right: '15px', - }, - }, - defaultProps: { - notched: false, - }, -}; -const ModernSelect = { +const Select = { styleOverrides: { icon: { - color: 'var(--yoroi-comp-menu-icon)', + color: 'ds.gray_c600', right: '15px', }, }, @@ -23,4 +12,4 @@ const ModernSelect = { }, }; -export { ClassicSelect, ModernSelect }; +export { Select }; diff --git a/packages/yoroi-extension/app/styles/overrides/TabPanel.js b/packages/yoroi-extension/app/styles/overrides/TabPanel.js index 68071bec39..5bb977ae40 100644 --- a/packages/yoroi-extension/app/styles/overrides/TabPanel.js +++ b/packages/yoroi-extension/app/styles/overrides/TabPanel.js @@ -1,23 +1,13 @@ // @flow -const ClassicTabPanel = { +const TabPanel = { styleOverrides: { root: { - background: 'white', + bgcolor: 'ds.gray_cmin', borderBottomLeftRadius: 8, borderBottomRightRadius: 8, boxShadow: 'inset 0 2px 12px 0 hsl(0 0% 0% / 6%)', }, }, }; -const ModernTabPanel = { - styleOverrides: { - root: { - background: 'white', - borderBottomLeftRadius: 8, - borderBottomRightRadius: 8, - boxShadow: 'inset 0 2px 12px 0 hsl(0 0% 0% / 6%)', - }, - }, -}; -export { ClassicTabPanel, ModernTabPanel }; +export { TabPanel }; diff --git a/packages/yoroi-extension/app/styles/overrides/Tabs.js b/packages/yoroi-extension/app/styles/overrides/Tabs.js index 41bac192ec..14e216d6e0 100644 --- a/packages/yoroi-extension/app/styles/overrides/Tabs.js +++ b/packages/yoroi-extension/app/styles/overrides/Tabs.js @@ -1,104 +1,40 @@ // @flow -const ClassicTabs = { +const Tabs = { styleOverrides: { - root: { - borderBottom: 'none', + // $FlowFixMe + root: ({ theme }) => ({ borderTopLeftRadius: 8, borderTopRightRadius: 8, boxShadow: '0 4px 6px 0 hsl(220deg 22% 89%), 0 1px 2px 0 hsl(220deg 22% 89% / 82%), 0 2px 4px 0 hsl(220deg 22% 89% / 74%)', '& .MuiTab-root': { - background: 'var(--yoroi-comp-tabs-background)', - color: 'var(--yoroi-comp-tabs-text)', + color: theme.palette.ds.gray_c600, fontSize: '1rem', - paddingRight: 24, - paddingLeft: 24, + lineHeight: '22px', + padding: '6px 24px', textTransform: 'capitalize', - ':hover': { - color: 'var(--yoroi-comp-tabs-text-active)', - }, + minHeight: 'unset', + ':hover': { color: theme.palette.ds.primary_c600 }, }, - '& .Mui-selected ': { - fontWeight: 500, - color: 'var(--yoroi-comp-tabs-text-active)', + '& .Mui-selected': { fontWeight: 500, color: theme.palette.ds.primary_c600 }, + '& .Mui-disabled': { color: theme.palette.ds.gray_c400 }, + '& .MuiTabs-indicator': { + backgroundColor: theme.palette.ds.primary_c600, + height: '3px', }, - '& .Mui-disabled': { - color: 'var(--yoroi-comp-tabs-text-disabled)', + '& .MuiTabs-flexContainer': { + height: 'fit-content', }, - }, - }, - defaultProps: { - indicatorColor: 'secondary', - textColor: 'secondary', - }, -}; - -const ModernTabs = { - styleOverrides: { - root: { - borderBottom: 'none', - borderTopLeftRadius: 8, - borderTopRightRadius: 8, - boxShadow: - '0 4px 6px 0 hsl(220deg 22% 89%), 0 1px 2px 0 hsl(220deg 22% 89% / 82%), 0 2px 4px 0 hsl(220deg 22% 89% / 74%)', - '& .MuiTab-root': { - background: 'var(--yoroi-comp-tabs-background)', - color: 'var(--yoroi-comp-tabs-text)', - fontSize: '1rem', - paddingRight: 24, - paddingLeft: 24, - textTransform: 'capitalize', - ':hover': { - color: 'var(--yoroi-comp-tabs-text-active)', - }, - }, - '& .Mui-selected ': { - fontWeight: 500, - color: 'var(--yoroi-comp-tabs-text-active)', - }, - '& .Mui-disabled': { - color: 'var(--yoroi-comp-tabs-text-disabled)', - }, - }, - }, - defaultProps: { - indicatorColor: 'secondary', - textColor: 'secondary', - }, -}; - -const RevampTabs = { - styleOverrides: { - root: { - borderBottom: 'none', - borderTopLeftRadius: 8, - borderTopRightRadius: 8, - boxShadow: - '0 4px 6px 0 hsl(220deg 22% 89%), 0 1px 2px 0 hsl(220deg 22% 89% / 82%), 0 2px 4px 0 hsl(220deg 22% 89% / 74%)', - '& .MuiTab-root': { - bgcolor: 'common.white', - color: 'gray.600', - fontSize: '1rem', - paddingRight: 24, - paddingLeft: 24, - textTransform: 'capitalize', - ':hover': { - color: 'primary.600', - }, - }, - '& .Mui-selected ': { - fontWeight: 500, - color: 'primary.600', - }, - '& .Mui-disabled': { - color: 'gray.400', + '& .MuiTabs-scroller': { + display: 'flex', + alignItems: 'flex-end', + justifyContent: 'flex-start', }, - }, + }), }, defaultProps: { - indicatorColor: 'primary', - textColor: 'primary', + textColor: 'ds.primary_c500', }, }; -export { ClassicTabs, ModernTabs, RevampTabs }; +export { Tabs }; diff --git a/packages/yoroi-extension/app/styles/overrides/TextField.js b/packages/yoroi-extension/app/styles/overrides/TextField.js index e42bf14614..57bca43ef5 100644 --- a/packages/yoroi-extension/app/styles/overrides/TextField.js +++ b/packages/yoroi-extension/app/styles/overrides/TextField.js @@ -1,5 +1,7 @@ // @flow +import { asImportant } from '../utils'; + /* It's important to understand that the text field is a simple abstraction on top of - FormControl @@ -7,17 +9,37 @@ - OutlinedInput - FormHelperText */ -const ClassicTextField = { +const TextField = { defaultProps: { variant: 'outlined', fullWidth: true, }, -}; -const ModernTextField = { - defaultProps: { - variant: 'outlined', - fullWidth: true, + styleOverrides: { + // $FlowFixMe + root: ({ theme }) => ({ + margin: '8px 0px', + '.MuiFormHelperText-root': { + fontSize: '0.75rem', + '&.Mui-error': { + color: theme.palette.ds.sys_magenta_c500, + }, + }, + '.MuiOutlinedInput-input.Mui-disabled': { + color: asImportant(theme.palette.ds.gray_cmax), + WebkitTextFillColor: asImportant(theme.palette.ds.gray_cmax), + }, + '.MuiOutlinedInput-root.Mui-disabled': { + backgroundColor: theme.palette.ds.gray_c50, + }, + '.MuiInputLabel-root.Mui-disabled': { + color: theme.palette.ds.gray_cmax, + backgroundColor: theme.palette.ds.gray_cmin, + }, + '& .MuiInputLabel-root': { + color: theme.palette.ds.gray_c600, + }, + }), }, }; -export { ClassicTextField, ModernTextField }; +export { TextField }; diff --git a/packages/yoroi-extension/app/styles/overrides/Tooltip.js b/packages/yoroi-extension/app/styles/overrides/Tooltip.js index bbe460b0d5..75080c7b6f 100644 --- a/packages/yoroi-extension/app/styles/overrides/Tooltip.js +++ b/packages/yoroi-extension/app/styles/overrides/Tooltip.js @@ -1,41 +1,18 @@ // @flow -const ClassicTooltip = { - styleOverrides: { - tooltip: { - color: 'var(--yoroi-comp-tooltip-text) ', - backgroundColor: 'var(--yoroi-comp-tooltip-background)', - borderRadius: 0, - fontSize: '0.75rem', - boxShadow: '0 1.5px 5px 0 rgba(0, 0, 0, 0.18)', - padding: '8px 12px', - }, - arrow: { - color: 'var(--yoroi-comp-tooltip-background)', - }, - }, - defaultProps: { - arrow: true, - placement: 'bottom', - }, -}; +// import { } from '../../themes/' -const ModernTooltip = { +const Tooltip = { styleOverrides: { - tooltip: { - color: 'var(--yoroi-comp-tooltip-text) ', - backgroundColor: 'var(--yoroi-comp-tooltip-background)', + tooltip: ({ theme }: any): any => ({ + color: theme.palette.ds.gray_cmin, + backgroundColor: theme.palette.ds.gray_c900, borderRadius: 8, fontSize: '0.75rem', boxShadow: '0 1.5px 5px 0 rgba(0, 0, 0, 0.18)', padding: '8px 14px', - }, - arrow: { - color: 'var(--yoroi-comp-tooltip-background)', - }, - }, - defaultProps: { - arrow: true, - placement: 'bottom', + }), + arrow: ({ theme }: any): any => ({ color: theme.palette.ds.gray_c900 }), }, + defaultProps: { arrow: true, placement: 'bottom' }, }; -export { ClassicTooltip, ModernTooltip }; +export { Tooltip }; diff --git a/packages/yoroi-extension/app/styles/overrides/legacy/Button.js b/packages/yoroi-extension/app/styles/overrides/legacy/Button.js new file mode 100644 index 0000000000..cbd525000b --- /dev/null +++ b/packages/yoroi-extension/app/styles/overrides/legacy/Button.js @@ -0,0 +1,429 @@ +// @flow +import { baseLightTheme } from '../../themes/light-theme-mui'; + +const ClassicButton: any = { + styleOverrides: { + root: { + fontSize: '0.875rem', + borderRadius: 0, + border: 0, + fontWeight: 500, + minHeight: 44, + minWidth: 230, + padding: '12px 20px', + textTransform: 'none', + }, + }, + defaultProps: { disableRipple: true }, + variants: [ + { + props: { variant: 'primary' }, + style: { + backgroundColor: 'var(--yoroi-comp-button-primary-background)', + color: 'var(--yoroi-comp-button-primary-text)', + ':hover': { + backgroundColor: 'var(--yoroi-comp-button-primary-background-hover)', + }, + '&.Mui-active': { + backgroundColor: 'var(--yoroi-comp-button-primary-background-active)', + }, + '&.Mui-disabled': { + opacity: 0.4, + color: 'var(--yoroi-comp-button-primary-text)', + }, + '& .MuiLoadingButton-loadingIndicator': { + color: 'var(--yoroi-comp-button-primary-text)', + }, + }, + }, + { + props: { variant: 'secondary' }, + style: { + backgroundColor: 'var(--yoroi-comp-button-flat-background)', + color: 'var(--yoroi-comp-button-flat-text)', + border: 0, + ':hover': { + backgroundColor: 'var(--yoroi-comp-button-flat-background-hover)', + }, + '&.Mui-active': { + backgroundColor: 'var(--yoroi-comp-button-flat-background-active)', + }, + '&.Mui-disabled': { + color: 'var(--yoroi-comp-button-flat-text)', + opacity: 0.4, + }, + '& .MuiLoadingButton-loadingIndicator': { + color: 'var(--yoroi-comp-button-flat-text)', + }, + }, + }, + { + props: { variant: 'danger' }, + style: { + backgroundColor: 'var(--yoroi-comp-button-danger-background)', + color: 'var(--yoroi-comp-button-danger-text)', + border: 0, + ':hover': { + backgroundColor: 'var(--yoroi-comp-button-danger-background-hover)', + }, + '&.Mui-active': { + backgroundColor: 'var(--yoroi-comp-button-danger-background-active)', + }, + '&.Mui-disabled': { + opacity: 0.4, + color: 'var(--yoroi-comp-button-danger-text)', + }, + '& .MuiLoadingButton-loadingIndicator': { + color: 'var(--yoroi-comp-button-danger-background)', + }, + }, + }, + ], +}; + +const ModernButton: any = { + styleOverrides: { + root: { + fontSize: '1rem', + borderRadius: 8, + fontWeight: 500, + fontFamily: 'Rubik', + minHeight: 52, + minWidth: 230, + lineHeight: '18px', + textTransform: 'uppercase', + padding: '16px', + height: 52, + }, + }, + defaultProps: { disableRipple: true }, + variants: [ + { + props: { variant: 'primary' }, + style: { + backgroundColor: 'var(--yoroi-comp-button-primary-background)', + color: 'var(--yoroi-comp-button-primary-text)', + ':hover': { + backgroundColor: 'var(--yoroi-comp-button-primary-background-hover)', + }, + '&.Mui-active': { + backgroundColor: 'var(--yoroi-comp-button-primary-background-active)', + }, + '&.Mui-disabled': { + opacity: 0.4, + color: 'var(--yoroi-comp-button-primary-text)', + }, + '& .MuiLoadingButton-loadingIndicator': { + color: 'var(--yoroi-comp-button-primary-text)', + }, + }, + }, + { + props: { variant: 'secondary-blue' }, + style: { + backgroundColor: 'var(--yoroi-comp-button-secondary-background)', + color: 'var(--yoroi-comp-button-primary-text)', + border: '2px solid', + borderColor: 'var(--yoroi-comp-button-primary-border)', + ':hover': { + color: 'var(--yoroi-comp-button-primary-text)', + borderColor: 'var(--yoroi-comp-button-primary-border-hover)', + backgroundColor: 'var(--yoroi-comp-button-primary-background-hover)', + }, + '&.Mui-active': { + backgroundColor: 'var(--yoroi-comp-button-primary-background-active)', + }, + '&.Mui-disabled': { + border: '2px solid', + opacity: 0.4, + borderColor: 'var(--yoroi-comp-button-primary-border)', + color: 'var(--yoroi-comp-button-primary-text)', + }, + '& .MuiLoadingButton-loadingIndicator': { + color: 'var(--yoroi-comp-button-primary-text)', + }, + }, + }, + { + props: { variant: 'secondary' }, + style: { + backgroundColor: 'var(--yoroi-comp-button-secondary-background)', + color: 'var(--yoroi-comp-button-secondary-text)', + border: '2px solid', + borderColor: 'var(--yoroi-comp-button-secondary-border)', + ':hover': { + color: 'var(--yoroi-comp-button-secondary-text)', + borderColor: 'var(--yoroi-comp-button-secondary-border-hover)', + backgroundColor: 'var(--yoroi-comp-button-secondary-background-hover)', + }, + '&.Mui-active': { + backgroundColor: 'var(--yoroi-comp-button-secondary-background-active)', + }, + '&.Mui-disabled': { + border: '2px solid', + opacity: 0.4, + borderColor: 'var(--yoroi-comp-button-secondary-border)', + color: 'var(--yoroi-comp-button-secondary-text)', + }, + '& .MuiLoadingButton-loadingIndicator': { + color: 'var(--yoroi-comp-button-secondary-text)', + }, + }, + }, + { + props: { variant: 'ternary' }, + style: { + minWidth: '160px', + minHeight: '44px', + height: '44px', + fontSize: '0.875rem', + backgroundColor: 'transparent', + color: 'var(--yoroi-palette-gray-600)', + border: '1px solid', + borderColor: 'var(--yoroi-palette-gray-400)', + ':hover': { + borderColor: 'var(--yoroi-palette-gray-500)', + }, + '&.Mui-active': { + backgroundColor: 'var(--yoroi-palette-gray-50)', + }, + '&.Mui-disabled': { + border: '1px solid', + opacity: 0.4, + borderColor: 'var(--yoroi-palette-gray-400)', + color: 'var(--yoroi-palette-gray-600)', + }, + '& .MuiLoadingButton-loadingIndicator': { + color: 'var(--yoroi-palette-gray-600)', + }, + }, + }, + { + props: { variant: 'danger' }, + style: { + backgroundColor: 'var(--yoroi-comp-button-danger-background)', + color: 'var(--yoroi-comp-button-danger-text)', + border: 0, + ':hover': { + backgroundColor: 'var(--yoroi-comp-button-danger-background-hover)', + }, + '&.Mui-active': { + backgroundColor: 'var(--yoroi-comp-button-danger-background-active)', + }, + '&.Mui-disabled': { + color: 'var(--yoroi-comp-button-danger-text)', + opacity: 0.4, + }, + '& .MuiLoadingButton-loadingIndicator': { + color: 'var(--yoroi-comp-button-danger-background)', + }, + }, + }, + // Todo: this button `varient` should be part of the new revam design system + { + props: { variant: 'rv-primary' }, + style: { + minWidth: 'unset', + minHeight: 'unset', + width: 'unset', + height: 'unset', + // Todo: get the colors from the design system + backgroundColor: '#4B6DDE', + color: 'var(--yoroi-palette-common-white)', + border: 1, + ':hover': { + backgroundColor: '#3154CB', + }, + '&.Mui-active': { + backgroundColor: '#1737A3', + }, + '&.Mui-disabled': { + color: '#C4CFF5', + opacity: 0.4, + }, + '& .MuiLoadingButton-loadingIndicator': { + color: '#C4CFF5', + }, + }, + }, + ], +}; + +function makeContainedBtnStyles(color: 'primary' | 'secondary'): Object { + return { + backgroundColor: baseLightTheme.palette[color].main, + color: baseLightTheme.palette.static.white, + ':hover': { + backgroundColor: baseLightTheme.palette[color][600], + }, + ':active': { + backgroundColor: baseLightTheme.palette[color][700], + }, + ':focus': { + backgroundColor: baseLightTheme.palette[color][500], + }, + '&.Mui-disabled': { + color: baseLightTheme.palette.static.white, + backgroundColor: baseLightTheme.palette[color][200], + }, + '& .MuiLoadingButton-loadingIndicator': { + color: baseLightTheme.palette.static.white, + }, + }; +} + +function makeOutlinedBtnStyles(color: 'primary' | 'secondary'): Object { + return { + backgroundColor: 'transparent', + color: baseLightTheme.palette[color][500], + border: '2px solid', + borderColor: baseLightTheme.palette[color][500], + ':hover': { + border: '2px solid', + color: baseLightTheme.palette[color][600], + borderColor: baseLightTheme.palette[color][600], + }, + ':active': { + borderColor: baseLightTheme.palette[color][700], + }, + ':focus': { + borderColor: baseLightTheme.palette[color][500], + }, + '&.Mui-disabled': { + border: '2px solid', + borderColor: baseLightTheme.palette[color][200], + color: baseLightTheme.palette[color][200], + }, + '& .MuiLoadingButton-loadingIndicator': { + color: baseLightTheme.palette[color][600], + }, + }; +} + +// Button in Figam: https://bit.ly/3Ky4uvo +const RevampButton: any = { + styleOverrides: { + root: { + fontSize: '1rem', + borderRadius: 8, + fontWeight: 500, + fontFamily: 'Rubik', + lineHeight: '19px', + textTransform: 'uppercase', + padding: '16px', + '&.MuiButton-sizeLarge': { + height: '56px', + }, + '&.MuiButton-sizeMedium': { + padding: '10px', + height: '48px', + }, + '&.MuiButton-sizeSmall': { + padding: '7px', + height: '32px', + }, + boxShadow: 'none', + ':hover': { + boxShadow: 'none', + }, + }, + }, + defaultProps: { disableRipple: false }, + variants: [ + { + props: { variant: 'contained', color: 'primary' }, + style: makeContainedBtnStyles('primary'), + }, + { + props: { variant: 'contained', color: 'secondary' }, + style: makeContainedBtnStyles('secondary'), + }, + { + props: { variant: 'outlined', color: 'primary' }, + style: makeOutlinedBtnStyles('primary'), + }, + { + props: { variant: 'outlined', color: 'secondary' }, + style: makeOutlinedBtnStyles('secondary'), + }, + { + props: { variant: 'ternary' }, + style: { + width: '160px', + height: '48px', + padding: '8px', + fontSize: '0.875rem', + backgroundColor: 'transparent', + color: baseLightTheme.palette.grayscale[600], + border: '1px solid', + borderColor: baseLightTheme.palette.grayscale[400], + ':hover': { + borderColor: baseLightTheme.palette.grayscale[500], + }, + '&.Mui-active': { + backgroundColor: baseLightTheme.palette.grayscale[50], + }, + '&.Mui-disabled': { + border: '1px solid', + opacity: 0.4, + borderColor: baseLightTheme.palette.grayscale[400], + color: baseLightTheme.palette.grayscale[600], + }, + '& .MuiLoadingButton-loadingIndicator': { + color: baseLightTheme.palette.grayscale[600], + }, + }, + }, + { + props: { variant: 'contained', color: 'error' }, + style: { + backgroundColor: baseLightTheme.palette.system.magenta[300], + color: baseLightTheme.palette.static.white, + border: 0, + ':hover': { + backgroundColor: baseLightTheme.palette.system.magenta[100], + }, + '&.Mui-active': { + backgroundColor: baseLightTheme.palette.system.magenta[300], + }, + '&.Mui-disabled': { + backgroundColor: baseLightTheme.palette.system.magenta[300], + color: baseLightTheme.palette.static.white, + opacity: 0.4, + }, + '& .MuiLoadingButton-loadingIndicator': { + color: baseLightTheme.palette.system.magenta[300], + }, + }, + }, + { + props: { variant: 'outlined', color: 'error' }, + style: { + backgroundColor: baseLightTheme.palette.static.white, + color: baseLightTheme.palette.system.magenta[500], + border: '2px solid', + borderColor: baseLightTheme.palette.system.magenta[500], + ':hover': { + border: '2px solid', + color: baseLightTheme.palette.system.magenta[400], + borderColor: baseLightTheme.palette.system.magenta[400], + }, + ':active': { + borderColor: baseLightTheme.palette.system.magenta[400], + }, + ':focus': { + borderColor: baseLightTheme.palette.system.magenta[400], + }, + '&.Mui-disabled': { + border: '2px solid', + opacity: 0.4, + }, + '& .MuiLoadingButton-loadingIndicator': { + color: baseLightTheme.palette.system.magenta[500], + }, + }, + }, + ], +}; + +export { ClassicButton, ModernButton, RevampButton }; diff --git a/packages/yoroi-extension/app/styles/overrides/legacy/Checkbox.js b/packages/yoroi-extension/app/styles/overrides/legacy/Checkbox.js new file mode 100644 index 0000000000..ac9d803f8a --- /dev/null +++ b/packages/yoroi-extension/app/styles/overrides/legacy/Checkbox.js @@ -0,0 +1,54 @@ +// @flow +import { lightThemeBase } from '../../themes/light-theme-base'; + +const ClassicCheckbox = { + styleOverrides: { + root: { + padding: 0, + marginRight: '18px', + color: 'var(--yoroi-comp-checkbox-background-active)', + '&.Mui-checked': { + color: 'var(--yoroi-comp-checkbox-background-active)', + }, + '&.Mui-disabled': { + color: 'var(--yoroi-comp-checkbox-border-disabled)', + }, + }, + }, +}; + +const ModernCheckbox = { + styleOverrides: { + root: { + padding: 0, + marginRight: '18px', + color: 'var(--yoroi-comp-checkbox-border)', + '&.Mui-checked': { + color: 'var(--yoroi-comp-checkbox-background-active)', + }, + '&.Mui-disabled': { + color: 'var(--yoroi-comp-checkbox-border-disabled)', + }, + }, + }, +}; + +const RevampCheckbox: any = { + styleOverrides: { + root: { + padding: 0, + marginRight: '18px', + borderRadius: '2px', + color: 'ds.primary_c500', + '&.Mui-checked': { + color: 'ds.primary_c500', + }, + '&.Mui-disabled': { + color: lightThemeBase.palette.grayscale[400], + backgroundColor: lightThemeBase.palette.grayscale[400], + }, + }, + }, +}; + +export { ClassicCheckbox, ModernCheckbox, RevampCheckbox }; diff --git a/packages/yoroi-extension/app/styles/overrides/legacy/Chip.js b/packages/yoroi-extension/app/styles/overrides/legacy/Chip.js new file mode 100644 index 0000000000..0038f727d2 --- /dev/null +++ b/packages/yoroi-extension/app/styles/overrides/legacy/Chip.js @@ -0,0 +1,171 @@ +// @flow +const ClassicChip = { + styleOverrides: { + root: { + minWidth: '87px', + textAlign: 'center', + fontSize: '0.75rem', + lineHeight: '21px', + letterSpacing: '1px', + textTransform: 'uppercase', + borderRadius: '8px', + paddingTop: '3px', + height: '25px', + userSelect: 'none', + border: 'none', + }, + }, + variants: [ + { + props: { variant: 'pending' }, + style: { + background: 'var(--yoroi-palette-tx-status-pending-background)', + color: 'var(--yoroi-palette-tx-status-pending-text)', + }, + }, + { + props: { variant: 'high' }, + style: { + background: 'var(--yoroi-palette-tx-status-high-background)', + color: 'var(--yoroi-palette-tx-status-high-text)', + }, + }, + { + props: { variant: 'failed' }, + style: { + background: 'var(--yoroi-palette-tx-status-failed-background)', + color: 'var(--yoroi-palette-tx-status-failed-text)', + }, + }, + { + props: { variant: 'medium' }, + style: { + background: 'var(--yoroi-palette-tx-status-medium-background)', + color: 'var(--yoroi-palette-tx-status-medium-text)', + }, + }, + { + props: { variant: 'low' }, + style: { + background: 'var(--yoroi-palette-tx-status-low-background)', + color: 'var(--yoroi-palette-tx-status-low-text)', + }, + }, + { + props: { variant: 'autocomplete' }, + style: { + minWidth: 'auto', + borderRadius: '2px', + margin: '5px 3px 0 3px', + textTransform: 'lowercase', + padding: '3px 0 3px 6px', + background: '#daa49a', + height: '28px', + display: 'flex', + alignItems: 'center', + color: '#f9fafb', + fontSize: '0.9rem', + fontWeight: 300, + span: { + padding: 0, + marginLeft: '2px', + paddingRight: '10px', + }, + '& .MuiChip-deleteIcon': { + color: 'inherit', + }, + '&:hover': { + background: '#daa49a', + }, + }, + }, + ], +}; + +const ModernChip = { + styleOverrides: { + root: { + minWidth: '87px', + textAlign: 'center', + fontSize: '0.75rem', + lineHeight: '21px', + letterSpacing: '1px', + textTransform: 'uppercase', + borderRadius: '8px', + paddingTop: '3px', + height: '25px', + userSelect: 'none', + border: 'none', + }, + }, + variants: [ + { + props: { variant: 'pending' }, + style: { + background: 'var(--yoroi-palette-tx-status-pending-background)', + color: 'var(--yoroi-palette-tx-status-pending-text)', + }, + }, + { + props: { variant: 'high' }, + style: { + background: 'var(--yoroi-palette-tx-status-high-background)', + color: 'var(--yoroi-palette-tx-status-high-text)', + }, + }, + { + props: { variant: 'failed' }, + style: { + background: 'var(--yoroi-palette-tx-status-failed-background)', + color: 'var(--yoroi-palette-tx-status-failed-text)', + }, + }, + { + props: { variant: 'medium' }, + style: { + background: 'var(--yoroi-palette-tx-status-medium-background)', + color: 'var(--yoroi-palette-tx-status-medium-text)', + }, + }, + { + props: { variant: 'low' }, + style: { + background: 'var(--yoroi-palette-tx-status-low-background)', + color: 'var(--yoroi-palette-tx-status-low-text)', + }, + }, + { + props: { variant: 'autocomplete' }, + style: { + minWidth: 'auto', + borderRadius: '8px', + textTransform: 'lowercase', + margin: '5px 4px 0 4px', + padding: '3px 0 4px 3px', + background: 'var(--yoroi-palette-gray-50)', + height: '30px', + display: 'flex', + alignItems: 'center', + fontSize: '0.875rem', + color: 'var(--yoroi-palette-gray-900)', + letterSpacing: 0, + span: { + padding: 0, + paddingRight: '9px', + paddingLeft: '7px', + }, + '& .MuiChip-deleteIcon': { + color: 'inherit', + }, + '&:hover': { + background: 'var(--yoroi-palette-gray-50)', + }, + }, + }, + ], + defaultProps: { + readOnly: true, + }, +}; + +export { ClassicChip, ModernChip }; diff --git a/packages/yoroi-extension/app/styles/overrides/legacy/FormControl.js b/packages/yoroi-extension/app/styles/overrides/legacy/FormControl.js new file mode 100644 index 0000000000..f211175c24 --- /dev/null +++ b/packages/yoroi-extension/app/styles/overrides/legacy/FormControl.js @@ -0,0 +1,40 @@ +// @flow +const ClassicFormControl = { + styleOverrides: { + root: { + paddingBottom: '20px', + marginBottom: '10px', + }, + }, + defaultProps: { + variant: 'outlined', + fullWidth: true, + }, +}; + +const ModernFormControl = { + styleOverrides: { + root: { + paddingBottom: '20px', + marginBottom: '10px', + marginTop: '7px', + '&:hover': { + '& .MuiInputLabel-root': { + color: 'var(--yoroi-comp-input-text-focus)', + '&.Mui-disabled': { + color: 'var(--yoroi-comp-input-border-disabled)', + }, + '&.Mui-error': { + color: 'var(--yoroi-comp-input-error)', + }, + }, + }, + }, + }, + defaultProps: { + variant: 'outlined', + fullWidth: true, + }, +}; + +export { ClassicFormControl, ModernFormControl }; diff --git a/packages/yoroi-extension/app/styles/overrides/legacy/FormHelperText.js b/packages/yoroi-extension/app/styles/overrides/legacy/FormHelperText.js new file mode 100644 index 0000000000..3e13091604 --- /dev/null +++ b/packages/yoroi-extension/app/styles/overrides/legacy/FormHelperText.js @@ -0,0 +1,44 @@ +// @flow +const ClassicFormHelperText = { + styleOverrides: { + root: { + color: 'var(--yoroi-comp-input-helper-text)', + marginLeft: 0, + marginTop: 0, + fontWeight: 400, + position: 'absolute', + bottom: '-2px', + '&.Mui-disabled': { + color: 'var(--yoroi-comp-input-helper-text-disabled)', + }, + '&.Mui-error': { + color: 'var(--yoroi-comp-input-error)', + }, + }, + }, + defaultProps: { + variant: 'outlined', + }, +}; +const ModernFormHelperText = { + styleOverrides: { + root: { + color: 'var(--yoroi-comp-input-helper-text)', + marginTop: 0, + marginLeft: '14px', + fontWeight: 400, + position: 'absolute', + bottom: '-2px', + '&.Mui-disabled': { + color: 'var(--yoroi-comp-input-helper-text-disabled)', + }, + '&.Mui-error': { + color: 'var(--yoroi-comp-input-error)', + }, + }, + }, + defaultProps: { + variant: 'outlined', + }, +}; +export { ClassicFormHelperText, ModernFormHelperText }; diff --git a/packages/yoroi-extension/app/styles/overrides/legacy/InputLabel.js b/packages/yoroi-extension/app/styles/overrides/legacy/InputLabel.js new file mode 100644 index 0000000000..792f13b250 --- /dev/null +++ b/packages/yoroi-extension/app/styles/overrides/legacy/InputLabel.js @@ -0,0 +1,51 @@ +// @flow +const ClassicInputLabel = { + styleOverrides: { + root: { + color: 'var(--yoroi-comp-input-placeholder)', + position: 'relative', + top: 'unset', + transform: 'none', + marginBottom: '10px', + letterSpacing: '1.12px', + fontWeight: 500, + '&.Mui-focused': { + color: 'var(--yoroi-comp-input-text-focus)', + }, + '&.Mui-disabled': { + color: 'var(--yoroi-comp-input-placeholder-disabled)', + }, + '&.Mui-error': { + color: 'var(--yoroi-comp-input-error)', + }, + }, + }, + defaultProps: { + variant: 'outlined', + shrink: false, + }, +}; +const ModernInputLabel = { + styleOverrides: { + root: { + color: 'var(--yoroi-comp-input-placeholder)', + '&::first-letter': { + textTransform: 'uppercase' + }, + '&.Mui-focused': { + color: 'var(--yoroi-comp-input-text-focus)', + }, + '&.Mui-disabled': { + color: 'var(--yoroi-comp-input-placeholder-disabled)', + }, + '&.Mui-error': { + color: 'var(--yoroi-comp-input-error)', + }, + }, + }, + defaultProps: { + variant: 'outlined', + }, +}; + +export { ClassicInputLabel, ModernInputLabel }; diff --git a/packages/yoroi-extension/app/styles/overrides/legacy/Menu.js b/packages/yoroi-extension/app/styles/overrides/legacy/Menu.js new file mode 100644 index 0000000000..2096637801 --- /dev/null +++ b/packages/yoroi-extension/app/styles/overrides/legacy/Menu.js @@ -0,0 +1,31 @@ +// @flow +const ClassicMenu = { + styleOverrides: { + root: { + '& .MuiMenu-paper': { + maxHeight: '500px', + borderRadius: 0, + }, + '& .MuiMenu-list': { + padding: 0, + boxShadow: '0 3px 7px 0 rgba(74,74,74,0.16)', + }, + }, + }, +}; +const ModernMenu = { + styleOverrides: { + root: { + '& .MuiMenu-paper': { + maxHeight: '500px', + borderRadius: 6, + boxShadow: '0 3px 7px 0 rgba(74,74,74,0.16)', + marginTop: '4px', + }, + '& .MuiMenu-list': { + padding: 0, + }, + }, + }, +}; +export { ClassicMenu, ModernMenu }; diff --git a/packages/yoroi-extension/app/styles/overrides/legacy/MenuItem.js b/packages/yoroi-extension/app/styles/overrides/legacy/MenuItem.js new file mode 100644 index 0000000000..b1ae80259b --- /dev/null +++ b/packages/yoroi-extension/app/styles/overrides/legacy/MenuItem.js @@ -0,0 +1,65 @@ +// @flow +const ClassicMenuItem = { + styleOverrides: { + root: { + padding: '14px 20px', + backgroundColor: 'var(--yoroi-comp-menu-item-background)', + height: 50, + color: 'var(--yoroi-comp-menu-item-text)', + '&:hover': { + background: 'var(--yoroi-comp-menu-item-background-highlighted)', + }, + '&.Mui-selected': { + background: 'var(--yoroi-comp-menu-item-background-highlighted)', + '&:hover': { + backgroundColor: 'var(--yoroi-comp-menu-item-background-highlighted)', + }, + '&::after': { + content: '""', + position: 'absolute', + borderColor: 'var(--yoroi-comp-menu-item-checkmark)', + borderStyle: 'solid', + borderWidth: '0 2px 2px 0', + height: '9px', + margin: '0 2px 3px auto', + transform: 'rotate(45deg)', + width: '5px', + right: '22px', + }, + }, + }, + }, +}; +const ModernMenuItem = { + styleOverrides: { + root: { + padding: '14px 20px', + backgroundColor: 'var(--yoroi-comp-menu-item-background)', + height: 45, + color: 'var(--yoroi-comp-menu-item-text)', + '&:hover': { + background: 'var(--yoroi-comp-menu-item-background-highlighted)', + }, + '&.Mui-selected': { + background: 'var(--yoroi-comp-menu-item-background-highlighted)', + position: 'relative', + '&:hover': { + backgroundColor: 'var(--yoroi-comp-menu-item-background-highlighted)', + }, + '&::after': { + content: '""', + position: 'absolute', + borderColor: 'var(--yoroi-comp-menu-item-checkmark)', + borderStyle: 'solid', + borderWidth: '0 2px 2px 0', + height: '9px', + margin: '0 2px 3px auto', + transform: 'rotate(45deg)', + width: '5px', + right: '22px', + }, + }, + }, + }, +}; +export { ClassicMenuItem, ModernMenuItem }; diff --git a/packages/yoroi-extension/app/styles/overrides/legacy/OutlinedInput.js b/packages/yoroi-extension/app/styles/overrides/legacy/OutlinedInput.js new file mode 100644 index 0000000000..dd7fff2dd5 --- /dev/null +++ b/packages/yoroi-extension/app/styles/overrides/legacy/OutlinedInput.js @@ -0,0 +1,89 @@ +// @flow +const ClassicOutlinedInput = { + styleOverrides: { + root: { + paddingRight: '16px', + '& .MuiOutlinedInput-notchedOutline': { + borderColor: 'var(--yoroi-comp-input-border)', + borderRadius: 0, + backgroundColor: 'var(--yoroi-comp-input-background)', + letterSpacing: 'initial', + }, + '&:hover .MuiOutlinedInput-notchedOutline': { + borderColor: 'var(--yoroi-comp-input-border-focus)', + }, + '&.Mui-focused .MuiOutlinedInput-notchedOutline': { + borderColor: 'var(--yoroi-comp-input-border-focus)', + }, + '&.Mui-disabled .MuiOutlinedInput-notchedOutline': { + borderColor: 'var(--yoroi-comp-input-border-disabled)', + backgroundColor: 'var(--yoroi-comp-input-background-disabled)', + color: 'var(--yoroi-comp-input-text-disabled)', + }, + '&.Mui-error .MuiOutlinedInput-notchedOutline': { + borderColor: 'var(--yoroi-comp-input-error)', + }, + '& .MuiOutlinedInput-input': { + height: '1.2em', + '&.Mui-disabled': { + color: 'var(--yoroi-comp-input-text-disabled)', + WebkitTextFillColor: 'var(--yoroi-comp-input-text-disabled)', + }, + }, + '& svg': { + color: 'var(--yoroi-comp-input-border)', + }, + '&.Mui-focused svg': { + color: 'var(--yoroi-comp-input-helper-text)', + }, + '&.Mui-disabled svg': { + color: 'var(--yoroi-comp-input-border-disabled)', + }, + }, + }, +}; +const ModernOutlinedInput = { + styleOverrides: { + root: { + paddingRight: '16px', + height: '56px', + '&:hover .MuiOutlinedInput-notchedOutline': { + borderColor: 'var(--yoroi-comp-input-border-focus)', + }, + '& .MuiOutlinedInput-notchedOutline': { + borderColor: 'var(--yoroi-comp-input-border)', + borderRadius: 8, + backgroundColor: 'var(--yoroi-comp-input-background)', + letterSpacing: 'initial', + }, + '&.Mui-focused .MuiOutlinedInput-notchedOutline': { + borderColor: 'var(--yoroi-comp-input-border-focus)', + border: '2px solid', + }, + '&.Mui-disabled .MuiOutlinedInput-notchedOutline': { + borderColor: 'var(--yoroi-comp-input-border-disabled)', + backgroundColor: 'var(--yoroi-comp-input-background-disabled)', + color: 'var(--yoroi-comp-input-text-disabled)', + }, + '&.Mui-error .MuiOutlinedInput-notchedOutline': { + borderColor: 'var(--yoroi-comp-input-error)', + }, + '& .MuiOutlinedInput-input': { + '&.Mui-disabled': { + color: 'var(--yoroi-comp-input-text-disabled)', + WebkitTextFillColor: 'var(--yoroi-comp-input-text-disabled)', + }, + }, + '& svg': { + color: 'var(--yoroi-comp-input-border)', + }, + '&.Mui-focused svg': { + color: 'var(--yoroi-comp-input-helper-text)', + }, + '&.Mui-disabled svg': { + color: 'var(--yoroi-comp-input-border-disabled)', + }, + }, + }, +}; +export { ClassicOutlinedInput, ModernOutlinedInput }; diff --git a/packages/yoroi-extension/app/styles/overrides/legacy/Select.js b/packages/yoroi-extension/app/styles/overrides/legacy/Select.js new file mode 100644 index 0000000000..be248d5c21 --- /dev/null +++ b/packages/yoroi-extension/app/styles/overrides/legacy/Select.js @@ -0,0 +1,26 @@ +// @flow +const ClassicSelect = { + styleOverrides: { + icon: { + color: 'var(--yoroi-comp-menu-icon)', + right: '15px', + }, + }, + defaultProps: { + notched: false, + }, +}; + +const ModernSelect = { + styleOverrides: { + icon: { + color: 'var(--yoroi-comp-menu-icon)', + right: '15px', + }, + }, + defaultProps: { + notched: true, + }, +}; + +export { ClassicSelect, ModernSelect }; diff --git a/packages/yoroi-extension/app/styles/overrides/legacy/TabPanel.js b/packages/yoroi-extension/app/styles/overrides/legacy/TabPanel.js new file mode 100644 index 0000000000..68071bec39 --- /dev/null +++ b/packages/yoroi-extension/app/styles/overrides/legacy/TabPanel.js @@ -0,0 +1,23 @@ +// @flow + +const ClassicTabPanel = { + styleOverrides: { + root: { + background: 'white', + borderBottomLeftRadius: 8, + borderBottomRightRadius: 8, + boxShadow: 'inset 0 2px 12px 0 hsl(0 0% 0% / 6%)', + }, + }, +}; +const ModernTabPanel = { + styleOverrides: { + root: { + background: 'white', + borderBottomLeftRadius: 8, + borderBottomRightRadius: 8, + boxShadow: 'inset 0 2px 12px 0 hsl(0 0% 0% / 6%)', + }, + }, +}; +export { ClassicTabPanel, ModernTabPanel }; diff --git a/packages/yoroi-extension/app/styles/overrides/legacy/Tabs.js b/packages/yoroi-extension/app/styles/overrides/legacy/Tabs.js new file mode 100644 index 0000000000..3875ebd9dd --- /dev/null +++ b/packages/yoroi-extension/app/styles/overrides/legacy/Tabs.js @@ -0,0 +1,104 @@ +// @flow + +const ClassicTabs = { + styleOverrides: { + root: { + borderBottom: 'none', + borderTopLeftRadius: 8, + borderTopRightRadius: 8, + boxShadow: + '0 4px 6px 0 hsl(220deg 22% 89%), 0 1px 2px 0 hsl(220deg 22% 89% / 82%), 0 2px 4px 0 hsl(220deg 22% 89% / 74%)', + '& .MuiTab-root': { + background: 'var(--yoroi-comp-tabs-background)', + color: 'var(--yoroi-comp-tabs-text)', + fontSize: '1rem', + paddingRight: 24, + paddingLeft: 24, + textTransform: 'capitalize', + ':hover': { + color: 'var(--yoroi-comp-tabs-text-active)', + }, + }, + '& .Mui-selected ': { + fontWeight: 500, + color: 'var(--yoroi-comp-tabs-text-active)', + }, + '& .Mui-disabled': { + color: 'var(--yoroi-comp-tabs-text-disabled)', + }, + }, + }, + defaultProps: { + indicatorColor: 'secondary', + textColor: 'secondary', + }, +}; + +const ModernTabs = { + styleOverrides: { + root: { + borderBottom: 'none', + borderTopLeftRadius: 8, + borderTopRightRadius: 8, + boxShadow: + '0 4px 6px 0 hsl(220deg 22% 89%), 0 1px 2px 0 hsl(220deg 22% 89% / 82%), 0 2px 4px 0 hsl(220deg 22% 89% / 74%)', + '& .MuiTab-root': { + background: 'var(--yoroi-comp-tabs-background)', + color: 'var(--yoroi-comp-tabs-text)', + fontSize: '1rem', + paddingRight: 24, + paddingLeft: 24, + textTransform: 'capitalize', + ':hover': { + color: 'var(--yoroi-comp-tabs-text-active)', + }, + }, + '& .Mui-selected ': { + fontWeight: 500, + color: 'var(--yoroi-comp-tabs-text-active)', + }, + '& .Mui-disabled': { + color: 'var(--yoroi-comp-tabs-text-disabled)', + }, + }, + }, + defaultProps: { + indicatorColor: 'secondary', + textColor: 'secondary', + }, +}; + +const RevampTabs = { + styleOverrides: { + root: { + borderBottom: 'none', + borderTopLeftRadius: 8, + borderTopRightRadius: 8, + boxShadow: + '0 4px 6px 0 hsl(220deg 22% 89%), 0 1px 2px 0 hsl(220deg 22% 89% / 82%), 0 2px 4px 0 hsl(220deg 22% 89% / 74%)', + '& .MuiTab-root': { + bgcolor: 'ds.gray_cmin', + color: 'gray.600', + fontSize: '1rem', + paddingRight: 24, + paddingLeft: 24, + textTransform: 'capitalize', + ':hover': { + color: 'ds.primary_c600', + }, + }, + '& .Mui-selected ': { + fontWeight: 500, + color: 'ds.primary_c600', + }, + '& .Mui-disabled': { + color: 'gray.400', + }, + }, + }, + defaultProps: { + indicatorColor: 'primary', + textColor: 'primary', + }, +}; +export { ClassicTabs, ModernTabs, RevampTabs }; diff --git a/packages/yoroi-extension/app/styles/overrides/legacy/TextField.js b/packages/yoroi-extension/app/styles/overrides/legacy/TextField.js new file mode 100644 index 0000000000..e42bf14614 --- /dev/null +++ b/packages/yoroi-extension/app/styles/overrides/legacy/TextField.js @@ -0,0 +1,23 @@ +// @flow + +/* It's important to understand that the text field is a + simple abstraction on top of + - FormControl + - InputLabel + - OutlinedInput + - FormHelperText +*/ +const ClassicTextField = { + defaultProps: { + variant: 'outlined', + fullWidth: true, + }, +}; +const ModernTextField = { + defaultProps: { + variant: 'outlined', + fullWidth: true, + }, +}; + +export { ClassicTextField, ModernTextField }; diff --git a/packages/yoroi-extension/app/styles/overrides/legacy/Tooltip.js b/packages/yoroi-extension/app/styles/overrides/legacy/Tooltip.js new file mode 100644 index 0000000000..bbe460b0d5 --- /dev/null +++ b/packages/yoroi-extension/app/styles/overrides/legacy/Tooltip.js @@ -0,0 +1,41 @@ +// @flow +const ClassicTooltip = { + styleOverrides: { + tooltip: { + color: 'var(--yoroi-comp-tooltip-text) ', + backgroundColor: 'var(--yoroi-comp-tooltip-background)', + borderRadius: 0, + fontSize: '0.75rem', + boxShadow: '0 1.5px 5px 0 rgba(0, 0, 0, 0.18)', + padding: '8px 12px', + }, + arrow: { + color: 'var(--yoroi-comp-tooltip-background)', + }, + }, + defaultProps: { + arrow: true, + placement: 'bottom', + }, +}; + +const ModernTooltip = { + styleOverrides: { + tooltip: { + color: 'var(--yoroi-comp-tooltip-text) ', + backgroundColor: 'var(--yoroi-comp-tooltip-background)', + borderRadius: 8, + fontSize: '0.75rem', + boxShadow: '0 1.5px 5px 0 rgba(0, 0, 0, 0.18)', + padding: '8px 14px', + }, + arrow: { + color: 'var(--yoroi-comp-tooltip-background)', + }, + }, + defaultProps: { + arrow: true, + placement: 'bottom', + }, +}; +export { ClassicTooltip, ModernTooltip }; diff --git a/packages/yoroi-extension/app/styles/overrides/revamp/index.js b/packages/yoroi-extension/app/styles/overrides/legacy/index.js similarity index 100% rename from packages/yoroi-extension/app/styles/overrides/revamp/index.js rename to packages/yoroi-extension/app/styles/overrides/legacy/index.js diff --git a/packages/yoroi-extension/app/styles/overrides/revamp/Button.js b/packages/yoroi-extension/app/styles/overrides/revamp/Button.js deleted file mode 100644 index b4c14a7b6a..0000000000 --- a/packages/yoroi-extension/app/styles/overrides/revamp/Button.js +++ /dev/null @@ -1,210 +0,0 @@ -// @flow - -import { lightTheme } from '../../themes/revamp/light-theme-base'; -import { darkTheme } from '../../themes/revamp/dark-theme-base'; - -const RevampButtonCommonProps: Object = { - styleOverrides: { - root: { - fontSize: '1rem', - borderRadius: 8, - fontWeight: 500, - fontFamily: 'Rubik', - lineHeight: '19px', - textTransform: 'uppercase', - padding: '16px', - boxShadow: 'none', - '&.MuiButton-sizeLarge': { height: '56px' }, - '&.MuiButton-sizeMedium': { padding: '13px 24px' }, - '&.MuiButton-sizeSmall': { padding: '7px' }, - '&.MuiButton-sizeFlat': { padding: '13px 24px', height: 'unset' }, - '&:hover': { boxShadow: 'none' }, - '& span.MuiButton-startIcon': { - marginLeft: '0px', - marginRight: '6px', - }, - }, - }, - defaultProps: { disableRipple: false }, -}; - -// Button in Figam: https://bit.ly/3Ky4uvo -export const LightRevampButton: any = { - ...RevampButtonCommonProps, - variants: [ - { - props: { variant: 'primary' }, - style: ({ theme }) => getContainedStyles('primary', theme), - }, - { - props: { variant: 'secondary' }, - style: ({ theme }) => getOutlinedStyles('primary', theme), - }, - { - props: { variant: 'tertiary', color: 'primary' }, - style: getTertiaryStyles('primary', lightTheme), - }, - { - props: { variant: 'tertiary', color: 'secondary' }, - style: getTertiaryStyles('grayscale', lightTheme), - }, - { - props: { variant: 'destructive' }, - style: getContainedStyles('magenta', lightTheme), - }, - { - props: { variant: 'segmented' }, - style: { - minWidth: 'unset', - maxWidth: 'unset', - width: '40px', - height: '40px', - padding: '8px', - color: 'grayscale.200', - '&.MuiButton-sizeMedium': { padding: '8px', height: '40px' }, - ':hover': { - color: 'grayscale.50', - }, - '&.active': { - backgroundColor: lightTheme.palette.grayscale[200], - ':hover': { - backgroundColor: lightTheme.palette.grayscale[50], - }, - }, - }, - }, - ], -}; - -// Button in Figam: https://bit.ly/3Ky4uvo -export const DarkRevampButton: any = { - ...RevampButtonCommonProps, - variants: [ - { - props: { variant: 'primary' }, - style: getContainedStyles('primary', darkTheme), - }, - { - props: { variant: 'secondary' }, - style: getOutlinedStyles('primary', darkTheme), - }, - { - props: { variant: 'tertiary', color: 'primary' }, - style: getTertiaryStyles('primary', darkTheme), - }, - { - props: { variant: 'tertiary', color: 'secondary' }, - style: getTertiaryStyles('grayscale', darkTheme), - }, - { - props: { variant: 'destructive' }, - style: getContainedStyles('magenta', darkTheme), - }, - ], -}; - -function getContainedStyles(variant: 'primary' | 'secondary' | 'magenta', theme: Object): Object { - return { - backgroundColor: theme.palette[variant].main, - color: theme.palette.common.white, - ':hover': { - backgroundColor: theme.palette[variant][600], - }, - ':active': { - backgroundColor: theme.palette[variant][700], - }, - ':focus': { - backgroundColor: theme.palette[variant][500], - outline: '2px solid', - outlineColor: theme.palette.yellow[500], - }, - '&.Mui-disabled': { - color: theme.palette.common.white, - backgroundColor: theme.palette[variant][300], - cursor: 'not-allowed', - pointerEvents: 'unset', - }, - '& .MuiLoadingButton-loadingIndicator': { - color: theme.palette.common.white, - }, - '& .MuiButton-startIcon svg': { - fill: theme.palette.common.white, - }, - '& .MuiButton-startIcon svg path': { - fill: theme.palette.common.white, - }, - }; -} - -function getOutlinedStyles(variant: 'primary' | 'secondary', theme: Object): Object { - return { - backgroundColor: 'transparent', - color: theme.palette[variant][500], - border: '2px solid', - borderColor: theme.palette[variant][500], - ':hover': { - border: '2px solid', - color: theme.palette[variant][600], - borderColor: theme.palette[variant][600], - }, - ':active': { - borderColor: theme.palette[variant][700], - }, - ':focus': { - borderColor: theme.palette[variant][500], - outline: '2px solid', - outlineColor: theme.palette.yellow[500], - }, - '&.Mui-disabled': { - border: '2px solid', - borderColor: theme.palette[variant][200], - color: theme.palette[variant][200], - cursor: 'not-allowed', - pointerEvents: 'unset', - }, - '& .MuiLoadingButton-loadingIndicator': { - color: theme.palette[variant][600], - }, - '& .MuiButton-startIcon svg': { - fill: theme.palette[variant][500], - }, - '& .MuiButton-startIcon svg path': { - fill: theme.palette[variant][500], - }, - }; -} - -function getTertiaryStyles(variant: 'primary' | 'grayscale', theme: Object): Object { - return { - backgroundColor: 'transparent', - color: theme.palette[variant][500], - ':hover': { - backgroundColor: theme.palette.grayscale[50], - color: theme.palette[variant][600], - }, - ':active': { - backgroundColor: theme.palette.grayscale[100], - color: theme.palette[variant][700], - }, - ':focus': { - outline: '2px solid', - outlineColor: theme.palette.yellow[500], - }, - '&.Mui-disabled': { - border: '2px solid', - borderColor: theme.palette[variant][200], - color: theme.palette[variant][200], - cursor: 'not-allowed', - pointerEvents: 'unset', - }, - '& .MuiLoadingButton-loadingIndicator': { - color: theme.palette[variant][600], - }, - '& .MuiButton-startIcon svg': { - fill: theme.palette[variant][500], - }, - '& .MuiButton-startIcon svg path': { - fill: theme.palette[variant][500], - }, - }; -} diff --git a/packages/yoroi-extension/app/styles/overrides/revamp/Checkbox.js b/packages/yoroi-extension/app/styles/overrides/revamp/Checkbox.js deleted file mode 100644 index 5f72774113..0000000000 --- a/packages/yoroi-extension/app/styles/overrides/revamp/Checkbox.js +++ /dev/null @@ -1,19 +0,0 @@ -// @flow - -const RevampCheckbox: any = { - styleOverrides: { - root: ({ theme }) => ({ - padding: 0, - marginRight: '18px', - borderRadius: '2px', - color: theme.palette.grayscale[800], - '&.Mui-checked': { color: theme.palette.primary[500] }, - '&.Mui-disabled': { - color: theme.palette.grayscale[400], - backgroundColor: theme.palette.grayscale[400], - }, - }), - }, -}; - -export { RevampCheckbox }; diff --git a/packages/yoroi-extension/app/styles/overrides/revamp/Chip.js b/packages/yoroi-extension/app/styles/overrides/revamp/Chip.js deleted file mode 100644 index 1b597541ec..0000000000 --- a/packages/yoroi-extension/app/styles/overrides/revamp/Chip.js +++ /dev/null @@ -1,81 +0,0 @@ -// @flow - -const RevampChipCommonProps = { - styleOverrides: { - root: { - minWidth: '87px', - textAlign: 'center', - fontSize: '0.75rem', - lineHeight: '21px', - letterSpacing: '1px', - textTransform: 'uppercase', - borderRadius: '8px', - paddingTop: '3px', - height: '25px', - userSelect: 'none', - border: 'none', - }, - }, - defaultProps: { readOnly: true }, -}; - -export const RevampChip = { - ...RevampChipCommonProps, - variants: [ - { - props: { variant: 'pending' }, - style: { - background: 'var(--yoroi-palette-tx-status-pending-background)', - color: 'var(--yoroi-palette-tx-status-pending-text)', - }, - }, - { - props: { variant: 'high' }, - style: { - background: 'var(--yoroi-palette-tx-status-high-background)', - color: 'var(--yoroi-palette-tx-status-high-text)', - }, - }, - { - props: { variant: 'failed' }, - style: { - background: 'var(--yoroi-palette-tx-status-failed-background)', - color: 'var(--yoroi-palette-tx-status-failed-text)', - }, - }, - { - props: { variant: 'medium' }, - style: { - background: 'var(--yoroi-palette-tx-status-medium-background)', - color: 'var(--yoroi-palette-tx-status-medium-text)', - }, - }, - { - props: { variant: 'low' }, - style: { - background: 'var(--yoroi-palette-tx-status-low-background)', - color: 'var(--yoroi-palette-tx-status-low-text)', - }, - }, - { - props: { variant: 'autocomplete' }, - style: { - minWidth: 'auto', - borderRadius: '8px', - textTransform: 'lowercase', - margin: '5px 4px 0 4px', - padding: '3px 0 4px 3px', - background: 'grayscale.50', - height: '30px', - display: 'flex', - alignItems: 'center', - fontSize: '0.875rem', - color: 'grayscale.900', - letterSpacing: 0, - span: { padding: 0, paddingRight: '9px', paddingLeft: '7px' }, - '& .MuiChip-deleteIcon': { color: 'inherit' }, - '&:hover': { background: 'grayscale.50' }, - }, - }, - ], -}; diff --git a/packages/yoroi-extension/app/styles/overrides/revamp/FormControl.js b/packages/yoroi-extension/app/styles/overrides/revamp/FormControl.js deleted file mode 100644 index 3ddece309e..0000000000 --- a/packages/yoroi-extension/app/styles/overrides/revamp/FormControl.js +++ /dev/null @@ -1,24 +0,0 @@ -// @flow - -const RevampFormControl = { - styleOverrides: { - root: ({ theme }: any): any => ({ - paddingBottom: '20px', - marginBottom: '10px', - marginTop: '7px', - '&:hover': { - '& .MuiInputLabel-root': { - color: theme.palette.grayscale[900], - '&.Mui-disabled': { color: theme.palette.grayscale[200] }, - '&.Mui-error': { color: theme.palette.magenta[500] }, - }, - }, - }), - }, - defaultProps: { - variant: 'outlined', - fullWidth: true, - }, -}; - -export { RevampFormControl }; diff --git a/packages/yoroi-extension/app/styles/overrides/revamp/FormHelperText.js b/packages/yoroi-extension/app/styles/overrides/revamp/FormHelperText.js deleted file mode 100644 index c962eefb9c..0000000000 --- a/packages/yoroi-extension/app/styles/overrides/revamp/FormHelperText.js +++ /dev/null @@ -1,14 +0,0 @@ -// @flow - -const RevampFormHelperText = { - styleOverrides: { - root: ({ theme }: any): any => ({ - color: theme.palette.grayscale[600], - fontSize: '0.75rem', - '&.Mui-disabled': { color: theme.palette.grayscale[200] }, - '&.Mui-error': { color: theme.palette.magenta[500] }, - }), - }, - defaultProps: { variant: 'outlined' }, -}; -export { RevampFormHelperText }; diff --git a/packages/yoroi-extension/app/styles/overrides/revamp/InputLabel.js b/packages/yoroi-extension/app/styles/overrides/revamp/InputLabel.js deleted file mode 100644 index 09e2ef5192..0000000000 --- a/packages/yoroi-extension/app/styles/overrides/revamp/InputLabel.js +++ /dev/null @@ -1,17 +0,0 @@ -// @flow - -const RevampInputLabel = { - styleOverrides: { - root: ({ theme }: any): any => ({ - color: theme.palette.grayscale[900], - lineHeight: '24px', - '&::first-letter': { textTransform: 'uppercase' }, - '&.Mui-focused': { color: theme.palette.grayscale[900] }, - '&.Mui-disabled': { color: theme.palette.grayscale[200] }, - '&.Mui-error': { color: theme.palette.magenta[500] }, - }), - }, - defaultProps: { variant: 'outlined' }, -}; - -export { RevampInputLabel }; diff --git a/packages/yoroi-extension/app/styles/overrides/revamp/Menu.js b/packages/yoroi-extension/app/styles/overrides/revamp/Menu.js deleted file mode 100644 index 3e52b8887c..0000000000 --- a/packages/yoroi-extension/app/styles/overrides/revamp/Menu.js +++ /dev/null @@ -1,16 +0,0 @@ -// @flow - -const RevampMenu = { - styleOverrides: { - root: { - '& .MuiMenu-paper': { - maxHeight: '500px', - borderRadius: 6, - boxShadow: '0 3px 7px 0 rgba(74,74,74,0.16)', - marginTop: '4px', - }, - '& .MuiMenu-list': { padding: 0 }, - }, - }, -}; -export { RevampMenu }; diff --git a/packages/yoroi-extension/app/styles/overrides/revamp/MenuItem.js b/packages/yoroi-extension/app/styles/overrides/revamp/MenuItem.js deleted file mode 100644 index b0d9439c47..0000000000 --- a/packages/yoroi-extension/app/styles/overrides/revamp/MenuItem.js +++ /dev/null @@ -1,31 +0,0 @@ -// @flow - -const RevampMenuItem = { - styleOverrides: { - root: { - padding: '14px 20px', - bgcolor: 'common.white', - height: 45, - color: 'grayscale.900', - '&:hover': { background: 'grayscale.50' }, - '&.Mui-selected': { - background: 'grayscale.50', - position: 'relative', - '&:hover': { backgroundColor: 'grayscale.50' }, - '&::after': { - content: '""', - position: 'absolute', - borderColor: 'secondary.300', - borderStyle: 'solid', - borderWidth: '0 2px 2px 0', - height: '9px', - margin: '0 2px 3px auto', - transform: 'rotate(45deg)', - width: '5px', - right: '22px', - }, - }, - }, - }, -}; -export { RevampMenuItem }; diff --git a/packages/yoroi-extension/app/styles/overrides/revamp/OutlinedInput.js b/packages/yoroi-extension/app/styles/overrides/revamp/OutlinedInput.js deleted file mode 100644 index 34f4702fde..0000000000 --- a/packages/yoroi-extension/app/styles/overrides/revamp/OutlinedInput.js +++ /dev/null @@ -1,43 +0,0 @@ -// @flow - -const RevampOutlinedInput = { - styleOverrides: { - root: ({ theme }: any): any => ({ - paddingRight: '16px', - '&:hover .MuiOutlinedInput-notchedOutline': { borderColor: theme.palette.grayscale[900] }, - '& .MuiOutlinedInput-notchedOutline': { - borderColor: theme.palette.grayscale[400], - borderRadius: 8, - backgroundColor: 'transparent', - letterSpacing: 'initial', - }, - '&.Mui-focused .MuiOutlinedInput-notchedOutline': { - borderColor: theme.palette.grayscale[900], - borderWidth: '2px', - }, - '&.Mui-focused.Mui-error .MuiOutlinedInput-notchedOutline': { - borderColor: theme.palette.magenta[500], - borderWidth: '2px', - }, - '&.Mui-disabled .MuiOutlinedInput-notchedOutline': { - borderColor: theme.palette.grayscale[200], - backgroundColor: 'transparent', - color: theme.palette.grayscale[200], - }, - '&.Mui-error .MuiOutlinedInput-notchedOutline': { - borderColor: theme.palette.magenta[500], - borderWidth: '2px', - }, - '& .MuiOutlinedInput-input': { - '&.Mui-disabled': { - color: theme.palette.grayscale[200], - WebkitTextFillColor: theme.palette.grayscale[200], - }, - }, - '& svg': { color: theme.palette.grayscale[400] }, - '&.Mui-focused svg': { color: theme.palette.grayscale[600] }, - '&.Mui-disabled svg': { color: theme.palette.grayscale[200] }, - }), - }, -}; -export { RevampOutlinedInput }; diff --git a/packages/yoroi-extension/app/styles/overrides/revamp/Select.js b/packages/yoroi-extension/app/styles/overrides/revamp/Select.js deleted file mode 100644 index 41d7a27bef..0000000000 --- a/packages/yoroi-extension/app/styles/overrides/revamp/Select.js +++ /dev/null @@ -1,15 +0,0 @@ -// @flow - -const RevampSelect = { - styleOverrides: { - icon: { - color: 'grayscale.600', - right: '15px', - }, - }, - defaultProps: { - notched: true, - }, -}; - -export { RevampSelect }; diff --git a/packages/yoroi-extension/app/styles/overrides/revamp/TabPanel.js b/packages/yoroi-extension/app/styles/overrides/revamp/TabPanel.js deleted file mode 100644 index f0fe6ab401..0000000000 --- a/packages/yoroi-extension/app/styles/overrides/revamp/TabPanel.js +++ /dev/null @@ -1,13 +0,0 @@ -// @flow - -const RevampTabPanel = { - styleOverrides: { - root: { - bgcolor: 'common.white', - borderBottomLeftRadius: 8, - borderBottomRightRadius: 8, - boxShadow: 'inset 0 2px 12px 0 hsl(0 0% 0% / 6%)', - }, - }, -}; -export { RevampTabPanel }; diff --git a/packages/yoroi-extension/app/styles/overrides/revamp/Tabs.js b/packages/yoroi-extension/app/styles/overrides/revamp/Tabs.js deleted file mode 100644 index 9d7161dc2c..0000000000 --- a/packages/yoroi-extension/app/styles/overrides/revamp/Tabs.js +++ /dev/null @@ -1,40 +0,0 @@ -// @flow - -const RevampTabs = { - styleOverrides: { - // $FlowFixMe - root: ({ theme }) => ({ - borderTopLeftRadius: 8, - borderTopRightRadius: 8, - boxShadow: - '0 4px 6px 0 hsl(220deg 22% 89%), 0 1px 2px 0 hsl(220deg 22% 89% / 82%), 0 2px 4px 0 hsl(220deg 22% 89% / 74%)', - '& .MuiTab-root': { - color: theme.palette.grayscale[600], - fontSize: '1rem', - lineHeight: '22px', - padding: '6px 24px', - textTransform: 'capitalize', - minHeight: 'unset', - ':hover': { color: theme.palette.primary[600] }, - }, - '& .Mui-selected': { fontWeight: 500, color: theme.palette.primary[600] }, - '& .Mui-disabled': { color: theme.palette.grayscale[400] }, - '& .MuiTabs-indicator': { - backgroundColor: theme.palette.primary[600], - height: '3px', - }, - '& .MuiTabs-flexContainer': { - height: 'fit-content', - }, - '& .MuiTabs-scroller': { - display: 'flex', - alignItems: 'flex-end', - justifyContent: 'flex-start', - }, - }), - }, - defaultProps: { - textColor: 'primary.main', - }, -}; -export { RevampTabs }; diff --git a/packages/yoroi-extension/app/styles/overrides/revamp/TextField.js b/packages/yoroi-extension/app/styles/overrides/revamp/TextField.js deleted file mode 100644 index 837f42146c..0000000000 --- a/packages/yoroi-extension/app/styles/overrides/revamp/TextField.js +++ /dev/null @@ -1,45 +0,0 @@ -// @flow - -import { asImportant } from '../../utils'; - -/* It's important to understand that the text field is a - simple abstraction on top of - - FormControl - - InputLabel - - OutlinedInput - - FormHelperText -*/ -const RevampTextField = { - defaultProps: { - variant: 'outlined', - fullWidth: true, - }, - styleOverrides: { - // $FlowFixMe - root: ({ theme }) => ({ - margin: '8px 0px', - '.MuiFormHelperText-root': { - fontSize: '0.75rem', - '&.Mui-error': { - color: theme.palette.magenta[500], - }, - }, - '.MuiOutlinedInput-input.Mui-disabled': { - color: asImportant(theme.palette.common.black), - WebkitTextFillColor: asImportant(theme.palette.common.black), - }, - '.MuiOutlinedInput-root.Mui-disabled': { - backgroundColor: theme.palette.grayscale[50], - }, - '.MuiInputLabel-root.Mui-disabled': { - color: theme.palette.common.black, - backgroundColor: theme.palette.common.white, - }, - '& .MuiInputLabel-root': { - color: theme.palette.grayscale[600], - }, - }), - }, -}; - -export { RevampTextField }; diff --git a/packages/yoroi-extension/app/styles/overrides/revamp/Tooltip.js b/packages/yoroi-extension/app/styles/overrides/revamp/Tooltip.js deleted file mode 100644 index 9131863509..0000000000 --- a/packages/yoroi-extension/app/styles/overrides/revamp/Tooltip.js +++ /dev/null @@ -1,18 +0,0 @@ -// @flow -// import { } from '../../themes/' - -const RevampTooltip = { - styleOverrides: { - tooltip: ({ theme }: any): any => ({ - color: theme.palette.common.white, - backgroundColor: theme.palette.grayscale[900], - borderRadius: 8, - fontSize: '0.75rem', - boxShadow: '0 1.5px 5px 0 rgba(0, 0, 0, 0.18)', - padding: '8px 14px', - }), - arrow: ({ theme }: any): any => ({ color: theme.palette.grayscale[900] }), - }, - defaultProps: { arrow: true, placement: 'bottom' }, -}; -export { RevampTooltip }; diff --git a/packages/yoroi-extension/app/styles/themes.js b/packages/yoroi-extension/app/styles/themes.js index a3cdceb7cc..e7977fdd3e 100644 --- a/packages/yoroi-extension/app/styles/themes.js +++ b/packages/yoroi-extension/app/styles/themes.js @@ -2,23 +2,22 @@ import { createTheme } from '@mui/material/styles'; import { deepmerge } from '@mui/utils'; -import { revampBaseTheme as revampBaseThemeLight } from './themes/revamp/light-theme-mui'; -import { classicTheme } from './themes/classic-theme'; -import { modernTheme } from './themes/modern-theme'; +import { baseLightTheme } from './themes/light-theme-mui'; +import { classicTheme } from './themes/legacy/classic-theme'; +import { modernTheme } from './themes/legacy/modern-theme'; export const THEMES = Object.freeze({ YOROI_CLASSIC: 'YoroiClassic', YOROI_MODERN: 'YoroiModern', - YOROI_REVAMP: 'YoroiRevamp', + YOROI_BASE: 'YoroiBase', }); export type Theme = $Values; // Old way -export const revampTheme: Object = - createTheme(deepmerge({ name: 'revamp' }, revampBaseThemeLight)); +export const baseTheme: Object = createTheme(deepmerge({ name: 'base' }, baseLightTheme)); export const MuiThemes: {| [Theme]: Object |} = Object.freeze({ [THEMES.YOROI_CLASSIC]: classicTheme, [THEMES.YOROI_MODERN]: modernTheme, - [THEMES.YOROI_REVAMP]: revampTheme, + [THEMES.YOROI_BASE]: baseTheme, }); // Refer: https://github.com/Emurgo/yoroi-frontend/pull/497 @@ -33,4 +32,4 @@ export function changeToplevelTheme(currentTheme: Theme) { bodyClassList.remove('YoroiShelley'); bodyClassList.add(currentTheme); } -} \ No newline at end of file +} diff --git a/packages/yoroi-extension/app/styles/themes/base-palettes/dark-palette.js b/packages/yoroi-extension/app/styles/themes/base-palettes/dark-palette.js new file mode 100644 index 0000000000..f0da8da5f7 --- /dev/null +++ b/packages/yoroi-extension/app/styles/themes/base-palettes/dark-palette.js @@ -0,0 +1,62 @@ +import { tokens } from '../tokens/tokens'; + +const { opacity } = tokens; + +export const darkPalette = { + primary_c900: '#E4E8F7', + primary_c800: '#C4CFF5', + primary_c700: '#A0B3F2', + primary_c600: '#7892E8', + primary_c500: '#4B6DDE', + primary_c400: '#2E4BB0', + primary_c300: '#304489', + primary_c200: '#142049', + primary_c100: '#171B28', + + secondary_c900: '#E4F7F3', + secondary_c800: '#C6F7ED', + secondary_c700: '#93F5E1', + secondary_c600: '#66F2D6', + secondary_c500: '#16E3BA', + secondary_c400: '#08C29D', + secondary_c300: '#0B997D', + secondary_c200: '#12705D', + secondary_c100: '#17453C', + + gray_cmax: '#FFFFFF', + gray_c900: '#E1E6F5', + gray_c800: '#BCC5E0', + gray_c700: '#9BA4C2', + gray_c600: '#7C85A3', + gray_c500: '#656C85', + gray_c400: '#4B5266', + gray_c300: '#3E4457', + gray_c200: '#262A38', + gray_c100: '#1F232E', + gray_c50: '#15171F', + gray_cmin: '#0B0B0F', + + black_static: '#000000', + white_static: '#FFFFFF', + + sys_magenta_c700: '#FF6B92', + sys_magenta_c600: '#FD3468', + sys_magenta_c500: '#FF7196', + sys_magenta_c300: '#572835', + sys_magenta_c100: '#2F171D', + + sys_cyan_c500: '#59B1F4', + sys_cyan_c100: '#112333', + + sys_yellow_c500: '#ECBA09', + sys_yellow_c100: '#31290E', + + sys_orange_c500: '#FAB357', + sys_orange_c100: '#291802', + + bg_gradient_1: + 'linear-gradient(195.39deg, rgba(26, 227, 187, 0.26) 0.57%, rgba(75, 109, 222, 0.1) 41.65%, rgba(75, 109, 222, 0.16) 100%)', + bg_gradient_2: + 'linear-gradient(205.51deg, rgba(11, 153, 125, 0.49) -10.43%, rgba(8, 194, 157, 0.08) 100%)', + bg_gradient_3: 'linear-gradient(30.09deg, #244ABF 0%, #4760FF 176.73%)', +}; diff --git a/packages/yoroi-extension/app/styles/themes/base-palettes/light-palette.js b/packages/yoroi-extension/app/styles/themes/base-palettes/light-palette.js new file mode 100644 index 0000000000..665db5944a --- /dev/null +++ b/packages/yoroi-extension/app/styles/themes/base-palettes/light-palette.js @@ -0,0 +1,56 @@ +export const lightPalette = { + primary_c900: '#121F4D', + primary_c800: '#122770', + primary_c700: '#1737A3', + primary_c600: '#3154CB', + primary_c500: '#4B6DDE', + primary_c400: '#7892E8', + primary_c300: '#A0B3F2', + primary_c200: '#C4CFF5', + primary_c100: '#E4E8F7', + + secondary_c900: '#17453C', + secondary_c800: '#12705D', + secondary_c700: '#0B997D', + secondary_c600: '#08C29D', + secondary_c500: '#16E3BA', + secondary_c400: '#66F2D6', + secondary_c300: '#93F5E1', + secondary_c200: '#C6F7ED', + secondary_c100: '#E4F7F3', + + gray_cmax: '#000000', + gray_c900: '#242838', + gray_c800: '#383E54', + gray_c700: '#4A5065', + gray_c600: '#6B7384', + gray_c500: '#8A92A3', + gray_c400: '#A7AFC0', + gray_c300: '#C4CAD7', + gray_c200: '#DCE0E9', + gray_c100: '#EAEDF2', + gray_c50: '#F0F3F5', + gray_cmin: '#FFFFFF', + + black_static: '#000000', + white_static: '#FFFFFF', + + sys_magenta_c700: '#CF053A', + sys_magenta_c600: '#E80742', + sys_magenta_c500: '#FF1351', + sys_magenta_c300: '#FBCBD7', + sys_magenta_c100: '#FFF1F5', + + sys_cyan_c500: '#59B1F4', + sys_cyan_c100: '#E8F4FF', + + sys_yellow_c500: '#ECBA09', + sys_yellow_c100: '#FDF7E2', + + sys_orange_c500: '#ED8600', + sys_orange_c100: '#FFF2E2', + + bg_gradient_1: 'linear-gradient(312.19deg, #C6F7ED 0%, #E4E8F7 100%)', + bg_gradient_2: 'linear-gradient(180deg, #93F5E1 0%, #C6F7ED 100%)', + bg_gradient_3: 'linear-gradient(30.09deg, #244ABF 0%, #4760FF 176.73%)', +}; diff --git a/packages/yoroi-extension/app/styles/themes/common-theme.js b/packages/yoroi-extension/app/styles/themes/common-theme.js index 3cd482b0ab..674543922f 100644 --- a/packages/yoroi-extension/app/styles/themes/common-theme.js +++ b/packages/yoroi-extension/app/styles/themes/common-theme.js @@ -1,61 +1,114 @@ -// @flow -import { createTheme } from '@mui/material/styles'; +//@flow +import { RubikFonts, RobotoMonoFonts } from '../fonts'; -/* Common settings for colors, typography, shapes */ -export const commonTheme: Object = createTheme({ - palette: { - error: { - main: '#FF1351', - '50': '#FFF3F5', - '100': '#FF1351', - '200': '#CD0E41', - }, - warning: { - main: '#f6a823', - }, - cyan: { - '50': '#F2F9FF', - '100': '#59B1F4', - }, - gray: { - min: '#ffffff', - '50': '#F0F3F5', - '100': '#EAEDF2', - '200': '#DCE0E9', - '300': '#C4CAD7', - '400': '#A7AFC0', - '500': '#8A92A3', - '600': '#6B7384', - '700': '#4A5065', - '800': '#383E54', - '900': '#242838', - max: '#000000', - }, - background: { - overlay: '#060d23cc', // dialogs, - }, - txStatus: { - pending: { - background: '#F0F3F5', - text: '#ADAEB6', - stripes: 'rgba(217, 221, 224, 0.6)', - }, - high: { - background: '#c9ede5', - text: '#17cfa7', - }, - failed: { - background: '#ff145380', - text: '#e6003d', - }, - medium: { - background: '#f5a5244d', - text: '#f5a524', - }, - low: { - background: '#ff145326', - text: '#FA5F88', - }, +const fontFamily = ['Rubik', 'sans-serif'].join(','); + +export const commonTheme: Object = { + components: { + MuiCssBaseline: { + styleOverrides: ` + ${RubikFonts} + ${RobotoMonoFonts} + `, + }, + }, + /** + * Note: all typography tokens are named based on the regular + * variant`{token}-{num}-regular` (e.g. `heading-1-regular, body-1-regular`). + * To create the "medium" vairant, you can overwrite the font-weight to be + * "fontWeight: 500". + */ + typography: { + htmlFontSize: 14, + fontSize: 14, + fontFamily, + // DS name: heading-1-regular + h1: { + fontWeight: 400, + fontSize: '1.875rem', // 30px + lineHeight: '38px', + fontFamily, + }, + // DS name: heading-2-regular + h2: { + fontSize: '1.75rem', // 28px + lineHeight: '32px', + fontWeight: 400, + fontFamily, + }, + // DS name: heading-3-regular + h3: { + fontSize: '1.5rem', // 24px + lineHeight: '32px', + fontWeight: 400, + fontFamily, + }, + // DS name: heading-4-regular + h4: { + fontSize: '1.25rem', // 20px + lineHeight: '28px', + fontWeight: 400, + fontFamily, + }, + // DS name: heading-5-regular + h5: { + fontSize: '1.125rem', // 18px + lineHeight: '26px', + fontWeight: 400, + fontFamily, + }, + // DS name: button-1 + button: { + fontSize: '1rem', // 16px + fontWeight: 500, + lineHeight: '22px', + letterSpacing: '0.5px', + textTransform: 'uppercase', + fontFamily, + }, + // DS name: button-2 + button2: { + fontSize: '0.875rem', // 14px + fontWeight: 500, + lineHeight: '22px', + letterSpacing: '0.5px', + textTransform: 'uppercase', + fontFamily, + }, + // DS name: body-1-regular + body1: { + fontSize: '1rem', // 16px + lineHeight: '24px', + fontWeight: 400, + fontFamily, + }, + // DS name: body-2-regular + body2: { + fontSize: '0.875rem', // 14px + lineHeight: '22px', + fontWeight: 400, + fontFamily, + }, + overline: { + fontWeight: 400, + fontSize: '0.875rem', // 14px + lineHeight: '22px', + textTransform: 'uppercase', + fontFamily, + }, + // DS name: caption-1-regular + caption1: { + fontSize: '0.75rem', // 12px + lineHeight: '16px', + fontWeight: 400, + fontFamily, + }, + // DS name: caption-2-regular + caption2: { + fontSize: '0.625rem', // 10px + lineHeight: '14px', + fontWeight: 400, + fontFamily, }, }, -}); +}; diff --git a/packages/yoroi-extension/app/styles/themes/dark-theme-base.js b/packages/yoroi-extension/app/styles/themes/dark-theme-base.js new file mode 100644 index 0000000000..a7bf306136 --- /dev/null +++ b/packages/yoroi-extension/app/styles/themes/dark-theme-base.js @@ -0,0 +1,130 @@ +// @flow +import { alpha } from '@mui/material/styles'; +import { dark } from './themed-palettes/dark'; + +const primary = { + main: '#4B6DDE', + '900': '#E4E8F7', + '800': '#C4CFF5', + '700': '#A0B3F2', + '600': '#7892E8', + '500': '#4B6DDE', + '400': '#2E4BB0', + '300': '#304489', + '200': '#242D4F', + '100': '#1F253B', +}; + +const secondary = { + main: '#16E3BA', + '100': '#17453C', + '200': '#12705D', + '300': '#0B997D', + '400': '#08C29D', + '500': '#16E3BA', + '600': '#66F2D6', + '700': '#93F5E1', + '800': '#C6F7ED', + '900': '#E4F7F3', +}; + +const grayscale = { + main: '#656C85', + min: '#0B0B0F', + '50': '#15171F', + '100': '#1F232E', + '200': '#262A38', + '300': '#3E4457', + '400': '#4B5266', + '500': '#656C85', + '600': '#7C85A3', + '700': '#9BA4C2', + '800': '#BCC5E0', + '900': '#E1E6F5', + max: '#FFFFFF', +}; + +const staticColors = { white: '#FFFFFF', black: '#000000' }; + +const cyan = { '500': '#59B1F4', '100': '#112333' }; +const yellow = { '500': '#ECBA09', '100': '#31290E' }; +const orange = { '500': '#FAB357', '100': '#291802' }; +const magenta = { + main: '#FF7196', + '700': '#9B1F40', + '600': '#CF335B', + '500': '#FF7196', + '300': '#64303E', + '100': '#3B252A', +}; + +const system = { magenta, cyan, yellow, orange }; + +export const darkThemeBase = { + name: 'dark-theme', + palette: { + mode: 'dark', + /* `main` is added since MUI required it but we don't use it at all */ + ds: { + ...dark, + }, + primary, + secondary, + grayscale, + static: staticColors, + system, + gradients: { + bg_gradient_1: + 'linear-gradient(195.39deg, rgba(26, 227, 187, 0.26) 0.57%, rgba(75, 109, 222, 0.1) 41.65%, rgba(75, 109, 222, 0.16) 100%)', + bg_gradient_2: + 'linear-gradient(205.51deg, rgba(11, 153, 125, 0.49) -10.43%, rgba(8, 194, 157, 0.08) 100%)', + bg_gradient_3: 'linear-gradient(30.09deg, #244ABF 0%, #4760FF 176.73%)', + }, + background: { bg_color_low: dark.gray_cmin, bg_color_medium: grayscale['100'] }, + uitext: { + primary: { + high: primary['700'], + normal: primary['600'], + low: primary['300'], + }, + on_primary: staticColors.white, + gray: { + max: dark.gray_cmax, + normal: grayscale['900'], + medium: grayscale['600'], + low: grayscale['400'], + }, + error: system.magenta['500'], + warning: system.orange['500'], + success: secondary['500'], + info: system.cyan['500'], + }, + ui: { + primary: { + high: primary['700'], + normal: primary['600'], + low: primary['300'], + }, + gray: { + high: dark.gray_cmax, + normal: grayscale['900'], + medium: grayscale['600'], + low: grayscale['400'], + }, + secondary: { + medium: secondary['400'], + }, + static: { + white: staticColors.white, + }, + }, + special: { + overlay: alpha(grayscale['100'], 0.8), + bg_sidebar_item: alpha(staticColors.black, 0.16), + el_sidebar_item: alpha(staticColors.white, 0.48), + }, + }, + shape: { + borderRadius: 8, + }, +}; diff --git a/packages/yoroi-extension/app/styles/themes/dark-theme-mui.js b/packages/yoroi-extension/app/styles/themes/dark-theme-mui.js new file mode 100644 index 0000000000..c3000d01d4 --- /dev/null +++ b/packages/yoroi-extension/app/styles/themes/dark-theme-mui.js @@ -0,0 +1,44 @@ +// @flow +import { createTheme } from '@mui/material/styles'; +import { commonTheme } from './common-theme'; +import { deepmerge } from '@mui/utils'; +import { darkThemeBase } from './dark-theme-base'; +import { + DarkButton, + Checkbox, + TextField, + OutlinedInput, + FormHelperText, + FormControl, + Menu, + MenuItem, + Tabs, + TabPanel, + Chip, + Tooltip, + InputLabel, + Select, +} from '../overrides'; + +const darkThemeComponents = { + components: { + MuiButton: DarkButton, + MuiCheckbox: Checkbox, + MuiTextField: TextField, + MuiOutlinedInput: OutlinedInput, + MuiFormHelperText: FormHelperText, + MuiFormControl: FormControl, + MuiSelect: Select, + MuiInputLabel: InputLabel, + MuiMenu: Menu, + MuiMenuItem: MenuItem, + MuiTabs: Tabs, + MuiTabPanel: TabPanel, + MuiChip: Chip, + MuiTooltip: Tooltip, + }, +}; + +export const baseDarkTheme: Object = createTheme( + deepmerge(commonTheme, deepmerge(darkThemeBase, darkThemeComponents)) +); diff --git a/packages/yoroi-extension/app/styles/themes/classic-theme.js b/packages/yoroi-extension/app/styles/themes/legacy/classic-theme.js similarity index 96% rename from packages/yoroi-extension/app/styles/themes/classic-theme.js rename to packages/yoroi-extension/app/styles/themes/legacy/classic-theme.js index e86b1f1ca2..cef4c9a84d 100644 --- a/packages/yoroi-extension/app/styles/themes/classic-theme.js +++ b/packages/yoroi-extension/app/styles/themes/legacy/classic-theme.js @@ -1,6 +1,6 @@ // @flow import { createTheme } from '@mui/material/styles'; -import { SFUIDisplayFonts, RobotoMonoFonts } from '../fonts'; +import { SFUIDisplayFonts, RobotoMonoFonts } from '../../fonts'; import { ClassicButton, ClassicCheckbox, @@ -16,7 +16,7 @@ import { ClassicChip, ClassicTooltip, ClassicSelect, -} from '../overrides'; +} from '../../overrides/legacy'; import { commonTheme } from './common-theme'; import { deepmerge } from '@mui/utils'; diff --git a/packages/yoroi-extension/app/styles/themes/legacy/common-theme.js b/packages/yoroi-extension/app/styles/themes/legacy/common-theme.js new file mode 100644 index 0000000000..599e563c58 --- /dev/null +++ b/packages/yoroi-extension/app/styles/themes/legacy/common-theme.js @@ -0,0 +1,61 @@ +// @flow +import { createTheme } from '@mui/material/styles'; + +/* Common settings for colors, typography, shapes */ +export const commonTheme: Object = createTheme({ + palette: { + error: { + main: '#FF1351', + '50': '#FFF3F5', + '100': '#FF1351', + '200': '#CD0E41', + }, + warning: { + main: '#f6a823', + }, + cyan: { + '50': '#F2F9FF', + '100': '#59B1F4', + }, + gray: { + min: '#ffffff', + '50': '#F0F3F5', + '100': '#EAEDF2', + '200': '#DCE0E9', + '300': '#C4CAD7', + '400': '#A7AFC0', + '500': '#8A92A3', + '600': '#6B7384', + '700': '#4A5065', + '800': '#383E54', + '900': '#242838', + max: '#000000', + }, + background: { + overlay: '#060d23cc', // dialogs, + }, + txStatus: { + pending: { + background: '#F0F3F5', + text: '#ADAEB6', + stripes: 'rgba(217, 221, 224, 0.6)', + }, + high: { + background: '#c9ede5', + text: '#17cfa7', + }, + failed: { + background: '#ff145380', + text: '#e6003d', + }, + medium: { + background: '#f5a5244d', + text: '#f5a524', + }, + low: { + background: '#ff145326', + text: '#FA5F88', + }, + }, + }, +}); diff --git a/packages/yoroi-extension/app/styles/themes/modern-theme.js b/packages/yoroi-extension/app/styles/themes/legacy/modern-theme.js similarity index 96% rename from packages/yoroi-extension/app/styles/themes/modern-theme.js rename to packages/yoroi-extension/app/styles/themes/legacy/modern-theme.js index ac98ea0a8c..72992058c2 100644 --- a/packages/yoroi-extension/app/styles/themes/modern-theme.js +++ b/packages/yoroi-extension/app/styles/themes/legacy/modern-theme.js @@ -1,6 +1,6 @@ // @flow import { createTheme } from '@mui/material/styles'; -import { RubikFonts, RobotoMonoFonts } from '../fonts'; +import { RubikFonts, RobotoMonoFonts } from '../../fonts'; import { ModernButton, ModernCheckbox, @@ -16,7 +16,7 @@ import { ModernTooltip, ModernInputLabel, ModernSelect, -} from '../overrides'; +} from '../../overrides/legacy'; import { commonTheme } from './common-theme'; import { deepmerge } from '@mui/utils'; diff --git a/packages/yoroi-extension/app/styles/themes/light-theme-base.js b/packages/yoroi-extension/app/styles/themes/light-theme-base.js new file mode 100644 index 0000000000..99906c0554 --- /dev/null +++ b/packages/yoroi-extension/app/styles/themes/light-theme-base.js @@ -0,0 +1,159 @@ +// @flow +import { alpha } from '@mui/material/styles'; +import { light } from './themed-palettes/light'; + +const grayscale = { + main: '#8A92A3', + max: '#000000', + '900': '#242838', + '800': '#383E54', + '700': '#4A5065', + '600': '#6B7384', + '500': '#8A92A3', + '400': '#A7AFC0', + '300': '#C4CAD7', + '200': '#DCE0E9', + '100': '#EAEDF2', + '50': '#F0F3F5', + min: '#FFFFFF', // legacy prop +}; + +const primary = { + main: '#4B6DDE', + '900': '#121F4D', + '800': '#122770', + '700': '#1737A3', + '600': '#3154CB', + '500': '#4B6DDE', + '400': '#7892E8', + '300': '#A0B3F2', + '200': '#C4CFF5', + '100': '#E4E8F7', + contrastText: '#FFF', // legacy prop +}; + +const secondary = { + main: '#16E3BA', + '900': '#17453C', + '800': '#12705D', + '700': '#0B997D', + '600': '#08C29D', + '500': '#16E3BA', + '400': '#66F2D6', + '300': '#93F5E1', + '200': '#C6F7ED', + '100': '#E4F7F3', + contrastText: '#FFF', // legacy prop +}; + +const staticColors = { white: '#FFFFFF', black: '#000000' }; + +const cyan = { '500': '#59B1F4', '100': '#E8F4FF' }; +const yellow = { '500': '#ECBA09', '100': '#FDF7E2' }; +const orange = { '500': '#ED8600', '100': '#FFF2E2' }; +const magenta = { + main: '#FF1351', + '700': '#CF053A', + '600': '#E80742', + '500': '#FF1351', + '300': '#FBCBD7', + '100': '#FFF1F5', +}; + +const system = { magenta, cyan, yellow, orange }; + +export const lightThemeBase = { + name: 'light-theme', + palette: { + mode: 'light', + /* `main` is added since MUI required it but we don't use it at all */ + ds: { + ...light, + }, + primary, + secondary, + grayscale, + static: staticColors, + system, + // start legacy props + magenta, + cyan, + yellow, + common: { black: '#000000', white: '#FFFFFF', magenta, cyan, yellow }, + // end legacy props + gradients: { + bg_gradient_1: 'linear-gradient(312.19deg, #C6F7ED 0%, #E4E8F7 100%)', + bg_gradient_2: 'linear-gradient(180deg, #93F5E1 0%, #C6F7ED 100%)', + bg_gradient_3: 'linear-gradient(30.09deg, #244ABF 0%, #4760FF 176.73%)', + // legacy ones + 'blue-green-bg': 'linear-gradient(180deg, #E4E8F7 0%, #C6F7F7 100%)', + 'blue-green-banner': 'linear-gradient(269.97deg, #E4E8F7 0%, #C6F7ED 100%)', + green: 'linear-gradient(180deg, #93F5E1 0%, #C6F7ED 100%)', + blue: 'linear-gradient(30.09deg, #244ABF 0%, #4760FF 176.73%)', + }, + background: { + bg_color_low: light.gray_cmin, + bg_color_medium: grayscale['100'], + // legacy ones + card: '#fff', + sidebar: '#4760FF', + banner: { + warning: '#f5a623', + }, + walletAdd: { + title: '#ffffff', + subtitle: '#ffffff', + }, + gradients: { + walletEmptyCard: 'linear-gradient(180deg, #93F5E1 0%, #C6F7ED 100%)', + supportedAddressDomainsBanner: 'linear-gradient(260deg, #E4E8F7 0%, #C6F7ED 100%)', + primary: 'linear-gradient(269.97deg, #E4E8F7 0%, #C6F7ED 100%)', + }, + }, + uitext: { + primary: { + high: primary['600'], + normal: primary['500'], + low: primary['300'], + }, + on_primary: staticColors.white, + gray: { + max: light.gray_cmax, + normal: grayscale['900'], + medium: grayscale['600'], + low: grayscale['400'], + }, + error: system.magenta['500'], + warning: system.orange['500'], + success: secondary['500'], + info: system.cyan['500'], + }, + ui: { + primary: { + high: primary['600'], + normal: primary['500'], + low: primary['300'], + }, + gray: { + high: light.gray_cmax, + normal: grayscale['900'], + medium: grayscale['600'], + low: grayscale['400'], + }, + secondary: { + medium: secondary['400'], + }, + static: { + white: staticColors.white, + }, + }, + special: { + overlay: alpha(staticColors.black, 0.7), + bg_sidebar_item: alpha(staticColors.black, 0.16), + el_sidebar_item: alpha(staticColors.white, 0.48), + }, + }, + shape: { + borderRadius: 8, + }, +}; diff --git a/packages/yoroi-extension/app/styles/themes/light-theme-mui.js b/packages/yoroi-extension/app/styles/themes/light-theme-mui.js new file mode 100644 index 0000000000..16dca89166 --- /dev/null +++ b/packages/yoroi-extension/app/styles/themes/light-theme-mui.js @@ -0,0 +1,44 @@ +// @flow +import { createTheme } from '@mui/material/styles'; +import { commonTheme } from './common-theme'; +import { deepmerge } from '@mui/utils'; +import { lightThemeBase } from './light-theme-base'; +import { + LightButton, + Checkbox, + TextField, + OutlinedInput, + FormHelperText, + FormControl, + Menu, + MenuItem, + Tabs, + TabPanel, + Chip, + Tooltip, + InputLabel, + Select, +} from '../overrides'; + +const lightThemeComponents = { + components: { + MuiButton: LightButton, + MuiCheckbox: Checkbox, + MuiTextField: TextField, + MuiOutlinedInput: OutlinedInput, + MuiFormHelperText: FormHelperText, + MuiFormControl: FormControl, + MuiSelect: Select, + MuiInputLabel: InputLabel, + MuiMenu: Menu, + MuiMenuItem: MenuItem, + MuiTabs: Tabs, + MuiTabPanel: TabPanel, + MuiChip: Chip, + MuiTooltip: Tooltip, + }, +}; + +export const baseLightTheme: Object = createTheme( + deepmerge(commonTheme, deepmerge(lightThemeBase, lightThemeComponents)) +); diff --git a/packages/yoroi-extension/app/styles/themes/revamp/common-theme.js b/packages/yoroi-extension/app/styles/themes/revamp/common-theme.js deleted file mode 100644 index 91ad37acbe..0000000000 --- a/packages/yoroi-extension/app/styles/themes/revamp/common-theme.js +++ /dev/null @@ -1,114 +0,0 @@ -//@flow -import { RubikFonts, RobotoMonoFonts } from '../../fonts'; - -const fontFamily = ['Rubik', 'sans-serif'].join(','); - -export const commonRevampTheme: Object = { - components: { - MuiCssBaseline: { - styleOverrides: ` - ${RubikFonts} - ${RobotoMonoFonts} - `, - }, - }, - /** - * Note: all typography tokens are named based on the regular - * variant`{token}-{num}-regular` (e.g. `heading-1-regular, body-1-regular`). - * To create the "medium" vairant, you can overwrite the font-weight to be - * "fontWeight: 500". - */ - typography: { - htmlFontSize: 14, - fontSize: 14, - fontFamily, - // DS name: heading-1-regular - h1: { - fontWeight: 400, - fontSize: '1.875rem', // 30px - lineHeight: '38px', - fontFamily, - }, - // DS name: heading-2-regular - h2: { - fontSize: '1.75rem', // 28px - lineHeight: '32px', - fontWeight: 400, - fontFamily, - }, - // DS name: heading-3-regular - h3: { - fontSize: '1.5rem', // 24px - lineHeight: '32px', - fontWeight: 400, - fontFamily, - }, - // DS name: heading-4-regular - h4: { - fontSize: '1.25rem', // 20px - lineHeight: '28px', - fontWeight: 400, - fontFamily, - }, - // DS name: heading-5-regular - h5: { - fontSize: '1.125rem', // 18px - lineHeight: '26px', - fontWeight: 400, - fontFamily, - }, - // DS name: button-1 - button: { - fontSize: '1rem', // 16px - fontWeight: 500, - lineHeight: '22px', - letterSpacing: '0.5px', - textTransform: 'uppercase', - fontFamily, - }, - // DS name: button-2 - button2: { - fontSize: '0.875rem', // 14px - fontWeight: 500, - lineHeight: '22px', - letterSpacing: '0.5px', - textTransform: 'uppercase', - fontFamily, - }, - // DS name: body-1-regular - body1: { - fontSize: '1rem', // 16px - lineHeight: '24px', - fontWeight: 400, - fontFamily, - }, - // DS name: body-2-regular - body2: { - fontSize: '0.875rem', // 14px - lineHeight: '22px', - fontWeight: 400, - fontFamily, - }, - overline: { - fontWeight: 400, - fontSize: '0.875rem', // 14px - lineHeight: '22px', - textTransform: 'uppercase', - fontFamily, - }, - // DS name: caption-1-regular - caption1: { - fontSize: '0.75rem', // 12px - lineHeight: '16px', - fontWeight: 400, - fontFamily, - }, - // DS name: caption-2-regular - caption2: { - fontSize: '0.625rem', // 10px - lineHeight: '14px', - fontWeight: 400, - fontFamily, - }, - }, -}; diff --git a/packages/yoroi-extension/app/styles/themes/revamp/dark-theme-mui.js b/packages/yoroi-extension/app/styles/themes/revamp/dark-theme-mui.js deleted file mode 100644 index 6807a2b7c8..0000000000 --- a/packages/yoroi-extension/app/styles/themes/revamp/dark-theme-mui.js +++ /dev/null @@ -1,44 +0,0 @@ -// @flow -import { createTheme } from '@mui/material/styles'; -import { commonRevampTheme } from './common-theme'; -import { deepmerge } from '@mui/utils'; -import { darkTheme } from './dark-theme-base'; -import { - DarkRevampButton, - RevampCheckbox, - RevampTextField, - RevampOutlinedInput, - RevampFormHelperText, - RevampFormControl, - RevampMenu, - RevampMenuItem, - RevampTabs, - RevampTabPanel, - RevampChip, - RevampTooltip, - RevampInputLabel, - RevampSelect, -} from '../../overrides/revamp'; - -const darkThemeComponents = { - components: { - MuiButton: DarkRevampButton, - MuiCheckbox: RevampCheckbox, - MuiTextField: RevampTextField, - MuiOutlinedInput: RevampOutlinedInput, - MuiFormHelperText: RevampFormHelperText, - MuiFormControl: RevampFormControl, - MuiSelect: RevampSelect, - MuiInputLabel: RevampInputLabel, - MuiMenu: RevampMenu, - MuiMenuItem: RevampMenuItem, - MuiTabs: RevampTabs, - MuiTabPanel: RevampTabPanel, - MuiChip: RevampChip, - MuiTooltip: RevampTooltip, - }, -}; - -const revampDarkTheme = deepmerge(darkTheme, darkThemeComponents); - -export const revampBaseTheme: Object = createTheme(deepmerge(commonRevampTheme, revampDarkTheme)); diff --git a/packages/yoroi-extension/app/styles/themes/revamp/light-theme-mui.js b/packages/yoroi-extension/app/styles/themes/revamp/light-theme-mui.js deleted file mode 100644 index 5dc8051a7f..0000000000 --- a/packages/yoroi-extension/app/styles/themes/revamp/light-theme-mui.js +++ /dev/null @@ -1,44 +0,0 @@ -// @flow -import { createTheme } from '@mui/material/styles'; -import { commonRevampTheme } from './common-theme'; -import { deepmerge } from '@mui/utils'; -import { lightTheme } from './light-theme-base'; -import { - LightRevampButton, - RevampCheckbox, - RevampTextField, - RevampOutlinedInput, - RevampFormHelperText, - RevampFormControl, - RevampMenu, - RevampMenuItem, - RevampTabs, - RevampTabPanel, - RevampChip, - RevampTooltip, - RevampInputLabel, - RevampSelect, -} from '../../overrides/revamp'; - -const lightThemeComponents = { - components: { - MuiButton: LightRevampButton, - MuiCheckbox: RevampCheckbox, - MuiTextField: RevampTextField, - MuiOutlinedInput: RevampOutlinedInput, - MuiFormHelperText: RevampFormHelperText, - MuiFormControl: RevampFormControl, - MuiSelect: RevampSelect, - MuiInputLabel: RevampInputLabel, - MuiMenu: RevampMenu, - MuiMenuItem: RevampMenuItem, - MuiTabs: RevampTabs, - MuiTabPanel: RevampTabPanel, - MuiChip: RevampChip, - MuiTooltip: RevampTooltip, - }, -}; - -const revampLightTheme = deepmerge(lightTheme, lightThemeComponents); - -export const revampBaseTheme: Object = createTheme(deepmerge(commonRevampTheme, revampLightTheme)); diff --git a/packages/yoroi-extension/app/styles/themes/themed-palettes/dark.js b/packages/yoroi-extension/app/styles/themes/themed-palettes/dark.js new file mode 100644 index 0000000000..073579714c --- /dev/null +++ b/packages/yoroi-extension/app/styles/themes/themed-palettes/dark.js @@ -0,0 +1,41 @@ +import { darkPalette } from '../base-palettes/dark-palette'; +import { tokens } from '../tokens/tokens'; + +const { opacity } = tokens; + +export const dark = { + ...darkPalette, + + text_primary_high: darkPalette.primary_c700, // hover, text, button, links, text in tabs, chips + text_primary_medium: darkPalette.primary_c600, // links, tabs, chips, special cases + text_primary_low: darkPalette.primary_c300, // disabled, buttons, links + text_primary_on: darkPalette.white_static, // primary color surfaces + text_gray_max: darkPalette.gray_cmax, // hover and pressed + text_gray_normal: darkPalette.gray_c900, // draws attention + text_gray_medium: darkPalette.gray_c600, // accent or additional text + text_gray_low: darkPalette.gray_c400, // disabled text + text_error: darkPalette.sys_magenta_c500, // error messages + text_warning: darkPalette.sys_orange_c500, // warning messages + text_success: darkPalette.secondary_c500, // success messages + text_info: darkPalette.sys_cyan_c500, // info messages + + bg_color_high: darkPalette.gray_cmin, // bottom surface + bg_color_low: darkPalette.gray_c100, // upper surface + + el_primary_high: darkPalette.primary_c700, // hover'nd pressed state, actianable elements + el_primary_medium: darkPalette.primary_c600, // actionable elements + el_primary_low: darkPalette.primary_c300, // disabled elements, icons + el_gray_high: darkPalette.gray_cmax, // hover and pressed, icons, shapes, lines in buttons, icons in banners + el_gray_normal: darkPalette.gray_c900, // icons, shapes, lines in buttons, chips, tabs, checkboxes, readio, switch + el_gray_medium: darkPalette.gray_c600, // icons, shapes, inputs, bottom navigation bar + el_gray_low: darkPalette.gray_c400, // input stroke, disabled state for most components + el_secondary_medium: darkPalette.secondary_c600, // success state + el_static_white: darkPalette.white_static, // text and icons buttons and chips + + web_overlay: `${darkPalette.gray_c100}${opacity._80}`, // extension modal overlay + web_sidebar_item_active: `${darkPalette.black_static}${opacity._16}`, // extension active sidebar item background + web_sidebar_item_inactive: `${darkPalette.white_static}${opacity._48}`, // extension inactive sidebar item + + mobile_overlay: `${darkPalette.black_static}${opacity._40}`, // mobile bottom sheet overlay + mobile_bg_blur: `${darkPalette.gray_c50}${opacity._80}`, // mobile bottom sheet background +}; diff --git a/packages/yoroi-extension/app/styles/themes/themed-palettes/light.js b/packages/yoroi-extension/app/styles/themes/themed-palettes/light.js new file mode 100644 index 0000000000..98fb9f3882 --- /dev/null +++ b/packages/yoroi-extension/app/styles/themes/themed-palettes/light.js @@ -0,0 +1,41 @@ +import { lightPalette } from '../base-palettes/light-palette'; +import { tokens } from '../tokens/tokens'; + +const { opacity } = tokens; + +export const light = { + ...lightPalette, + + text_primary_high: lightPalette.primary_c600, // hover, text, button, links, text in tabs, chips + text_primary_medium: lightPalette.primary_c500, // links, tabs, chips, special cases + text_primary_low: lightPalette.primary_c300, // disabled, buttons, links + text_primary_on: lightPalette.white_static, // primary color surfaces + text_gray_max: lightPalette.gray_cmax, // hover and pressed + text_gray_normal: lightPalette.gray_c900, // draws attention + text_gray_medium: lightPalette.gray_c600, // accent or additional text + text_gray_low: lightPalette.gray_c400, // disabled text + text_error: lightPalette.sys_magenta_c500, // error messages + text_warning: lightPalette.sys_orange_c500, // warning messages + text_success: lightPalette.secondary_c500, // success messages + text_info: lightPalette.sys_cyan_c500, // info messages + + bg_color_high: lightPalette.gray_cmin, // bottom surface + bg_color_low: lightPalette.gray_c100, // upper surface + + el_primary_high: lightPalette.primary_c600, // hover'nd pressed state, actianable elements + el_primary_medium: lightPalette.primary_c500, // actionable elements + el_primary_low: lightPalette.primary_c300, // disabled elements, icons + el_gray_high: lightPalette.gray_cmax, // hover and pressed, icons, shapes, lines in buttons, icons in banners + el_gray_normal: lightPalette.gray_c900, // icons, shapes, lines in buttons, chips, tabs, checkboxes, readio, switch + el_gray_medium: lightPalette.gray_c600, // icons, shapes, inputs, bottom navigation bar + el_gray_low: lightPalette.gray_c400, // input stroke, disabled state for most components + el_secondary_medium: lightPalette.secondary_c400, // success state + el_static_white: lightPalette.white_static, // text and icons buttons and chips + + web_overlay: `${lightPalette.black_static}${opacity._70}`, // extension modal overlay + web_sidebar_item_active: `${lightPalette.black_static}${opacity._16}`, // extension active sidebar item background + web_sidebar_item_inactive: `${lightPalette.white_static}${opacity._48}`, // extension inactive sidebar item + + mobile_overlay: `${lightPalette.black_static}${opacity._40}`, // mobile bottom sheet overlay + mobile_bg_blur: `${lightPalette.white_static}${opacity._80}`, // mobile bottom sheet background +}; diff --git a/packages/yoroi-extension/app/styles/themes/tokens/tokens.js b/packages/yoroi-extension/app/styles/themes/tokens/tokens.js new file mode 100644 index 0000000000..e2a457a7b3 --- /dev/null +++ b/packages/yoroi-extension/app/styles/themes/tokens/tokens.js @@ -0,0 +1,66 @@ +export const space = { + none: 0, + _2xs: 2, + xs: 4, + sm: 8, + md: 12, + lg: 16, + xl: 24, + _2xl: 32, +}; + +export const borderRadius = { + xs: 4, + sm: 8, + md: 12, + full: 999, +}; + +export const fontSize = { + _2xs: 10, + xs: 12, + sm: 14, + md: 16, + lg: 18, + xl: 20, + _2xl: 24, + _3xl: 28, +}; + +export const lineHeight = { + _2xs: 18, + xs: 18, + sm: 22, + md: 24, + lg: 26, + xl: 30, + _2xl: 32, + _3xl: 36, +}; + +export const fontWeight = { + thin: '300', + normal: '400', + semibold: '500', + bold: '600', +}; + +export const opacity = { + _8: '14', + _10: '1A', + _16: '29', + _26: '42', + _40: '66', + _48: '7A', + _70: 'B3', + _80: 'CC', +}; + +export const tokens = { + space, + borderRadius, + fontSize, + lineHeight, + fontWeight, + opacity, +}; From 6843ea38af17f92313e50861275182cb4a2e42a1 Mon Sep 17 00:00:00 2001 From: Patriciu Nista Date: Mon, 1 Jul 2024 00:41:54 +0200 Subject: [PATCH 351/464] fix eslint --- packages/yoroi-extension/app/App.js | 3 +-- .../app/styles/themes/base-palettes/dark-palette.js | 5 +---- .../app/styles/themes/base-palettes/light-palette.js | 1 + .../app/styles/themes/themed-palettes/dark.js | 1 + .../app/styles/themes/themed-palettes/light.js | 1 + packages/yoroi-extension/app/styles/themes/tokens/tokens.js | 1 + 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/yoroi-extension/app/App.js b/packages/yoroi-extension/app/App.js index f287b14e40..fa5aaa864f 100644 --- a/packages/yoroi-extension/app/App.js +++ b/packages/yoroi-extension/app/App.js @@ -15,8 +15,7 @@ import { LayoutProvider } from './styles/context/layout'; import { ColorModeProvider } from './styles/context/mode'; import { CssBaseline } from '@mui/material'; import { globalStyles } from './styles/globalStyles'; -import { changeToplevelTheme, MuiThemes } from './styles/themes'; -import { THEMES } from './styles/themes'; +import { changeToplevelTheme, MuiThemes, THEMES } from './styles/themes'; import ThemeManager from './ThemeManager'; import environment from './environment'; import MaintenancePage from './containers/MaintenancePage'; diff --git a/packages/yoroi-extension/app/styles/themes/base-palettes/dark-palette.js b/packages/yoroi-extension/app/styles/themes/base-palettes/dark-palette.js index f0da8da5f7..96234bf6f8 100644 --- a/packages/yoroi-extension/app/styles/themes/base-palettes/dark-palette.js +++ b/packages/yoroi-extension/app/styles/themes/base-palettes/dark-palette.js @@ -1,7 +1,4 @@ -import { tokens } from '../tokens/tokens'; - -const { opacity } = tokens; - +// @flow export const darkPalette = { primary_c900: '#E4E8F7', primary_c800: '#C4CFF5', diff --git a/packages/yoroi-extension/app/styles/themes/base-palettes/light-palette.js b/packages/yoroi-extension/app/styles/themes/base-palettes/light-palette.js index 665db5944a..6ddd4e8fc7 100644 --- a/packages/yoroi-extension/app/styles/themes/base-palettes/light-palette.js +++ b/packages/yoroi-extension/app/styles/themes/base-palettes/light-palette.js @@ -1,3 +1,4 @@ +// @flow export const lightPalette = { primary_c900: '#121F4D', primary_c800: '#122770', diff --git a/packages/yoroi-extension/app/styles/themes/themed-palettes/dark.js b/packages/yoroi-extension/app/styles/themes/themed-palettes/dark.js index 073579714c..ced8c7193e 100644 --- a/packages/yoroi-extension/app/styles/themes/themed-palettes/dark.js +++ b/packages/yoroi-extension/app/styles/themes/themed-palettes/dark.js @@ -1,3 +1,4 @@ +// @flow import { darkPalette } from '../base-palettes/dark-palette'; import { tokens } from '../tokens/tokens'; diff --git a/packages/yoroi-extension/app/styles/themes/themed-palettes/light.js b/packages/yoroi-extension/app/styles/themes/themed-palettes/light.js index 98fb9f3882..00b62f8be3 100644 --- a/packages/yoroi-extension/app/styles/themes/themed-palettes/light.js +++ b/packages/yoroi-extension/app/styles/themes/themed-palettes/light.js @@ -1,3 +1,4 @@ +// @flow import { lightPalette } from '../base-palettes/light-palette'; import { tokens } from '../tokens/tokens'; diff --git a/packages/yoroi-extension/app/styles/themes/tokens/tokens.js b/packages/yoroi-extension/app/styles/themes/tokens/tokens.js index e2a457a7b3..1cdec14f88 100644 --- a/packages/yoroi-extension/app/styles/themes/tokens/tokens.js +++ b/packages/yoroi-extension/app/styles/themes/tokens/tokens.js @@ -1,3 +1,4 @@ +// @flow export const space = { none: 0, _2xs: 2, From a90ecc56b0d71f2fd4e8073b727e10d50289494d Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Wed, 3 Jul 2024 22:25:34 +0300 Subject: [PATCH 352/464] flow fixes --- .../containers/settings/categories/GeneralSettingsPage.js | 2 +- .../yoroi-extension/app/stores/base/BaseProfileStore.js | 8 ++++---- .../yoroi-extension/app/styles/themes/dark-theme-base.js | 2 +- .../yoroi-extension/app/styles/themes/light-theme-base.js | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/yoroi-extension/app/containers/settings/categories/GeneralSettingsPage.js b/packages/yoroi-extension/app/containers/settings/categories/GeneralSettingsPage.js index 2443179eec..2b94a96915 100644 --- a/packages/yoroi-extension/app/containers/settings/categories/GeneralSettingsPage.js +++ b/packages/yoroi-extension/app/containers/settings/categories/GeneralSettingsPage.js @@ -121,7 +121,7 @@ export default class GeneralSettingsPage extends Component { - if (theme === THEMES.YOROI_REVAMP) { + if (theme === THEMES.YOROI_BASE) { const { wallets } = this.props.stores; const publicDeriver = wallets.selected; const publicDerivers = wallets.publicDerivers; diff --git a/packages/yoroi-extension/app/stores/base/BaseProfileStore.js b/packages/yoroi-extension/app/stores/base/BaseProfileStore.js index e73b12e759..109c684b38 100644 --- a/packages/yoroi-extension/app/stores/base/BaseProfileStore.js +++ b/packages/yoroi-extension/app/stores/base/BaseProfileStore.js @@ -356,8 +356,8 @@ export default class BaseProfileStore if (result != null) { if (!this.didUserMigratedToRevampTheme) { this.setUserRevampMigrationStatusRequest.execute(true); - this._updateTheme({ theme: THEMES.YOROI_REVAMP }); - return THEMES.YOROI_REVAMP; + this._updateTheme({ theme: THEMES.YOROI_BASE }); + return THEMES.YOROI_BASE; } // verify content is an actual theme @@ -367,11 +367,11 @@ export default class BaseProfileStore } } - return THEMES.YOROI_REVAMP; + return THEMES.YOROI_BASE; } @computed get isRevampTheme(): boolean { - return this.currentTheme === THEMES.YOROI_REVAMP; + return this.currentTheme === THEMES.YOROI_BASE; } @computed get isModernTheme(): boolean { diff --git a/packages/yoroi-extension/app/styles/themes/dark-theme-base.js b/packages/yoroi-extension/app/styles/themes/dark-theme-base.js index a7bf306136..375c5757a0 100644 --- a/packages/yoroi-extension/app/styles/themes/dark-theme-base.js +++ b/packages/yoroi-extension/app/styles/themes/dark-theme-base.js @@ -60,7 +60,7 @@ const magenta = { const system = { magenta, cyan, yellow, orange }; -export const darkThemeBase = { +export const darkThemeBase: any = { name: 'dark-theme', palette: { mode: 'dark', diff --git a/packages/yoroi-extension/app/styles/themes/light-theme-base.js b/packages/yoroi-extension/app/styles/themes/light-theme-base.js index 99906c0554..d9dab4b44f 100644 --- a/packages/yoroi-extension/app/styles/themes/light-theme-base.js +++ b/packages/yoroi-extension/app/styles/themes/light-theme-base.js @@ -62,7 +62,7 @@ const magenta = { const system = { magenta, cyan, yellow, orange }; -export const lightThemeBase = { +export const lightThemeBase: any = { name: 'light-theme', palette: { mode: 'light', From 720ae714264f9a006c2de089fc9bfe6afeb2d9a4 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Wed, 3 Jul 2024 22:28:29 +0300 Subject: [PATCH 353/464] flow fixes --- packages/yoroi-extension/app/stores/base/BaseProfileStore.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/stores/base/BaseProfileStore.js b/packages/yoroi-extension/app/stores/base/BaseProfileStore.js index 109c684b38..437b5f3fea 100644 --- a/packages/yoroi-extension/app/stores/base/BaseProfileStore.js +++ b/packages/yoroi-extension/app/stores/base/BaseProfileStore.js @@ -356,7 +356,7 @@ export default class BaseProfileStore if (result != null) { if (!this.didUserMigratedToRevampTheme) { this.setUserRevampMigrationStatusRequest.execute(true); - this._updateTheme({ theme: THEMES.YOROI_BASE }); + noop(this._updateTheme({ theme: THEMES.YOROI_BASE })); return THEMES.YOROI_BASE; } From d77e8232cf608aa86282e8a45f26a5df0ad21a57 Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:04 +0100 Subject: [PATCH 354/464] New translations en-us.md (fr-FR) --- .../i18n/locales/terms-of-use/ada/fr-FR.md | 110 +++++++----------- 1 file changed, 39 insertions(+), 71 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/fr-FR.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/fr-FR.md index 62a96a1ef3..ba738eec44 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/fr-FR.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/fr-FR.md @@ -1,109 +1,77 @@ -# Terms of Service Agreement +# Conditions générales de l'accord de service -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +LES PRÉSENTES CONDITIONS GÉNÉRALES ("Contrat") sont conclues entre EMURGO S.A.R.L., Ltd ("Société") et toute personne ou entité ("L'Utilisateur") qui effectue le processus de téléchargement, d'utilisation ou d'exploitation du Logiciel connu sous le nom "Yoroi cryptocurrency Wallet", de service de traitement de données, d'application, de service de communication ou autre contenu offert ou fourni par le Logiciel de la Société ("Le Logiciel"). La Société et l'Utilisateur constituent "les Parties" de ce contrat. EN CLIQUANT SUR LE BOUTON D'ACCEPTATION OU EN ACCÉDANT À, EN UTILISANT OU EN INSTALLANT TOUTE PARTIE DU LOGICIEL, L'UTILISATEUR ACCEPTE EXPRESSÉMENT ET CONSENT À ÊTRE LÉGALEMENT RESPONSABLE DE TOUTES LES CONDITIONS DU PRÉSENT CONTRAT. SI L'UTILISATEUR N'ACCEPTE PAS TOUTES LES CONDITIONS DU PRÉSENT CONTRAT, IL N'EST PAS AUTORISÉ À ACCÉDER, UTILISER OU INSTALLER TOUTE PARTIE DU LOGICIEL. -## 1. Rights and Obligations +## 1. Droits et Obligations -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. Description.** Le Logiciel constitue un porte-monnaie numérique (wallet) gratuit et open source pour crypto-monnaies. Le Logiciel ne constitue pas un compte par lequel la Société ou tout autre tiers agit en tant qu'intermédiaire financier ou dépositaire des ADA de l'Utilisateur ou d'autres crypto-monnaies. Bien que le Logiciel ait passé les tests bêta et continue d'être amélioré grâce aux retours de ses développeurs, des contributeurs open source et des bêta-testeurs, la Société ne peut pas garantir l'absence de bugs dans le Logiciel. L'Utilisateur reconnaît et accepte que l'utilisation du Logiciel est à ses risques et périls, à sa discrétion et en conformité avec les lois applicables. L'Utilisateur est responsable de la conservation de ses mots de passes, codes NIP, clés privées, clés de remboursement, clés de distributeurs automatique protégées, phrases secrètes mnémonique de sauvegarde et de récupération, mots de passe ADA et de tous les autres codes que l'Utilisateur utilise pour accéder au Logiciel ou à d'autres informations, ADAs, bons et crypto-monnaies. SI L'UTILISATEUR PERD L'ACCÈS À SON WALLET OU À SES CLÉS PRIVÉES, ET N'A PAS SAUVEGARDÉ SÉPARÉMENT SON WALLET OU SES PHRASES SECRÈTES MNÉMONIQUE DE SAUVEGARDE ET DE RÉCUPÉRATION ET SES MOTS DE PASSE CORRESPONDANTS, L'UTILISATEUR RECONNAÎT ET ACCEPTE QUE TOUT ADA OU AUTRES CRYPTO-MONNAIES SAUVEGARDÉES DANS CE WALLET DEVIENDRA INACCESSIBLE. Toute demande de transaction est irrévocable. La Société et ses actionnaires, administrateurs, dirigeants, employés, sociétés affiliées, auxiliaires et agents ne peuvent garantir la confirmation des transactions ou récupérer les clés privées ou les mots de passe de l'Utilisateur si ce dernier les perd ou les oubli(e)s. -**b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. +**b. Accessibilité.** L'Utilisateur accepte que, de temps à autre, le Logiciel peut être inaccessible ou inutilisable pour toutes raisons, y compris, sans limitation: (i) les défaillances d'équipement; (ii) les procédures de maintenance que la Société doit ou peut effectuer de temps en temps; et (iii) tout événement qui survient indépendamment de la Société ou qui n'est pas raisonnablement prévisible pour la Société. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. Équipement.** L'Utilisateur est seul responsable de fournir, de maintenir et d'en assurer la compatibilité avec le Logiciel, le matériel informatique, les logiciels et les autres exigences électroniques ou physiques nécessaires pour utiliser le Logiciel, y compris, et sans limitation, les télécommunications, l'accès à internet ainsi que toute autre équipement, programmes et services nécessaires pour accéder et utiliser le Logiciel. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. Sécurité.** L'Utilisateur est seul responsable de la sécurité, la confidentialité et l'intégrité de toute information et contenu que l'Utilisateur reçoit, transmet ou stocke sur le Logiciel. L'Utilisateur est seul responsable de tout accès autorisé ou non autorisé à ses comptes par toute autre personne. L'Utilisateur accepte qu'il est seul responsable de la confidentialité de son équipement de sécurité, de ses informations, clés et mots de passe. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. Confidentialité.** La Société s'efforcera de respecter la confidentialité de l'Utilisateur dans la mesure du possible et où cela est raisonnablement faisable. La Société ne surveillera, ne modifiera et ne révèlera aucune information personnelle de l'Utilisateur ou de son compte d'Utilisateur, y compris son contenu et l'utilisation par l'Utilisateur du Logiciel, à moins que l'Utilisateur y ait consenti préalablement, avec exception dans les cas où la Société pense de bonne foi que ceci est nécessaire pour (i) se conformer à la loi ou à d'autres exigences légales de toute autorité gouvernementale; (ii) protéger et défendre les droits ou la propriété de la Société; (iii) appliquer ou faire respecter ce contrat; (iv) protéger les intérêts d'Utilisateurs du Logiciel autre que l'Utilisateur ou toute autre personne; (v) exploiter ou effectuer, en conformité avec la loi et les autorisations légales, des travaux de maintenance et la réparation de l'équipement de la Société, y compris le Logiciel. L'Utilisateur n'a aucune attente de confidentialité par rapport à Internet en général. L'adresse IP de l'Utilisateur est transmise et enregistrée avec chaque message ou autre information que l'Utilisateur envoie depuis le Logiciel. -## 2. Taxes and Fees +## 2. Taxes et frais -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +Tous les frais de conversion de monnaie, frais de tiers, frais de vente, d'utilisation, de valeur ajoutée, de propriété personnelle et toutes autres taxes, obligations et prélèvements de toute sorte, y compris les intérêts et les pénalités y afférents, imposés maintenant ou par la suite par toute entité gouvernementale, et tous frais encourus par l'Utilisateur de par son accès, son utilisation ou par l'installation du Logiciel relèvent de la seule responsabilité de l'Utilisateur. -## 3. User Representations +## 3. Déclarations de l'Utilisateur -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +L'Utilisateur confirme et garantit à la Société que: (a) si l'Utilisateur est une personne physique, qu'il est âgé de 18 (dix-huit) ans révolus; (b) l'Utilisateur a la capacité et la permission d'être partie à ce contrat et d'accomplir les obligations prévues dans ce contrat; (c) toute information fournie à la Société par l'Utilisateur est conforme à la vérité, exacte et complète; (d) l'Utilisateur se conformera à toute loi et réglementation de toute juridiction applicable concernant l'accès, l'utilisation et l'installation du Logiciel par l'Utilisateur; (e) l'Utilisateur se conformera aux conditions de ce contrat, y compris, mais sans se limiter aux dispositions prévus par l'article 4; et (f) l'Utilisateur a fourni et fournira les informations exactes et complètes requises pour l'accès, l'utilisation ou l'installation du Logiciel. -## 4. Prohibited Uses +## 4. Utilisation non autorisée -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +L'Utilisateur est seul responsable de toute action ou actes d'omissions qui sont fait sous son compte d'utilisation, ses informations de sécurité, ses clés ou mots de passe, et accepte de ne pas utiliser le Logiciel pour, y compris, et sans limitation: (a) diffuser, sauvegarder ou transmettre des messages non-sollicités, des chaînes de lettres ou d'emails commerciaux non-sollicités; (b) diffuser ou transférer du contenu qui, pour une personne raisonnable, pourrait être abusif, obscène, pornographique, diffamatoire, harcelant, gravement injurieux, vulgaire, menaçant ou malveillant; (c) diffuser, sauvegarder ou transférer des fichiers, images, Logiciels ou autres matériels qui violent ou qui pourraient violer le droit d'auteur, une marque, un brevet, le secret des affaires/industriel ou un autre droit de la propriété intellectuelle de toute autre personne; (d) créer une fausse identité ou tenter de tromper toute autre personne sur l'identité ou l'origine de toute communication; (e) exporter, réexporter ou permettre le téléchargement de tout message ou contenu en violation de toute loi, règlementation ou restriction d'exportation et d'importation de toute juridiction applicable, ou sans les autorisations, licences et dérogations requises; (f) interférer, troubler ou tenter d'avoir un accès non-autorisé sur d'autres comptes d'utilisation du Logiciel ou de tout autre réseau informatique; ou (g) diffuser, sauvegarder ou transmettre des virus, Chevaux de Troie ou tout autre code ou programme malveillant. -## 5. Termination +## 5. Résiliation -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +Ce contrat prend effet dès son acceptation par l'Utilisateur et sera valable aussi longtemps que l'Utilisateur accède, utilise ou installe le Logiciel. La Société se réserve le droit, à sa seule discrétion, sans avis préalable, en tout temps et pour toute raison, de: (a) supprimer ou désactiver l'accès à toute ou une partie du Logiciel; (b) suspendre l'accès par l'Utilisateur ou l'utilisation à toute ou une partie du Logiciel; et (c) résilier ce contrat. -## 6. Disclaimer of Warranties +## 6. Exclusion de garanties -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +LE LOGICIEL EST FOURNI "TEL QUEL", SANS GARANTIE DE TOUTE SORTE, EXPRESSE OU IMPLICITE. L'UTILISATION DU LOGICIEL SE FAIT AUX RISQUES ET PÉRILS DE L'UTILISATEUR. LA SOCIÉTÉ NE GARANTIE PAS QUE LE LOGICIEL SERA DISPONIBLE TOUT LE TEMPS OU SANS ERREURS, ET LA SOCIÉTÉ NE GARANTIE PAS L'OBTENTION DE RÉSULTATS PAR L'UTILISATION DE CE LOGICIEL. LA SOCIÉTÉ NE DONNE AUCUNE AUTRE GARANTIE, EXPRESSEMENT OU IMPLICITEMENT. LA SOCIÉTÉ EXCLUT EXPRESSEMENT TOUTE GARANTIE DE LA QUALITÉ MARCHANDE, TOUTE GARANTIE D'ADÉQUATION À UN USAGE DÉTERMINÉ, TOUTE GARANTIE DE TITRE OU D'INTÉRÊT ET TOUTE GARANTIE DE NON-CONTREFACON. -## 7. Limitation of Liability +## 7. Limitation de responsabilité -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +EN AUCUN CAS LA SOCIÉTÉ OU SES ACTIONNAIRES, ADMINISTRATEURS, DIRIGEANTS, EMPLOYÉS, SOCIÉTÉS AFFILIÉES, AUXILIAIRES ET AGENTS, OU TOUTES AUTRES PERSONNES LUI OU LEUR FOURNISSANT DES SERVICES, NE PEUVENT ÊTRE TENUS RESPONSABLE ENVERS L'UTILISATEUR OU UN TIERS DE TOUTE UTILISATION, INTERRUPTION, RETARD OU IMPOSSIBILITÉ D'UTILISATION DU LOGICIEL, DES REVENUS OU GAINS PERDUS, DES RETARDS, DES INTERRUPTIONS ET PERTES DE SERVICES, D'AFFAIRES OU CLIENTÈLE, DES PERTES OU CORRUPTION DE DONNÉES, DES PERTES RÉSULTANT DU SYSTÈME OU DE DÉFAILLANCES DU SYSTÈME, DU MAUVAIS FONCTIONNEMENT OU DU BLOCAGE DU LOGICIEL, DES ÉCHECS DE TRANSFERTS, DE LECTURE OU DE TRANSMISSION D'INFORMATIONS, DES ÉCHECS DE MISES À JOUR OU DE PRÉSENTATIONS D'INFORMATIONS CORRECTES, DE L'INCOMPATIBILITÉ DU SYSTÈME OU DE LA FOURNITURE D'INFORMATIONS COMPTABLES ERRONÉES OU DES FAILLES DE SÉCURITÉ DU SYSTÈME, OU POUR TOUT AUTRE DOMMAGE CONSÉCUTIF, ACCIDENTEL, INDIRECT, EXEMPLAIRE, SPÉCIAL OU PUNITIF, DÉCOULANT DE OU LIEU À CE CONTRAT, LA VIOLATION DE CE CONTRAT, LE DÉLIT (Y COMPRIS LA NÉGLIGENCE) OU AUTRE, PEU IMPORTE QUE LE DOMMAGE AIT ÉTÉ PRÉVISIBLE OU QUE NOUS ÉTIONS OU NON INFORMÉS DE LA POSSIBILITÉ D'UN TEL DOMMAGE. EN AUCUN CAS LA SOCIÉTÉ OU SES ACTIONNAIRES, ADMINISTRATEURS, DIRIGEANTS, EMPLOYÉS, SOCIÉTÉS AFFILIÉES, AUXILIAIRES ET AGENTS, OU TOUTE AUTRE PERSONNE LUI FOURNISSANT DES SERVICES, NE PEUVENT ÊTRE TENUS RESPONSABLES POUR TOUTE RÉCLAMATION, DOMMAGE OU AUTRE RESPONSABILITÉ, QUE CE SOIT DANS LE CADRE D'UNE ACTION EN RESPONSABILITÉ CONTRACTUELLE, DÉLICTUELLE, DÉCOULANT DE L'ACCÈS AU COMPTE D'UTILISATEUR, DE L'UTILISATION OU DE L'INSTALLATION DU LOGICIEL. CERTAINES JURIDICTIONS INTERDISENT L'EXCLUSION OU LA LIMITATION DE LA RESPONSABILITÉ POUR DOMMAGES ACCIDENTELS OU INDIRECTS, DE SORTE QUE CETTE LIMITATION DE RESPONSABILITÉ PEUT DONC NE PAS ÊTRE APPLICABLE À L'UTILISATEUR. SI L'UTILISATEUR N'EST PAS SATISFAIT DU LOGICIEL, IL EST DE SA SEULE RESPONSABILITÉ DE NE PLUS CONTINUER D'UTILISER LE LOGICIEL. -## 8. Indemnification +## 8. Indemnisation -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +L'Utilisateur s'engage à indemniser, de dégager de toute responsabilité et de défendre la Société, ses actionnaires, administrateurs, dirigeants, employés, Sociétés affiliées, auxiliaires et agents ("les Parties indemnisées") contre toute action, cause, réclamation, dommage, dette, demande ou responsabilité, y compris les frais liés et les honoraires d'avocats, qui sont introduits ou invoqués par toute personne, découlant de ou relatifs à: (a) ce contrat; (b) l'accès, l'utilisation et l'installation du Logiciel par l'Utilisateur, y compris toute donnée ou travail transmis ou reçu par l'Utilisateur, et (c) toute utilisation inacceptable du Logiciel par toute personne, y compris, sans limitation, toute déclaration, toute donnée et tout contenu créé, transmis ou republié, interdite en vertu de l'article 4, par l'Utilisateur ou toute personne. CET INDEMNISATION COMPREND EXPRESSEMENT L'INDEMNISATION DE LA SOCIÉTÉ ET DES PARTIES INDEMNISÉES POUR TOUTE NÉGLIGENCE (Y COMPRIS TOUTE NÉGLIGENCE GRAVE PRÉSUMÉE) ET TOUT MANQUEMENT PRÉSUMÉ DE LA SOCIÉTÉ OU DE TOUTE PARTIE INDEMNISÉE. -## 9. Intellectual Property +## 9. Propriété intellectuelle -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +La Société conserve tous les droits, titres et intérêts relatifs à toutes les marques, logos, marques déposées de la Société, y compris, mais sans s'y limiter, EMURGO Co., Ltd., EMURGO, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi APP, et toute variation de ces marques, logos et marques déposées mentionnées ci-dessus. -## 10. Warnings +## 10. Avertissements -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +L'Utilisateur reconnaît que la Société n'est pas responsable du transfert, de la sauvegarde et de la conservation des clés privées et/ou des ADAs et autres crypto-monnaies de l'Utilisateur. Si l'Utilisateur ou/et les autorités co-signataires perdent, gèrent mal ou se font voler des clés privées, ou si les co-signataires refusent de fournir l'autorisation requise, l'Utilisateur reconnaît qu'il ne sera pas en mesure de récupérer ses ADAs ou autres crypto-monnaies, et que la Société n'est pas responsable de ces pertes. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +L'Utilisateur reconnaît et accepte que les transactions d'ADA ou d'autres crypto-monnaies faites par le Logiciel et/ou la compagnie risquent d'être retardées, et que la Société n'est pas responsable pour les pertes relatives à ces retards. L'Utilisateur reconnaît et accepte que la Société n'est pas responsable de toute information, contenu ou service proposé par des Logiciels tiers et sur les sites de tiers accessibles par ou liés au Logiciel et/ou à la Société. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. +En utilisant le Logiciel, l'Utilisateur reconnaît et accepte: (i) que la Société n'est pas responsable du fonctionnement et des opérations des protocoles sous-jacents et que la Société ne donne aucune garantie quant à leurs fonctionnalités, sécurité ou disponibilité; et (ii) que les protocoles sous-jacents sont soumis à des changements soudains dans leurs règles d'exploitation ("Forks"), et qu'un Fork peut affecter sensiblement la valeur ou/et la fonction de l'ADA et des autres crypto-monnaies que l'Utilisateur sauvegarde dans le Logiciel. En cas de Fork, l'Utilisateur accepte que la Société puisse temporairement suspendre les opérations du Logiciel (avec ou sans avis à l'Utilisateur) et que la Société puisse, à sa seule discrétion, (a) configurer ou reconfigurer son système ou (b) décider de ne pas supporter (ou cesser de supporter) le protocole de la Fork, à condition que l'Utilisateur ait la possibilité de retirer ses fonds du Logiciel. L'Utilisateur reconnaît et accepte que la Société n'assume absolument aucune responsabilité de quelconque nature, que ce soit à l'égard d'une branche non supportée suite à un Fork du protocole. -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +## 11. Divers -## 11. Miscellaneous +**a. Modifications.** La Société a le droit, à tout temps et sans préavis, d'ajouter ou de modifier les dispositions de ce contrat, en transmettant simplement les dispositions modifiées à l'Utilisateur par message électronique à toute adresse fournie à la Société par l'Utilisateur. L'accès et l'utilisation du Logiciel par l'Utilisateur après la notification d'un changement de conditions est considéré comme une acceptation des conditions modifiées. -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**b. Indemnité de départ.** Si une disposition ou une disposition partielle de la présente convention est ou devient invalide, illégale ou inexécutable, elle sera considérée comme modifiée dans la mesure minimale nécessaire pour la rendre valide, légale et exécutoire. Si une telle modification n'est pas possible, la disposition ou la partie de la disposition concernée est considérée supprimée. Toute modification ou suppression d'une disposition ou d'une disposition partielle en vertu du présent article n'affecte pas la validité et le caractère exécutoire du reste de ce contrat. -**b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. +**c. Intégralité de l'entente - Avis de non-responsabilité.**. La présente entente constitue l'entente intégrale entre les parties à l'égard de l'objet mentionné et remplace tous les accords ou ententes antérieures entre les parties. L'Utilisateur déclare et garantit expressément qu'il ne se fie pas à des déclarations, ententes, représentations, attentes ou ententes autres que celles expressément énoncées dans ce contrat. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**d. LE PRÉSENT CONTRAT EST ASSUJETTI À L'ARBITRAGE EXÉCUTOIRE.** L'Utilisateur accepte que tout litige ou réclamation contre toute personne découlant du présent Contrat, de quelque manière, que ce soit en relation avec celui-ci ou avec l'accès, l'utilisation ou l'installation du Logiciel par l'Utilisateur ou toute autre personne sera soumis à l'arbitrage obligatoire en vertu du Règlement d'arbitrage de la Chambre de commerce internationale par un ou plusieurs arbitres nommés conformément aux dites règles. Le lieu de l'arbitrage sera le Japon. La langue de l'arbitrage sera l'anglais. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. +**e. LANGUE.** Toute traduction du présent Contrat est faite à des fins de référence locale uniquement, et en cas d'incohérence entre les versions anglaise et non anglaise, la version anglaise du présent Contrat prévaudra à tous égards. -**e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. +## 12. Délégation et Staking -## 12. Delegation and Staking +12.1 **Récompenses.** Le montant des récompenses qu'un utilisateur peut obtenir par délégation dépend de divers facteurs, notamment, mais pas exclusivement, de la participation de l'utilisateur, des marges bénéficiaires du groupe d'enjeu et du volume d'ada délégué. Il est possible que la délégation ne génère aucune récompense pour un utilisateur en raison des facteurs mentionnés ci-dessus. Les récompenses sont gagnées à partir du début de la troisième époque sur la blockchain Cardano. -12.1 **Rewards.** The amount of Rewards a User may earn from delegation depends on various factors including, but not limited to, user participation, stakepool profit margins and the volume of ada being delegated. It is possible that delegation generates no Reward for a User due to the above-mentioned factors. Rewards are earned as of the start of the 3rd epoch on the Cardano blockchain. +12.2 **Délégation.** Les utilisateurs peuvent déléguer leur participation à l'un des différents groupes d'enjeu de la société ou à un groupe d'enjeu tiers. L'utilisateur aura le droit exclusif de déterminer le volume à déléguer à un groupe d'enjeu et pourra augmenter ou diminuer son niveau de participation à tout moment. Toute information communiquée par la société concernant les groupes d'enjeu, y compris les mesures de performance et les récompenses, ne sera donnée qu'à titre indicatif et peut ne pas être exacte. Les utilisateurs ne peuvent déléguer que si leur ada se trouve dans un wallet Daedalus mis à jour ou un wallet Yoroi mis à jour au moment de la configuration. L'utilisateur n'acquiert aucun droit automatique aux récompenses suite à la délégation de sa mise. -12.2 **Delegation.** Users may delegate their stake to one of the various stake pools of the Company or to a third party stake pool. User will have the sole right to determine the volume to be delegated to a stake pool and may increase or decrease its level of participation at any time. Any information Company shares regarding stakepools, including performance metrics and Rewards, will be for indicative purposes only and may not be accurate. Users may only delegate their stake to a stake pool if their ada is in an updated Daedalus or an updated Yoroi wallet at the time of the setup process. User does not acquire any automatic right to Rewards as a result of delegating its stake. +12.3 **Groupes d'enjeu de la compagnie.** La compagnie opèrera plusieurs groupes d'enjeu qui seront visibles sur Yoroi. Le coût, le réseau et l'équipement nécessaires pour pouvoir opérer de façon pérenne ces groupes d'enjeu seront déterminés à la seule discrétion de la compagnie. La compagnie communiquera la quantité de pourcentage qui sera partagé avec les utilisateurs dans le porte feuille Yoroi. Les gains se cumuleront à la fin de chaque époque et apparaitront automatiquement dans votre portefeuille Yoroi. -12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. - -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 ** Remboursement des Récompenses.** L'Utilisateur est responsable du paiement de toutes les taxes applicables, le cas échéant, auxquelles les Récompenses peuvent être soumises et de toutes les autres taxes qui peuvent s'appliquer à l'Utilisateur une fois que les Récompenses sont remboursées. From e40e0f3bd4843a32956469c8dc5870816ad46395 Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:06 +0100 Subject: [PATCH 355/464] New translations en-us.md (Spanish) --- .../i18n/locales/terms-of-use/ada/es-ES.md | 110 +++++++----------- 1 file changed, 39 insertions(+), 71 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/es-ES.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/es-ES.md index 62a96a1ef3..0fe3fb7e6e 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/es-ES.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/es-ES.md @@ -1,109 +1,77 @@ -# Terms of Service Agreement +# Acuerdo de Términos de Servicio -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +ESTE ACUERDO DE TÉRMINOS DE SERVICIO ("Acuerdo") se realiza entre EMURGO Co. ("Empresa") y cualquier persona o entidad ("Usuario") que complete el proceso para descargar, utilizar u operar el software conocido como la aplicación de la Billetera de criptomoneda Yoroi, y el servicio de procesamiento de datos, aplicación, servicio de comunicación u otro contenido u ofrecido o suministrado con el software por la Empresa ("Software"). La Compañía y el Usuario se denominan colectivamente las "Partes"; AL HACER CLIC EN EL BOTÓN DE ACEPTACIÓN O AL ACCEDER, USAR O INSTALAR CUALQUIER PARTE DEL SOFTWARE, EL USUARIO ACEPTA Y CONSIENTE EXPRESAMENTE ESTAR LEGALMENTE OBLIGADO POR TODOS LOS TÉRMINOS DE ESTE ACUERDO. SI EL USUARIO NO ESTÁ DE ACUERDO CON TODOS LOS TÉRMINOS DE ESTE ACUERDO, NO ESTARÁ AUTORIZADO A ACCEDER, USAR O INSTALAR NINGUNA PARTE DEL SOFTWARE. -## 1. Rights and Obligations +## 1. Derechos y obligaciones -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. Descripción.** El Software funciona como una billetera digital de criptomoneda de código abierto y libre. El Software no constituye una cuenta por la cual la Compañía o cualquier otro tercero sirva como intermediarios financieros o custodios de la ADA del Usuario' o de cualquier otra divisa de criptomoneda. Aunque el Software ha sido sometido a pruebas beta y continúa siendo mejorado gracias a la retroalimentación de la comunidad de desarrolladores, de los colaboradores de código abierto y de los beta-testers, la Compañía no puede garantizar que no habrá errores en el Software. El Usuario' reconoce que el uso del del Software es por cuenta y riesgo del Usuario', a su discreción y en cumplimiento de todas las leyes aplicables. El usuario es responsable de custodiar las contraseñas de Usuario', PINs, claves privadas, claves de redención, claves de venta protegidas, frases mnemotécnicas de recuperación de copias de seguridad, contraseñas ADA y cualquier otro código que el usuario utilice para acceder al Software o a cualquier información, ADA, cupón u otra unidad de criptomoneda. SI EL USUARIO PIERDE EL ACCESO A LA BILLETERA DE CRIPTOMONEDA DEL USUARIO' O CLAVES PRIVADAS Y NO HA ALMACENADO POR SEPARADO UNA COPIA DE SEGURIDAD DE LA BILLETERA DE CRIPTOMONEDA DEL USUARIO' O UNA FRASE MNEMOTÉCNICA DE RECUPERACIÓN DE COPIA DE SEGURIDAD Y LA CONTRASEÑA O CONTRASEÑAS CORRESPONDIENTES, EL USUARIO RECONOCE Y ACEPTA QUE CUALQUIER ADA O CUALQUIER OTRO USUARIO DE CRIPTOMONEDAS ASOCIADO CON ESA BILLETERA DE CRIPTOMONEDA SERÁ INACCESIBLE. Todas las solicitudes de transacciones son irreversibles. La Compañía y sus accionistas, directores, funcionarios, empleados, afiliados y agentes no pueden garantizar la confirmación de la transacción o recuperar las claves o contraseñas privadas del Usuario' si el Usuario las pierde u olvida. -**b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. +**b. Accesibilidad.** El Usuario acepta que de vez en cuando el Software puede ser inaccesible o inoperable por cualquier razón, incluyendo, sin limitación: (i) mal funcionamiento de los equipos; (ii) procedimientos de mantenimiento periódico o reparaciones que la Compañía pueda llevar a cabo de vez en cuando; o (iii) causas fuera del control de la Compañía o que no sean razonablemente previsibles por la Compañía. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. Equipamiento.** El Usuario será el único responsable de proporcionar, mantener y asegurar la compatibilidad con el Software, todo el hardware, software, requerimientos eléctricos y otros requisitos físicos para el uso del Software por parte del Usuario', incluyendo, sin limitación, conexiones y enlaces de telecomunicaciones y acceso a Internet, navegadores web u otros equipos, programas y servicios necesarios para acceder y usar el Software. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. Seguridad.** El Usuario será el único responsable de la seguridad, confidencialidad e integridad de toda la información y contenido que reciba, transmita o almacene en el Software. El Usuario será el único responsable de cualquier acceso autorizado o no autorizado a cualquier cuenta del Usuario por cualquier persona. El usuario se compromete a asumir toda la responsabilidad de la confidencialidad de los dispositivos de seguridad del Usuario', información, claves y contraseñas. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. Privacidad.** Cuando sea razonablemente posible, la Compañía intentará respetar la privacidad del Usuario'. La Empresa no supervisará, editará ni divulgará ninguna información personal sobre el Usuario o la cuenta del Usuario', incluyendo su contenido o el uso que el Usuario' haga del Software, sin el consentimiento previo del Usuario' a menos que la Empresa crea de buena fe que dicha acción es necesaria para ello: (i) cumplir con el proceso legal u otros requisitos legales de cualquier autoridad gubernamental; (ii) proteger y defender los derechos o propiedad de la Compañía; (iii) hacer cumplir este Acuerdo; (iv) proteger los intereses de los usuarios del Software que no sean el Usuario o cualquier otra persona; o (v) operar o realizar el mantenimiento y la reparación de los servicios o equipos de la Compañía', incluyendo el Software según lo autorizado por la ley. El usuario no tiene expectativas de privacidad con respecto a Internet en general. La dirección IP del Usuario' se transmite y registra con cada mensaje u otra información que el usuario envía desde el software. -## 2. Taxes and Fees +## 2. Impuestos y tasas -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +Todos los cargos por conversión de divisas, tasas de terceros, ventas, uso, valor añadido, propiedad personal u otros impuestos, tasas o gravámenes de cualquier tipo, incluidos los intereses y penalizaciones sobre los mismos, ya sean impuestos ahora o en el futuro por cualquier entidad gubernamental, y las tasas en las que incurra el Usuario a causa del acceso del Usuario', uso o instalación del Software, serán responsabilidad exclusiva del Usuario. -## 3. User Representations +## 3. Representaciones de los usuarios -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +El usuario declara y garantiza a la Compañía que: (a) si el usuario es una persona física, el usuario es mayor de dieciocho (18) años; (b) el Usuario tiene el poder y la autoridad para entrar y cumplir con las obligaciones del Usuario' en virtud del presente Acuerdo; (c) toda la información proporcionada por el usuario a la empresa es veraz, precisa y completa; (d) el usuario cumplirá con todas las leyes y reglamentos de cualquier jurisdicción aplicable en relación con el Usuario '(e) El Usuario deberá cumplir con todos los términos y condiciones de este Acuerdo, incluyendo, sin limitación, las disposiciones establecidas en la Sección 4; y (f) El Usuario ha proporcionado y proporcionará información precisa y completa según se requiera para el acceso, uso o instalación del Software. -## 4. Prohibited Uses +## 4. Usos prohibidos -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +El Usuario es el único responsable de todos y cada uno de los actos y omisiones que se produzcan en virtud de la cuenta del Usuario', la información de seguridad, claves o contraseña, y el Usuario se compromete a no participar en el uso inaceptable del Software, lo que incluye, sin limitación, el uso del Software para: (a) diseminar, almacenar o transmitir mensajes no solicitados, cartas en cadena o correo electrónico comercial no solicitado; (b) diseminar o transmitir material que, para una persona razonable, pueda ser abusivo, obsceno, pornográfico, difamatorio, acosador, groseramente ofensivo, vulgar, amenazante o malicioso; (c) diseminar, almacenar o transmitir archivos, gráficos, software u otro material que infrinja o pueda infringir los derechos de autor, marcas comerciales, patentes, secretos comerciales u otros derechos de propiedad intelectual de cualquier persona; (d) crear una identidad falsa o intentar engañar a cualquier persona sobre la identidad u origen de cualquier comunicación; (e) exportar, reexportar o permitir la descarga de cualquier mensaje o contenido en violación de cualquier ley de exportación o importación, regulación o restricción de cualquier jurisdicción aplicable, o sin todas las aprobaciones, licencias o exenciones requeridas; (f) interferir, interrumpir o intentar obtener acceso no autorizado a otras cuentas en el Software o en cualquier otra red de ordenadores; o (g) diseminar, almacenar o transmitir virus, caballos de Troya o cualquier otro código o programa malicioso. -## 5. Termination +## 5. Terminación -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +Este Acuerdo es efectivo a partir de la aceptación del Usuario' como se establece en el mismo y continuará en pleno vigor siempre y cuando el Usuario participe en cualquier acceso, uso o instalación del Software. La Compañía se reserva el derecho, a su sola discreción y sin previo aviso, en cualquier momento y por cualquier razón, a: (a) eliminar o desactivar el acceso a la totalidad o parte del Software; (b) suspender el acceso del Usuario' a o el uso de la totalidad o parte del Software; y (c) rescindir el presente Acuerdo. -## 6. Disclaimer of Warranties +## 6. Descargo de responsabilidad de las garantías -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +EL SOFTWARE ES PROPORCIONADO "COMO ES", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA. EL USO DEL SOFTWARE ES A RIESGO DEL USUARIO'. LA COMPAÑÍA NO GARANTIZA QUE EL SOFTWARE SEA ININTERRUMPIDO O ESTÉ LIBRE DE ERRORES, NI GARANTIZA LOS RESULTADOS QUE PUEDAN OBTENERSE POR EL USO DEL SOFTWARE. LA COMPAÑÍA NO OFRECE NINGUNA OTRA GARANTÍA, EXPRESA O IMPLÍCITA. LA COMPAÑÍA RENUNCIA EXPRESAMENTE A CUALQUIER GARANTÍA DE COMERCIABILIDAD, GARANTÍA DE IDONEIDAD PARA UN PROPÓSITO PARTICULAR, GARANTÍA DE TÍTULO O INTERÉS, O GARANTÍA DE NO INFRACCIÓN. -## 7. Limitation of Liability +## 7. Límites de responsabilidad -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +EN NINGÚN CASO LA COMPAÑÍA O SUS ACCIONISTAS, DIRECTORES, FUNCIONARIOS, EMPLEADOS, AFILIADOS O AGENTES, O CUALQUIERA DE SUS RESPECTIVOS PROVEEDORES DE SERVICIOS, SERÁN RESPONSABLES ANTE EL USUARIO O CUALQUIER TERCERO POR CUALQUIER USO, INTERRUPCIÓN, DEMORA O IMPOSIBILIDAD DE USAR EL SOFTWARE, PÉRDIDA DE INGRESOS O GANANCIAS, DEMORAS, INTERRUPCIÓN O PÉRDIDA DE SERVICIOS, NEGOCIO O BUENA VOLUNTAD, PÉRDIDA O CORRUPCIÓN DE DATOS, PÉRDIDA RESULTANTE DE FALLAS EN EL SISTEMA O EN LOS SERVICIOS DEL SISTEMA, MAL FUNCIONAMIENTO O CIERRE, O FALTA DE TRANSFERENCIA PRECISA, LEER O TRANSMITIR INFORMACIÓN, NO ACTUALIZAR O PROPORCIONAR INFORMACIÓN CORRECTA, INCOMPATIBILIDAD DEL SISTEMA O SUMINISTRO DE INFORMACIÓN DE COMPATIBILIDAD INCORRECTA O INFRACCIONES EN LA SEGURIDAD DEL SISTEMA, O POR CUALQUIER DAÑO CONSECUENTE, INCIDENTAL, INDIRECTO, EJEMPLAR, ESPECIAL O PUNITIVO, YA SEA QUE SURJA DE O EN RELACIÓN CON ESTE ACUERDO, INCUMPLIMIENTO DE CONTRATO, AGRAVIO (INCLUIDA LA NEGLIGENCIA) O DE OTRO TIPO, INDEPENDIENTEMENTE DE SI DICHOS DAÑOS ERAN PREVISIBLES Y DE SI SE NOS ADVIRTIÓ DE LA POSIBILIDAD DE QUE SE PRODUJERAN TALES DAÑOS O NO. EN NINGÚN CASO LA EMPRESA O SUS ACCIONISTAS, DIRECTORES, FUNCIONARIOS, EMPLEADOS, AFILIADOS O AGENTES, O CUALQUIERA DE SUS RESPECTIVOS PROVEEDORES DE SERVICIOS, SERÁN RESPONSABLES DE CUALQUIER RECLAMO, DAÑO U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN CONTRACTUAL, EXTRACONTRACTUAL O DE OTRO TIPO, QUE SURJA DE O ESTÉ RELACIONADA DE ALGUNA MANERA CON EL ACCESO, USO O INSTALACIÓN DEL SOFTWARE POR PARTE DEL USUARIO'. ALGUNAS JURISDICCIONES PROHÍBEN LA EXCLUSIÓN O LIMITACIÓN DE DAÑOS INCIDENTALES O CONSECUENTES, POR LO QUE ESTA LIMITACIÓN DE RESPONSABILIDAD PUEDE NO APLICARSE AL USUARIO. SI EL USUARIO NO ESTÁ SATISFECHO CON EL SOFTWARE, LA ÚNICA Y EXCLUSIVA SOLUCIÓN PARA EL USUARIO' SERÁ DEJAR DE UTILIZAR EL SOFTWARE. -## 8. Indemnification +## 8. Indemnización -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +El usuario acepta indemnizar, eximir de responsabilidad y defender a la Compañía, sus accionistas, directores, funcionarios, empleados, afiliados y agentes ("Partes Indemnizadas") de y contra cualquier acción, causa, reclamación, daño, deuda, demanda o responsabilidad, incluidos los costos razonables y honorarios de abogados', alegados por cualquier persona, que surjan de o en relación con: (a) este Acuerdo; (b) el acceso del Usuario', el uso o la instalación del Software, incluyendo cualquier dato o trabajo transmitido o recibido por el usuario; y (c) cualquier uso inaceptable del Software por cualquier persona, incluyendo, sin limitación, cualquier declaración, datos o contenido hecho, transmitido o publicado de nuevo por el usuario o cualquier persona que está prohibido como inaceptable bajo la Sección 4. ESTA INDEMNIZACIÓN INCLUYE LA INDEMNIZACIÓN EXPRESA DE LA COMPAÑÍA Y DE TODAS LAS PARTES INDEMNIZADAS POR CUALQUIER SUPUESTA NEGLIGENCIA (INCLUYENDO CUALQUIER SUPUESTA NEGLIGENCIA GRAVE). U OTRA SUPUESTA MALA CONDUCTA DE LA COMPAÑÍA O DE CUALQUIER PARTE INDEMNIZADA. -## 9. Intellectual Property +## 9. Propiedad Intelectual -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +La Compañía retiene todos los derechos, títulos e intereses en y para todas las marcas, logotipos y marcas comerciales de la Compañía', incluyendo, pero no limitado a, EMURGO Co., Ltd., EMURGO, Yoroi, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, y las variaciones de la redacción de las marcas, logotipos y marcas comerciales antes mencionadas. -## 10. Warnings +## 10. Advertencias -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +El usuario reconoce que la Compañía no será responsable de la transferencia, la salvaguardia o el mantenimiento de las claves privadas y / o Usuario' de ADA o cualquier otra criptomoneda. Si el usuario y / o cualquier autoridad co-firmante pierden, maltratan o han robado las claves privadas asociadas, o si los cosignatarios del Usuario' se niegan a proporcionar la autoridad necesaria, el usuario reconoce que el usuario no puede ser capaz de recuperar los ADA de Usuario' o cualquier otra criptomoneda, y que la empresa no será responsable de dicha pérdida. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +El Usuario reconoce y acepta que los ADA o cualquier otra transacción en criptomoneda facilitada por el Software y/o la Empresa puede retrasarse, y que la Empresa no será responsable de ninguna pérdida asociada. El Usuario reconoce y acepta que la Empresa no será responsable de ningún aspecto de la información, contenido o servicios contenidos en materiales de terceros o en sitios de terceros accesibles o vinculados al Software y/o a la Empresa. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. +Al utilizar el Software, el Usuario reconoce y acepta: (i) que la Empresa no es responsable de la operación de los protocolos subyacentes y que la Empresa no garantiza su funcionalidad, seguridad o disponibilidad; y (ii) que los protocolos subyacentes están sujetos a cambios repentinos en las reglas de operación de la cadena principal ("bifurcación"), y que dichas bifurcaciones pueden afectar materialmente el valor y/o función de la ADA o de cualquier otra criptomoneda que el Usuario almacene en el Software. En el caso de una bifurcación, el Usuario acepta que la Empresa puede suspender temporalmente las operaciones del Software (con o sin previo aviso al Usuario) y que la Empresa puede, a su sola discreción, (a) configurar o reconfigurar sus sistemas o (b) decidir no apoyar (o dejar de apoyar) el protocolo bifurcado por completo, siempre y cuando, sin embargo, el Usuario tenga la oportunidad de retirar fondos del Software. El usuario reconoce y acepta que la Compañía no asume responsabilidad alguna con respecto a una rama no soportada de un protocolo bifurcado. -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +## 11. Misceláneo -## 11. Miscellaneous +**a. Enmienda.** La Compañía tendrá el derecho, en cualquier momento y sin previo aviso, de añadir o modificar los términos de este Acuerdo, simplemente entregando dichos términos modificados al Usuario por mensaje electrónico, a través de cualquier medio, y a cualquier dirección proporcionada por el Usuario a la Compañía. El acceso al Software por parte del Usuario, o el uso del mismo, luego de la fecha en que se le entreguen dichos términos modificados, se considerará que constituye la aceptación de dichos términos modificados. -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**Cesantía**. Si alguna disposición de este Acuerdo, o parte de ella, es o se vuelve inválida, ilegal o inaplicable, se considerará modificada en la medida mínima necesaria para hacerla válida, legal y aplicable. Si dicha modificación no es posible, la disposición o parte de la disposición pertinente se considerará eliminada. Cualquier modificación o supresión de una disposición, o de una parte de ella, en virtud del presente artículo no afectará a la validez y la aplicabilidad del resto del presente Acuerdo. -**b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. +**c. Acuerdo Completo - Descargo de responsabilidad **. Este Acuerdo constituye el acuerdo completo entre las Partes con respecto al asunto aquí tratado, y reemplaza todos los acuerdos o entendimientos previos entre las Partes. El Usuario declara y garantiza expresamente que no se basa en ninguna declaración, entendimiento, representación, expectativa o acuerdo que no sea el que se establece expresamente en este Acuerdo. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**d. ESTE CONTRATO ESTÁ SUJETO A UN ARBITRAJE VINCULANTE.** El Usuario acepta que todas y cada una de las disputas o reclamaciones contra cualquier persona que surjan de, o estén relacionadas de alguna manera con, este Acuerdo o con el acceso, uso o instalación del Software por parte del Usuario, o de cualquier otra persona, estarán sujetas a un arbitraje vinculante según el Reglamento de Arbitraje de la Cámara de Comercio Internacional por parte de uno o más árbitros nombrados de acuerdo con dicho Reglamento. El lugar del arbitraje será Japón. El idioma del arbitraje será el inglés. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. +**e. IDIOMA.** Cualquier traducción de este Acuerdo se hace con el propósito de referencia a nivel local solamente, y en caso de cualquier inconsistencia entre las versiones en inglés y las que no lo son, la versión en inglés de este Acuerdo prevalecerá y regirá en todos los aspectos. -**e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. +## 12. Delegación y Staking -## 12. Delegation and Staking +12.1 **Recompensas.** El monto de las Recompensas que un Usuario puede obtener por delegación depende de varios factores, entre ellos, pero no limitados a, la participación del usuario, los márgenes de ganancia de los stake pools, y el volumen de ADA que se delega. Es posible que la delegación no genere ninguna Recompensa para un Usuario debido a los factores mencionados. Las recompensas se obtienen a partir del comienzo del 3ª epoch en la blockchain de Cardano. -12.1 **Rewards.** The amount of Rewards a User may earn from delegation depends on various factors including, but not limited to, user participation, stakepool profit margins and the volume of ada being delegated. It is possible that delegation generates no Reward for a User due to the above-mentioned factors. Rewards are earned as of the start of the 3rd epoch on the Cardano blockchain. +12.2 **Delegación.** Los Usuarios pueden delegar su participación en uno de los distintos stake pools de la Empresa, o en un stake pool de terceros. El Usuario tendrá el derecho exclusivo de determinar el monto a delegar en un stake pool, y podrá aumentar o disminuir su nivel de participación en cualquier momento. Toda la información sobre las participaciones de la Empresa en relación con los stake pools, incluidas las métricas de rendimiento y las Recompensas, tendrá un carácter meramente indicativo, y es posible que no sea exacta. Los Usuarios sólo podrán delegar su participación en un stake pool si sus ADA está en Daedalus actualizado, o en la billetera Yoroi actualizada, al momento del proceso de configuración. El usuario no adquiere ningún derecho automático a las Recompensas como resultado de la delegación de su participación. -12.2 **Delegation.** Users may delegate their stake to one of the various stake pools of the Company or to a third party stake pool. User will have the sole right to determine the volume to be delegated to a stake pool and may increase or decrease its level of participation at any time. Any information Company shares regarding stakepools, including performance metrics and Rewards, will be for indicative purposes only and may not be accurate. Users may only delegate their stake to a stake pool if their ada is in an updated Daedalus or an updated Yoroi wallet at the time of the setup process. User does not acquire any automatic right to Rewards as a result of delegating its stake. +12.3 **Stake-Pools de la Empresa. ** La Empresa operará varios stake pools que serán visibles en Yoroi. El coste y los requisitos de red y de servidor para operar de forma fiable estos stake pools serán determinados por la Empresa a su entera discreción. La Empresa comunicará el porcentaje de la recompensa que se compartirá con los usuarios a través de la billetera Yoroi del Usuario. Las Recompensas se acumularán al final de cada epoch, y aparecerán automáticamente en la billetera Yoroi del Usuario. -12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. - -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 **Redimición de Recompensas.** El Usuario será responsable del pago de todos los impuestos aplicables, si los hubiera, a los que las Recompensas puedan estar sujetas, y de todos y cada uno de los demás impuestos que puedan aplicarse al Usuario una vez que las Recompensas sean redimidas. From a4ba4378626fbb5ba36d2be0529056c19591a573 Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:08 +0100 Subject: [PATCH 356/464] New translations en-us.md (Czech) --- .../i18n/locales/terms-of-use/ada/cs-CZ.md | 72 ++++++------------- 1 file changed, 20 insertions(+), 52 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/cs-CZ.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/cs-CZ.md index 62a96a1ef3..617f0e1f22 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/cs-CZ.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/cs-CZ.md @@ -1,102 +1,70 @@ # Terms of Service Agreement -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Co., Ltd. ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties." BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. ## 1. Rights and Obligations -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. **b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. ## 2. Taxes and Fees -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. ## 3. User Representations -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. ## 4. Prohibited Uses -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. ## 5. Termination -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. ## 6. Disclaimer of Warranties -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. ## 7. Limitation of Liability -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. ## 8. Indemnification -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. ## 9. Intellectual Property -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to, EMURGO Co., Ltd., EMURGO, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. ## 10. Warnings -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. - -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. ## 11. Miscellaneous -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. **b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**c. Entire Agreement – Disclaimer of Reliance**. This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. +**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. **e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. ## 12. Delegation and Staking @@ -106,4 +74,4 @@ If you have any questions or concerns regarding the accuracy or reliability of t 12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. From 44415e15e86c0470c1324433c73f2e2b0e731718 Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:09 +0100 Subject: [PATCH 357/464] New translations en-us.md (de-DE) --- .../i18n/locales/terms-of-use/ada/de-DE.md | 110 +++++++----------- 1 file changed, 39 insertions(+), 71 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/de-DE.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/de-DE.md index 62a96a1ef3..7c87dedc16 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/de-DE.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/de-DE.md @@ -1,109 +1,77 @@ -# Terms of Service Agreement +# Allgemeine Nutzungsbedingungen -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +DIESE ALLGEMEINEN NUTZUNGSBEDINGUNGEN ("Vereinbarung") gelten zwischen EMURGO Co., Ltd. ("Unternehmen") und jeder natürlichen oder juristischen Person ("Benutzer") die den Prozess zum Herunterladen, Verwenden oder Betreiben in Bezug auf die als Yoroi Kryptowährungs-Wallet-Applikation bekannte Software den Datenverarbeitungsdienst, die Anwendung, den Kommunikationsdienst oder anderer Inhalte oder die vom Unternehmen angebotenen oder mit der vom Unternehmen bereitgestellten Software abschliesst ("Software"). Das Unternehmen und der Benutzer werden gemeinsam als "Parteien." bezeichnet. DURCH ANKLICKEN DER ANNAHMETASTE ODER DURCH AKTIVIERUNG, NUTZUNG ODER INSTALLATION JEGLICHER TEILE DER SOFTWARE STIMMT DER BENUTZER AUSDRÜCKLICH ZU UND ERKLÄRT SICH DAMIT EINVERSTANDEN, AN ALLE BEDINGUNGEN DIESER VEREINBARUNG RECHTLICH GEBUNDEN ZU SEIN. WENN DER BENUTZER NICHT ALLEN BEDINGUNGEN DIESER VEREINBARUNG ZUSTIMMT, IST DER BENUTZER NICHT BERECHTIGT, AUF IRGENDEINEN TEIL DER SOFTWARE ZUZUGREIFEN, SIE ZU VERWENDEN ODER ZU INSTALLIEREN. -## 1. Rights and Obligations +## 1. Rechte und Pflichten -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. Beschreibung.** Die Software fungiert als kostenloses, Open-Source, digitaler Kryptowährungs-Wallet. Die Software stellt kein Konto dar, auf dem das Unternehmen oder andere Dritte als Finanzintermediäre oder Verwahrer der ADA des Benutzers oder einer anderen Kryptowährung fungieren. Obwohl die Software Beta-Tests durchlaufen hat und fortlaufend durch Feedback von der Entwicklergemeinschaft, Open-Source-Mitarbeitern und Beta-Testern verbessert wird, kann das Unternehmen keine Garantie für eine fehlerfreie Software abgeben. Der Benutzer anerkennt, dass die Nutzung der Software auf eigene Gefahr, Diskretion und in Übereinstimmung mit allen geltenden Gesetzen erfolgt. Der Benutzer ist dafür verantwortlich die Passwörter, PINs, Private Keys, Redemption Keys, Shielded Vending Keys, mnemonische Passphrasen für die Wiederherstellung von Backups, ADA-Passwörtern und alle anderen Codes aufzubewahren, die der Benutzer für den Zugriff auf die Software oder sonstige Informationen, ADA, Voucher oder andere Kryptowährungseinheiten verwendet. WENN DER BENUTZER DEN ZUGANG ZU DEM KRYPTOWÄHRUNGS-WALLET ODER DEN PRIVATE KEY DES BENUTZERS VERLIERT UND KEINE SEPARATE SICHERUNG DER KRYPTOWÄHRUNGS-WALLET(S) ODER DER MNEMONISCHEN PASSPHRASE(N) UND DER ENTSPRECHENDEN PASSWÖRTER FÜR DIE WIEDERHERSTELLUNG VON BACKUPS ERSTELLT HAT, STIMMT DER BENUTZER HIERMIT ZU UND ANERKENNT, DASS ADA ODER ANDERE KRYPTOWÄHRUNGEN, DIE DER BENUTZER MIT DIESEN KRYPTOWÄHRUNGS-WALLET IN VERBINDUNG GEBRACHT HAT UNZUGÄNGLICH WERDEN. Alle Transaktionsanfragen sind unwiderruflich. Das Unternehmen und seine Aktionäre, Verwaltungsräte, Geschäftsführer, Mitarbeiter, Konzerngesellschaften und Vertreter können keine Garantie für die Transaktionsbestätigung übernehmen oder die Private Keys oder Passwörter des Benutzers abrufen, wenn dieser sie verliert oder vergisst. -**b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. +**b. Zugänglichkeit.** Der Benutzer stimmt zu, dass die Software von Zeit zu Zeit aus irgendeinem Grund unzugänglich oder nicht funktionsfähig sein kann, einschliesslich, aber nicht beschränkt aus folgenden Gründen: (i) Gerätefehlfunktionen; (ii) regelmässige Wartungsverfahren oder Reparaturen, die das Unternehmen von Zeit zu Zeit durchführen kann; oder (iii) Ursachen, die ausserhalb der Kontrolle des Unternehmens liegen oder die für das Unternehmen nicht vernünftigerweise vorhersehbar sind. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. Ausstattung.** Der Benutzer ist allein verantwortlich für die Bereitstellung, Aufrechterhaltung und Sicherstellung der Kompatibilität mit der Software, aller Hardware, Software, elektrischen und anderen physikalischen Anforderungen für die Nutzung der Software durch den Benutzer, einschliesslich, aber nicht beschränkt auf Telekommunikations- und Internetzugangsverbindungen und -links, Webbrowser oder andere Geräte, Programme und Dienstleistungen, die für den Zugriff auf die Software und deren Nutzung erforderlich sind. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. Sicherheit.** Der Benutzer ist allein verantwortlich für die Sicherheit, Vertraulichkeit und Integrität aller Informationen und Inhalte, die er erhält, überträgt oder auf der Software speichert. Jeder autorisierte oder unbefugte Zugriff durch eine Drittperson auf das Benutzerkonto liegt alleine in der Verantwortung des Benutzers. Der Benutzer verpflichtet sich, die volle Verantwortung für die Vertraulichkeit der Sicherheitsvorrichtungen, Informationen, Schlüssel und Passwörter des Benutzers zu tragen. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. Datenschutz.** Wenn es vernünftigerweise durchführbar ist, wird das Unternehmen versuchen, die Privatsphäre des Benutzers zu respektieren. Das Unternehmen wird ohne vorherige Zustimmung des Benutzers keine personenbezogenen Daten über den Benutzer oder das Benutzerkonto, einschliesslich seines Inhalts oder der Nutzung der Software durch den Benutzer, überwachen, bearbeiten oder offenlegen, es sei denn, das Unternehmen ist im treuen Glauben der Ansicht, dass eine solche Massnahme erforderlich ist: (i) den rechtlichen Prozess oder andere rechtliche Anforderungen einer Regierungsbehörde einzuhalten; (ii) die Rechte oder das Eigentum des Unternehmens zu schützen und zu verteidigen; (iii) diese Vereinbarung durchzusetzen; (iv) die Interessen anderer Benutzer der Software als des Benutzers oder einer anderen Person zu schützen; oder (v) die Dienstleistungen oder Geräte des Unternehmens zu betreiben oder zu warten und zu reparieren, einschliesslich der gesetzlich zugelassenen Software. Im Hinblick auf das Internet im Allgemeinen hat der Benutzer keine Erwartungen an Datenschutz. Die IP-Adresse des Benutzers wird mit jeder Nachricht oder anderen Informationen, die der Benutzer von der Software sendet, übertragen und aufgezeichnet. -## 2. Taxes and Fees +## 2. Steuern und Gebühren -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +Alle Währungsumrechnungsgebühren, Drittanbietergebühren, Verkaufs-, Nutzungs-, Mehrwert-, Eigentums- oder andere Steuern, Zölle oder Abgaben jeglicher Art, einschliesslich Zinsen und Strafen auf solche, die jetzt oder in Zukunft von einer Regierungseinrichtung erhoben werden, sowie Gebühren, die dem Benutzer durch den Zugriff, die Nutzung oder die Installation der Software durch den Benutzer entstehen, fallen in die alleinige Verantwortung des Benutzers. -## 3. User Representations +## 3. Benutzer-Zusicherungen -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +Der Benutzer sicher hiermit zu, dass: (a) wenn der Benutzer eine natürliche Person ist, er über achtzehn Jahre(18) alt ist; (b) der Benutzer die Befugnis hat, die Verpflichtungen des Benutzers aus diesem Vertrag einzugehen und zu erfüllen; (c) alle Informationen, die der Benutzer dem Unternehmen zur Verfügung stellt, wahrheitsgemäss, genau und vollständig sind; (d) der Benutzer alle Gesetze und Vorschriften der jeweiligen Gerichtsbarkeit in Bezug auf den Zugriff, die Nutzung oder die Installation der Software einhalten wird; (e) der Benutzer verpflichtet ist, alle Bedingungen dieser Vereinbarung einzuhalten, einschliesslich, aber ohne Beschränkung auf die in Abschnitt 4 dargelegten Bestimmungen; und (f) der Benutzer genaue und vollständige Angaben, die für den Zugriff, die Nutzung oder die Installation der Software erforderlich sind, zur Verfügung gestellt hat und dies auch weiterhin tun wird. -## 4. Prohibited Uses +## 4. Verbotene Nutzung -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +Der Benutzer trägt die alleinige Verantwortung für alle Handlungen und Unterlassungen, die unter Verwendung seines Benutzerkontos, der Sicherheitsdaten, der Dateischlüssel oder des Passwortes vorgenommen werden. Darüber hinaus verpflichtet er sich, keine unzulässige Nutzung der Software vorzunehmen, einschliesslich aber ohne Einschränkungen auf die Nutzung der Software zur: (a) Verbreitung, Speicherung oder Übertragung unerwünschter Nachrichten, Kettenbriefe oder unerwünschter kommerzieller E-Mails; (b) Verbreitung oder Übertragung von Materialien, die eine vernünftige Person als missbräuchlich, obszön, pornographisch, rufschädigend, belästigend, grob anstössig, vulgär, rechts- oder sittenwidrig erachten kann; (c) Verbreitung, Speicherung oder Übertragung von Dateien, Grafiken, Software oder anderem Material, das tatsächlich oder potenziell die Urheber-, Marken- oder Patentrechte, sowie das Geschäftsgeheimnis oder andere Rechte an geistigem Eigentum einer Person verletzt; (d) Verschaffung einer falschen Identität oder anderweitiger Versuche, eine Person über die Identität oder den Ursprung einer Kommunikation irrezuführen; (e) Förderung von Ausfuhr und Wiederausfuhr oder das Herunterladen von Nachrichten oder Inhalten unter Verletzung von Export- oder Importgesetzen, Bestimmung oder Einschränkung einer anwendbaren Gerichtsbarkeit ohne der erforderlichen Genehmigungen, Lizenzen oder Lizenzfreistellungen; (f) Beeinträchtigung, Unterbrechung oder zum Versuch sich unbefugten Zugriff auf andere Konten in der Software oder ein anderes Computernetzwerk zu verschaffen; oder (g) Verbreitung, Speicherung oder Übertragung von Viren, Trojanern oder anderen schädigenden Codes oder Programmen. -## 5. Termination +## 5. Kündigung -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +Diese Vereinbarung wird mit der Annahme wirksam und bleibt in vollem Umfang in Kraft, solange der Benutzer auf die Software zugreift, diese nutzt oder installiert. Das Unternehmen behält sich das Recht vor, nach eigenem Ermessen und ohne Vorankündigung jederzeit und aus beliebigem Grund: (a) den Zugriff auf die gesamte oder einen Teil der Software zu sperren oder zu deaktivieren; (b) den Zugriff des Benutzers auf die gesamte oder einen Teil der Software zu sperren; und (c) diese Vereinbarung zu kündigen. -## 6. Disclaimer of Warranties +## 6. Gewährleistungsausschluss -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +DIE SOFTWARE WIRD "WIE SIE IST" BEREITGESTELLT, OHNE JEGLICHE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE GEWÄHRLEISTUNG. DIE NUTZUNG DER SOFTWARE ERFOLGT AUF EIGENE GEFAHR DES BENUTZERS. DAS UNTERNEHMEN GARANTIERT NICHT, DASS DIE SOFTWARE UNUNTERBROCHEN ZUR VERFÜGUNG STEHT ODER FEHLERFREI IST, NOCH GIBT DAS UNTERNEHMEN EINE GARANTIE FÜR ERGEBNISSE, DIE DURCH DIE NUTZUNG DER SOFTWARE ERZIELT WERDEN KÖNNEN. DAS UNTERNEHMEN GIBT KEINE WEITEREN AUSDRÜCKLICHEN ODER STILLSCHWEIGENDEN GARANTIEN ODER ZUSICHERUNGEN AB. DAS UNTERNEHMEN LEHNT AUSDRÜCKLICH JEGLICHE GEWÄHRLEISTUNG DER MARKTGÄNGIGKEIT, DIE GEWÄHRLEISTUNG DER EIGNUNG FÜR EINEN BESTIMMTEN ZWECK, DIE GEWÄHRLEISTUNG VON RECHT ODER RECHTSANSPRUCH ODER DIE GEWÄHRLEISTUNG DER NICHTVERLETZUNG AB. -## 7. Limitation of Liability +## 7. Haftungsbeschränkung -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +IN KEINEM FALL KÖNNEN DAS UNTERNEHMEN ODER SEINE AKTIONÄRE, VERWALTUNGSRÄTE, GESCHÄFTSFÜHRER, MITARBEITER, KONZERNGESELLSCHAFTEN, VERTRETER ODER DEREN JEWEILIGEN DIENSTLEISTER GEGENÜBER DEM BENUTZER ODER EINEM DRITTEN HAFTBAR GEMACHT WERDEN FÜR JEGLICHE NUTZUNG, UNTERBRECHUNG, VERZÖGERUNG ODER NICHTAUSFÜHRBARKEIT DER SOFTWARE, ENTGANGENE EINNAHMEN ODER GEWINNE, VERZÖGERUNGEN, UNTERBRECHUNG ODER VERLUST VON DIENSTLEISTUNGEN, VERLUSTE BETREFFEND DIE GESCHÄFTSTÄTIGKEIT ODER DEN GOODWILL, VERLUST ODER BESCHÄDIGUNG VON DATEN, VERLUST DURCH AUSFALL VON SYSTEM- ODER SYSTEMDIENSTAUSFALL, ABSCHALTUNG ODER FEHLFUNKTION, FEHLERHAFTES LESEN ODER ÜBERTRAGEN UND ÜBERMITTELN VON INFORMATIONEN, UNTERLASSUNG DER AKTUALISIERUNG ODER BEREITSTELLUNG KORREKTER INFORMATIONEN UND SYSTEMINKOMPATIBILITÄT ODER BEREITSTELLUNG FALSCHER KOMPATIBILITÄTSINFORMATIONEN ODER VERSTÖSSE GEGEN DIE SYSTEMSICHERHEIT ODER FÜR ZUFÄLLIGE, INDIREKTE, EXEMPLARISCHE, BESONDERE ODER STRAF- UND FOLGESCHÄDEN, UNABHÄNGIG DAVON, OB SIE SICH AUS ODER IM ZUSAMMENHANG MIT DIESER VEREINBARUNG, VERTRAGSBRUCH, UNERLAUBTER HANDLUNG (EINSCHLIESSLICH FAHRLÄSSIGKEIT) ODER ANDERWEITIG ERGEBEN, UNABHÄNGIG DAVON, OB SOLCHE SCHÄDEN VORHERSEHBAR WAREN UND OB WIR ÜBER DIE MÖGLICHKEIT SOLCHER SCHÄDEN INFORMIERT WURDEN ODER NICHT. -## 8. Indemnification +## 8. Schadloshaltung -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +Der Benutzer verpflichtet sich, das Unternehmen, seine Aktionäre, Verwaltungsräte, Geschäftsführer, Mitarbeiter, Konzerngesellschaften und Vertreter ("freigestellte Parteien") für alle Handlungen, Ursachen, Ansprüche, Schäden, Schulden, Forderungen oder Haftungen, einschliesslich angemessener Kosten und Anwaltskosten, die von einer Person geltend gemacht werden, zu entschädigen, schadlos zu halten und zu verteidigen, insbesondere die sich aus oder: (a) in Zusammenhang mit dieser Vereinbarung ergeben; (b) dem Zugriff, Nutzung oder Installation der Software durch den Benutzer ergeben oder damit zusammenhängen, einschliesslich aller Daten oder Arbeiten, die vom Benutzer übertragen oder empfangen wurden; und (c) jede inakzeptable Verwendung der Software durch eine Person, einschliesslich, aber ohne Einschränkung aller Aussagen, Daten oder Inhalte, die vom Benutzer oder einer Person gemacht, übertragen oder neu veröffentlicht wurden und die gemäss Abschnitt 4 verboten sind. DIESE SCHADLOSHALTUNG BEINHALTET DIE AUSDRÜCKLICHE ENTSCHÄDIGUNG DES UNTERNEHMENS UND ALLER FREIGESTELLTEN PARTEIEN FÜR JEDE ANGEBLICHE FAHRLÄSSIGKEIT (EINSCHLIESSLICH JEGLICHER GROBEN FAHRLÄSSIGKEIT) ODER EIN ANDERES ANGEBLICHES FEHLVERHALTEN DES UNTERNEHMENS ODER EINER FREIGESTELLTEN PARTEI. -## 9. Intellectual Property +## 9. Geistiges Eigentum -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +Das Unternehmen behält alle Rechte, Titel und Anteile an allen Marken, Logos und Markenzeichen des Unternehmens, einschliesslich, aber nicht beschränkt auf EMURGO Co., Ltd., EMURGO, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App und Variationen des Wortlauts der vorgenannten Marken, Logos und Markenzeichen. -## 10. Warnings +## 10. Warnhinweise -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +Der Benutzer erklärt sich damit einverstanden, dass das Unternehmen nicht für die Übertragung, Sicherung oder Aufrechterhaltung von Private Keys und/oder der ADA des Benutzers oder einer anderen Kryptowährung verantwortlich ist. Wenn der Benutzer und/oder alle Mitzeichnungsberechtigten die zugehörigen Private Keys verloren, missbraucht oder gestohlen haben oder wenn die Mitzeichnungsberechtigten sich weigern, die erforderliche Vollmacht zu erteilen, erklärt sich der Benutzer damit einverstanden, dass er gegebenfalls nicht in der Lage ist, die ADA des Benutzers oder eine andere Kryptowährung wiederherzustellen, und dass das Unternehmen für diesen Verlust nicht verantwortlich ist. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +Der Benutzer erklärt sich damit einverstanden, dass sich ADA oder andere durch die Software und/oder das Unternehmen ermöglichte Transaktionen in Kryptowährung verzögern können, und dass das Unternehmen nicht für damit verbundene Verluste verantwortlich ist. Der Benutzer erklärt sich damit einverstanden, dass das Unternehmen für keinen Aspekt der Informationen, Inhalte oder Dienstleistungen verantwortlich ist, die in Materialien von Drittanbietern oder auf Websites von Drittanbietern enthalten sind, die mit der Software und/oder dem Unternehmen zugänglich sind oder mit dieser verlinkt sind. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. +Durch die Verwendung der Software anerkennt und stimmt der Benutzer zu: (i) dass das Unternehmen nicht für den Betrieb der zugrunde liegenden Protokolle verantwortlich ist und keine Garantie für deren Funktionalität, Sicherheit oder Verfügbarkeit gibt; und (ii) dass die zugrunde liegenden Protokolle plötzlichen Änderungen der Betriebsvorschriften in der Hauptkette ("Fork") unterliegen, und dass solche Forks den Wert und/oder die Funktion des ADA oder einer anderen Kryptowährung, die der Benutzer in der Software speichert, wesentlich beeinflussen können. Im Falle eines Forks stimmt der Benutzer zu, dass das Unternehmen den Betrieb der Software vorübergehend aussetzen kann (mit oder ohne Benachrichtigung des Benutzers), und dass das Unternehmen nach eigenem Ermessen (a) seine Systeme konfigurieren oder neu konfigurieren kann oder (b) beschliessen kann, das Fork-Protokoll nicht vollständig zu unterstützen (oder nicht mehr zu unterstützen) unter der Voraussetzung, dass der Benutzer die Möglichkeit hat, Gelder von der Software abzuheben. Der Benutzer anerkennt und stimmt zu, dass das Unternehmen keinerlei Verantwortung in Bezug auf einen nicht unterstützten Zweig eines Fork-Protokolls übernimmt. -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +## 11. Sonstiges -## 11. Miscellaneous +**a. Ergänzung** Das Unternehmen ist jederzeit und ohne Vorankündigung berechtigt, die Bedingungen dieser Vereinbarung zu ergänzen oder zu ändern. Die elektronische Zustellung der geänderten Bedingungen an den Benutzer erfolgt über ein beliebiges Medium an eine Adresse, die der Benutzer dem Unternehmen zur Verfügung stellt. Der Zugriff des Benutzers auf die Software oder deren Nutzung nach der Zustellung der geänderten Bedingungen gilt als Zustimmung. -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**b. Teilbarkeit** Sollte eine Bestimmung oder Teilbestimmung dieser Vereinbarung ungültig, illegal oder nicht durchsetzbar sein oder werden, gilt sie als so weit geändert, wie es erforderlich ist, um es gültig, legal und durchsetzbar zu machen. Ist eine solche Änderung nicht möglich, so gilt die betreffende Bestimmung oder Teilbestimmung als gestrichen. Eine Änderung oder Streichung einer Bestimmung oder Teilbestimmung nach diesem Artikel berührt nicht die Gültigkeit und Durchsetzbarkeit des übrigen Teils dieser Vereinbarung. -**b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. +**c. Gesamte Vereinbarung – Haftungsausschluss** Diese Vereinbarung stellt die gesamte Vereinbarung zwischen den Parteien in Bezug auf den Gegenstand dieser Vereinbarung dar und ersetzt alle früheren Vereinbarungen oder Absprachen zwischen den Parteien. Der Benutzer versichert ausdrücklich und garantiert, dass er sich nicht auf andere als die in dieser Vereinbarung ausdrücklich genannten Erklärungen, Vereinbarungen, Vorstellungen, Erwartungen oder Vereinbarungen verlässt. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**d. DIESE VEREINBARUNG UNTERLIEGT EINEM VERBINDLICHEN SCHIEDSVERFAHREN** Der Benutzer stimmt zu, dass alle Streitigkeiten oder Ansprüche gegen eine Person, die sich aus oder in irgendeiner Weise im Zusammenhang mit dieser Vereinbarung oder dem Zugriff, der Nutzung oder der Installation der Software durch den Benutzer oder eine andere Person ergeben, unter Ausschluss des Rechtsweges durch ein Schiedsgericht entschieden werden, das auf Basis der Schiedsgerichtsordnung der Internationalen Handelskammer gebildet wird und durch einen oder mehrere Schiedsrichter, die gemäss dieser Ordnung ernannt werden, entscheidet. Schiedsort ist Japan. Sprache des Schiedsverfahrens ist English. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. +**e. SPRACHE** Jede Übersetzung dieser Vereinbarung dient nur der lokalen Referenz. Im Falle von Unstimmigkeiten zwischen der englischen und einer nicht-englischen Version hat die englische Version dieser Vereinbarung Vorrang und gilt in jeder Hinsicht. -**e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. +## 12. Delegierung und Staking -## 12. Delegation and Staking +12.1 **Belohnungen.** Die Höhe der Belohnungen, die ein Benutzer durch die Delegation verdienen kann, hängt von verschiedenen Faktoren ab, einschließlich, aber nicht beschränkt auf die Beteiligung des Benutzers, die Gewinnspanne des Stakepools und das Volumen der delegierten Adas. Es ist möglich, dass die Delegation aufgrund der oben genannten Faktoren keine Rewards für einen Benutzer generiert. Rewards werden ab dem Beginn der 3. Epoche auf der Cardano-Blockchain verdient. -12.1 **Rewards.** The amount of Rewards a User may earn from delegation depends on various factors including, but not limited to, user participation, stakepool profit margins and the volume of ada being delegated. It is possible that delegation generates no Reward for a User due to the above-mentioned factors. Rewards are earned as of the start of the 3rd epoch on the Cardano blockchain. +12.2 **Delegierung.** Benutzer können ihren Anteil an einen der verschiedenen Stakepools des Unternehmens oder an einen dritten Stakepool delegieren. Die Nutzer haben das alleinige Recht, das an einen Stakepool zu delegierende Volumen zu bestimmen und können die Höhe ihrer Beteiligung jederzeit erhöhen oder verringern. Alle Informationen, die das Unternehmen in Bezug auf die Stakepool teilt, einschließlich Leistungskennzahlen und Belohnungen, dienen lediglich als Anhaltspunkt und sind möglicherweise nicht genau. Benutzer können ihren Einsatz nur dann an einen Stakepool delegieren, wenn sich ihre Ada zum Zeitpunkt des Einrichtungsvorgangs in einer aktualisierten Daedalus- oder einer aktualisierten Yoroi-Wallets befindet. Der Benutzer erwirbt durch die Delegierung seines Stake kein automatisches Recht auf Belohnungen. -12.2 **Delegation.** Users may delegate their stake to one of the various stake pools of the Company or to a third party stake pool. User will have the sole right to determine the volume to be delegated to a stake pool and may increase or decrease its level of participation at any time. Any information Company shares regarding stakepools, including performance metrics and Rewards, will be for indicative purposes only and may not be accurate. Users may only delegate their stake to a stake pool if their ada is in an updated Daedalus or an updated Yoroi wallet at the time of the setup process. User does not acquire any automatic right to Rewards as a result of delegating its stake. +12.3 **Unternehmens Stake-Pools.** Das Unternehmen wird verschiedene Stakepools betreiben, die in Yoroi oder Seiza sichtbar sein werden. Die Kosten sowie die Netz- und Serveranforderungen für den zuverlässigen Betrieb solcher Stakepools werden vom Unternehmen nach eigenem Ermessen festgelegt. Das Unternehmen wird den prozentualen Betrag der Belohnung, der mit den Nutzern geteilt werden soll, über die Yoroi-Wallet des Nutzers mitteilen. Die Belohnungen werden am Ende jeder Epoche angesammelt und erscheinen automatisch in der Yoroi-Wallet des Benutzers. -12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. - -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 **Ertrags-Auszahlungen.** Der Benutzer ist - falls zutreffend - für die Zahlung aller anwendbaren Steuern verantwortlich, denen die Prämien unterliegen könnten, sowie für alle anderen Steuern, die nach Einlösung der Prämien auf den Benutzer zutreffen könnten. From 3f2d89684500b1940daf352b8d2f8df3536bab05 Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:11 +0100 Subject: [PATCH 358/464] New translations en-us.md (Greek) --- .../i18n/locales/terms-of-use/ada/el-GR.md | 76 ++++++------------- 1 file changed, 22 insertions(+), 54 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/el-GR.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/el-GR.md index 62a96a1ef3..36defd9d8f 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/el-GR.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/el-GR.md @@ -1,102 +1,70 @@ -# Terms of Service Agreement +# Συμφωνία Όρων Παροχής Υπηρεσιών -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +ΑΥΤΗ Η ΣΥΜΦΩΝΙΑ ΟΡΩΝ ΠΑΡΟΧΗΣ ΥΠΗΡΕΣΙΩΝ ("Συμφωνία") έγινε μεταξύ της EMURGO Co., Ltd. ("Εταιρείας") και οποιουδήποτε ανθρώπου ή οντότητας ("Χρήστης") που ολοκληρώνει τη διαδικασία λήψης, εφαρμογής ή χειρίζεται το λογισμικό γνωστό ως την εφαρμογή Yoroi Πορτοφόλι κρυπτονομισμάτων και υπηρεσία διαχείρισης δεδομένων, εφαρμογή, υπηρεσία επικοινωνίας ή άλλο περιεχόμενο ή προσφερόμενο ή παρεχόμενο μαζί με το λογισμικό από την Εταιρεία ("Λογισμικο"). Η Εταιρεία και ο Χρήστης συλλογικά αναφέρονται ως "Συμβαλλόμενοι." -## 1. Rights and Obligations +## 1. Δικαιώματα και Υποχρεώσεις -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**α. Περιγραφή.** Το Λογισμικό λειτουργεί ως ελεύθερο, ανοιχτού κώδικα, ψηφιακό πορτοφόλι κρυπτονομισμάτων. Το Λογισμικό δεν συνιστά ένα λογαριασμό κατά τον οποίο η Εταιρεία ή τρίτοι συνεργάτες εξυπηρετούν ως οικονομικοί διαμεσολαβητές ή επίτροποι του-των Χρήστη'ών ADA ή οποιοδήποτε άλλου κρυπτονομίσματος. Ενώ το Λογισμικό έχει υποβληθεί σε δοκιμαστικό έλεγχο και συνεχίζει να βελτιώνεται από τις αναφορές προγραμματιστών της κοινότητας, ανοιχτού κώδικα συνεισφορές και δοκιμαστικά τεστ, η Εταιρεία δεν μπορεί να εγγυηθεί ότι δεν θα υπάρξουν σφάλματα μέσα στο Λογισμικό. Ο Χρήστης αναγνωρίζει ότι η χρήση του Λογισμικού είναι ρίσκο του ιδίου Χρήστη'ών, στη διακριτική του ευχέρεια και σε συμμόρφωση με όλους τους νόμους που ισχύουν. Ο Χρήστης είναι υπεύθυνος να κρατά ασφαλείς του κωδικούς Χρήστη'ών, PIN, προσωπικά κλειδιά, κλειδιά ανάκτησης, θωρακισμένα κλειδιά πώλησης, αντίγραφα ασφαλείας ανάκτησης μνημονικών κωδικών φράσεων, κωδικούς πρόσβασης ADA και όποιους άλλους κωδικούς ο Χρήστης χρησιμοποιεί για να αποκτήσει πρόσβαση στο Λογισμικό ή άλλη πληροφορία, ADA, απόδειξη πληρωμής ή άλλη μονάδα κρυπτονομίσματος. **b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. ## 2. Taxes and Fees -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. ## 3. User Representations -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. ## 4. Prohibited Uses -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. ## 5. Termination -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. ## 6. Disclaimer of Warranties -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. ## 7. Limitation of Liability -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. ## 8. Indemnification -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. ## 9. Intellectual Property -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to, EMURGO Co., Ltd., EMURGO, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. ## 10. Warnings -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. - -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. ## 11. Miscellaneous -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. **b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**c. Entire Agreement – Disclaimer of Reliance**. This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. +**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. **e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. ## 12. Delegation and Staking @@ -106,4 +74,4 @@ If you have any questions or concerns regarding the accuracy or reliability of t 12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. From 3a94cc176d5a497856926889a0fec65816150a4d Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:13 +0100 Subject: [PATCH 359/464] New translations en-us.md (Hungarian) --- .../i18n/locales/terms-of-use/ada/hu-HU.md | 72 ++++++------------- 1 file changed, 20 insertions(+), 52 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/hu-HU.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/hu-HU.md index 62a96a1ef3..617f0e1f22 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/hu-HU.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/hu-HU.md @@ -1,102 +1,70 @@ # Terms of Service Agreement -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Co., Ltd. ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties." BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. ## 1. Rights and Obligations -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. **b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. ## 2. Taxes and Fees -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. ## 3. User Representations -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. ## 4. Prohibited Uses -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. ## 5. Termination -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. ## 6. Disclaimer of Warranties -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. ## 7. Limitation of Liability -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. ## 8. Indemnification -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. ## 9. Intellectual Property -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to, EMURGO Co., Ltd., EMURGO, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. ## 10. Warnings -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. - -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. ## 11. Miscellaneous -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. **b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**c. Entire Agreement – Disclaimer of Reliance**. This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. +**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. **e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. ## 12. Delegation and Staking @@ -106,4 +74,4 @@ If you have any questions or concerns regarding the accuracy or reliability of t 12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. From be882cd6ccdb96b060a2f79a45796038d1fe948b Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:15 +0100 Subject: [PATCH 360/464] New translations en-us.md (Italian) --- .../i18n/locales/terms-of-use/ada/it-IT.md | 110 +++++++----------- 1 file changed, 39 insertions(+), 71 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/it-IT.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/it-IT.md index 62a96a1ef3..1add0cfe6c 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/it-IT.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/it-IT.md @@ -1,109 +1,77 @@ -# Terms of Service Agreement +# Termini del contratto di servizio -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +Le presenti condizioni dell'accordo di servizio ("accordo") è stipulato tra EMURGO Co. ("Società") e qualsiasi persona o entità ("Utente") che completa il processo per scaricare, utilizzare o utilizzare il software noto come applicazione Yoroi cryptocurrency Wallet, e il servizio di elaborazione dati, applicazione, servizio di comunicazione o altri contenuti o offerti o forniti con il software dalla Società ("Software"). La Società e l'Utente sono denominati collettivamente "Parti". FACENDO CLIC SUL PULSANTE DI ACCETTAZIONE O ACCEDENDO, UTILIZZANDO O INSTALLANDO QUALSIASI PARTE DEL SOFTWARE, L'UTENTE ACCETTA ESPRESSAMENTE E ACCETTA DI ESSERE VINCOLATO LEGALMENTE DA TUTTE LE CONDIZIONI DEL PRESENTE ACCORDO. SE L'UTENTE NON ACCETTA TUTTI I TERMINI DEL PRESENTE ACCORDO, L'UTENTE NON SARÀ AUTORIZZATO AD ACCEDERE, UTILIZZARE O INSTALLARE QUALSIASI PARTE DEL SOFTWARE. -## 1. Rights and Obligations +## 1. Diritti e obbligazioni -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. Descrizione.** Il software funziona come un portafoglio di valuta digitale, libero, open source e criptato. Il Software non costituisce un conto tramite il quale la Società o altre terze parti servono come intermediari finanziari o depositari dell'ADA dell'Utente o di qualsiasi altra valuta criptata. Mentre il Software è stato sottoposto a beta testing e continua ad essere migliorato dal feedback della comunità degli sviluppatori, dei collaboratori open-source e dei beta-tester, la Società non può garantire che non ci saranno bug nel Software. L'Utente riconosce che l'uso del Software da parte dell'Utente è a rischio, discrezione e in conformità con tutte le leggi applicabili. L'Utente è responsabile della custodia delle password, dei PIN, delle chiavi private, delle chiavi di riscatto, delle chiavi di distribuzione schermate, delle chiavi di backup, delle passphrase mnemoniche, dei codici ADA e di qualsiasi altro codice utilizzato dall'Utente per accedere al Software o a qualsiasi informazione, ADA, voucher o altra unità di crittografia valutaria. SE L'UTENTE PERDE L'ACCESSO AL PORTAFOGLIO DI VALUTA CRIPTATA O ALLE CHIAVI PRIVATE DELL'UTENTE E NON HA MEMORIZZATO SEPARATAMENTE UN BACKUP DEL PORTAFOGLIO DI VALUTA CRIPTATA DELL'UTENTE O RECUPERO DI BACKUP MNEMONICO FRASE(I) E PASSWORD CORRISPONDENTE(I), L'UTENTE RICONOSCE E ACCETTA CHE QUALSIASI ADA O QUALSIASI ALTRA VALUTA CRIPTATA CHE L'UTENTE HA ASSOCIATO A QUEL PORTAFOGLIO DI VALUTA CRIPTATA DIVENTERÀ INACCESSIBILE. Tutte le richieste di transazione sono irreversibili. La Società e i suoi azionisti, direttori, funzionari, impiegati, dipendenti, affiliati e agenti non possono garantire la conferma della transazione o recuperare le chiavi private o le password dell'Utente se l'Utente le perde o le dimentica. -**b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. +**b. Accessibilità.** L'utente accetta che di tanto in tanto il Software può essere inaccessibile o inutilizzabile per qualsiasi ragione, incluso, senza limitazioni: (i) malfunzionamenti delle apparecchiature; (ii) procedure di manutenzione periodica o riparazioni che la Società può di volta in volta intraprendere; o (iii) cause che sfuggono al controllo della Società o che non sono ragionevolmente prevedibili dalla Società. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. Atrezzature Informatiche.** L'Utente è l'unico responsabile di fornire, mantenere e garantire la compatibilità con il Software, tutti i requisiti hardware, software, elettrici e altri requisiti fisici per l'utilizzo del Software da parte dell'Utente, inclusi, senza limitazioni, connessioni e link di accesso a Internet e alle telecomunicazioni, browser web o altre apparecchiature, programmi e servizi necessari per accedere e utilizzare il Software. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. Sicurezza.** L'Utente è l'unico responsabile per la sicurezza, la riservatezza e l'integrità di tutte le informazioni e contenuti che l'Utente riceve, trasmette o memorizza sul Software. L'Utente è l'unico responsabile per qualsiasi accesso autorizzato o non autorizzato a qualsiasi account dell'Utente da parte di qualsiasi persona. L'Utente accetta di assumersi ogni responsabilità per la riservatezza dei dispositivi di sicurezza, delle informazioni, delle chiavi e delle password dell'Utente. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. Privacy.** Quando ragionevolmente possibile, la Società cercherà di rispettare la privacy dell'Utente. La Società non monitorerà, modificherà o divulgherà alcuna informazione personale sull'account dell'Utente o dell'Utente, inclusi i suoi contenuti o l'uso del Software da parte dell'Utente, senza il previo consenso dell'Utente, a meno che la Società non ritenga in buona fede che tale azione sia necessaria a tal fine: (i) rispettare le procedure legali o altri requisiti legali di qualsiasi autorità governativa; (ii) proteggere e difendere i diritti o la proprietà della Società; (iii) applicare il presente Contratto; (iv) proteggere gli interessi degli utenti del Software diversi dall'Utente o da qualsiasi altra persona; o (v) gestire o eseguire la manutenzione e la riparazione dei servizi o delle attrezzature della Società, compreso il Software come autorizzato dalla legge. L'Utente non ha alcuna aspettativa di privacy rispetto a Internet in generale. L'indirizzo IP dell'Utente viene trasmesso e registrato con ogni messaggio o altra informazione che l'Utente invia dal Software. -## 2. Taxes and Fees +## 2. Imposte e tasse -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +Tutte le spese per la conversione di valuta, le spese di terzi, le vendite, l'uso, l'uso, il valore aggiunto, la proprietà personale o altre tasse, dazi o imposte di qualsiasi tipo, compresi gli interessi e le relative sanzioni, imposte ora o in seguito da qualsiasi ente governativo, e le spese sostenute dall'Utente in ragione dell'accesso, uso o installazione del Software da parte dell'Utente sono di esclusiva responsabilità dell'Utente. -## 3. User Representations +## 3. Rappresentazioni degli utenti -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +L'utente dichiara e garantisce alla Società che: (a) se l'Utente è una persona fisica, l'Utente ha più di diciotto (18) anni; (b) l'Utente ha il potere e l'autorità di stipulare ed eseguire gli obblighi dell'Utente ai sensi del presente Contratto; (c) tutte le informazioni fornite dall'Utente alla Società sono veritiere, accurate e complete; (d) l'Utente rispetterà tutte le leggi e i regolamenti di qualsiasi giurisdizione applicabile in materia di accesso, uso o installazione del Software da parte dell'Utente; (e) L'Utente dovrà rispettare tutti i termini e le condizioni del presente Contratto, incluse, senza limitazioni, le disposizioni di cui alla Sezione 4; e (f) L'Utente ha fornito e fornirà informazioni accurate e complete come richiesto per l'accesso, l'uso o l'installazione del Software. -## 4. Prohibited Uses +## 4. Usi proibiti -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +L'Utente è l'unico responsabile per tutte le azioni e le omissioni che si verificano nel suo account, informazioni di sicurezza, chiavi o password, inoltre l'Utente si impegna a non prodigarsi in un uso non accettabile del Software, che include, senza limitazione, l'uso del Software a: (a) diffondere, memorizzare o trasmettere messaggi non richiesti, lettere a catena o e-mail commerciali non richiesti; (b) diffondere o trasmettere materiale che, ad una persona ragionevole può essere offensivo, osceno, pornografico, diffamatorio, diffamatorio, molesto, gravemente offensivo, volgare, minaccioso o maligno; (c) diffondere, memorizzare o trasmettere file, grafica, software o altro materiale che effettivamente o potenzialmente viola il diritto d'autore, marchio, brevetto, segreto commerciale o altro diritto di proprietà intellettuale di qualsiasi persona; (d) creare una falsa identità o tentare in altro modo di ingannare qualsiasi persona circa l'identità o l'origine di qualsiasi comunicazione; (e) esportare, riesportare o consentire il download di qualsiasi messaggio o contenuto in violazione di qualsiasi legge, regolamento o restrizione di qualsiasi giurisdizione applicabile, o senza tutte le necessarie approvazioni, licenze o esenzioni; (f) interferire, interrompere o tentare di ottenere l'accesso non autorizzato ad altri account sul Software o qualsiasi altra rete informatica; o (g) diffondere, memorizzare o trasmettere virus, cavalli di Troia o qualsiasi altro codice o programma maligno. -## 5. Termination +## 5. Cessazione -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +Il presente Contratto è valido a seguito dell'accettazione da parte dell'Utente come qui indicato e rimarrà in vigore fino a quando l'Utente si impegna in qualsiasi accesso, utilizzo o installazione del Software. La Società si riserva il diritto, a sua esclusiva discrezione e senza preavviso, in qualsiasi momento e per qualsiasi motivo, di: (a) rimuovere o disabilitare l'accesso a tutto o parte del Software; (b) sospendere l'accesso o l'uso di tutto o parte del Software; e (c) risolvere il presente Contratto. -## 6. Disclaimer of Warranties +## 6. Esclusione di garanzia -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +IL SOFTWARE VIENE FORNITO "COSÌ COM'È", SENZA GARANZIA DI ALCUN TIPO, ESPRESSA O IMPLICITA. L'USO DEL SOFTWARE È AD ESCLUSIVO RISCHIO DELL'UTENTE. L'AZIENDA NON GARANTISCE CHE IL SOFTWARE SARÀ ININTERROTTO O PRIVO DI ERRORI, NÉ FORNISCE ALCUNA GARANZIA IN MERITO AI RISULTATI CHE POSSONO ESSERE OTTENUTI CON L'UTILIZZO DEL SOFTWARE. L'AZIENDA NON FORNISCE ALTRE GARANZIE, ESPLICITE O IMPLICITE. L'AZIENDA DECLINA ESPRESSAMENTE QUALSIASI GARANZIA DI COMMERCIABILITÀ, GARANZIA DI IDONEITÀ PER UN PARTICOLARE SCOPO, GARANZIA DI TITOLO O INTERESSE, O GARANZIA DI NON VIOLAZIONE. -## 7. Limitation of Liability +## 7. Limitazione di responsabilità -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +IN NESSUN CASO LA SOCIETÀ O I SUOI AZIONISTI, AMMINISTRATORI, DIRIGENTI, FUNZIONARI, DIPENDENTI, AFFILIATI O AGENTI, O UNO QUALSIASI DEI SUOI O DEI LORO RISPETTIVI FORNITORI DI SERVIZI, SARÀ RESPONSABILE NEI CONFRONTI DELL'UTENTE O DI TERZI PER QUALSIASI USO, INTERRUZIONE, RITARDO O INCAPACITÀ DI UTILIZZARE IL SOFTWARE, PERDITA DI RICAVI O PROFITTI, RITARDI, INTERRUZIONE O PERDITA DI SERVIZI, ATTIVITÀ O AVVIAMENTO, PERDITA O CORRUZIONE DI DATI, PERDITA DERIVANTE DA UN GUASTO DEL SISTEMA O DEL SERVIZIO DI SISTEMA, MALFUNZIONAMENTO O ARRESTO, MANCATO TRASFERIMENTO ACCURATO, LEGGERE O TRASMETTERE INFORMAZIONI, NON AGGIORNARE O FORNIRE INFORMAZIONI CORRETTE, INCOMPATIBILITÀ DEL SISTEMA, INCOMPATIBILITÀ DEL SISTEMA O FORNITURA DI INFORMAZIONI DI COMPATIBILITÀ ERRATE O VIOLAZIONI DELLA SICUREZZA DEL SISTEMA, O PER DANNI CONSEGUENTI, INCIDENTALI, INDIRETTI, INDIRETTI, ESEMPLARI, SPECIALI O PUNITIVI, DERIVANTI DA O IN RELAZIONE AL PRESENTE ACCORDO, VIOLAZIONE DEL CONTRATTO, ILLECITO CIVILE (INCLUSA LA NEGLIGENZA) O ALTRO, INDIPENDENTEMENTE DAL FATTO CHE TALI DANNI FOSSERO PREVEDIBILI E SE SIAMO STATI AVVISATI O MENO DELLA POSSIBILITÀ DI TALI DANNI. IN NESSUN CASO L'AZIENDA O I SUOI AZIONISTI, DIRETTORI, DIRIGENTI, FUNZIONARI, DIPENDENTI, AFFILIATI O AGENTI, O UNO QUALSIASI DEI SUOI O DEI LORO RISPETTIVI FORNITORI DI SERVIZI, SARÀ RESPONSABILE PER QUALSIASI RECLAMO, DANNO O ALTRA RESPONSABILITÀ, SIA IN UN'AZIONE CONTRATTUALE, EXTRACONTRATTUALE O ALTRO, DERIVANTE DA O IN QUALSIASI MODO CONNESSO ALL'ACCESSO, ALL'USO O ALL'INSTALLAZIONE DEL SOFTWARE DA PARTE DELL'UTENTE. ALCUNE GIURISDIZIONI VIETANO L'ESCLUSIONE O LA LIMITAZIONE DI DANNI INCIDENTALI O CONSEQUENZIALI, PERTANTO QUESTA LIMITAZIONE DI RESPONSABILITÀ POTREBBE NON ESSERE APPLICABILE ALL'UTENTE. SE L'UTENTE NON È SODDISFATTO DEL SOFTWARE, L'UNICO ED ESCLUSIVO RIMEDIO DELL'UTENTE SARÀ LA SOSPENSIONE DELL'USO DEL SOFTWARE. -## 8. Indemnification +## 8. Indennizzo -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +L'utente accetta di indennizzare, tenere indenne e difendere la Società, i suoi azionisti, amministratori, dirigenti, funzionari, dipendenti, affiliati e agenti ("Parti indennizzate") da e contro qualsiasi azione, causa, reclamo, danno, debito, richiesta o responsabilità, compresi i costi ragionevoli e le spese legali, rivendicati da qualsiasi persona, derivanti da o relativi a: (a) il presente Contratto; (b) l'accesso, l'uso o l'installazione del Software da parte dell'Utente, inclusi dati o lavori trasmessi o ricevuti dall'Utente; e (c) qualsiasi uso inaccettabile del Software da parte di qualsiasi persona, incluso, senza limitazioni, qualsiasi dichiarazione, dato o contenuto fatto, trasmesso o ripubblicato dall'Utente o da qualsiasi persona che sia vietato in quanto inaccettabile ai sensi della Sezione 4. TALE INDENNIZZO INCLUDE L'INDENNIZZO ESPRESSO DELL'AZIENDA E DI TUTTE LE PARTI INDENNIZZATE PER QUALSIASI PRESUNTA NEGLIGENZA (INCLUSA QUALSIASI PRESUNTA NEGLIGENZA GRAVE). O ALTRA PRESUNTA CATTIVA CONDOTTA DELLA SOCIETÀ O DI QUALSIASI PARTE INDENNIZZATA. -## 9. Intellectual Property +## 9. Proprietà Intellettuale -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +La Società si riserva tutti i diritti, titoli e interessi in e a tutti i marchi, loghi e marchi della Società, inclusi, ma non solo, EMURGO Co., Ltd., EMURGO, EMURGO, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, e le variazioni del testo dei suddetti marchi, loghi e marchi. -## 10. Warnings +## 10. Avvertenze -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +L'utente riconosce che la Società non sarà responsabile per il trasferimento, la salvaguardia o la manutenzione delle chiavi private e/o dell'ADA dell'utente o di qualsiasi altra valuta criptata. Se l'Utente e/o le autorità co-firmatarie perdono, danneggiano o sono vittima ti furto delle chiavi private associate, o se i cofirmatari dell'Utente rifiutano di fornire l'autorità necessaria, l'Utente riconosce che l'Utente potrebbe non essere in grado di recuperare l'ADA dell'Utente o qualsiasi altra valuta criptata e che la Società non sarà responsabile di tale perdita. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +L'utente riconosce e concorda che ADA o qualsiasi altra transazione in valuta criptata facilitata dal Software e/o dalla Società può essere ritardata e che la Società non sarà responsabile di eventuali perdite associate. L'utente riconosce e concorda che la Società non sarà responsabile per qualsiasi aspetto delle informazioni, contenuto o servizi contenuti in materiali di terzi o su siti di terzi accessibili o collegati al Software e/o alla Società. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. +Utilizzando il Software, l'Utente riconosce e accetta: (i) che la Società non è responsabile del funzionamento dei protocolli sottostanti e che la Società non garantisce la loro funzionalità, sicurezza o disponibilità; e (ii) che i protocolli sottostanti sono soggetti a improvvisi cambiamenti nella catena principale delle regole operative ("forks"), e che tali forchette possono influire materialmente sul valore e/o sul funzionamento di ADA o di qualsiasi altra valuta criptata che l'Utente memorizza sul Software. In caso di fork, l'Utente accetta che la Società può sospendere temporaneamente le operazioni del Software (con o senza preavviso all'Utente) e che la Società può, a sua esclusiva discrezione, (a) configurare o riconfigurare i propri sistemi o (b) decidere di non supportare (o cessare di supportare completamente il protocollo biforcato, a condizione, tuttavia, che l'Utente abbia la possibilità di prelevare fondi dal Software. L'Utente riconosce e concorda che la Società non si assume alcuna responsabilità di alcun tipo in relazione a una filiale non supportata di un protocollo biforcato. -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +## 11. Varie -## 11. Miscellaneous +**a. Emendamento.** La Società avrà il diritto, in qualsiasi momento e senza preavviso, di aggiungere o modificare i termini del presente Accordo, semplicemente consegnando tali termini modificati all'utente tramite messaggio elettronico attraverso qualsiasi mezzo a qualsiasi indirizzo fornito alla Società dall'utente. L'accesso o l'uso del Software dopo la data in cui tali termini modificati sono stati consegnati all'Utente saranno considerati come accettazione di tali termini modificati. -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**b. Severance.** Se una qualsiasi disposizione o parte del presente Accordo è, o diventa invalido, illegale o inapplicabile, sarà considerato modificato nella misura minima necessaria per renderlo valido, legale e applicabile. Se tale modifica non è possibile, la disposizione pertinente o la disposizione parziale si considerano cancellate. Qualsiasi modifica o cancellazione di una disposizione o di una disposizione parziale ai sensi del presente articolo non pregiudica la validità e l'applicabilità del resto del presente Accordo. -**b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. +**c. Intero accordo - Dichiarazione di non responsabilità**. Il presente Accordo costituisce l'intero accordo tra le Parti in merito all'oggetto del presente documento e sostituisce tutti gli accordi o intese precedenti tra le Parti. L'utente dichiara espressamente e garantisce di non fare affidamento su dichiarazioni, intese, dichiarazioni, aspettative o accordi diversi da quelli espressamente indicati nel presente Accordo. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**d. IL PRESENTE CONTRATTO È SOGGETTO AD ARBITRATO VINCOLANTE.** L'utente accetta che qualsiasi controversia o pretesa nei confronti di qualsiasi persona derivante da o in alcun modo correlata al presente Accordo o all'accesso, utilizzo o installazione del Software da parte dell'Utente o di qualsiasi altro, la persona stessa sarà soggetta a arbitrato vincolante ai sensi delle Regole di arbitrato della Camera di commercio internazionale da parte di uno o più arbitri nominati in conformità a tali Regole. Il luogo dell'arbitrato sarà il Giappone. La lingua dell'arbitrato sarà l'inglese. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. +**e. LINGUA.** Qualsiasi traduzione del presente Accordo è fatta esclusivamente a scopo di riferimento locale e in caso di incoerenza tra la versione inglese e quella non inglese, prevarrà e governerà la versione inglese del presente Accordo sotto tutti gli aspetti. -**e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. +## 12. Delega e Staking -## 12. Delegation and Staking +12.1 **Ricompense.** La quantità di Ricompense che un Utente può guadagnare dalla delega dipende da vari fattori tra cui, ma non solo, la partecipazione degli utenti, i margini di profitto della stakepool e il volume di ada che viene delegato. È possibile che la delega non generi alcuna Ricompensa per un Utente a causa dei suddetti fattori. Le ricompense vengono guadagnate all'inizio della terza epoca sulla blockchain di Cardano. -12.1 **Rewards.** The amount of Rewards a User may earn from delegation depends on various factors including, but not limited to, user participation, stakepool profit margins and the volume of ada being delegated. It is possible that delegation generates no Reward for a User due to the above-mentioned factors. Rewards are earned as of the start of the 3rd epoch on the Cardano blockchain. +12.2 **Delega.** Gli utenti possono delegare la loro quota a uno delle varie pool della Società o a una pool di terze parti. L'utente avrà il diritto esclusivo di determinare il volume da delegare a uno stake pool e potrà aumentare o diminuire il suo livello di partecipazione in qualsiasi momento. Qualsiasi informazione condivisa dalla Società riguardo le stake pool, incluse le metriche di performance e i Premi, sarà solo a scopo indicativo e potrebbe non essere accurata. Gli utenti possono delegare la loro partecipazione a una stake pool solo se il loro ada si trova in un wallet Daedalus o Yoroi aggiornato al momento del processo di configurazione. L'utente non acquisisce alcun diritto automatico alle ricompense come risultato della delega della sua partecipazione. -12.2 **Delegation.** Users may delegate their stake to one of the various stake pools of the Company or to a third party stake pool. User will have the sole right to determine the volume to be delegated to a stake pool and may increase or decrease its level of participation at any time. Any information Company shares regarding stakepools, including performance metrics and Rewards, will be for indicative purposes only and may not be accurate. Users may only delegate their stake to a stake pool if their ada is in an updated Daedalus or an updated Yoroi wallet at the time of the setup process. User does not acquire any automatic right to Rewards as a result of delegating its stake. +12.3 **Company Stake-Pools.** La Società gestisce varie stake pool che saranno visibili su Yoroi. Il costo e i requisiti di rete e del server per operare in modo affidabile tali stake pool saranno determinati dalla Società a sua esclusiva discrezione. La Società comunicherà l'importo percentuale della Ricompensa da condividere con gli Utenti attraverso il portafoglio Yoroi dell'Utente. Le Ricompense matureranno alla fine di ogni epoca e appariranno automaticamente nel portafoglio Yoroi dell'Utente. -12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. - -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 **Rimborso dei Premi.** L'Utente è responsabile del pagamento di tutte le tasse applicabili, se presenti, a cui i Premi potrebbero essere soggetti e qualsiasi altra tassa che potrebbe essere applicata all'Utente una volta che i Premi sono stati riscattati. From e91c376d00dbc90a918497762ad9f5091039cd9b Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:17 +0100 Subject: [PATCH 361/464] New translations en-us.md (ko-KR) --- .../i18n/locales/terms-of-use/ada/ko-KR.md | 102 ++++++------------ 1 file changed, 35 insertions(+), 67 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/ko-KR.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/ko-KR.md index 62a96a1ef3..2a4c714681 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/ko-KR.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/ko-KR.md @@ -1,102 +1,70 @@ -# Terms of Service Agreement +# 서비스 규약 -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +이 서비스 규약(이하 ‘본 규약’이라 합니다)은 주식회사 EMURGO(이하 ‘당사’라 합니다)와 요로이 크립토커런시 월렛이라 칭하는 어플리케이션 소프트웨어 및 상기 소프트웨어와 함께 당사가 제공 또는 작성하는 데이터프로세싱 서비스, 어플리케이션, 통신 서비스 기타 컨텐츠(이하 ‘본 소프트웨어’라 합니다)를 다운로드, 이용, 또는 조작하기 위한 절차를 완료한 자(개인 또는 법인)(이하 ‘유저’라 합니다) 간에 체결되는 것입니다. 당사 및 유저를 ‘양 당사자’라 총칭합니다. 승인 버튼을 클릭하거나, 본 소프트웨어 어느 부분에 액세스하여 본 소프트웨어의 어느 부분을 이용하거나, 또는 본 소프트웨어의 어느 부분을 설치함으로써 유저는 본 규약의 모든 조항에 법적으로 구속된다는 점에 대해 명시적으로 동의한 것이 됩니다. 본 규약의 모든 조항에 동의하지 않는 경우에는, 유저는 본 소프트웨어의 어느 부분에 대해서도 액세스, 이용 또는 설치를 할 수 없습니다. -## 1. Rights and Obligations +## 1. 권리 및 의무 -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. 서술:** 본 소프트웨어는 무료 오픈소스 암호 화폐 지갑의 기능을 갖습니다. 본 소프트웨어는 당사 또는 기타 제3자가 유저의 ADA 또는 기타 암호화폐에 대한 관리인 또는 중개하도록 구성되어 있지 않습니다. 본 소프트웨어는 베타 테스트를 진행중이며, 개발자 커뮤니티, 오픈소스 공헌자 및 베타 테스터들로부터 피드백 받아 계속해서 개선되지만, 당사는 본 소프트웨어에 버그가 없다는 것을 보증하지 않습니다. 유저는 본 소프트웨어 이용에 대한 위험성과 책임을 이에 적용되는 모든 법률에 따른다는 점을 인지하고 있습니다. 유저에게는 자신의 비밀번호, 개인식별번호(PIN), 개인 키, 환원 키, 보호된 벤딩 키, 백업된 복구 구절, ADA 패스 코드 및 기타 사용자가 소프트웨어나 기타 어떤 정보, ADA, 바우처, 또는 어떤 암호화폐 단위에 대해 접근하기 위해 사용하는 코드를 안전하게 보관할 책임이 있습니다. 만일 유저가 자신의 암호화폐 지갑의 개인키 또는 백업 복구 구절과 패스워드를 분실한다면, 유저는 관련된 해당 지갑의 모든 암호화폐에 대한 접근 권한을 잃는다는 것을 인지하고있으며 이에 동의합니다. 또한 제출된 모든 거래 요청은 철회 불가능합니다. 당사 및 주주, 이사, 임원, 종업원, 관련 회사 및 대리인은 거래 확인을 보증할 수 없으며, 유저가 유저의 프라이빗 키 또는 패스워드를 분실 또는 잊어버린 경우라 하더라도 이를 복구해 줄 수 없습니다. -**b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. +**b. 접근성:** 유저는 본 소프트웨어가 제한 없이 때때로 어떤 이유, (i)기기 고장, (ii) 정기 점검 또는 때때로 당사에 의해 수행되는 유지보수, 또는 (iii) 당사가 제어할 수 없거나 당사가 합리적으로 예측할 수 없는 원인에 의해 접근 불가하거나 조작 불능이 될 가능성이 있다는 사실에 동의합니다. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. 기기:** 유저는, 유저가 본 소프트웨어를 이용하기 위한 모든 하드웨어, 소프트웨어, 전기에 관한 요건. 기타 물리적 요건(본 소프트웨어에 액세스하여, 본 소프트웨어를 이용하기 위해 필요한 전기 통신 및 인터넷 액세스 접속과 링크, 웹브라우저, 기타 기기, 프로그램 및 서비스를 포함하나 이에 한하지 않습니다)을 제공, 유지하고, 본 소프트웨어와의 호환성을 확보하는 것에 대해 단독으로 책임을 집니다. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. 보안:** 유저는, 유저가 본 소프트웨어를 통해 송수신하거나, 본 소프트웨어상 보관하는 모든 정보 및 컨텐츠 보안, 기밀성 및 완전성에 대해 단독으로 책임을 집니다. 유저는 여하한 자에 의한 유저 계정에 대한 정규 액세스 또는 부정 액세스에 대해 단독으로 책임을 집니다. 유저는 유저의 보안 디바이스, 정보, 키 및 패스워드의 기밀성에 대해 일체의 책임을 진다는 점에 대해 동의합니다. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. 프라이버시:** 합리적으로 실시 가능한 경우에는, 당사는 유저의 프라이버시를 존중하도록 노력합니다. 당사는 유저의 사전 동의 없이 유저 또는 유저 계정(그 내용 또는 유저에 의한 본 소프트웨어 이용을 포함합니다)에 관한 개인 정보를 감시, 편집 또는 공개하지 않습니다. (단, (i)정부 당국의 법적 절차 또는 기타 법적 요건에 따르기 위해, (ii)당사의 권리 또는 재산을 보호하기 위해, (iii)본 규약을 이행하기 위해, (iv)유저 이외의 본 소프트웨어 이용자 또는 기타의 자의 권리를 보호하기 위해, 또는 (v)당사 서비스 또는 기기(법률에 의해 인정되는 경우에는 본 소프트웨어를 포함합니다)를 운용하거나, 이들의 유지보수 및 수리를 하기 위해 이러한 행위가 필요하다고 당사가 성실하게 판단한 경우에는 그렇지 않습니다) 유저는 인터넷 전반에 대해 프라이버시를 기대할 수 없습니다. 유저의 IP 주소는 유저가 본 소프트웨어에서 송신하는 각 메시지 또는 기타 정보와 함께 송신되고, 기록됩니다. -## 2. Taxes and Fees +## 2. 세금 및 수수료 -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +통화 환전 수수료, 제3자 수수료, 매출세, 사용세, 부가가치세, 동산세 기타 모든 종류의 세금, 관세와 부과금(이들에 관한 이자 및 벌금을 포함합니다)(정부기관에 의해 현재 부과된 것인지, 또는 장래에 부과되는 것인지를 불문합니다) 및 유저에 의한 본 소프트웨어에 대한 액세스, 본 소프트웨어의 이용이나 본 소프트웨어의 설치에 의해 유저에게 발생하는 수수료는 모두 유저가 단독으로 부담합니다. -## 3. User Representations +## 3. 유저의 진술 -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +유저는 당사에 대해 (a)유저가 자연인인 경우에는 유저가 18세를 넘었다는 점, (b)유저는 본 규약을 체결하여, 본 규약에 근거한 유저의 의무를 이행할 권한 및 권능을 보유한다는 점, (c)유저가 당사에 제공하는 정보는 모두 진실, 정확하고도 완전하다는 점, (d)유저는 유저에 의한 본 소프트웨어에 대한 액세스, 본 소프트웨어의 이용 또는 본 소프트웨어의 설치에 관해 관련 법역의 모든 법령을 준수한다는 점, (e)유저는 본 규약의 모든 조항(제4항에 정한 규정을 포함하나, 이에 한하지 않습니다)을 준수한다는 점 및 (f)유저는 본 소프트웨어에 대한 액세스, 본 소프트웨어의 이용 또는 본 소프트웨어의 설치에 필요한 정확하고도 완전한 정보를 제공했으며, 앞으로도 제공할 것을 진술, 보장합니다. -## 4. Prohibited Uses +## 4. 금지된 이용 -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +유저는 유저 계정, 보안 정보, 키 또는 패스워드에 의해 생성되는 모든 작위 또는 부작위에 대해 단독으로 책임을 집니다. 또한, 유저는 용인할 수 없는 본 소프트웨어의 이용((a)일방적인 메시지, 연쇄 편지 또는 일방적인 상업 전제 메일을 확산, 보존하거나, 송신하는 것, (b)일반에 모욕적, 외설적, 포르노, 중상적, 괴롭힘, 현저히 불쾌한, 음란한, 협박적, 또는 악의가 있을 가능성이 있는 자료 등을 확산하거나, 송신하는 것, (c)여하한 자의 저작권, 상표, 특허, 영업비밀 또는 기타 지적재산권을 실제로 침해했거나, 침해할 가능성이 있는 파일, 그래픽, 소프트웨어 또는 기타 자료 등을 확산, 보존, 또는 송신하는 것, (d)통신의 동일성이나 출처에 대해 다른 사람을 가장하거나 기타의 형태로 여하한 자를 오해하게 하려고 시도하는 것, (e)관련 법역의 수출입 관련 법령 또는 규칙을 위반하거나, 필요한 모든 인허가나 면제를 받지 않고 메시지 또는 컨텐츠를 수출, 재수출하거나, 이들의 다운로드를 허가하는 것, (f)본 소프트웨어 또는 기타 컴퓨터 네트워크상의 기타 계정을 방해, 중단하거나, 이러한 계정에 부정 액세스하고자 시도하는 것, 또는 (g)바이러스, 트로이 목마 기타 악성 코드 또는 프로그램을 확산, 저장하거나 송신하는 것을 목적으로 한 본 소프트웨어 이용을 포함하나, 이에 한하지 않습니다)을 하지 않는 것에 동의합니다. -## 5. Termination +## 5. 해제 -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +본 규약은 본 규약에 규정한 유저에 의한 승인으로 발효되며, 유저가 본 소프트웨어에 대한 액세스, 본 소프트웨어의 이용 또는 본 소프트웨어의 설치를 하는 동안 유효하게 존속합니다. 당사는 자기 재량으로 통지 없이 언제든지 이유 여하를 불문하고 (a)본 소프트웨어의 전부 또는 일부에 대한 액세스를 제외하거나, 무효로 하고, (b)유저에 의한 본 소프트웨어의 전부 또는 일부에 대한 액세스 또는 그 이용을 정지시키며, (c)본 규약을 해제할 권리를 보유합니다. -## 6. Disclaimer of Warranties +## 6. 보증 포기 -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +본 소프트웨어는 명시적 또는 묵시적인지를 불문하고 어떠한 종류의 보증도 없이 ‘있는 그대로’제공됩니다. 본 소프트웨어의 이용은 유저의 단독 책임에 따릅니다. 당사는 본 소프트웨어가 중단되지 않고 오류가 없다고 보증하지 않으며, 본 소프트웨어를 이용함으로써 얻을 가능성이 있는 결과에 대해서 어떠한 보증도 하지 않습니다. 당사는 명시적 또는 묵시적인지를 불문하고 그밖에 다른 어떠한 보증도 하지 않습니다. 당사는 상품성에 대한 보증, 특정 목적 적합성에 대한 보증, 소유권 또는 권리에 대한 보증 및 비침해에 대한 보증을 명확하게 포기합니다. -## 7. Limitation of Liability +## 7. 책임 제한 -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +어떠한 경우에도 당사 및 그 주주, 이사, 임원, 종업원, 관련 회사와 대리인 및 당사와 이들 서비스 제공자는 이용, 중단, 지연 또는 본 소프트웨어의 이용 불능, 수익감소 또는 일실이익, 서비스, 사업 또는 신용 지연, 중단 또는 상실, 데이터 상실 또는 파손, 시스템 또는 시스템 서비스 장애에 기인한 손실, 오작동 또는 셧다운, 정보의 정확한 전송, 판독 또는 송신이 불가능한 것, 정확한 정보를 갱신하거나 제공하지 못하는 것, 시스템 비호환성, 부정확한 호환성 정보 제공 또는 시스템 보안 침해에 대해, 또한 간접 손해 배상금, 부수적 손해 배상금, 징벌적 손해 배상금 또는 특별 손해 배상금(본 규약, 계약 위반, 불법행위(과실을 포함합니다) 또는 기타에 기인하거나 관련되었는지 여부를 불문합니다)(이러한 손해배상금이 예견 가능했는지 여부 또한 당사가 이러한 손해배상금 가능성에 대해 통지를 받았는지 여부를 불문합니다)에 대해 유저 또는 제3자에게 책임을 지지 않습니다. 어떠한 경우에도 당사 및 그 주주, 이사, 임원, 종업원, 관련 회사와 대리인 및 당사와 이들 서비스 제공자는 유저에 의한 본 소프트웨어의 액세스, 본 소프트웨어의 이용 또는 본 소프트웨어의 설치에 기인하거나, 어떠한 형태로든 관련된 모든 청구, 손해, 기타 채무(소송상, 계약상, 불법행위 또는 기타 별도의 것을 불문합니다)에 대해서도 책임을 지지 않습니다. 일부 법역에서는 부수적 손해 배상금 또는 간접 손해 배상금 제외 또는 제한을 금지하고 있으므로, 이 책임 제한이 유저에게 적용되지 않을 가능성이 있습니다. 유저가 본 소프트웨어에 만족하지 않은 경우의 유저의 유일하고도 배타적인 구제 수단은 유저에 의한 본 소프트웨어의 이용 중지로 합니다. -## 8. Indemnification +## 8. 보상 -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +유저는 (a)본 규약, (b)유저에 의한 본 소프트웨어(유저가 송수신하는 데이터 또는 저작물을 포함합니다)에 대한 액세스, 본 소프트웨어(유저가 송수신하는 데이터 또는 저작물을 포함합니다)의 이용 또는 본 소프트웨어(유저가 송수신하는 데이터 또는 저작물을 포함합니다)의 설치, 및 (c)여하한 자에 의한 본 소프트웨어의 용인되지 않는 이용(제4조에 의해 용인되지 않는 것으로 금지된 유저 또는 여하한 자에 의하여 이루어지거나, 송신되거나, 재공표된 진술, 데이터 또는 컨텐츠를 포함하나, 이에 한하지 않습니다)에 기인 또는 관련하여 여하한 자가 주장하는 여하한 소 제기, 소송, 청구, 손해, 부채, 요구 또는 채무(합리적 비용 및 변호사보수를 포함합니다)에 대해서도 당사, 그 주주, 이사, 임원, 종업원, 관련 회사 및 대리인(이하 ‘피보상 당사자’라 합니다)을 보상하고, 피보상 당사자를 면책하며, 피보상 당사자를 방어하는 데 동의합니다. 이 보상에는 당사 또는 피보상 당사자의 과실이라 여겨지는 것(중과실이라 여겨지는 것을 포함합니다) 또는 기타 위법행위라 여겨지는 것에 대한 당사 및 모든 피보상 당사자의 명시적 보상을 포함합니다. -## 9. Intellectual Property +## 9. 지적 재산 -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +당사는 당사의 모든 브랜드, 로고 및 상표(주식회사 EMURGO, EMURGO, 요로이, 요로이 크립토커런시 월렛, 요로이 월렛, 요로이 어플리케이션 및 상기 브랜드, 로고 및 상표의 표현이 변화한 것을 포함하나, 이에 한하지 않습니다)에 관한 모든 권리, 권한 및 이익을 보유합니다. -## 10. Warnings +## 10. 경고 -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +유저는 당사가 프라이빗 키 및/또는 유저의 ADA 기타 가상통화를 이동, 보관 또는 유지할 책임을 지지 않는다는 것을 인지하고 있습니다. 유저 및/또는 공동서명권자가 관련된 프라이빗 키를 분실하거나, 잘못 취급하거나, 절도 당한 경우 또는 유저의 공동서명자가 필요한 권한을 제공하는 것을 거부한 경우에는, 유저는, 유저가 자신의 ADA 기타 가상통화를 회수하지 못할 가능가능 있다는 점, 이러한 손실에 대해 당사는 책임지지 않는다는 점을 인지하고 있습니다. 유저는 본 소프트웨어 및/또는 당사에 의해 촉진되는 ADA 기타 가상 통화 거래가 지연될 가능성이 있다는 점, 지연에 따르는 어떠한 손실에 대해서도 당사는 책임지지 않는다는 점을 인지하고 있으며, 이에 동의합니다. 유저는 본 소프트웨어 및/또는 당사에 액세스 가능한 또는 연결된 제3자 자료 등 또는 제3자 사이트에 포함된 정보, 콘텐츠 또는 서비스 중 어느 하나에 대해서도 당사는 책임지지 않는다는 점을 인지하고 있으며, 이에 동의합니다. 유저는 유저가 유저 증명서를 어떠한 자연인 또는 법인(당사, 카르다노 재단, 인풋•아웃풋•에이치케이•리미티드 또는 기타 조직을 포함합니다)과도 공유하지 않음에 동의합니다. 또한 유저는 유저 증명서를 공유함으로써 유저의 ADA 기타 가상 통화를 잃을 가능성이 있다는 점을 인지하고 있으며, 이러한 손실에 대해 당사는 책임지지 않는다는 점에 동의합니다. 유저는 테스트넷 상에서 ADA를 환원함으로써, 유저는 테스트 ADA만을 환원한다는 점, 실제 ADA를 환원하기 위해서는 유저는 출시 후 메인넷 상에서 절차를 반복해야 함을 인지하고 있으며, 이에 동의합니다. 본 소프트웨어를 이용함으로써, 유저는 (i)당사가 하층 프로토콜 운용에 대해 책임을 지지 않는다는 점, 당사가 그 기능성, 보안 및 가용성에 대해 아무런 보증을 하지 않는다는 점, (ii)규칙 운용 상, 하층 프로토콜은 메인 체인의 갑작스런 변경(이하 ‘포크’라 합니다)에 의한 영향을 받을 가능성이 있다는 점, 이러한 포크는 유저가 본 소프트웨어 상에서 보관하는 ADA 기타 가상통화의 가치 및/또는 기능에 중대한 영향을 미칠 가능성이 있다는 점을 인지하고 있으며, 이에 동의합니다. 포크한 경우 유저는 당사가(유저에게 통지한 후, 또는 유저에게 통지하지 않고) 본 소프트웨어 운용을 일시적으로 정지할 수 있다는 점, 당사가 자기 재량으로 (a)자사 시스템 설정 또는 재설정을 할 수 있다는 점, 또는 (b)포크한 프로토콜을 일체 지원하지 않겠다는(또는 지원을 정지하는) 취지의 결정을 할 수 있다는 점에 동의합니다 (단, 유저에게는 본 소프트웨어에서 자금을 인출할 기회가 있습니다). 유저는 포크한 프로토콜 중 지원 대상 외 브랜치에 대해 당사는 일체 책임지지 않는다는 점을 인지하고 있으며, 이에 동의합니다. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +**a. 변경:** 당사는 유저가 당사에 신고한 주소로 어느 하나의 매체를 통해 보내는 전자 메시지로 변경 후의 조항을 유저에게 제시함으로써, 언제든지 통지 없이 본 규약의 조항을 추가하거나 변경할 수 있습니다. 이러한 변경 후 조항이 유저에게 제시된 날 이후에 유저가 본 소프트웨어에 액세스하거나, 본 소프트웨어를 이용한 경우에는 이러한 변경 후 조항이 승낙된 것으로 간주합니다. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. +**c. 완전합의-의거 포기:** 본 규약은, 본 규약의 내용에 관한 양 당사자 간의 완전한 합의를 구성하며, 양 당사자 간의 기존의 모든 합의 사항 및 양해 사항에 우선합니다. 유저는 본 규약에 명기된 것 외의 진술, 양해 사항, 표명 사항, 기대 사항 또는 합의 사항에 의거하지 않았음을 명시적으로 진술, 보장합니다. -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +## 11. 기타 -## 11. Miscellaneous +**a. 개정** 당사는 유저에 의해 제공된 주소로의 어떤 전자적 매체를 통해 수정 조항을 송부함으로 어느 때나 통보 없이 이 동의서의 조항들을 수정하거나 추가할 권한을 갖습니다. 수정일 후 소프트웨어에 접근하거나 사용한 유저'는 수정된 조항들을 받아들인 것으로 간주합니다. -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**b. 분리해석 ** 만일 이 규약의 어떤 조항이나 조항의 일부분이 무효하거나 위법하거나 시행할 수 없게 되면 최소한의 유효하고 합법적이고 시행 가능한 부분으로 수정 되는 것으로 간주합니다. 만일 이러한 수정이 불가능하다면, 관련된 조항이나 조항의 일부분은 삭제된 것으로 간주됩니다. 조항 또는 조항의 일부분의 어떠한 수정 또는 삭제는 규약의 나머지 부분의 타당성에 영향을 끼치지 않습니다. -**b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. +**c. 완전합의-의거 포기:** 본 규약은, 본 규약의 내용에 관한 양 당사자 간의 완전한 합의를 구성하며, 양 당사자 간의 기존의 모든 합의 사항 및 양해 사항에 우선합니다. 유저는 본 규약에 명기된 것 외의 진술, 양해 사항, 표명 사항, 기대 사항 또는 합의 사항에 의거하지 않았음을 명시적으로 진술, 보장합니다. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**d. 본 규약은 구속력 있는 중재에 따릅니다:** 유저는 본 규약 또는 유저나 기타의 자에 의한 본 소프트웨어에 대한 액세스, 본 소프트웨어의 이용 또는 본 소프트웨어의 설치에 기인하거나, 어떠한 형태로든 관련된 분쟁 또는 여하한 자에 대한 청구는, 모두 국제상업회의소의 중재규칙에 근거하여 선임된 1명 내지 여러 명의 중재인에 의한 동 규칙에 근거한 구속력 있는 중재에 따른다는 점에 동의합니다. 중재지는 일본으로 하며, 중재 언어는 영어로 합니다. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. - -**e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. +**e. 언어:** 본 규약의 번역은 현지에서의 참조 편의를 위해 작성되는 것이며, 영어판과 영어 외 언어판과의 사이에 불일치가 있는 경우에는, 본 규약의 영어판이 모든 점에서 우선합니다. ## 12. Delegation and Staking @@ -106,4 +74,4 @@ If you have any questions or concerns regarding the accuracy or reliability of t 12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. From 7d6a3717053888c27245b9352f575b68d203611a Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:19 +0100 Subject: [PATCH 362/464] New translations en-us.md (Dutch) --- .../i18n/locales/terms-of-use/ada/nl-NL.md | 110 +++++++----------- 1 file changed, 39 insertions(+), 71 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/nl-NL.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/nl-NL.md index 62a96a1ef3..73128859cd 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/nl-NL.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/nl-NL.md @@ -1,109 +1,77 @@ -# Terms of Service Agreement +# Algemene voorwaarden -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +DEZE SERVICEVOORWAARDENOVEREENKOMST ("Overeenkomst") wordt gesloten tussen EMURGO Co., Ltd. ("Bedrijf") en elke persoon of entiteit ("Gebruiker") die het proces voor het downloaden, gebruiken of bedienen van de software voltooit bekend als de Yoroi cryptocurrency Wallet-applicatie, en gegevensverwerkingsdienst, applicatie, communicatiedienst of andere inhoud of aangeboden of geleverd met de software door het Bedrijf ("Software"). Het Bedrijf en de Gebruiker worden gezamenlijk de "Partijen" genoemd. DOOR OP DE ACCEPTATIEKNOP TE KLIKKEN OF EEN ONDERDEEL VAN DE SOFTWARE TE OPENEN, TE GEBRUIKEN OF TE INSTALLEREN, GAAT DE GEBRUIKER UITDRUKKELIJK AKKOORD MET ALLE VOORWAARDEN VAN DEZE OVEREENKOMST. ALS DE GEBRUIKER NIET AKKOORD GAAT MET ALLE VOORWAARDEN VAN DEZE OVEREENKOMST, IS DE GEBRUIKER NIET GEMACHTIGD OM TOEGANG TE KRIJGEN TOT ENIG ONDERDEEL VAN DE SOFTWARE, HET TE GEBRUIKEN OF TE INSTALLEREN. -## 1. Rights and Obligations +## 1. Rechten en verplichtingen -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. Omschrijving.** De software functioneert als een gratis, open source, digitale cryptovaluta-portemonnee. De software vormt geen account waarmee het bedrijf of enige andere derde partij optreedt als financiële tussenpersoon of bewaarder van de ADA van de gebruiker of enige andere crypto valuta. Hoewel de software bètatests heeft ondergaan en nog steeds wordt verbeterd door feedback van de ontwikkelaarsgemeenschap, open source-bijdragers en bètatesters, kan het bedrijf niet garanderen dat er geen bugs in de software zitten. De gebruiker erkent dat het gebruik van de software door de gebruiker voor risico en discretie van de gebruiker is en in overeenstemming met alle toepasselijke wetten. De gebruiker is verantwoordelijk voor het veilig houden van de wachtwoorden, pincodes, privésleutels, inwisselsleutels, afgeschermde verkoopsleutels, back-upherstel-geheugensteuntjes, ADA-toegangscodes en andere codes die de gebruiker gebruikt om toegang te krijgen tot de software of enige informatie, ADA, voucher of andere cryptovaluta-eenheid. ALS DE GEBRUIKER DE TOEGANG TOT DE CRYPTOVALUTA PORTEFEUILLE OFDE PRIVÉ SLEUTELS VERLIEST EN NIET APART EEN BACK-UP VAN DE CRYPTOVALUTA PORTEFEUILLE OF E HERSTEL WOORDEN TEKST EN BIJBEHOREND WACHTWOORD HEEFT OPGESLAGEN DE CRYPTOVALUTA PORTEFEUILLE ONBEREIKBAAR ZAL ZIJN GEWORDEN. Alle transactieverzoeken zijn onomkeerbaar. Het bedrijf en zijn aandeelhouders, directeuren, functionarissen, werknemers, gelieerde ondernemingen en agenten kunnen de bevestiging van transacties niet garanderen of de privésleutels of wachtwoorden van de gebruiker niet ophalen als de gebruiker ze verliest of vergeet. -**b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. +**b. Toegang tot de applicatie.** De gebruiker gaat ermee akkoord dat de software van tijd tot tijd om welke reden dan ook ontoegankelijk of onbruikbaar kan zijn, inclusief maar niet beperkt tot: (i) defecten aan de apparatuur; (ii) periodieke onderhoudsprocedures of reparaties die de onderneming van tijd tot tijd kan uitvoeren; of (iii) oorzaken buiten de controle van het bedrijf of die redelijkerwijs niet te voorzien zijn door het bedrijf. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. Apparatuur.** De gebruiker is als enige verantwoordelijk voor het leveren, onderhouden en verzekeren van compatibiliteit met de software, alle hardware, software, elektrische en andere fysieke vereisten voor het gebruik van de software door de gebruiker, inclusief maar niet beperkt tot telecommunicatie- en internettoegangsverbindingen en -links, webbrowsers of andere apparatuur, programma's en services die nodig zijn voor toegang tot en gebruik van de Software. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. Beveiliging.** Gebruiker is als enige verantwoordelijk voor de beveiliging, vertrouwelijkheid en integriteit van alle informatie en inhoud die de gebruiker ontvangt, verzendt of opslaat op de software. De gebruiker is als enige verantwoordelijk voor elke geautoriseerde of ongeoorloofde toegang tot een account van de gebruiker door een persoon. Gebruiker stemt ermee in alle verantwoordelijkheid te dragen voor de vertrouwelijkheid van de beveiligingsapparaten, informatie, sleutels en wachtwoorden van de gebruiker. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. Privacy.** Indien redelijkerwijs mogelijk, zal het bedrijf proberen de privacy van de gebruiker te respecteren. Het bedrijf zal geen persoonlijke informatie over de gebruiker of het account van de gebruiker controleren, bewerken of openbaar maken, inclusief de inhoud of het gebruik van de software door de gebruiker, zonder voorafgaande toestemming van de gebruiker, tenzij het bedrijf te goeder trouw van mening is dat een dergelijke actie nodig is om: (i) voldoen aan de juridische procedure of andere wettelijke vereisten van een overheidsinstantie; (ii) om de rechten of eigendom van de onderneming te beschermen en verdedigen; (iii) deze overeenkomst afdwingen; (iv) de belangen van gebruikers van de Software anders dan Gebruiker of enige andere persoon beschermen; of (v) onderhoud of reparatie van de diensten of apparatuur van het Bedrijf, inclusief de Software, zoals wettelijk toegestaan. De gebruiker verwacht geen privacy met betrekking tot internet in het algemeen. Het IP-adres van de gebruiker wordt verzonden en vastgelegd bij elk bericht of andere informatie die de gebruiker vanuit de software verzendt. -## 2. Taxes and Fees +## 2. Belastingen en vergoedingen -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +Alle kosten voor het omrekenen van valuta, vergoedingen voor derden, verkoop, gebruik, toegevoegde waarde, persoonlijke eigendommen of andere belastingen, heffingen of heffingen van welke aard dan ook, inclusief rente en boetes daarop, nu opgelegd of hierna door een overheidsinstantie, en vergoedingen gemaakt door Gebruiker is vanwege de toegang, het gebruik of de installatie van de software door de gebruiker de exclusieve verantwoordelijkheid van de gebruiker. -## 3. User Representations +## 3. Gebruikersvertegenwoordigingen -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +De gebruiker verklaart en garandeert aan het bedrijf dat: (a) als de gebruiker een natuurlijke persoon is, de gebruiker ouder dan achttien (18) jaar is; (b) Gebruiker de bevoegdheid en autoriteit heeft om de verplichtingen van Gebruiker uit hoofde van deze Overeenkomst aan te gaan en uit te voeren; (c) alle door de gebruiker aan het bedrijf verstrekte informatie waarheidsgetrouw, nauwkeurig en volledig is; (d) de gebruiker zal voldoen aan alle wetten en voorschriften van elk toepasselijk rechtsgebied met betrekking tot de toegang, het gebruik of de installatie van de software door de gebruiker; (e) De gebruiker moet voldoen aan alle voorwaarden van deze overeenkomst, inclusief maar niet beperkt tot de bepalingen uiteengezet in sectie 4; en (f) de gebruiker heeft en zal nauwkeurige en volledige informatie verstrekken zoals vereist voor toegang, gebruik of installatie van de software. -## 4. Prohibited Uses +## 4. Verboden gebruik -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +De gebruiker is als enige verantwoordelijk voor alle handelingen en weglatingen die zich voordoen onder het account, de beveiligingsinformatie, de sleutels of het wachtwoord van de gebruiker, en de gebruiker stemt ermee in zich niet in te laten met onaanvaardbaar gebruik van de software, waaronder, zonder beperking, gebruik van de software om: ( a) ongevraagde berichten, kettingbrieven of ongevraagde commerciële e-mail verspreiden, opslaan of verzenden; (b) materiaal te verspreiden of door te geven dat, voor een redelijk persoon, beledigend, obsceen, pornografisch, lasterlijk, intimiderend, grof beledigend, vulgair, bedreigend of kwaadaardig kan zijn; (c) bestanden, afbeeldingen, software of ander materiaal dat daadwerkelijk of mogelijk inbreuk maakt op het auteursrecht, handelsmerk, octrooi, handelsgeheim of ander intellectueel eigendomsrecht van een persoon verspreiden, opslaan of verzenden; (d) een valse identiteit te creëren of anderszins te proberen iemand te misleiden met betrekking tot de identiteit of oorsprong van enige communicatie; (e) exporteren, opnieuw exporteren of downloaden van berichten of inhoud toestaan in strijd met export- of importwetgeving, regulering of beperking van enige toepasselijke jurisdictie, of zonder alle vereiste goedkeuringen, licenties of uitzonderingen; (f) interfereren, verstoren of proberen ongeautoriseerde toegang te verkrijgen tot andere accounts op de Software of een ander computernetwerk; of (g) virussen, Trojaanse paarden of enige andere kwaadaardige code of programma verspreiden, opslaan of verzenden. -## 5. Termination +## 5. Beëindiging -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +Deze overeenkomst is van kracht na aanvaarding door de gebruiker zoals hierin uiteengezet en zal volledig van kracht blijven zolang de gebruiker zich bezighoudt met toegang, gebruik of installatie van de software. Het bedrijf behoudt zich het recht voor om, naar eigen goeddunken en zonder kennisgeving, op elk moment en om welke reden dan ook: (a) de toegang tot alle of een deel van de software te verwijderen of uit te schakelen; (b) de toegang tot of het gebruik van alle of een deel van de Software door de Gebruiker op te schorten; en (c) deze overeenkomst beëindigen. -## 6. Disclaimer of Warranties +## 6. Afwijzing van garanties -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +DE SOFTWARE WORDT GELEVERD "ZOALS GELEVERD", ZONDER ENIGE GARANTIE, EXPLICIET OF IMPLICIET. GEBRUIK VAN DE SOFTWARE IS OP EIGEN RISICO VAN DE GEBRUIKER. HET BEDRIJF GARANDEERT NIET DAT DE SOFTWARE ONONDERBROKEN OF FOUTLOOS ZAL ZIJN, EN GEEFT HET BEDRIJF GEEN ENKELE GARANTIE MET BETREKKING TOT RESULTATEN DIE KUNNEN WORDEN VERKREGEN DOOR GEBRUIK VAN DE SOFTWARE. HET BEDRIJF GEEFT GEEN ANDERE GARANTIES, EXPLICIET OF IMPLICIET. HET BEDRIJF WIJST UITDRUKKELIJK ELKE GARANTIE VAN VERKOOPBAARHEID, GARANTIE VAN GESCHIKTHEID VOOR EEN BEPAALD DOEL, GARANTIE VAN TITEL OF BELANG, OF GARANTIE VAN NIET-INBREUK AF. -## 7. Limitation of Liability +## 7. Beperking van aansprakelijkheid -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +IN GEEN GEVAL ZAL DE ONDERNEMING OF HAAR AANDEELHOUDERS, DIRECTEUREN, OFFICIEREN, WERKNEMERS, AANGESLOTEN OF AGENTEN, OF HUN OF HUN RESPECTIEVE DIENSTVERLENERS, AANSPRAKELIJK ZIJN VOOR GEBRUIKER OF ENIGE DERDE PARTIJ VOOR ENIG GEBRUIK, ONDERBREKING, VERTRAGING VAN DE SOFTWARE, VERLOREN INKOMSTEN OF WINST, VERTRAGING, ONDERBREKING OF VERLIES VAN DIENSTEN, ZAKEN OF GOODWILL, VERLIES OF CORRUPTIE VAN GEGEVENS, VERLIES ALS GEVAL VAN SYSTEEM- OF SYSTEEMDIENSTSTORING, STORING OF COMPUTERUITVAL, HET NIET NAUWKEURIG OVERZETTEN VAN INFORMATIE,LEZEN OF VERZENDEN VAN DE JUISTE INFORMATIE, SYSTEEMVERSCHILLEN OF VERSTREKKING VAN ONJUISTE COMPATIBILITEITSINFORMATIE OF FOUTEN IN SYSTEEMBEVEILIGING, OF VOOR ELKE SCHADE ALS GEVOLG VAN INCIDENTELE, INDIRECTE, BIJ GEBRUIK ALS VOORBEELD, SPECIALE OF OPZETTELIJKE SCHADE, OF HET ONTSTAAT IN HET KADER VAN DEZE OVEREENKOMST OF HIER BUITEN, SCHENDING VAN HET CONTRACT, ONRECHTMATIGE DAAD (INCLUSIEF NALATIGHEID) OF ANDERSZINS, ONGEACHT OF DERGELIJKE SCHADE TE VOORKOMEN ZIJN EN OF WIJ OF MOGELIJK WERDEN GESTELD VAN DE MOGELIJKHEID VAN ZULKE SCHADE. IN GEEN GEVAL ZAL DE ONDERNEMING OF HAAR AANDEELHOUDERS, DIRECTEUREN, OFFICIEREN, WERKNEMERS, AANGESLOTEN OF AGENTEN, OF HUN OF HUN RESPECTIEVE DIENSTVERLENERS, AANSPRAKELIJK ZIJN VOOR ENIGE CLAIM, SCHADE OF ANDERE AANSPRAKELIJKHEID, WELKE ACTIE OF CONTRACT OP ANDERE WIJZE VOORTVLOEIEND UIT OF OP EEN MANIER IN VERBAND MET DE TOEGANG VAN GEBRUIKER, GEBRUIK OF INSTALLATIE VAN DE SOFTWARE. SOMMIGE RECHTSGEBIEDEN VERBODEN DE UITSLUITING OF BEPERKING VAN INCIDENTELE OF GEVOLGSCHADE, DUS IS DEZE BEPERKING VAN AANSPRAKELIJKHEID MOGELIJK NIET VAN TOEPASSING OP DE GEBRUIKER. ALS DE GEBRUIKER NIET TEVREDEN IS MET DE SOFTWARE, ZAL DE ENIGE EN EXCLUSIEVE MOGELIJKHEID VAN DE GEBRUIKER ZIJN HET GEBRUIK VAN DE SOFTWARE TE STOPPEN. -## 8. Indemnification +## 8. Vrijwaring -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +De gebruiker stemt ermee in het bedrijf, zijn aandeelhouders, directeuren, functionarissen, werknemers, gelieerde ondernemingen en agenten ("gevrijwaarde partijen") te vrijwaren van en te verdedigen tegen en voor elke actie, oorzaak, claim, schade, schuld, eis of aansprakelijkheid, inclusief redelijke kosten en advocatenhonoraria, opgesteld door een persoon, die voortvloeit uit of verband houdt met: (a) deze overeenkomst; (b) Toegang, gebruik of installatie van de software door de gebruiker, inclusief gegevens of werk dat door de gebruiker is verzonden of ontvangen; en (c) elk onaanvaardbaar gebruik van de Software door een persoon, met inbegrip van, maar niet beperkt tot, een verklaring, gegevens of inhoud die is gemaakt, verzonden of opnieuw gepubliceerd door de Gebruiker of een persoon die volgens sectie 4 verboden is als onaanvaardbaar. DEZE VRIJWARING BEVAT DE UITDRUKKELIJKE VRIJWARING VAN DE ONDERNEMING EN ALLE VRIJWARENDE PARTIJEN VOOR ELKE BEVOEGDE NALATIGHEID (INCLUSIEF ELKE GEGEVEN GROTE NALATIGHEID). OF ANDERE VERMELDE WANGEDRAG VAN DE ONDERNEMING OF ELKE GEVRIJWAARDE PARTIJ. -## 9. Intellectual Property +## 9. Intellectueel eigendom -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +Het bedrijf behoudt alle rechten, titels en belangen in en voor alle merken, logo's en handelsmerken van het bedrijf, inclusief, maar niet beperkt tot, EMURGO Co., Ltd., EMURGO, Yoroi, Yoroi Cryptovaluta Portemonnee, Yoroi Portemonnee, Yoroi App en variaties op de bewoordingen van de bovengenoemde merken, logo's en handelsmerken. -## 10. Warnings +## 10. Waarschuwingen -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +Gebruiker erkent dat het bedrijf niet verantwoordelijk is voor het overdragen, beschermen of onderhouden van privésleutels en / of ADA van de gebruiker of enige andere cryptovaluta. Als de gebruiker en / of enige medeondertekenende autoriteit de bijbehorende privésleutels verliest, verkeerd behandelt of heeft gestolen, of als de mede-ondertekenaars van de gebruiker weigeren de vereiste autoriteit te verlenen, erkent de gebruiker dat de gebruiker de ADA van de gebruiker of enige andere cryptovaluta mogelijk niet kan herstellen, en dat het bedrijf is niet verantwoordelijk voor dergelijk verlies. De gebruiker erkent en gaat ermee akkoord dat ADA of andere cryptovaluta-transacties die door de software en / of het bedrijf worden gefaciliteerd, vertraagd kunnen zijn en dat het bedrijf niet verantwoordelijk is voor enig bijbehorend verlies. De gebruiker erkent en gaat ermee akkoord dat het bedrijf niet verantwoordelijk is voor enig aspect van de informatie, inhoud of diensten in materiaal van derden of op sites van derden die toegankelijk zijn voor of gelinkt zijn aan de software en / of het bedrijf. De gebruiker stemt ermee in dat de gebruiker nooit het certificaat van de gebruiker mag delen met een natuurlijke of rechtspersoon, inclusief het bedrijf, Cardano Foundation, Input Output HK Limited of een andere entiteit. Verder erkent de gebruiker dat het delen van het gebruikerscertificaat kan leiden tot verlies van de ADA van de gebruiker of enige andere cryptovaluta, en de gebruiker gaat ermee akkoord dat het bedrijf niet verantwoordelijk is voor dergelijk verlies. De gebruiker erkent en gaat ermee akkoord dat de gebruiker, door ADA in het “Testnet” in te wisselen, alleen test-ADA inwisselt en dat de gebruiker, om de daadwerkelijke ADA in te wisselen, de procedure in het “Openbare net” moet herhalen, zodra deze is vrijgegeven. Door de Software te gebruiken, erkent en gaat Gebruiker ermee akkoord: (i) dat het Bedrijf niet verantwoordelijk is voor de werking van de onderliggende protocollen en dat het Bedrijf geen garantie biedt voor hun functionaliteit, veiligheid of beschikbaarheid; en (ii) dat de onderliggende protocollen onderhevig zijn aan plotselinge veranderingen in de hoofdketen in de bedrijfsregels ("vorken"), en dat dergelijke vorken de waarde en / of functie van de ADA of enige andere cryptovaluta waarop de gebruiker opslaat wezenlijk kunnen beïnvloeden de software. In het geval van een splitsing stemt de gebruiker ermee in dat het bedrijf de softwareactiviteiten tijdelijk kan opschorten (met of zonder kennisgeving aan de gebruiker) en dat het bedrijf, naar eigen goeddunken, (a) zijn systemen kan configureren of opnieuw configureren of (b) kan beslissen het gesplitste protocol niet volledig te ondersteunen (of niet meer te ondersteunen), op voorwaarde echter dat de Gebruiker de mogelijkheid krijgt om geld op te nemen van de Software. Gebruiker erkent en gaat ermee akkoord dat het bedrijf absoluut geen enkele verantwoordelijkheid aanvaardt met betrekking tot een niet-ondersteunde tak van een gevorkt protocol. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +Door de Software te gebruiken, erkent en gaat Gebruiker ermee akkoord: (i) dat het Bedrijf niet verantwoordelijk is voor de werking van de onderliggende protocollen en dat het Bedrijf geen garantie biedt voor hun functionaliteit, veiligheid of beschikbaarheid; en (ii) dat de onderliggende protocollen onderhevig zijn aan plotselinge veranderingen in de operationele regels van de hoofdketen ("vorken"), en dat dergelijke vorken de waarde en / of functie van de ADA of enige andere cryptovaluta die de gebruiker opslaat wezenlijk kunnen beïnvloeden op de software. In het geval van een splitsing stemt de gebruiker ermee in dat het bedrijf de softwareactiviteiten tijdelijk kan opschorten (met of zonder kennisgeving aan de gebruiker) en dat het bedrijf, naar eigen goeddunken, (a) zijn systemen kan configureren of opnieuw configureren of (b) kan beslissen het gesplitste protocol niet volledig te ondersteunen (of niet meer te ondersteunen), op voorwaarde echter dat de Gebruiker de mogelijkheid krijgt om geld op te nemen van de Software. De gebruiker erkent en gaat ermee akkoord dat het bedrijf absoluut geen enkele verantwoordelijkheid aanvaardt met betrekking tot een niet-ondersteunde vertakking van een uitgesplitst protocol. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. +**a. Amendement.** Het bedrijf heeft het recht om op elk moment en zonder voorafgaande kennisgeving de voorwaarden van deze overeenkomst toe te voegen of te wijzigen, simpelweg door dergelijke gewijzigde voorwaarden aan de gebruiker te bezorgen via een elektronisch bericht via elk medium naar elk adres dat door de gebruiker aan het bedrijf is verstrekt. De toegang tot of het gebruik van de software door de gebruiker na de datum waarop dergelijke gewijzigde voorwaarden aan de gebruiker worden geleverd, wordt beschouwd als acceptatie van dergelijke gewijzigde voorwaarden. -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +## 11. Diversen -## 11. Miscellaneous +**b. Opzegging.** Als enige bepaling of deelbepaling van deze overeenkomst ongeldig of niet-afdwingbaar is of wordt, wordt deze geacht te zijn gewijzigd tot het minimum dat nodig is om deze geldig, legaal en afdwingbaar te maken. Indien een dergelijke wijziging niet mogelijk is, wordt de desbetreffende bepaling of deelbepaling geacht te zijn geschrapt. Elke wijziging of schrapping van een bepaling of deelbepaling krachtens dit artikel heeft geen invloed op de geldigheid en afdwingbaarheid van de rest van deze overeenkomst. -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**c. c. Gehele overeenkomst - Disclaimer van vertrouwen**. Deze overeenkomst vormt de volledige overeenkomst tussen de partijen met betrekking tot het onderwerp hiervan en vervangt alle eerdere overeenkomsten of afspraken tussen de partijen. De gebruiker verklaart en garandeert uitdrukkelijk dat hij niet vertrouwt op andere verklaringen, afspraken, verklaringen, verwachtingen of overeenkomsten dan die welke uitdrukkelijk in deze overeenkomst zijn uiteengezet. -**b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. +**d. DEZE OVEREENKOMST IS ONDERWORPEN AAN BINDENDE ARBITRAGE.** De gebruiker stemt ermee in dat alle geschillen of claims tegen een persoon die voortvloeit uit of op enigerlei wijze verband houdt met deze overeenkomst of de toegang, het gebruik of de installatie van de software door de gebruiker of een andere persoon, onderworpen zullen zijn aan bindende arbitrage onder de arbitrageregels van de Internationale Kamer van Koophandel door een of meer arbiters die zijn aangewezen in overeenstemming met de genoemde regels. De plaats van arbitrage is Japan. De taal van de arbitrage is Engels. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**e. TAAL.** Elke vertaling van deze overeenkomst is uitsluitend gemaakt voor lokale referentie en in het geval van enige tegenstrijdigheid tussen de Engelse en niet-Engelse versies, zal de Engelse versie van deze overeenkomst prevaleren en in alle opzichten gelden. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. +12.1 ** Beloningen. ** Het aantal Beloningen dat een gebruiker kan verdienen door delegatie hangt af van verschillende factoren, waaronder, maar niet beperkt tot, gebruikersparticipatie, winstmarges van de "Stakepool" en het volume van gedelegeerde Ada. Het is mogelijk dat delegatie geen beloning voor een gebruiker genereert vanwege de bovengenoemde factoren. Beloningen worden verdiend vanaf het begin van het derde periode op de Cardano Blockchain. -**e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. +## 12. Delegeren en "Staken" -## 12. Delegation and Staking +12.2 ** Delegatie. ** Gebruikers kunnen hun inzet delegeren aan een van de verschillende Stakepools van het bedrijf of van derden. De gebruiker heeft het exclusieve recht om het volume te bepalen dat aan een Stakepool moet worden gedelegeerd en kan het niveau van deelname op elk moment verhogen of verlagen. Alle informatie die het bedrijf deelt met betrekking tot Stakepools, inclusief prestatiestatistieken en beloningen, is alleen voor indicatieve doeleinden en is mogelijk niet nauwkeurig. Gebruikers mogen hun inzet alleen delegeren aan een Stakepool als hun Ada zich in een bijgewerkte Daedalus of een bijgewerkte Yoroi-portemonnee bevindt ten tijde van het installatieproces. Gebruiker verwerft geen automatisch recht op beloningen als gevolg van het delegeren van zijn inzet. -12.1 **Rewards.** The amount of Rewards a User may earn from delegation depends on various factors including, but not limited to, user participation, stakepool profit margins and the volume of ada being delegated. It is possible that delegation generates no Reward for a User due to the above-mentioned factors. Rewards are earned as of the start of the 3rd epoch on the Cardano blockchain. +12.3 **Stake pools van het Bedrijf ** Het bedrijf zal verschillende Stakepools beheren die zichtbaar zullen zijn in Yoroi. De kosten en netwerk- en serververeisten om dergelijke Stakepools op betrouwbare wijze te exploiteren, worden naar eigen goeddunken door het bedrijf bepaald. Het Bedrijf zal het percentage van de Beloning dat met Gebruikers moet worden gedeeld communiceren via de Yoroi-portemonnee van de Gebruiker. Beloningen worden aan het einde van elk tijdperk opgebouwd en verschijnen automatisch in de Yoroi-portemonnee van de gebruiker. -12.2 **Delegation.** Users may delegate their stake to one of the various stake pools of the Company or to a third party stake pool. User will have the sole right to determine the volume to be delegated to a stake pool and may increase or decrease its level of participation at any time. Any information Company shares regarding stakepools, including performance metrics and Rewards, will be for indicative purposes only and may not be accurate. Users may only delegate their stake to a stake pool if their ada is in an updated Daedalus or an updated Yoroi wallet at the time of the setup process. User does not acquire any automatic right to Rewards as a result of delegating its stake. +12.4 ** Inwisselen van beloningen. ** De gebruiker is verantwoordelijk voor de betaling van alle toepasselijke belastingen, indien van toepassing, waaraan de beloningen kunnen worden onderworpen, en alle andere belastingen die van toepassing kunnen zijn op de gebruiker zodra de beloningen zijn ingewisseld. -12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. - -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 ** Inwisselen van beloningen. ** De gebruiker is verantwoordelijk voor de betaling van alle toepasselijke belastingen, indien van toepassing, waaraan de beloningen kunnen worden onderworpen, en alle andere belastingen die van toepassing kunnen zijn op de gebruiker zodra de beloningen zijn ingewisseld. From c457c893ac1c220e8392c5c3dc0f2b9e44f32658 Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:21 +0100 Subject: [PATCH 363/464] New translations en-us.md (ru-RU) --- .../i18n/locales/terms-of-use/ada/ru-RU.md | 102 ++++++------------ 1 file changed, 35 insertions(+), 67 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/ru-RU.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/ru-RU.md index 62a96a1ef3..1bcbe9b596 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/ru-RU.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/ru-RU.md @@ -1,102 +1,70 @@ -# Terms of Service Agreement +# Соглашение о предоставлении услуг -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +Настоящие положения о предоставлении услуг (далее - "Соглашение") заключаются между EMURGO Co., Ltd. (далее "Компания") и любым физическим или юридическим лицом ( далее - "Пользователь"), который завершает процесс загрузки, утилизации или эксплуатации программного обеспечения, известного как приложение криптовалютного кошелька Yoroi, а также услуги по обработке данных, приложение, коммуникационные услуги и другой контент, предлагаемый или предоставляемый программным обеспечением Компании (далее "Программа"). Компания и Пользователь, совместно далее именуются "Сторонами". ПОДТВЕРДИВ СОГЛАСИЕ, НАЖАТИЕМ КНОПКИ ИЛИ ПОЛУЧЕНИЕМ ДОСТУПА, ИСПОЛЬЗУЯ ИЛИ УСТАНАВЛИВАЯ КАКУЮ-ЛИБО ЧАСТЬ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, ПОЛЬЗОВАТЕЛЬ НЕПОСРЕДСТВЕННО ПРИНИМАЕТ УСЛОВИЯ СОГЛАШЕНИЯ И ДАЕТ СОГЛАСИЕ БЫТЬ ЮРИДИЧЕСКИ СВЯЗАННЫМ СО ВСЕМИ СОГЛАШЕНИЯМИ ДАННОГО ДОГОВОРА. ЕСЛИ ПОЛЬЗОВАТЕЛЬ НЕ ДАЕТ СВОЕ СОГЛАСИЕ НА ВСЕ УСЛОВИЯ ЭТОГО ДОГОВОРА, ПОЛЬЗОВАТЕЛЮ НЕ БУДЕТ РАЗРЕШЕН ДОСТУП, ИСПОЛЬЗОВАНИЕ ИЛИ УСТАНОВКА КАКОЙ-ЛИБО ЧАСТИ ПРОГРАММЫ. -## 1. Rights and Obligations +## 1. ПРАВА И ОБЯЗАННОСТИ -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. Описание.** Программа функционирует как бесплатный, открытый исходный код, электронный криптовалютный кошелек. Программа не является аккаунтом, с помощью которого Компания или другие третьи стороны выступают в качестве финансовых посредников или хранителей ADA пользователя или любой другой криптовалюты. Пока Программа подвергается бета-тестированию и продолжает совершенствоваться путем обратной связи с разработчиками общества, вкладчиками и бета-тестировщиками, Компания не может гарантировать, что не возникнет никаких ошибок в Программе. Пользователь осознает, что использование Программы на его риске, осмотрительности и соблюдении всех применимых законов. Пользователь несет ответственность за сохранность его паролей, PIN-кодов, личных ключей, ключей выкупа, ICO-ключей (shielded vending keys), синхронизации восстановительной мнемонической фразы. Пароли ADA и любые другие коды Пользователь использует для доступа к Программе или любой другой информации, к ADA, ваучеру или другого раздела криптовалюты. ЕСЛИ ПОЛЬЗОВАТЕЛЬ ТЕРЯЕТ ДОСТУП К СВОЕМУ КОШЕЛЬКУ ИЛИ ЛИЧНЫМ КЛЮЧАМ И НЕ ИМЕЕТ ОТДЕЛЬНО СОХРАНЕННОЙ РЕЗЕРВНОЙ КОПИИ СВОЕГО КРИПТОКОШЕЛЬКА ИЛИ РЕЗЕРВНОЙ КОПИИ ВОССТАНОВИТЕЛЬНОЙ МНЕМОНИЧЕСКОЙ ФРАЗЫ И СООТВЕТСТВУЮЩЕГО ПАРОЛЯ(ЛЕЙ), ПОЛЬЗОВАТЕЛЬ ПРИЗНАЕТ И СОГЛАШАЕТСЯ С ТЕМ, ЧТО ЛЮБАЯ ADA ИЛИ ЛЮБЫЕ ДРУГИЕ КРИПТОВАЛЮТЫ ПОЛЬЗОВАТЕЛЯ, СВЯЗАННЫЕ С ТЕМ КРИПТОКОШЕЛЬКОМ СТАНУТ НЕДОСТУПНЫ. Все запросы о проведении транзакций являются необратимыми. Компания и ее акционеры, директора, должностные лица, сотрудники, партнеры и агенты не могут гарантировать подтверждение транзакции или восстановление личных ключей Пользователя или паролей, если он их потеряет или забудет. -**b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. +**b. Доступность.** Пользователь согласен с тем, что время от времени Программа может быть недоступной или не функционировать по какой-либо причине, включая, без ограничений: (i) неисправность оборудования; (ii) периодические процедуры технического обслуживания или ремонтные работы, которые Компания может проводить время от времени; или (iii) случаи, которые не зависят от Компании или которые не в состоянии быть предвидены Компанией. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. Оборудование.** Пользователь несет полную ответственность за предоставление, поддержание и обеспечение совместимости с Программой, всем оборудованием, программным обеспечением, электрическими и другими физическими требованиями для использования Пользователем Программы, включая, без ограничений, телекоммуникации и соединения с доступом в Интернет, веб браузеры или другое оборудование, программы и сервисы, необходимые для доступа и использования Программы. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. Безопасность.** Пользователь несет полную ответственность за безопасность, конфиденциальность и целостность всей информации и содержания, которые Пользователь получает, передает или сохраняет в Программе. Пользователь несет полную ответственность за любой разрешенный или несанкционированный доступ к любому аккаунту Пользователя любым лицом. Пользователь подтверждает свое согласие нести полную ответственность за конфиденциальность устройств безопасности, информации, ключей и паролей Пользователя. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. Конфиденциальность.** Когда это практически осуществимо, Компания будет стремится соблюдать конфиденциальность Пользователя. Компания не будет отслеживать, редактировать или разглашать какую-либо личную информацию о Пользователе и его аккаунте, включая его содержимое или использование Пользователем Программы без предварительного согласия Пользователя за исключением случаев, когда Компания искренне полагает, что данные действия необходимы для: (i) соблюдения юридического (судебного) процесса или другого правового требования любого правительственного органа; (ii) охраны и защиты прав и имущества Компании (iii) обеспечения соблюдения данного Соглашения (iv) защиты интересов пользователей Программы помимо Пользователя или любого другого лица; или (v) для функционирования или проведения технического обслуживания и ремонта услуг Компании или оборудования, включая Программу в соответствии с законодательством. Пользователь не рассчитывает на конфиденциальность в отношении Интернета в целом. Пользовательский IP адрес передается и записывается с каждым сообщением или другой информацией, которую Пользователь отправляет из Программы. -## 2. Taxes and Fees +## 2. Налоги и сборы -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +Все комиссии за конвертацию валюты, сборы третьих сторон, продажи, использование, добавленная стоимость, личную собственность или другие налоги, пошлины или сборы какого-либо вида, включая проценты и штрафы по ним, будь то введенные в настоящее время или в дальнейшем любым правительственным органом,а также сборы, понесенные Пользователем по причине доступа Пользователя, использования или установки Программы является исключительно ответственностью Пользователя. -## 3. User Representations +## 3. Пользовательские заявления -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +Пользователь заявляет и гарантирует Компании, что: (a) Пользователь является физическим лицом и что Пользователь в возрасте от восемнадцати лет(18); (b) Пользователь имеет права и полномочия для заключения и выполнения обязательств Пользователя в соответствии с данным Соглашением; (с) вся информация, предоставленная для Компании Пользователем, является достоверной, точной и полной; (d) Пользователь обязуется соблюдать все законы и правила любой применимой юрисдикцией в отношении доступа Пользователя, использования или установки Программы; (e) Пользователь должен соблюдать все условия и правила настоящего Соглашения, включая, без ограничений, положения, изложенные в Разделе 4 и (f) Пользователь предоставил и будет предоставлять точную и полную информацию, необходимую для доступа, использования или установки Программы. -## 4. Prohibited Uses +## 4. Запрещенные виды использования -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +Пользователь несет всю ответственность за любые действия и упущения, происходящие в аккаунте Пользователя,информации в области безопасности, ключей или паролей, а также, Пользователь соглашается не участвовать в неприемлемом использовании Программы, которое включает, без ограничений, использование Программы для: (a) распространения, хранения и передачи незапрашиваемых сообщений, цепочки писем или незапрашиваемых коммерческих имейлов; (b) распространения или передачи материалов, которые разумному человеку могут быть оскорбительными, непристойными, порнографическими, порочащими, притесняющими, глубоко оскорбительными, вульгарными, угрожающими или злонамеренными; (c) распостранения, хранения или передачи файлов, графических объектов, программного обеспечения или других материалов, которые фактически или потенциально нарушают авторское право, товарный знак, патент, коммерческую тайну или другое право интеллектуальной собственности любого лица; (d) создания ложной личности или иной попытки введения в заблуждение любого лица в отношении личности или происхождении какого-либо сообщения; (e) экспорта, реэкспорта или разрешения загрузки любых сообщений или содержания, нарушающих любой закон об экспорте и импорте, регулировании или ограничении любой применимой юрисдикции или без всех необходимых разрешений, лицензий или изъятий; (f) вмешательства, нарушения или попытки получения несанкционированного доступа к другим аккаунтам в Программе или любой другой компьютерной сети; или (g) распостранения, хранения или передачи вирусов, "Троянских коней" или любых других вредоносных кодов или программ. -## 5. Termination +## 5. Расторжение -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +Настоящее Соглашение вступает в силу с момента его принятия Пользователем как указано в настоящем документе, и будет продолжать действовать в полную силу до тех пор, пока Пользователь осуществляет доступ, использование или установку Программы. Компания оставляет за собой право, по собственному усмотрению и без предварительного уведомления в любое время и по любой причине: (a) удалить или отключить доступ ко всем или любой части Программы; (b) приостановить доступ Пользователя или использование ко всем или любой части Программы; и (с) расторгнуть (аннулировать) данное Соглашение. -## 6. Disclaimer of Warranties +## 6. Освобождение от гарантий -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +ПРОГРАММА ПРЕДОСТАВЛЯЕТСЯ "КАК ЕСТЬ", БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ. ИСПОЛЬЗОВАНИЕ ПРОГРАММЫ ИСКЛЮЧИТЕЛЬНО НА РИСКЕ ПОЛЬЗОВАТЕЛЯ. КОМПАНИЯ НЕ ГАРАНТИРУЕТ, ЧТО ПРОГРАММА БУДЕТ РАБОТАТЬ БЕСПЕРЕБОЙНО И БЕЗ ОШИБОК, ТАКЖЕ КОМПАНИЯ НЕ ДАЕТ НИКАКИХ ГАРАНТИЙ В ОТНОШЕНИИ ЛЮБЫХ РЕЗУЛЬТАТОВ, КОТОРЫЕ МОГУТ БЫТЬ ПОЛУЧЕНЫ ПРИ ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ. КОМПАНИЯ НЕ ДАЕТ НИКАКИХ ДРУГИХ ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ. КОМПАНИЯ ОТКРЫТО ОТКАЗЫВАЕТСЯ ОТ КАКОЙ-ЛИБО ГАРАНТИИ ПРИГОДНОСТИ ТОВАРА, ГАРАНТИИ ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ, ГАРАНТИИ ПРАВА СОБСТВЕННОСТИ ИЛИ ИНТЕРЕСА, ИЛИ ГАРАНТИИ НЕНАРУШЕНИЯ (НЕВМЕШАТЕЛЬСТВА). -## 7. Limitation of Liability +## 7. Ограничение ответственности -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ НЕ МОГУТ КОМПАНИЯ ИЛИ ЕЕ АКЦИОНЕРЫ, ДИРЕКТОРА, ДОЛЖНОСТНЫЕ ЛИЦА, СОТРУДНИКИ, ПАРТНЕРЫ ЛИБО АГЕНТЫ, КТО-ТО ИЗ ЕЕ ИЛИ ИХ СООТВЕТСТВУЮЩИХ ПОСТАВЩИКОВ УСЛУГ НЕСТИ ОТВЕТСТВЕННОСТЬ ПЕРЕД ПОЛЬЗОВАТЕЛЕМ ИЛИ ЛЮБОЙ ТРЕТЬЕЙ СТОРОНОЙ ЗА ИСПОЛЬЗОВАНИЕ, ПРЕРЫВАНИЕ, ЗАДЕРЖКУ ИЛИ НЕВОЗМОЖНОСТЬ ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ, ПОТЕРИ ДОХОДОВ ИЛИ ПРИБЫЛИ, ЗАДЕРЖКУ, ПРЕРЫВАНИЕ ИЛИ ПОТЕРЮ ПРЕДОСТАВЛЯЕМЫХ УСЛУГ, БИЗНЕС ИЛИ ГУДВИЛЛ (GOODWILL), ПОТЕРЮ ИЛИ ПОВРЕЖДЕНИЕ ДАННЫХ, ПОТЕРЮ В РЕЗУЛЬТАТЕ РАБОТЫ СИСТЕМЫ ИЛИ СБОЙ ПРИ ОБСЛУЖИВАНИИ СИСТЕМЫ, НЕИСПРАВНОСТЬ ИЛИ ВЫКЛЮЧЕНИЕ, СБОЙ ТОЧНОЙ ПЕРЕДАЧИ, ЧТЕНИЯ ИЛИ ОТПРАВКУ ИНФОРМАЦИИ, СБОЙ ПРИ ОБНОВЛЕНИИ ИЛИ ПРЕДОСТАВЛЕНИИ КОРРЕКТНОЙ ИНФОРМАЦИИ, НЕСОВМЕСТИМОСТЬ СИСТЕМЫ ИЛИ ПРЕДОСТАВЛЕНИЕ НЕПРАВИЛЬНОЙ ИНФОРМАЦИИ СОВМЕСТИМОСТИ ИЛИ НАРУШЕНИЯ В СИСТЕМЕ БЕЗОПАСНОСТИ, ИЛИ ЗА ЛЮБЫЕ КОСВЕННЫЕ, СЛУЧАЙНЫЕ, НЕПРЯМЫЕ, ТИПИЧНЫЕ, ОСОБЫЕ ИЛИ ШТРАФНЫЕ УБЫТКИ, ВОЗНИКАЮЩИЕ ИЛИ СВЯЗАННЫЕ С НАСТОЯЩИМ СОГЛАШЕНИЕМ, НАРУШЕНИЕ СОГЛАШЕНИЯ, ПРАВОНАРУШЕНИЕ (ВКЛЮЧАЯ НЕБРЕЖНОСТЬ) ИЛИ ИНОЕ, НЕЗАВИСИМО ОТ ТАКИХ УБЫТКОВ, КОТОРЫЕ БЫЛИ ПРЕДСКАЗУЕМЫ И БЫЛИ ЛИ МЫ УВЕДОМЛЕНЫ О ВОЗМОЖНОСТИ ТАКИХ УБЫТКОВ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ НЕ МОГУТ КОМПАНИЯ ИЛИ ЕЕ АКЦИОНЕРЫ, ДИРЕКТОРА, ДОЛЖНОСТНЫЕ ЛИЦА, СОТРУДНИКИ, ПАРТНЕРЫ ЛИБО АГЕНТЫ, КТО-ТО ИЗ ЕЕ ИЛИ ИХ СООТВЕТСТВУЮЩИХ ПОСТАВЩИКОВ УСЛУГ НЕСТИ ОТВЕТСТВЕННОСТЬ ЗА ЛЮБОЕ ТРЕБОВАНИЕ, ПОВРЕЖДЕНИЯ ИЛИ ДРУГУЮ ОТВЕТСТВЕННОСТЬ, БУДЬ ТО В ДЕЙСТВИИ СОГЛАШЕНИЯ, ПРАВОНАРУШЕНИИ ИЛИ ИНОМ, ОБРАЗОВАННЫМ ИЛИ КАКИМ-ЛИБО ОБРАЗОМ СВЯЗАННЫМ С ДОСТУПОМ ПОЛЬЗОВАТЕЛЯ, ИСПОЛЬЗОВАНИЯ ИЛИ УСТАНОВКИ ПРОГРАММЫ. НЕКОТОРЫЕ ЮРИСДИКЦИИ ЗАПРЕЩАЮТ ИСКЛЮЧЕНИЕ ИЛИ ОГРАНИЧЕНИЕ СЛУЧАЙНЫХ ИЛИ ПОСЛЕДУЮЩИХ УБЫТКОВ, ТАКИМ ОБРАЗОМ ДАННОЕ ОГРАНИЧЕНИЕ ОТВЕТСТВЕННОСТИ МОЖЕТ БЫТЬ НЕ ПРИМЕНИМО К ПОЛЬЗОВАТЕЛЮ. ЕСЛИ ПОЛЬЗОВАТЕЛЬ НЕ УДОВЛЕТВОРЕН ПРОГРАММОЙ,ЕДИНСТВЕННЫМ И ИСКЛЮЧИТЕЛЬНЫМ СРЕДСТВОМ В РАСПОРЯЖЕНИИ ПОЛЬЗОВАТЕЛЯ ЯВЛЯЕТСЯ ОТКАЗ ОТ ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ. -## 8. Indemnification +## 8. Возмещение ущерба -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +Пользователь согласен возместить ущерб, освободить и защитить Компанию, ее акционеров, директоров, должностных лиц, сотрудников, партнеров и агентов ("Стороны, которым возмещают ущерб") от и против любого действия, приводящего к претензиям, ущербу, задолженности, требованиям и ответственности, включая разумные расходы и расходы на услуги адвоката, заявленные любым лицом, возникающие из или связанные с: (a) настоящим Соглашением; (b) доступом Пользователя, использования или установки Программы, включая любые данные или работу, переданные или полученные Пользователем; и (c) любое неприемлемое использование Программы любым лицом, включая, без ограничения, любое заявление, данные или контент, сделанные, переданные или переизданные Пользователем или любым лицом, которые запрещены как неприемлемые в соответствии с разделом 4. ДАННОЕ ВОЗМЕЩЕНИЕ УЩЕРБА ВКЛЮЧАЕТ ЧЕТКО ВЫРАЖЕННУЮ КОМПЕНСАЦИЮ КОМПАНИИ И ВСЕХ СТОРОН, КОТОРЫМ ВОЗМЕЩАЮТ УЩЕРБ ЗА ЛЮБУЮ, ПРЕДПОЛАГАЕМУЮ НЕБРЕЖНОСТЬ (ВКЛЮЧАЯ ЛЮБУЮ, ПРЕДПОЛАГАЕМУЮ ГРУБУЮ ХАЛАТНОСТЬ). ИЛИ ДРУГИЕ ПРЕДПОЛАГАЕМЫЕ ПРОСТУПКИ КОМПАНИИ ИЛИ ЛЮБОЙ СТОРОНЫ, КОТОРОЙ ВОЗМЕЩАЮТ УЩЕРБ. -## 9. Intellectual Property +## 9. Интеллектуальная собственность -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +Компания сохраняет за собой все права, названия и интересы в и на всех брендах Компании, логотипах и товарных знаках, включая, но не ограничиваясь, EMURGO Co., Ltd., EMURGO, Yoroi, Криптовалютный кошелек Yoroi (Yoroi Cryptocurrency Wallet), кошелек Yoroi (Yoroi Wallet), Приложение Yoroi (Yoroi App) и все вариации формулировок вышеупомянутых брендов, логотипов и торговых знаков. -## 10. Warnings +## 10. Предупреждения -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +Пользователь понимает, что Компания не несет ответственности за передачу, сохранность или хранение личных ключей и/или ADA Пользователя или любой другой криптовалюты. Если Пользователь и/или кто-либо, обладающий полномочиями, потеряет, допустит неправильное действие или украдет соответствующие частные ключи или если поручители Пользователя откажутся предоставить необходимые полномочия, Пользователь понимает, что не сможет восстановить ADA или любую другую криптовалюту и что Компания не несет ответственности за такой ущерб. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +Пользователь признает и соглашается с тем, что ADA или любые другие криптовалютные транзакции при содействии Программы и/или Компании могут быть отложены или задерживаться и что Компания не несет ответственности за любые, связанные с этим потери. Пользователь признает и соглашается с тем, что Компания не несет ответственности за любой аспект информации, контента или услуг, содержащиеся в любых материалах третьих сторон или на каких-либо сайтах третьих сторон, доступных или связанных с Программой и/или Компанией. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. +При использовании Программы, Пользователь признает и соглашается: (i) что Компания не несет ответственности за функционирование базовых протоколов и что Компания не гарантирует их функциональность, безопасность или доступность; и (ii) что основные протоколы подвержены внезапным изменениям мейн-чейн в правилах эксплуатации ("форки"), и что эти форки могут существенно повлиять на стоимость и/или функционирование ADA или любой другой криптовалюты, которую Пользователь хранит в Программе. В случае форка (fork), Пользователь согласен с тем, что Компания может временно приостановить деятельность Программы (с или без уведомления об этом Пользователя) и что Компания может по своему усмотрению, (a) настроить или перенастроить (переконфигурировать) свои системы или (b) принять решение не поддерживать (или прекратить поддержку) форкового протокола полностью, однако, при условии, что Пользователь будет иметь возможность выводить средства с Программы. Пользователь признает и соглашается с тем, что Компания не несет абсолютно никакой ответственности в отношении неподдерживаемого бранча форкового протокола. -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +## 11. Разное -## 11. Miscellaneous +**a. Поправка.** Компания имеет право в любое время и без предупреждения, добавлять или изменять условия данного Соглашения, просто доставляя данные измененные условия Пользователю через электронное сообщение или через любое информационное средство на любой адрес, предоставленные Компании Пользователем. Доступ Пользователя к Программе или Ее использование после даты, когда измененные условия доставлены Пользователю, считаются принятием данных измененных условий. -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**b. Разрыв.** Если какое-либо положение из часть положений настоящего Соглашения есть или становится недействительным, нелегальным или неосуществимым, оно считается модифицированным в той мере,в которой это минимально необходимо, чтобы сделать его действительным, легальным и осуществимым. Если такая модификация невозможна, соответствующее положение или части положения считаются удаленными. Любая модификация или удаление положения или части положений согласно настоящей Статьи не затрагивает законность и правомочность остальных частей положений настоящего Соглашения. -**b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. +**c. Полное Соглашение – Отказ от доверия.** Настоящее Соглашение представляет собой полное соглашение между Сторонами в отношении предмета настоящего Соглашения и заменяет все предыдущие соглашения или договоренности между сторонами. Пользователь четко заявляет и подтверждает, что он не полагается ни на какие заявления, договоренности, представления, ожидания или соглашения, отличные от тех, которые четко указаны в настоящем Соглашении. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**d. НАСТОЯЩЕЕ СОГЛАШЕНИЕ ПОДЛЕЖИТ ОБЯЗАТЕЛЬНОМУ АРБИТРАЖУ.** Пользователь согласен, что любые и все споры и претензии в отношении любого лица, возникшие или каким-либо образом связанные с настоящим Соглашением или доступом, использованием или установкой Программы Пользователем или любым другим лицом подлежат обязательному арбитражному разбирательству в соответствии с Правилами Арбитражного регламента Международной торговой палаты одним или несколькими судьями, назначенными в соответствии с этими правилами. Местом проведения арбитража является Япония. Язык арбитража - английский. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. - -**e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. +**e. Язык.** Любой перевод настоящего Соглашения предназначен только в целях местных ссылок, и в случае возникновения каких-либо несоответствий между английской и любыми не английскими версиями, английская версия настоящего Соглашения имеет преимущественную силу и регулирует во всех отношениях. ## 12. Delegation and Staking @@ -106,4 +74,4 @@ If you have any questions or concerns regarding the accuracy or reliability of t 12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. From 53a65f18690cc5f0b11b752d1b58e2aaca3227d3 Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:22 +0100 Subject: [PATCH 364/464] New translations en-us.md (Slovak) --- .../i18n/locales/terms-of-use/ada/sk-SK.md | 72 ++++++------------- 1 file changed, 20 insertions(+), 52 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/sk-SK.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/sk-SK.md index 62a96a1ef3..617f0e1f22 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/sk-SK.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/sk-SK.md @@ -1,102 +1,70 @@ # Terms of Service Agreement -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Co., Ltd. ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties." BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. ## 1. Rights and Obligations -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. **b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. ## 2. Taxes and Fees -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. ## 3. User Representations -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. ## 4. Prohibited Uses -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. ## 5. Termination -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. ## 6. Disclaimer of Warranties -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. ## 7. Limitation of Liability -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. ## 8. Indemnification -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. ## 9. Intellectual Property -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to, EMURGO Co., Ltd., EMURGO, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. ## 10. Warnings -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. - -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. ## 11. Miscellaneous -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. **b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**c. Entire Agreement – Disclaimer of Reliance**. This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. +**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. **e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. ## 12. Delegation and Staking @@ -106,4 +74,4 @@ If you have any questions or concerns regarding the accuracy or reliability of t 12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. From 15c4200ae0bbb112adaeb68866f29923fa761320 Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:24 +0100 Subject: [PATCH 365/464] New translations en-us.md (Turkish) --- .../i18n/locales/terms-of-use/ada/tr-TR.md | 110 +++++++----------- 1 file changed, 39 insertions(+), 71 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/tr-TR.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/tr-TR.md index 62a96a1ef3..758c6fc23a 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/tr-TR.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/tr-TR.md @@ -1,109 +1,77 @@ -# Terms of Service Agreement +# Hizmet Şartları Sözleşmesi -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +BU HİZMET SÖZLEŞMESİ ("Sözleşme"), EMURGO Co., Ltd. ("Şirket") ile aşağıdaki yazılımları indirme, kullanma veya kullanma işlemini tamamlayan herhangi bir kişi veya kuruluş ("Kullanıcı") arasında Yoroi kripto para Cüzdan uygulaması ve veri işleme hizmeti, uygulama, iletişim hizmeti veya diğer içerik veya Şirket tarafından sunulan veya sağlanan yazılım ("Yazılım") kullanımı, uygulaması amacıyla yapılmıştır. Şirket ve Kullanıcının her ikisine de ortaklaşa olarak "Taraflar" denilecektir. KULLANICI ONAY BUTONUNA TIKLAYARAK VEYA YAZILIMIN HERHANGİ BİR PARÇASINI İNDİREREK DÜZENLEYİP, KURARAK VEYA MONTAJIYLA, KULLANICI BU SÖZLEŞMENİN TÜM ŞARTLARINDA MUTABIK KALARAK TAMAMEN ONAYLADIĞINI KABUL ETMİŞTİR. KULLANICININ BU SÖZLEŞMENİN TÜM ŞARTLARINI KABUL ETMEMESİ HALİNDE, KULLANICIYA YAZILIMININ HERHANGİ BİR YERİNE ERİŞİM, KULLANMA VEYA İNDİRME YETKİSİ VERİLMEYECEKTİR. -## 1. Rights and Obligations +## Haklar ve Yükümlülükler -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. Tanım.** Yazılım, ücretsiz, açık kaynaklı, dijital bir kripto para birimi cüzdanı olarak işlev görür. Yazılım, Şirket'in veya diğer üçüncü tarafların Kullanıcının ADA' sının veya başka bir kripto para biriminin finansal aracıları veya emanetçileri olarak hizmet ettiği bir hesap oluşturmaz. Yazılım beta testinden geçmiş ve geliştiriciler topluluğundan, açık kaynaklı katkıda bulunanlardan ve beta test kullanıcılarından gelen geri bildirimlerle geliştirilmeye devam ederken, Şirket Yazılımda herhangi bir hata olmayacağını garanti etmez. Kullanıcı(lar), Kullanıcının Yazılımı kullanmasının Kullanıcının riski, takdir yetkisi içinde ve geçerli tüm yasalara uygun olduğunu kabul eder. Kullanıcı, Şifreleri, PIN kodları, özel anahtarlar, ödeme anahtarları, korumalı otomat anahtarları, yedekleme kurtarma anımsatıcı parolaları, ADA parolaları ve Yazılım'a veya herhangi bir bilgiye, ADA, fişe veya diğer kripto para birimine erişmek için kullandığı diğer kodların güvenliğinden sorumludur. KULLANICI KRİPTO PARA CÜZDANINA VEYA ÖZEL ANAHTARLARA ERİŞİYOR VE KULLANICI KRİTERLERİ DUVARLARINI VEYA KAZANAN BİR ŞEKİLLERİ VEYA KESİNLİKLE İLGİLİ BİR ŞEKİLLERİ VEYA KESİNLİKLE İLGİLİ BİR ŞEKİLDE VEYA KAZANIR, KRİPTO PARA CÜZDANIN BAĞLANMAMASI İLE İLGİLİ OLARAK. Tüm işlem talepleri tek yönlü özelliğine bağlı olarak, dönüşsüzlük nedeniyle rücu edilemez/geri döndürülemez. Şirket ve hissedarları, yöneticileri, memurları, çalışanları, iştirakleri ve acenteleri, işlem onayını garanti edemez veya Kullanıcı bunları kaybederse veya unutursa Kullanıcının özel anahtarlarını veya şifrelerini kurtaramaz (retrieve özelliği). -**b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. +**b. Erişilebilirlik.** Kullanıcı zaman zaman yazılıma erişilemeyeceğini veya herhangi bir nedenle uygulanamayabileceğini kabul eder, ancak bunlarla sınırlı olmamak kaydıyla: (i) ekipman arızaları; (ii) Şirketin zaman zaman üstlenebileceği periyodik bakım prosedürleri veya onarımları; veya (iii) Şirket'in kontrolünün ötesinde veya Şirket tarafından makul olarak öngörülemeyen nedenler. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. Ekipman.** Kullanıcı, Kullanıcı’ nın Yazılımı kullanımı için ve gerekli olan telekomünikasyon ve internet erişim bağlantılarını ve linklerini, web tarayıcılarını veya diğer ekipmanları, programları ve hizmetleri içeren ancak bunlarla da sınırlı olmayan Yazılımla uyumlu bütün donanımı, yazılımı, elektriği ve diğer fiziki gereksinimleri temin etmekten ve güvence altına almaktan yalnız ve ancak tek sorumlu olacaktır. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. Güvenlik.** Kullanıcı, Yazılım üzerinden aldığı, aktardığı veya üzerinde sakladığı tüm bilgi ve içeriğin güvenliğinden, gizliliğinden ve bütünlüğünden yalnız ve ancak tek sorumlu olacaktır. Herhangi bir Kullanıcı hesabına herhangi bir kişinin herhangi bir yetkili veya yetkisiz erişiminden yalnızca Kullanıcı sorumlu olacaktır. Herhangi bir Kullanıcı hesabına herhangi bir kişinin herhangi bir yetkili veya yetkisiz erişiminden yalnızca Kullanıcı sorumlu olacaktır. Kullanıcı, Kullanıcı güvenlik cihazlarının, bilgilerinin, anahtarlarının ve şifrelerinin gizliliği ile ilgili tüm sorumluluğu üstlenmeyi kabul eder. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. Gizlilik.** Kullanıcı, Kullanıcı güvenlik cihazlarının, bilgilerinin, anahtarlarının ve şifrelerinin gizliliği ile ilgili tüm sorumluluğu üstlenmeyi kabul eder.. “Şirket; (i) herhangi bir resmi makamın yasal sürecine veya diğer yasal gerekliliklerine uymak; (ii) Şirketin haklarını veya mülkiyetini korumak ve savunmak; (iii) bu sözleşmenin yürürlüğe koymak; (iv) Kullanıcı veya başka herhangi bir kişi dışındaki Yazılım kullanıcılarının çıkarlarını korumak; veya (v) Yasaların izin verdiği Yazılım dahil Şirket hizmetlerinin veya ekipmanlarının bakım ve onarımını yapmak veya yürütmek; bu tür bir eylemlerin gerekli olduğuna inanmadığı sürece, Kullanıcı veya Kullanıcının hesabı hakkında, içeriği veya Kullanıcının Yazılımı kullanımı da dahil olmak üzere, kullanıcının önceden rızası olmadan herhangi bir kişisel bilgiyi izlemeyecek, düzenlemeyecek veya ifşa etmeyecektir.” Kullanıcının genel olarak İnternet ile ilgili gizlilik beklentisi olmayacaktır. Kullanıcının IP adresi, Kullanıcının Yazılımdan gönderdiği her mesaj veya diğer bilgilerle iletilir ve kaydedilir. -## 2. Taxes and Fees +## 2. Vergiler ve Ücretler -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +Tüm para birimi dönüştürme ücretleri (Exchange Rates), üçüncü taraf ücretleri, satış, kullanım, katma değer, kişisel mülkiyet (ticari tescil, telif hakkı veya fikri mülkiyet/fikir hakları/telif hakkı) veya diğer vergiler, vergi veya harçlar, bunlarla ilgili herhangi bir devlet kurumu tarafından şimdi veya sonradan uygulanan faiz ve cezalar dahil olmak üzere her türlü vergi ve harç Kullanıcının Yazılım'a erişmesi, kullanması veya yüklemesi nedeniyle Kullanıcı olarak tamamen kullanıcının sorumluluğundadır. -## 3. User Representations +## 3. Kullanıcının Beyanları -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +Kullanıcı, başlıklar altında belirtilenleri beyan ve taahhüt eder: (a) Kullanıcı gerçek kişi ise, Kullanıcı 18 yaşından büyükse; (b) Kullanıcı, bu Sözleşme kapsamındaki Kullanıcının yükümlülüklerini yerine getirme yetkisine sahiptir; (c) Kullanıcı tarafından Şirkete verilen tüm bilgiler doğru, tam ve eksiksiz olacaktır; (d) Kullanıcı, Yazılımın erişimi, kullanımı veya kurulumu ile ilgili olarak geçerli herhangi bir yargı alanındaki tüm yasa ve düzenlemelere uyacaktır; (e) Kullanıcı, Kısım 4'te belirtilen hükümler dahil, ancak bunlarla sınırlı olmamak üzere, bu Sözleşmenin tüm hüküm ve koşullarına uyacaktır; ve (f) Kullanıcı, Yazılım'a erişim, kullanım veya kurulum için gerektiği şekilde doğru ve eksiksiz bilgi sağlayacaktır. -## 4. Prohibited Uses +## 4. Kullanım Yasakları -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +Kullanıcı, Kullanıcı hesabı, güvenlik bilgileri, anahtarlar veya parola altında meydana gelen her türlü işlem ve ihmalden tek ve yegane sorumludur ve Kullanıcı, Yazılımın sınırlama olmaksızın kabul edilemez şekilde kullanılmamasını kabul eder: (a) istenmeyen mesajları, zincir mektupları veya istenmeyen ticari e-postaları yaymak, saklamak veya iletmek; (b) makul bir kişiye hakaretamiz-sinkaflı (küfürlü), müstehcen, pornografik, küçük düşürücü, taciz edici, ağır saldırgan, kaba, tehdit edici veya kötü niyetli olabilen materyalleri yaymak veya iletmek; (c) herhangi bir kişinin telif hakkı, ticari marka, patent, ticari sır veya diğer fikri mülkiyet haklarını fiilen veya potansiyel olarak ihlal eden dosyaları, grafikleri, yazılımları veya diğer materyalleri yaymak, depolamak veya iletmek; (d) sahte bir kimlik oluşturmak veya herhangi bir kişiyi herhangi bir iletişimin kimliği veya kökeni konusunda yanıltmaya çalışmak; (e) herhangi bir ihracat veya ithalat yasasını, yürürlükteki herhangi bir yargı yetkisini düzenleyen veya kısıtlayan veya gerekli tüm onay, lisans veya muafiyetler olmaksızın herhangi bir mesaj veya içeriğin ihracatına, yeniden ihracatına veya indirilmesine izin vermek; (f) Yazılımdaki veya başka bir bilgisayar ağındaki diğer hesaplara izinsiz erişim sağlamak, bunlara müdahale etmek, kesintiye uğratmak veya yetkisiz olarak erişmeye çalışmak; veya (g) virüsleri, Truva atlarını veya diğer kötü amaçlı kodları veya programları yaymak, depolamak veya iletmek. -## 5. Termination +## 5. Fesih -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +Bu Sözleşme, Kullanıcı' nın burada belirtilen kabulü ile yürürlüğe girer ve Kullanıcı, Yazılım'a herhangi bir erişim, kullanım veya kurulum gerçekleştirdiği sürece yürürlükte kalacaktır. Şirket, tamamen kendi takdirine bağlı olarak ve bildirimde bulunmaksızın, herhangi bir zamanda ve herhangi bir nedenle aşağıdakileri yapma hakkını saklı tutar: (a) Yazılımın tamamına veya bir kısmına erişimi kaldırma veya devre dışı bırakma; (b) Kullanıcının Yazılımın tamamına veya bir kısmına erişimini veya kullanımını askıya almak; ve (c) bu Sözleşmeyi feshetmek. -## 6. Disclaimer of Warranties +## 6. Garantilerin Reddi -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +YAZILIM, HERHANGİ BİR TÜR GARANTİSİ YOK, AÇIK VEYA ZIMNİ OLMADAN "OLDUĞU GİBİ" SAĞLANIR. YAZILIMIN KULLANIMI YALNIZCA KULLANICININ RİSKİNDEDİR. ŞİRKET, YAZILIMIN KESİNTİSİZ VEYA HATASIZ OLACAĞINI GARANTİ ETMEMEKTEDİR, NE DE ŞİRKET YAZILIMIN KULLANILMASI İLE İLGİLİ HERHANGİ BİR GARANTİ VERİR. ŞİRKET, AÇIK VEYA ZIMNİ HİÇBİR GARANTİ VERMEZ. ŞİRKET, TİCARİ OLABİLİRLİK GARANTİSİ, BELİRLİ BİR AMACA UYGUNLUK GARANTİSİ, UNVAN VEYA İLGİLİ GARANTİYİ VEYA YETKİLİ OLMAYAN GARANTİ HAKKINDA AÇIKTIR. -## 7. Limitation of Liability +## 7. Sorumluluk Sınırlaması -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +ŞİRKETİN VEYA ORTAKLARIN, YÖNETİCİLERİNİN, MEMURLARININ, ÇALIŞANLARININ, İŞTİRAKLERİNİN VEYA ACENTELERİNİN VEYA HERHANGİ BİR ŞEKİLİNDE VEYA SAYGIN HİZMET SAĞLAYICILARININ HERHANGİ BİRİNİN KULLANILMASINA VEYA KULLANILMAMASINA VE YAZILIM, KAYIP GELİRLER VEYA KAZANÇLAR, GECİKMELER, KESİNTİSİZ VEYA HİZMET KAYBI, İŞLETME VEYA ŞEREFİYE, VERİ KAYBI VEYA YOLSUZLUĞU, SİSTEM VEYA SİSTEM HİZMETİ ARIZASI, ARIZA VEYA GERÇEKLEŞTİRME, BAŞVURU HATASI SİSTEM GÜVENLİĞİNDE YA DA BU GELİŞMEDE OLAN ANLAŞMAYA DAHİL OLAN HERHANGİ BİR DOĞRU, BİRLİKTE, DOLAYLI, MUHTELİF, ÖZEL VEYA CEZA HASARLARINDA GÜNCELLEŞTİRİN VEYA SUNULAN VEYA ANLAŞILAN HERHANGİ BİR GELİŞMEYE,, HAKSIZ FİİL (İHMALİ İÇEREN) YA DA DİĞER ZARARLARIN ÖLÇÜLMÜŞ OLDUĞU VE BENZERLERİNİN OLASILIĞINDAN ÖNERİLDİĞİ YERLERDEN ÖNCE BENZERİ HASARLAR. HİÇBİR ŞEKİLDE ŞİRKET VEYA HİSSEDARLAR, YÖNETİCİLER, MEMURLAR, ÇALIŞANLAR, İŞTİRAKLER VEYA ACENTELER VEYA SORUMLU HİZMET SAĞLAYICILARININ HERHANGİ BİR SÖZLEŞME VEYA SÖZLEŞMESİNİN HERHANGİ BİR ŞEKİLİNDE VEYA HERHANGİ BİR SORUMLULUĞUYLA AKSİ TAKDİRDE, KULLANICININ ERİŞİMİ, YAZILIMININ VEYA KURULUMU İLE İLGİLİ OLARAK VEYA HERHANGİ BİR YERDE KULLANILIR. BAZI YARGI YETKİLERİ OLAĞAN VEYA SONRAKİ ZARARLARIN KAPSAMINI VEYA SINIRLANDIRILMASINI YASAKLAR. KULLANICI, YAZILIMDAN TATMİN OLMAMIŞSA/MEMNUN DEĞİLSE, KULLANICI YERİ VE ÖZEL ÇÖZÜMÜ YAZILIMIN KULLANIMINI DURDURMALIDIR. -## 8. Indemnification +## 8. Tazminat -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +Kullanıcı, Şirket, hissedarları, yöneticileri, memurları, çalışanları, satış ortakları ve acentelerini ("Tazmin Edilen Taraflar") makul, dahil olmak üzere herhangi bir eylemden, neden, talep, hasar, borç veya borçtan tazmin etmeyi, zararsız tutmayı ve savunmayı kabul eder aşağıdakilerden kaynaklanan veya bunlarla ilgili olarak herhangi bir kişi tarafından iddia edilen masraflar ve avukat ücretleri: (a) bu anlaşma kapsamında; (b) Kullanıcı tarafından iletilen veya alınan herhangi bir veri veya iş dahil, Yazılımın kullanıcı erişimi, kullanımı veya kurulumu; ve (c) Yazılım'ın herhangi bir kişi tarafından kabul edilemez herhangi bir şekilde kullanılması, bunlarla sınırlı olmamak kaydıyla, Kullanıcı veya Bölüm 4'te kabul edilemez olarak yasaklanmış herhangi bir kişi tarafından yapılan, aktarılan veya yeniden yayımlanan herhangi bir ifade, veri veya içerik dahil. BU TAZMİNATA, ŞİRKETİN VE TÜM TAHMİN EDİLMİŞ BİR ZARAR İÇİN TÜM TAZMİNATİ TARAFLARIN AÇIK TAZMİNATI DAHİLDİR (HERHANGİ İDDİA EDİLEN BRÜT İHMAL DAHİL). VEYA ŞİRKETİN DİĞER İDDİA EDİLEN SUİSTİMALİ VEYA HERHANGİ TAZMİN EDİLMİŞ TARAFLAR OLMAK ÜZERE. -## 9. Intellectual Property +## 9. Fikri Mülkiyet -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +Şirket EMURGO Co., Ltd., EMURGO, Yoroi, Yoroi Kriptopara Cüzdan, Yoroi Cüzdan, Yoroi Uygulama ve yukarıda belirtilen markaların, logoların ve ticari markaların ifadelerinin varyasyonları. -## 10. Warnings +## 10. İhbarlar -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +Kullanıcı, özel anahtarların ve/veya Kullanıcının ADA'sının veya başka bir kripto para biriminin aktarılmasından, korunmasından veya korunmasından Şirket'in sorumlu olmayacağını kabul eder. Kullanıcı ve/veya birlikte imzalayan yetkililer ilişkili özel anahtarları kaybederse, yanlış kullanırsa veya çalmışsa/çaldırmışsa veya Kullanıcının yöneticileri gerekli yetkileri vermeyi reddederse, Kullanıcı Kullanıcının ADA'sını veya başka bir kripto para birimini kurtaramayabileceğini kabul eder ve Şirket bu tür kayıplardan sorumlu değildir. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +Kullanıcı, Yazılım ve/veya Şirket tarafından kolaylaştırılan ADA veya diğer kriptopara işlemlerinin ertelenebileceğini ve Şirket'in ilişkili zararlardan sorumlu olmayacağını kabul ve beyan eder. Kullanıcı, herhangi bir üçüncü taraf materyalinde veya Yazılım ve/veya Şirket ile bağlantılı veya erişilebilen herhangi bir üçüncü taraf sitesinde yer alan bilgilerin, içeriğin veya hizmetlerin herhangi bir yönünden Şirket'in sorumlu olmayacağını kabul ve beyan eder. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. +Kullanıcı, Yazılımı kullanarak: (i) Şirketin dayanak protokollerin işletilmesinden sorumlu olmadığını ve Şirket'in işlevsellik, güvenlik veya kullanılabilirliği konusunda hiçbir garanti vermediğini; ve (ii) temel protokollerin işletme kurallarında ("veri çatalları") ani ana-dizi/zincir değişikliklerine maruz kalması ve bu tür çatalların ADA'nın veya herhangi bir diğer kriptoparanın değerini ve/veya işlevini maddi olarak etkileyebileceği Yazılım üzerindeki kullanıcı bellekleri. Çatal olması durumunda, Kullanıcı Şirketin Yazılım işlemlerini geçici olarak askıya alabileceğini (Kullanıcıya bildirimde bulunarak veya bildirimde bulunmadan) ve Şirketin tamamen kendi takdirine bağlı olarak, (a) sistemlerini yapılandırabileceği veya yeniden yapılandırabileceğini veya (b) Bununla birlikte, Kullanıcı'nın Yazılımdan para çekme fırsatı bulması koşuluyla çatallı protokolü tamamen desteklememek (veya desteklemeyi bırakmak). Kullanıcı, çatallı bir protokolün desteklenmeyen bir kolu ile ilgili olarak Şirket'in hiçbir sorumluluk üstlenmediğini kabul ve beyan eder. -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +## 11. Muhtelif -## 11. Miscellaneous +**a. Değişiklik/Düzeltme.** Şirket, değiştirilen şartları, herhangi bir zamanda ve bildirimde bulunmaksızın, yalnızca Şirkete Kullanıcı tarafından sağlanan herhangi bir adrese herhangi bir aracı yoluyla elektronik mesaj yoluyla Kullanıcıya ulaştırmak suretiyle bu Sözleşmenin hükümlerini ekleme veya değiştirme hakkına sahiptir. Kullanıcının, bu tür değiştirilmiş şartların Kullanıcıya teslim tarihinden itibaren Yazılım'a erişimi veya kullanımı, bu tür değiştirilmiş şartların kabul edildiği anlamına gelecektir. -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**b. İlişik Kesme.** Bu Sözleşmenin herhangi bir hükmü veya kısmen hükmü geçersizse veya geçersiz, yasadışı veya uygulanamaz hale gelirse, geçerli, yasal ve uygulanabilir hale getirmek için gereken minimum düzeyde değiştirilmiş sayılacaktır. Böyle bir değişiklik mümkün değilse, ilgili hüküm veya kısmi hüküm silinmiş sayılacaktır. Bu madde kapsamında bir hükümde veya kısmi hükümde yapılan herhangi bir değişiklik veya silme, bu Anlaşmanın geri kalanının geçerliliğini ve uygulanabilirliğini etkilemez. -**b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. +**c. Sözleşmenin Tamamı – Güven Reddi.** İşbu Sözleşme, işbu belgenin konusuyla ilgili olarak Taraflar arasındaki tüm anlaşmayı teşkil eder ve Taraflar arasındaki önceki tüm sözleşmelerin ve anlaşmaların yerine geçer. Kullanıcı, işbu Sözleşmede açıkça belirtilenler dışında herhangi bir beyan, anlayış, beyan, beklenti veya sözleşmeye dayanmadığını açıkça beyan ve garanti eder. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**d. SÖZLEŞMENİN BAĞLAYICI TAHKİME KONU OLMASI.** Kullanıcı, bu Sözleşmeden veya herhangi bir şekilde Yazılım ile Kullanıcı veya başka bir kişi tarafından Yazılım'a erişilmesi, kullanılması veya kurulmasından kaynaklanan herhangi bir kişiye karşı her türlü anlaşmazlığın veya talebin, Tahkim Kuralları uyarınca bağlayıcı tahkime tabi olacağını kabul eder. Söz konusu Kurallar uyarınca atanan bir veya daha fazla hakem tarafından Uluslararası Ticaret Odası'nın Tahkimin yeri Japonya olacaktır. Tahkim dili İngilizce olacaktır. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. +**e. DİL.** Bu Sözleşmenin herhangi bir çevirisi yalnızca yerel referans amacıyla yapılır ve İngilizce ile İngilizce olmayan sürümler arasında herhangi bir tutarsızlık olması durumunda, bu Sözleşmenin İngilizce sürümü her bakımdan geçerli olacak ve yönetilecektir. -**e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. +## 12. Yetki Devri ve Bahis -## 12. Delegation and Staking +12.1 **Ödüller.** Kullanıcının heyetten kazanabileceği Ödüllerin miktarı, bunlarla sınırlı olmamak üzere kullanıcı katılımı, ödül havuzu kar marjları ve devredilen Ada'nın hacmi gibi çeşitli faktörlere bağlıdır. Delegasyonun yukarıda belirtilen faktörler nedeniyle Kullanıcı için Ödül üretmemesi mümkündür. Ödüller, Cardano blok zincirinde üçüncü dönem başlangıcından itibaren kazanılır. -12.1 **Rewards.** The amount of Rewards a User may earn from delegation depends on various factors including, but not limited to, user participation, stakepool profit margins and the volume of ada being delegated. It is possible that delegation generates no Reward for a User due to the above-mentioned factors. Rewards are earned as of the start of the 3rd epoch on the Cardano blockchain. +12.2 **Yetkilendirme.** Kullanıcılar, hisselerini Şirketin çeşitli bahis havuzlarından birine veya bir üçüncü taraf bahis havuzuna devredebilir. Kullanıcı, bir bahis havuzuna devredilecek hacmi belirleme hakkına sahiptir ve istediği zaman katılım seviyesini artırabilir veya azaltabilir. Performans ölçütleri ve Ödüller dahil olmak üzere, şirketin bahis havuzları ile ilgili paylaştığı bilgiler, yalnızca bilgilendirme amaçlıdır ve doğru olmayabilir. Kullanıcılar, yalnızca kurulum işlemlerinin yapıldığı sırada Ada'ları güncellenmiş bir Daedalus veya güncellenmiş bir Yoroi cüzdanındaysa, paylarını bir bahis havuzuna devredebilirler. Kullanıcı, hissesini devretmenin bir sonucu olarak herhangi bir otomatik Ödül hakkı elde etmez. -12.2 **Delegation.** Users may delegate their stake to one of the various stake pools of the Company or to a third party stake pool. User will have the sole right to determine the volume to be delegated to a stake pool and may increase or decrease its level of participation at any time. Any information Company shares regarding stakepools, including performance metrics and Rewards, will be for indicative purposes only and may not be accurate. Users may only delegate their stake to a stake pool if their ada is in an updated Daedalus or an updated Yoroi wallet at the time of the setup process. User does not acquire any automatic right to Rewards as a result of delegating its stake. +12.3 **Şirket Ödül-Havuzları.** Şirket, Yoroi veya Seiza'da görülebilecek çeşitli bahis havuzları işletecek. Bu tür ödül havuzlarını güvenilir bir şekilde işletmek için maliyet ve ağ ve sunucu gereklilikleri Şirket tarafından tamamen kendi takdirine bağlı olarak belirlenir. Bu tür ödül havuzlarını güvenilir bir şekilde işletmek için maliyet ve ağ ve sunucu gereklilikleri Şirket tarafından tamamen kendi takdirine bağlı olarak belirlenir. Ödüller her dönemin sonunda gerçekleşecek ve otomatik olarak Kullanıcının Yoroi cüzdanında görülecektir. Şirket, Kullanıcıya bahis performansını gösteren bir gösterge tablosu sağlayacaktır. -12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. - -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 ** Ödül Kazanma. ** Kullanıcı ödüllerin tabi olabileceği tüm geçerli vergilerin ve Ödüller kullanıldıktan sonra Kullanıcıya uygulanabilecek tüm diğer vergilerin ödenmesinden sorumludur. From 313434a69ab642de514e0c8e170c15af30706c91 Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:26 +0100 Subject: [PATCH 366/464] New translations en-us.md (zh-Hans) --- .../i18n/locales/terms-of-use/ada/zh-Hans.md | 110 +++++++----------- 1 file changed, 39 insertions(+), 71 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/zh-Hans.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/zh-Hans.md index 62a96a1ef3..73bbd86b2e 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/zh-Hans.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/zh-Hans.md @@ -1,109 +1,77 @@ -# Terms of Service Agreement +# 服务协议条款 -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +本服务协议条款(下称“本协议”)由EMURGO Co., Ltd.(下称“本公司”)与完成下载、使用或操作名为“Yoroi数字加密货币钱包”的应用软件以及本公司与该软件一并提供的数据处理服务、应用、通信服务或其他内容(下称“本软件”)的任何个人或实体(下称“用户”)订立。本公司与用户合称“双方当事人”。 通过点击“我接受”按钮或访问、使用或安装本软件的任何部分,用户明确同意且承诺受本协议中的所有条款合法约束。如果用户不同意接受本协议的所有条款,用户不得被授权访问、使用或安装本软件的任何部分。 -## 1. Rights and Obligations +## 1. 权利与义务 -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. 说明。** 本软件作为一个免费、开源的数字加密货币钱包运行。本软件不构成本公司或任何其他第三方借此为用户的ADA或任何其他加密货币担任金融中介机构或保管人的账户。 本软件已进行过beta测试,并将根据来自开发者社区、开源贡献者和beta测试人员的反馈持续改进,但本公司无法保证本软件中不存在漏洞。用户认可,用户对本软件的使用由用户自行决定,由用户自担风险,且遵守所有适用法律。用户负责妥善保管其密码、PIN、私有密钥、找回密钥、屏蔽自动密钥、备份恢复助记口令、ADA密码及用户用于访问本软件或任何信息、ADA、凭证或其他加密货币单元的任何其他代码。 如果用户丢失对其加密数字货币钱包的访问权限或私有密钥,且未单独保存一份用户的加密数字货币钱包或备份恢复助记口令及相应密码的备份,则用户认可并同意,任何ADA或用户与该加密数字货币钱包关联的任何其他加密数字货币将变为无法访问。所有交易请求均不可撤销。如果用户丢失或遗忘其私有密钥或密码,本公司及其股东、董事、高管、员工、关联方和代理人均不能保证交易确认或恢复用户的私有密钥或密码。 -**b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. +**b. 可访问性。** 用户同意,本软件可能不时出于任何原因无法访问或无法操作,原因包括但不限于:(i)设备故障;(ii)定期维护程序或本公司不定时进行的维修;或(iii)超出本公司控制范围或本公司无法合理预测的原因。 -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. 设备。** 用户应自行负责提供、维护和确保用户为使用本软件所需的与本软件的兼容性、所有硬件、软件、电子的和其他物理上的要求,包括但不限于电信和互联网访问连接及链接、网页浏览器或其他访问和使用本软件所需的设备、程序和服务。 -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. 安全性。** 用户应对用户通过本软件接收、传输或存储在本软件上的所有信息和内容的安全性、保密性和完整性负全部责任。用户应对任何人对用户的任何账户的任何被授权或未被授权的访问负全部责任。用户同意对用户的安全设备、信息、密钥和密码的保密性负全部责任。 -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. 隐私权。** 在合理可行时,本公司将尝试尊重用户的隐私。未经用户事先同意,本公司将不会监控、编辑或披露任何有关用户或用户的账户的任何个人信息,包括其内容或用户对本软件的使用,但本公司真诚相信出于以下任一目的有必要实施该等行为的,则不受此限:(i)遵守法律程序或任何政府机关的其他合法要求;(ii)保护和捍卫本公司的权利或财产;(iii)执行本协议;(iv)保护除用户外的本软件的其他使用者或其他任何人的利益;或(v)在法律许可的范围内操作或进行对本公司的服务或设备(包括本软件)的维护和修理。用户对互联网相关隐私整体并无期待,用户的IP地址将与用户从本软件中发送的每条消息或其他信息一起被传输和记录。 -## 2. Taxes and Fees +## 2. 税金和费用 -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +无论是任何政府机关现在或以后征收的所有货币汇兑费用、第三方费用、销售税、使用税、增值税、个人财产税或其他税金、任何形式的关税或征税,包括与之相关的利息和罚金,以及由于用户访问、使用或安装本软件而对用户造成的费用,均由用户独自承担。 -## 3. User Representations +## 3. 用户声明 -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +用户向本公司声明与保证:(a)如果用户为自然人,则其年龄已超过十八(18)岁;(b)用户具有订立和履行用户在本协议项下义务的权利能力和授权;(c)用户向本公司提供的所有信息均真实、准确和完整;(d)用户将遵守有关用户对本软件的访问、使用或安装的任何可适用的司法管辖区的所有法律法规;(e)用户应遵守本协议的所有条款和条件,包括但不限于第4条中列明的条款;且(f)用户已提供并将提供访问、使用或安装本软件所需的准确且完整的信息。 -## 4. Prohibited Uses +## 4. 禁止用途 -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +用户应对在用户的账户、安全信息、密钥或密码下发生的所有行为和疏忽负全部责任,且用户同意不对本软件进行任何不被接受的使用,包括但不限于将本软件用以:(a)散播、存储或传输未经请求的讯息、连锁信或未经请求的商业邮件;(b)散播或传输对于理性自然人而言可能为侮辱、淫秽、色情、诽谤、骚扰、严重冒犯、粗俗、威胁或恶意的资料;(c)散播、存储或传输实际或潜在侵犯任何人的版权、商标权、专利权、商业秘密或其他知识产权的文件、图形、软件或其他资料;(d)关于任何通讯的身份或来源,创建虚假身份或企图以其他方式误导任何人;(e)违反任何适用的司法管辖区的出口或进口法律、法规或限制、或在未取得所有必要的批准、许可或豁免的情况下出口、再出口或允许下载任何信息或内容;(f)妨碍、扰乱或企图未经授权访问本软件或任何其他计算机网络上的其他帐户;或(g)散播、存储或传输病毒、特洛伊木马程序或任何其他恶意代码或程序。 -## 5. Termination +## 5. 协议终止 -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +本协议自用户按照本协议的规定接受时生效,并将在用户进行本软件的任何访问、使用或安装期间持续具有完全效力。本公司保留权利,在任何时间以任何理由不经通知、自行决定:(a)移除或禁用对本软件的全部或任一部分的访问;(b)暂停用户对本软件的全部或任一部分的访问或使用;以及(c)终止本协议。 -## 6. Disclaimer of Warranties +## 6. 免责声明 -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +本软件按现状提供,不存在任何种类的明示或默示的保证。本软件的使用须由用户承担全部风险。本公司不保证本软件会不受干扰或没有错误,也不对通过使用本软件可能获取的结果做任何保证。本公司不做其他明示或默示的保证。本公司明确否认对适销性、针对特定目的的适用性、权利或利益、或无侵权情形做出任何保证。 -## 7. Limitation of Liability +## 7. 责任限制 -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +在任何情形下,本公司或其股东、董事、高管、员工、关联方或代理人、或其各自的任何服务提供商对于本软件的任何使用、中断、延迟或无法使用,损失的收益或利润,服务的延迟、中断或丢失,商业或商誉,数据的丢失或损坏,因系统或系统服务故障而造成的损失,故障或关闭,未能准确转移、读取或传输信息,未能更新或提供正确信息,系统不兼容、或提供不正确的兼容性信息、或系统安全破坏,或任何结果的、偶发的、间接的、惩戒性、特殊的或惩罚性损害,无论是因本协议、违反合约、侵权行为(包括过失的侵权行为)或其他而引起的或与之有关,亦无论该等损害是否可预见以及本公司是否已被告知该等损害发生的可能性,均不向用户或任何第三方负责。 在任何情形下,本公司或其股东、董事、高管、员工、关联方或代理人、或其各自的任何服务提供商均不对因用户访问、使用或安装本软件而引起的或与之有任何关联的任何索赔、损害或其他责任负责,无论是在合同行为、侵权行为或其他行为当中。 某些司法管辖区禁止排除或限制偶发的或结果的损害赔偿,因此本责任限制可能不适用于用户。如果用户对本软件不满,用户的唯一且排他的救济是由用户停止对本软件的使用。 -## 8. Indemnification +## 8. 赔偿 -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +就任何人因(a)本协议;(b)用户对本软件的访问、使用或安装,包括用户传输或接收的任何数据或工作;及(c)任何人对本软件的任何不可接受的使用(包括但不限于作为第4条中规定的不可接受的内容而被禁止的由用户或任何人制作、传输或重新发布的任何声明、数据或内容)或与之相关而主张的任何诉讼、诉因、索赔、损害、债务、要求或责任,包括合理费用和律师费用,用户同意向本公司、其股东、董事、高管、员工、关联方和代理人(下称“受偿方”)赔偿、使其免受损害并维护其权益。本赔偿包括对本公司及所有受偿方因本公司或任何受偿方被主张任何过失(包括任何被主张的重大过失)或被主张的其他不当行为而做出的明示赔偿。 -## 9. Intellectual Property +## 9. 知识产权 -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +本公司保留对本公司的所有品牌、标识和商标的所有权利、所有权和利益,包括但不限于EMURGO Co., Ltd.、EMURGO、Yoroi、Yoroi Cryptocurrency Wallet、Yoroi Wallet、Yoroi App以及前述品牌、标识和商标的用语变化形式。 -## 10. Warnings +## 10. 警告 -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +用户认可,本公司不负责转让、保护或维护私有密钥和/或用户的ADA或任何其他加密数字货币。如果用户和/或任何联署当局丢失、错误处理或使关联的私有密钥失窃,或用户的联署人拒绝提供必要的授权,用户认可,用户可能无法恢复用户的ADA或任何其他数字加密货币,且本公司不为该等损失负责。 -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +用户认可并同意,通过本软件和/或本公司促成的ADA或任何其他加密数字货币交易可能会被延迟,且本公司不为任何相关损失负责。 用户认可并同意,本公司不对包含在任何第三方资料中的、或在可访问或链接至本软件和/或本公司的任何第三方网站上的信息、内容或服务的任何方面负责。 -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. +通过使用本软件,用户认可并同意:(i)本公司不负责底层协议的运行,且本公司不对其功能性、安全性或可用性做任何担保;且(ii)底层协议受制于运行规则中的突发主链变化(下称“分叉”),且该等分叉可能对用户存储在本软件上的ADA或任何其他加密数字货币的价值和/或功能有重大影响。如发生分叉,用户同意,本公司可以(在通知或不通知用户的情况下)暂时中止本软件的运行,且本公司可以自行(a)配置或重新配置其系统或(b)决定完全不支援(或停止支援)分叉协议,但前提是用户有机会从本软件中取回资金。用户认可并同意,本公司绝不就有关分叉协议的不受支援的分支承担任何责任。 -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +## 11. 其他事项 -## 11. Miscellaneous +**a.修订。** 本公司有权随时不经通知地增加或修改本协议的条款,仅通过向用户提供给本公司的任何地址发送借由任何媒介的电子信息,向用户交付该等修订后的条款。在该等修订后条款被交付给用户后,用户对本软件的访问或使用视为构成对该等修订后条款的接受。 -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**b.可分性。** 如果本协议的任何条款或条款部分为或变为无效、违法或不可执行,则应视为在使其有效、合法且可执行所必要的最低限度内被修改。如果该等修改是不可能的,则相关条款或条款部分应视为被删除。本条规定的任何对条款或条款部分的修改或删除均不影响本协议的剩余部分的有效性和可执行性。 -**b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. +**c.完整协议——信赖免责。** 本协议构成双方当事人之间就本协议内容的完整协议,并取代双方当事人之间的所有在先协议或理解。用户明确声明与保证,其不会依赖本协议中明示规定的内容以外的任何表述、理解、声明、预期或协议。 -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**d.本协议受限于有约束力的仲裁。** 用户同意,因本协议或用户或其他任何人对本软件的访问、使用或安装而引起的或与之有任何关联的针对任何人的任何争议或索赔,均应受限于由按照国际商会仲裁规则委派的一名或多名仲裁员根据该等仲裁规则做出的有约束力的仲裁。仲裁地应为日本。仲裁语言为英语。 -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. +**e.语言。** 本协议的任何翻译均仅为本地参考之用,如果英文版本与非英文版本之间发生任何不一致,在任何情况下均应以本协议的英文版本为准并有约束力。 -**e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. +## 12. 委托和质押 -## 12. Delegation and Staking +12.1 **奖励。** 用户可以从委托中获得的奖励金额取决于多种因素,包括但不限于用户参与度,权益池利润率和接受委托的ADA数量。基于上述因素,委托可能不会为用户产生任何奖励。奖励从在Cardano区块链授权后第三个时代开始时开始计算。 -12.1 **Rewards.** The amount of Rewards a User may earn from delegation depends on various factors including, but not limited to, user participation, stakepool profit margins and the volume of ada being delegated. It is possible that delegation generates no Reward for a User due to the above-mentioned factors. Rewards are earned as of the start of the 3rd epoch on the Cardano blockchain. +12.2 **委托。** 用户可以将其权益委托给公司的某一权益池或第三方权益池。用户拥有的唯一的权力是能够把握要委托给权益池的数量,并且可以随时增加或减少其参与程度。公司分享的有关权益池的任何信息,包括绩效指标和奖励,仅用于指导目的,可能不准确。如果其ADA存在于最新的Daedalus或Yoroi钱包中,用户就能将其权益委托给一个权益池。用户由于委托其权益并不会产生额外的权利。 -12.2 **Delegation.** Users may delegate their stake to one of the various stake pools of the Company or to a third party stake pool. User will have the sole right to determine the volume to be delegated to a stake pool and may increase or decrease its level of participation at any time. Any information Company shares regarding stakepools, including performance metrics and Rewards, will be for indicative purposes only and may not be accurate. Users may only delegate their stake to a stake pool if their ada is in an updated Daedalus or an updated Yoroi wallet at the time of the setup process. User does not acquire any automatic right to Rewards as a result of delegating its stake. +12.3 **公司的权益池。** 本公司将运营各种权益池,这些权益池将在Yoroi或Seiza中显示。可靠地运营此类权益池的成本以及对网络和服务器要求,应由公司自行决定。公司将通过用户的Yoroi钱包告知用户奖励的比例。奖励将在每个时代结束时产生,并自动出现在用户的Yoroi钱包中。 -12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. - -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 **提取奖励。**如果有任何可能的交易税款,应由用户承担。特别是提取奖励时有可能会产生税款。 From 3c59485d80f1464e244af90e248436ab5b257638 Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:28 +0100 Subject: [PATCH 367/464] New translations en-us.md (zh-Hant) --- .../i18n/locales/terms-of-use/ada/zh-Hant.md | 102 ++++++------------ 1 file changed, 35 insertions(+), 67 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/zh-Hant.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/zh-Hant.md index 62a96a1ef3..07b1249290 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/zh-Hant.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/zh-Hant.md @@ -1,102 +1,70 @@ -# Terms of Service Agreement +# 服務條款 -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +本服務條款(下稱「本條款」)由EMURGO Co., Ltd.(下稱「本公司」)與完成下載、使用或操作「Yoroi數位加密貨幣錢包」此一應用軟體以及本公司與該軟體一併提供之資訊處理服務、應用、通信服務或其他內容(下稱「本軟體」)之任何個人或實體(下稱「用戶」)所訂立。本公司與用戶合稱為「雙方當事人」。 透過點擊「我接受」按鈕或訪問、使用或安裝本軟體的任何部分,用戶明確同意且承諾受本條款中的所有規定合法約束。若用戶不同意接受本條款之所有規定,用戶將不被授權訪問、使用或安裝本軟體的任何部分。 -## 1. Rights and Obligations +## 1. 權利與義務 -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. 說明。** 本軟體作為一個免費、開源之數位加密貨幣錢包運行。本軟體不構成本公司或其他任何第三人借此為用戶的ADA或任何其他加密貨幣擔任金融仲介機構或保管人的帳戶。 本軟體已進行過beta測試,並將根據來自開發者社群、開源貢獻者和beta測試人員的回饋持續改進,但本公司無法保證本軟體中不存在程序錯誤。用戶承認,用戶對於本軟體之使用係由其自行決定,由其自擔風險,且遵守所有適用法律。用戶應自行負責妥善保管其密碼、PIN、私密金鑰、找回密碼、屏蔽自動密碼、備份還元助記碼、ADA密碼及用戶用於訪問本軟體或任何資訊、ADA、憑證或其他加密貨幣單位的任何其他代碼。 若用戶喪失對其數位加密貨幣錢包之存取權限或私密金鑰,且未單獨保存一份用戶的數位加密貨幣錢包或備份還元助記碼及相應密碼的備份,則用戶承認並同意,任何ADA或用戶與該數位加密貨幣錢包關聯之任何其他數位加密貨幣將變為無法訪問。所有交易請求均不可撤銷。若用戶喪失或遺忘其私密金鑰或密碼,本公司及本公司之股東、董事、管理人員、員工、關係人及代理人均不能保證交易確認或恢復用戶的私密金鑰或密碼。 -**b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. +**b. 可訪問性。** 用戶同意,本軟體可能出於任何原因而不定時地無法訪問或無法操作,原因包括但不限於:(i)設備故障;(ii)定期性維護程序或本公司不定時進行的維修;或(iii)超出本公司控制範圍或本公司無法合理預見之原因。 -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. 設備。** 用戶應自行負責提供、維護並確保用戶為使用本軟體所需之與本軟體的相容性、所有硬體、軟體、電子的及其他物理上的要求,包括但不限於電信與網路連線之連接及連結、網頁瀏覽器或其他訪問及使用本軟體所需之設備、程式與服務。 -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. 安全性。** 用戶應自行就其透過本軟體接收、傳輸或儲存於本軟體內之所有資訊及內容的安全性、機密性與完整性負責。用戶應自行就任何有經授權或未經授權之任何人進入用戶之任何帳戶一事負責。用戶同意對用戶之安全設備、資訊、金鑰和密碼的機密性,負擔全部責任。 -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. 隱私權。** 於合理可行之情況下,本公司將會試圖尊重用戶的隱私權。未經用戶事先同意,本公司將不會監控、編輯或揭露任何有關用戶或用戶帳戶的任何個人資料,包括其內容或用戶對於本軟體的使用。但若有本公司基於誠信原則認為為了以下任一目的,採取該等行為係屬必要者,不在此限:(i)遵守法律程序或任何政府機關之其他合法要求;(ii)保護及捍衛本公司之權利或財產;(iii)執行本條款;(iv)保護除用戶外之本軟體的其他使用者或其他任何人的利益;或(v)在法律許可之範圍內,操作或進行對本公司的服務或設備(包括本軟體)之維護和修理。用戶對於網路相關隱私整體並無期待。用戶之IP位址,透過用戶自本軟體中發送之各訊息或其他資訊,被傳輸並記錄。 -## 2. Taxes and Fees +## 2. 稅金與費用 -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +無論是任何政府機關現在或以後課徵之所有貨幣兌換費用、第三人費用、銷售稅、使用稅、增值稅、個人財產稅或其他稅金、任何形式之稅金課徵,包括與之相關的利息及罰金(鍰),以及由於用戶訪問、使用或安裝本軟體而對用戶造成之費用,均由用戶獨自負擔。 -## 3. User Representations +## 3. 用戶聲明 -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +用戶向本公司聲明與保證:(a)如果用戶為自然人,用戶年齡已超過十八(18)歲;(b)用戶具有訂立並履行用戶在本條款內之義務的權能及授權;(c)用戶向本公司提供的所有資訊均真實、正確且完整;(d)用戶將遵守有關用戶訪問、使用或安裝本軟體之任何可適用的司法管轄區的所有法律法規;(e)用戶應遵守本條款內的所有規定及條件,包括但不限於第4條中列明之規定;且(f)用戶已提供並將提供訪問、使用或安裝本軟體所需之正確且完整的資訊。 -## 4. Prohibited Uses +## 4. 禁止之使用 -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +用戶應自行對於在用戶的帳戶、安全資訊、金鑰或密碼下發生的所有行為及疏漏負責,且用戶同意不會進行本軟體不允許之使用,包括但不限於將本軟體用以:(a)散播、儲存或傳輸未經請求之訊息、連鎖信或未經請求之商業電子郵件;(b)散播或傳輸對於理性自然人而言可能為侮辱、淫穢、色情、誹謗、騷擾、嚴重冒犯、粗俗、威脅或惡意的資料;(c)散播、儲存或傳輸實際或潛在地侵害任何人的著作權、商標權、專利權、營業秘密或其他智慧財產權的檔案、圖形、軟體或其他資料;(d)關於任何通訊的身份或來源,創設虛假身份或企圖以其他方式誤導任何人;(e)違反任何可適用的司法管轄區的出口或進口法律、法規或限制、或是並未取得所有必須的核准、許可或豁免的情況下出口、再出口或允許下載任何資訊或內容;(f)妨礙、擾亂或企圖未經授權訪問本軟體或任何其他電腦網路上的其他帳戶;或(g)散播、儲存或傳輸病毒、特洛伊木馬程式或任何其他惡意代碼或程式。 -## 5. Termination +## 5. 終止 -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +本條款自用戶依本條款之規定接受時生效,並將在用戶實行本軟體的任何訪問、使用或安裝期間,繼續完全有效。本公司保留依單獨裁量隨時以任何理由且無需通知之以下權利:(a)移除或禁止訪問本軟體之全部或任一部分;(b)暫停用戶對本軟體之全部或任一部分的訪問或使用;以及(c)終止本條款。 -## 6. Disclaimer of Warranties +## 6. 免責聲明 -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +本軟體按現狀提供,不存在任何種類的明示或默示之保證。本軟體的使用須由用戶承擔全部風險。本公司不保證本軟體不會受到干擾或不會發生錯誤,也不對經由使用本軟體可能獲得的任何結果做任何保證。本公司不做其他明示或默示之保證。本公司明確否認對於可銷性、針對特定用途的適合性、權利或利益、或非侵權情形做出任何保證。 -## 7. Limitation of Liability +## 7. 責任限制 -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +在任何情形下,本公司或其股東、董事、管理人員、員工、關係人或代理人、或其各自的任何服務提供者,對於本軟體的任何使用、中斷、延遲或無法使用,損失的收益或利潤,服務的延遲、中斷或喪失,業務或商譽,資料之遺失或毀損,因系統或系統服務故障而造成的損失,故障或停機,未能正確移轉、讀取或傳輸資訊,未能更新或提供正確資訊,系統不相容、或提供不正確的相容性資訊、或系統安全性之違反,或任何結果的、偶發的、間接的、懲戒性、特殊的或懲罰性損害,無論是因本條款、違反契約、侵權行為(包括過失之侵權行為)或其他原因而生,或是與之有關者,亦無論該等損害是否可預見以及本公司是否已被告知該等損害發生之可能性,均不向用戶或任何第三人負責。 在任何情形下,本公司或其股東、董事、管理人員、員工、關係人或代理人、或其各自的任何服務提供者,均不對因用戶訪問、使用或安裝本軟體而引起的或與之有任何關聯的任何請求、損害或其他責任負責,無論係依契約、侵權行為或其他主張而提起之訴訟。 某些司法管轄區禁止排除或限制偶發的或結果的損害賠償,因此本責任限制可能不適用於用戶。若用戶對於本軟體並不滿意,用戶之唯一且排他之救濟是由用戶逕自停止使用本軟體。 -## 8. Indemnification +## 8. 賠償 -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +用戶同意賠償、維護並使本公司、其股東、董事、管理人員、員工、關係人及代理人(下稱「受償方」)免受因(a)本條款;(b)用戶對本軟體之訪問、使用或安裝,包括用戶傳輸或接收的任何資料或工作;及(c)任何人對本軟體進行任何不允許之使用(包括但不限於作為第4條所規定之不允許事項,而被禁止由用戶或任何人製作、傳輸或重新發佈之任何聲明、資料或內容)所導致或與之相關的任何人主張的一切訴訟、訴因、請求、損害、債務、要求、或責任,包括合理費用及律師費用。本賠償包括對於本公司及所有受償方因本公司或任何受償方受主張之任何過失(包括任何主張之重大過失)或受主張之其他不當行為而做出的明示賠償。 -## 9. Intellectual Property +## 9. 智慧財產權 -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +本公司保留對本公司的所有品牌、標識與商標之所有權利、所有權及利益,包括但不限於EMURGO Co., Ltd.、EMURGO、Yoroi、Yoroi Cryptocurrency Wallet、Yoroi Wallet、Yoroi App以及前述品牌、標識與商標之用語表達之變化。 -## 10. Warnings +## 10. 警告 -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +用戶承認,本公司不負責轉讓、保護或維護私密金鑰及/或用戶之ADA或任何其他數位加密貨幣。若用戶及/或任何聯署機構喪失、錯誤地處理或使相關之私密金鑰失竊,或用戶的聯署人拒絕提供必要之授權,用戶承認用戶可能無法恢復用戶的ADA或任何其他數位加密貨幣,且本公司不為該等損失負責。 -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +用戶承認並同意,通過本軟體及/或本公司促成的ADA或任何其他數位加密貨幣交易可能會有延遲,且本公司不為任何相關損失負責。 用戶承認並同意,本公司不對包含在任何第三人資料中的、或在可訪問或連結至本軟體及/或本公司之任何第三人網站上的資訊、內容或服務的任何方面負責。 -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. +透過使用本軟體,用戶承認並同意:(i)本公司不負責底層協定之運作,且本公司不對其功能性、安全性或可利用性做任何擔保;且(ii)底層協定受制於運作規則中的突發主鏈變化(下稱「分叉」),且該等分叉可能對用戶儲存在本軟體上的ADA或任何其他數位加密貨幣之價值及/或功能有重大影響。如發生分叉,用戶同意本公司得(在通知或不通知用戶之情況下)暫時中止本軟體的運行,且本公司得自行(a)配置或重新配置其系統或(b)決定完全不支援(或停止支援)分叉協定,但前提是用戶有機會從本軟體中取回資金。用戶承認並同意,關於分叉協定中不受支援的分叉,本公司絕不承擔任何責任。 -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +## 11. 其他事項 -## 11. Miscellaneous +**a.修訂。** 本公司有權隨時且無需通知地增加或修改本條款之規定,僅透過向用戶提供給本公司的任何地址發送透過任何媒介之電子訊息,向用戶交付該等修訂後之規定。在該等修訂後之規定被交付給用戶後,用戶對於本軟體之訪問或使用視為構成對於該等修訂後規定之承認。 -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**b.可分性。** 若本條款之任何規定或部分規定係無效或變為無效、違法或無法執行,則應視為在使其有效、合法且可執行所必要之最低限度內被修改。若該修改是不可能的,則相關規定或部分規定應視為被刪除。依本條所為之,任何對於規定或部分規定的修改或刪除,均不影響本條款其餘部分之有效性及可執行性。 -**b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. +**c.完全合意——信賴免責。** 本條款構成雙方當事人之間就本條款內容之完全合意,並取代雙方當事人之間所有先前之協議或理解。用戶明確聲明並保證,其不會信賴本條款中明示規定內容以外之任何表述、理解、聲明、預期或協議。 -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**d.本條款受限於具拘束力的仲裁。** 用戶同意,因本條款或用戶或其他任何人對本軟體之訪問、使用或安裝所引起或與之有任何關聯的針對任何人的任何爭議或請求,均應受限於由按照國際商會仲裁規則委派的一名或多名仲裁人根據該仲裁規則做出之具拘束力的仲裁。仲裁地應為日本。仲裁語言為英文。 -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. - -**e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. +**e.語言。** 本條款之任何翻譯均僅為當地參考之用,若英文版本與非英文版本之間有任何不一致,在任何情況下均應以本條款之英文版本為準並有拘束力。 ## 12. Delegation and Staking @@ -106,4 +74,4 @@ If you have any questions or concerns regarding the accuracy or reliability of t 12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. From 7c698db12ae7487e46c94117b86c7706d0e4dfc9 Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:29 +0100 Subject: [PATCH 368/464] New translations en-us.md (Vietnamese) --- .../i18n/locales/terms-of-use/ada/vi-VN.md | 110 +++++++----------- 1 file changed, 39 insertions(+), 71 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/vi-VN.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/vi-VN.md index 62a96a1ef3..415c173768 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/vi-VN.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/vi-VN.md @@ -1,109 +1,77 @@ -# Terms of Service Agreement +# Thỏa thuận điều khoản dịch vụ -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +THỎA THUẬN ĐIỀU KHOẢN DỊCH VỤ NÀY ("Thỏa thuận") được lập giữa EMURGO Co., Ltd. ("Công ty") và bất kỳ cá nhân hoặc tổ chức nào ("Người dùng") hoàn thành quy trình tải xuống, sử dụng hoặc vận hành phần mềm được gọi là ứng dụng Ví tiền mã hóa Yoroi và dịch vụ xử lý dữ liệu, ứng dụng, dịch vụ liên lạc hoặc nội dung khác hoặc do Công ty ("Phần mềm") cung cấp hoặc cung cấp phần mềm. Công ty và Người dùng được gọi chung là "Các bên." BẰNG CÁCH NHẤP VÀO NÚT CHẤP NHẬN HOẶC TRUY CẬP, SỬ DỤNG HOẶC CÀI ĐẶT BẤT KỲ PHẦN NÀO CỦA PHẦN MỀM, NGƯỜI DÙNG ĐỒNG Ý RÕ RÀNG VÀ ĐỒNG Ý CHỊU RÀNG BUỘC PHÁP LÝ BỞI TẤT CẢ CÁC ĐIỀU KHOẢN CỦA THỎA THUẬN NÀY. NẾU NGƯỜI DÙNG KHÔNG ĐỒNG Ý VỚI TẤT CẢ CÁC ĐIỀU KHOẢN CỦA THỎA THUẬN NÀY, NGƯỜI DÙNG SẼ KHÔNG ĐƯỢC CẤP PHÉP TRUY CẬP, SỬ DỤNG HOẶC CÀI ĐẶT BẤT KỲ PHẦN NÀO CỦA PHẦN MỀM. -## 1. Rights and Obligations +## 1. Quyền và Nghĩa vụ -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. Mô tả.** Phần mềm hoạt động như một ví tiền mã hóa mã nguồn mở, miễn phí. Phần mềm không tạo thành tài khoản mà Công ty hoặc bất kỳ bên thứ ba nào khác đóng vai trò là trung gian tài chính hoặc người giám sát ADA của Người dùng hoặc bất kỳ loại tiền mã hóa nào khác. Mặc dù Phần mềm đã trải qua thử nghiệm beta và tiếp tục được cải thiện nhờ phản hồi từ cộng đồng nhà phát triển, những người đóng góp nguồn mở và người thử nghiệm beta, Công ty không thể đảm bảo rằng sẽ không có lỗi trong Phần mềm. Người dùng thừa nhận rằng việc sử dụng Phần mềm của Người dùng là rủi ro, quyết định của Người dùng và tuân thủ tất cả các luật hiện hành. Người dùng chịu trách nhiệm bảo quản an toàn mật khẩu, mã PIN, khóa cá nhân, khóa phần thưởng, khóa bán hàng tự động được bảo vệ, cụm mật khẩu ghi nhớ khôi phục dự phòng, mật mã ADA và bất kỳ mã nào khác mà Người dùng sử dụng để truy cập Phần mềm hoặc bất kỳ thông tin nào, ADA, chứng từ hoặc đơn vị tiền điện tử khác. NẾU NGƯỜI DÙNG MẤT QUYỀN TRUY CẬP VÀO VÍ TIỀN MÃ HÓA HOẶC KHÓA RIÊNG TƯ CỦA NGƯỜI DÙNG VÀ KHÔNG LƯU TRỮ RIÊNG BẢN SAO DỰ PHÒNG VÍ TIỀN MÃ HÓA CỦA NGƯỜI DÙNG HOẶC BẢN DỰ PHÒNG KHÔI PHỤC (CỤM TỪ MNEMONIC VÀ (CÁC) MẬT KHẨU tương ứng), NGƯỜI DÙNG XÁC NHẬN VÀ ĐỒNG Ý RẰNG BẤT KỲ ADA HOẶC BẤT KỲ NGƯỜI DÙNG TIỀN MÃ HÓA NÀO KHÁC ĐÃ LIÊN KẾT VỚI VÍ TIỀN MÃ HÓA ĐÓ SẼ KHÔNG THỂ TRUY CẬP ĐƯỢC. Tất cả các yêu cầu giao dịch là không thể đảo ngược. Công ty và các cổ đông, giám đốc, cán bộ, nhân viên, chi nhánh và đại lý của Công ty không thể đảm bảo xác nhận giao dịch hoặc lấy lại khóa cá nhân hoặc mật khẩu của Người dùng nếu Người dùng làm mất hoặc quên chúng. -**b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. +**b. Khả năng truy cập.** Người dùng đồng ý rằng đôi khi Phần mềm có thể không truy cập được hoặc không hoạt động vì bất kỳ lý do gì, bao gồm: (i) trục trặc thiết bị; (ii) các thủ tục bảo trì định kỳ hoặc sửa chữa mà Công ty có thể thực hiện tùy từng thời điểm; hoặc (iii) các nguyên nhân nằm ngoài tầm kiểm soát của Công ty hoặc Công ty không thể dự đoán một cách hợp lý. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. Trang thiết bị.** Người dùng phải tự chịu trách nhiệm về việc cung cấp, duy trì và đảm bảo tính tương thích với Phần mềm, tất cả phần cứng, phần mềm, điện và các thứ liên quan khác yêu cầu đối với việc sử dụng Phần mềm của Người dùng, bao gồm nhưng không giới hạn, kết nối và truy cập internet, trình duyệt web hoặc các trang thiết bị, chương trình và dịch vụ khác cần thiết để truy cập và sử dụng Phần mềm. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. Bảo mật.** Người dùng phải tự chịu trách nhiệm về tính bảo mật, và tính toàn vẹn của tất cả thông tin và nội dung mà Người dùng nhận, truyền qua hoặc lưu trữ trên Phần mềm. Người dùng sẽ tự chịu trách nhiệm về mọi truy cập được phép hoặc trái phép vào bất kỳ tài khoản nào của Người dùng bởi bất kỳ người nào. Người dùng đồng ý chịu mọi trách nhiệm về tính bảo mật của thiết bị bảo mật, thông tin, khóa và mật khẩu của Người dùng. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. Quyền riêng tư.** Khi có thể thực hiện được một cách hợp lý, Công ty sẽ cố gắng tôn trọng quyền riêng tư của Người dùng. Công ty sẽ không giám sát, chỉnh sửa hoặc tiết lộ bất kỳ thông tin cá nhân nào về Người dùng hoặc tài khoản của Người dùng, bao gồm cả nội dung hoặc việc Người dùng sử dụng Phần mềm mà không có sự đồng ý trước của Người dùng trừ khi Công ty tin vào thiện chí rằng hành động đó là cần thiết để: (i) tuân thủ quy trình pháp lý hoặc các yêu cầu pháp lý khác của bất kỳ cơ quan chính phủ nào; (ii) bảo vệ quyền hoặc tài sản của Công ty; (iii) Thỏa thuận này thi hành; (iv) bảo vệ lợi ích của người dùng Phần mềm hoặc bất kỳ người nào khác; hoặc (v) vận hành hoặc tiến hành bảo trì và sửa chữa các dịch vụ hoặc thiết bị của Công ty, bao gồm cả Phần mềm theo sự cho phép của pháp luật. Người dùng không có kỳ vọng về quyền riêng tư đối với Internet nói chung. Địa chỉ IP của Người dùng sử dụng để truyền và ghi lại với mỗi tin nhắn hoặc thông tin khác mà Người dùng gửi từ Phần mềm. -## 2. Taxes and Fees +## 2. Thuế và phí -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +Tất cả các khoản phí chuyển đổi tiền tệ, phí bên thứ ba, bán hàng, sử dụng, giá trị gia tăng, tài sản cá nhân hoặc thuế khác, thuế hoặc phí dưới bất kỳ hình thức nào, bao gồm tiền lãi và tiền phạt, cho dù được áp dụng ngay bây giờ hoặc sau này bởi bất kỳ tổ chức chính phủ nào và các khoản phí phát sinh bởi Người dùng vì lý do truy cập, sử dụng hoặc cài đặt Phần mềm của Người dùng sẽ hoàn toàn do Người dùng chịu trách nhiệm. -## 3. User Representations +## 3. Đại diện người dùng -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +Người dùng tuyên bố và bảo đảm với Công ty rằng: (a) nếu Người dùng là một cá nhân, thì Người dùng trên mười tám (18) tuổi; (b) Người dùng có quyền và thẩm quyền để tham gia và thực hiện các nghĩa vụ của Người dùng theo Thỏa thuận này; (c) tất cả thông tin do Người dùng cung cấp cho Công ty là trung thực, chính xác và đầy đủ; (d) Người dùng sẽ tuân thủ tất cả các luật và quy định của bất kỳ khu vực, quốc gia hiện hành nào liên quan đến việc truy cập, sử dụng hoặc cài đặt Phần mềm của Người dùng; (e) Người dùng phải tuân thủ tất cả các điều khoản và điều kiện của Thỏa thuận này, bao gồm, nhưng không giới hạn, các điều khoản quy định tại Mục 4; (f) Người dùng đã cung cấp và sẽ cung cấp thông tin chính xác và đầy đủ theo yêu cầu để truy cập, sử dụng hoặc cài đặt Phần mềm. -## 4. Prohibited Uses +## 4. Các điều cấm sử dụng -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +Người dùng tự chịu trách nhiệm về bất kỳ hay tất cả các hành vi trong tài khoản, thông tin bảo mật, khóa hoặc mật khẩu của Người dùng và Người dùng đồng ý không tham gia vào việc sử dụng Phần mềm không được chấp nhận. Không sử dụng Phần mềm Phần mềm để: (a) phổ biến, lưu trữ hoặc truyền các tin nhắn không mong muốn, thư hoặc email thương mại không mong muốn; (b) phổ biến hoặc truyền tài liệu mà đối với một người bình thường có thể là lạm dụng, tục tĩu, khiêu dâm, phỉ báng, quấy rối, xúc phạm nghiêm trọng, thô tục, đe dọa hoặc ác ý; (c) phổ biến, lưu trữ hoặc truyền các tệp, đồ họa, phần mềm hoặc tài liệu khác thực sự hoặc có khả năng vi phạm bản quyền, thương hiệu, bằng sáng chế, bí mật thương mại hoặc quyền sở hữu trí tuệ khác của bất kỳ người nào; (d) tạo danh tính giả hoặc cố gắng đánh lừa bất kỳ người nào về danh tính hoặc nguồn gốc của bất kỳ thông tin liên lạc nào; (e)nhập vào, xuất ra hoặc tải xuống bất kỳ tin nhắn hoặc nội dung nào vi phạm bất kỳ luật, quy định hoặc hạn chế nào ở bất kỳ khu vực, lãnh thổ nào hoặc không có tất cả các phê duyệt, giấy phép hoặc miễn trừ cần thiết; (f) can thiệp, làm gián đoạn hoặc cố gắng giành quyền truy cập trái phép vào các tài khoản khác trên Phần mềm hoặc bất kỳ mạng máy tính nào khác; hoặc (g) phổ biến, lưu trữ hoặc truyền vi-rút, ngựa thành Troia hoặc bất kỳ mã hoặc chương trình độc hại nào khác. -## 5. Termination +## 5. Chấm dứt -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +Thỏa thuận này có hiệu lực khi Người dùng chấp nhận như được nêu ở đây và sẽ tiếp tục có hiệu lực đầy đủ miễn là Người dùng tham gia vào bất kỳ hoạt động truy cập, sử dụng hoặc cài đặt Phần mềm nào. Công ty bảo lưu quyền, theo quyết định riêng của mình và không cần thông báo, vào bất kỳ lúc nào và vì bất kỳ lý do gì, để: (a) xóa hoặc vô hiệu hóa quyền truy cập vào tất cả hoặc bất kỳ phần nào của Phần mềm; (b) đình chỉ quyền truy cập hoặc sử dụng của Người dùng đối với tất cả hoặc bất kỳ phần nào của Phần mềm; và (c) chấm dứt Thỏa thuận này. -## 6. Disclaimer of Warranties +## 6. Từ chối trách nhiệm -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +PHẦN MỀM ĐƯỢC CUNG CẤP "AS IS", MÀ KHÔNG CÓ BẤT KỲ HÌNH THỨC BẢO HÀNH NÀO, RÕ RÀNG HAY NGỤ Ý. VIỆC SỬ DỤNG PHẦN MỀM LÀ RỦI RO DUY NHẤT CỦA NGƯỜI DÙNG. CÔNG TY KHÔNG ĐẢM BẢO RẰNG PHẦN MỀM SẼ KHÔNG BỊ GIÁN ĐOẠN HOẶC KHÔNG CÓ LỖI, CÔNG TY CŨNG KHÔNG ĐẢM BẢO ĐỐI VỚI BẤT KỲ KẾT QUẢ NÀO CÓ THỂ ĐẠT ĐƯỢC KHI SỬ DỤNG PHẦN MỀM. CÔNG TY KHÔNG ĐƯA RA BẢO ĐẢM KHÁC, RÕ RÀNG HAY NGỤ Ý. CÔNG TY TUYỆT ĐỐI TUYỆT ĐỐI BẤT KỲ SỰ BẢO ĐẢM NÀO VỀ KHẢ NĂNG BÁN ĐƯỢC, BẢO ĐẢM SỰ PHÙ HỢP CHO MỘT MỤC ĐÍCH CỤ THỂ, BẢO ĐẢM VỀ QUYỀN SỞ HỮU HOẶC LÃI SUẤT HOẶC BẢO ĐẢM VỀ VIỆC KHÔNG VI PHẠM. -## 7. Limitation of Liability +## 7. Giới hạn trách nhiệm pháp lý -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +TRONG MỌI TRƯỜNG HỢP CÔNG TY HOẶC CỔ ĐÔNG, GIÁM ĐỐC, CÁN BỘ, NHÂN VIÊN, CÔNG TY LIÊN KẾT HOẶC ĐẠI LÝ, HOẶC BẤT KỲ CÔNG TY HOẶC CÁC NHÀ CUNG CẤP DỊCH VỤ CỦA HỌ, KHÔNG CHỊU TRÁCH NHIỆM PHÁP LÝ VỚI NGƯỜI DÙNG HOẶC BÊN THỨ BA VỀ BẤT KỲ VIỆC SỬ DỤNG, GIÁN ĐOẠN, CHẬM TRỄ HOẶC KHÔNG THỂ SỬ DỤNG CÔNG TY PHẦN MỀM, DOANH THU HOẶC LỢI NHUẬN MẤT, SỰ TRỄ CHẬM, GIÁN ĐOẠN HOẶC MẤT DỊCH VỤ, DOANH NGHIỆP, MẤT HOẶC LỖI DỮ LIỆU, MẤT DO HỆ THỐNG HOẶC LỖI DỊCH VỤ HỆ THỐNG, SỰ CỐ HOẶC TẮT, KHÔNG CHUYỂN, ĐỌC HOẶC TRUYỀN THÔNG TIN CHÍNH XÁC, KHÔNG THỂ TẮT ĐẾN CẬP NHẬT HOẶC CUNG CẤP THÔNG TIN ĐÚNG, HỆ THỐNG KHÔNG TƯƠNG THÍCH HOẶC CUNG CẤP THÔNG TIN TƯƠNG THÍCH KHÔNG CHÍNH XÁC HOẶC VI PHẠM BẢO MẬT HỆ THỐNG, HOẶC CHO BẤT KỲ THIỆT HẠI NÀO, NGẪU NHIÊN, GIÁN TIẾP, LÀM MẪU, ĐẶC BIỆT HOẶC TRÁCH NHIỆM, DÙ PHÁT SINH NGOÀI HOẶC LIÊN QUAN ĐẾN THỎA THUẬN NÀY, VI PHẠM HỢP ĐỒNG, TORT (BAO GỒM SƠ SUẤT) HAY CÁCH NÀO KHÁC, BẤT CỨ THIỆT HẠI ĐÓ CÓ CÓ THỂ DỰ ĐOÁN ĐƯỢC KHÔNG VÀ DÙ CHÚNG TÔI CÓ ĐƯỢC TƯ VẤN VỀ KHẢ NĂNG CỦA NHỮNG THIỆT HẠI ĐÓ KHÔNG. TRONG MỌI TRƯỜNG HỢP CÔNG TY HOẶC CỔ ĐÔNG, GIÁM ĐỐC, CÁN BỘ, NHÂN VIÊN, CÔNG TY LIÊN KẾT HOẶC ĐẠI LÝ, HOẶC BẤT KỲ CÔNG TY HOẶC NHÀ CUNG CẤP DỊCH VỤ CỦA CÔNG TY, PHẢI CHỊU TRÁCH NHIỆM PHÁP LÝ VỀ BẤT KỲ KHIẾU NẠI, THIỆT HẠI HOẶC TRÁCH NHIỆM PHÁP LÝ KHÁC NÀO, DÙ LÀ TRONG MỘT HÀNH ĐỘNG HỢP ĐỒNG, NGOẠI TỆ HOẶC NGOÀI RA, PHÁT SINH TỪ HOẶC BẤT KỲ CÁCH NÀO LIÊN QUAN ĐẾN VIỆC TRUY CẬP, SỬ DỤNG HOẶC CÀI ĐẶT PHẦN MỀM CỦA NGƯỜI DÙNG. MỘT SỐ KHU VỰC PHÁP LUẬT CẤM LOẠI TRỪ HOẶC GIỚI HẠN CÁC THIỆT HẠI NGẪU NHIÊN HOẶC DO HẬU QUẢ, DO VẬY, TRÁCH NHIỆM PHÁP LÝ BẮT BUỘC NÀY CÓ THỂ KHÔNG ÁP DỤNG CHO NGƯỜI DÙNG. NẾU NGƯỜI DÙNG KHÔNG HÀI LÒNG VỚI PHẦN MỀM, BỆNH VIỆN DUY NHẤT VÀ ĐỘC QUYỀN CỦA NGƯỜI DÙNG LÀ NGƯỜI DÙNG NGỪNG SỬ DỤNG PHẦN MỀM. -## 8. Indemnification +## 8. Bồi thường -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +Người dùng đồng ý bồi thường, giữ và bảo vệ Công ty, các cổ đông, giám đốc, cán bộ, nhân viên, chi nhánh và đại lý ("Bên được bồi thường") khỏi và chống lại mọi hành động, nguyên nhân, khiếu nại, thiệt hại, nợ, yêu cầu hoặc trách nhiệm pháp lý, bao gồm chi phí hợp lý và phí luật sư, được khẳng định bởi bất kỳ người nào, phát sinh từ hoặc liên quan đến: (a) Thỏa thuận này; (b) Quyền truy cập, sử dụng hoặc cài đặt Phần mềm của Người dùng, bao gồm mọi dữ liệu hoặc công việc được Người dùng truyền hoặc nhận; và (c) bất kỳ việc sử dụng Phần mềm nào không được chấp nhận bởi bất kỳ người nào, bao gồm, nhưng không giới hạn, bất kỳ tuyên bố, dữ liệu hoặc nội dung nào do Người dùng hoặc bất kỳ người nào thực hiện, truyền tải hoặc tái xuất bản mà bị cấm là không thể chấp nhận được theo Mục 4. BỒI THƯỜNG BỒI THƯỜNG NÀY BAO GỒM SỰ BỒI THƯỜNG RÕ RÀNG CỦA CÔNG TY VÀ TẤT CẢ CÁC BÊN ĐƯỢC BỒI THƯỜNG CHO BẤT KỲ SƠ CỨU NÀO (BAO GỒM BẤT KỲ SƠ SUẤT TỔNG THỂ BỊ CÁO CHẾ NÀO). HOẶC HÀNH VI SAI TRAI CÁO BUỘC KHÁC CỦA CÔNG TY HOẶC BẤT KỲ BÊN ĐƯỢC BỒI THƯỜNG NÀO. -## 9. Intellectual Property +## 9. Sở hữu trí tuệ -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +Công ty giữ lại tất cả các quyền, quyền sở hữu và lợi ích nội tại và đối với tất cả các nhãn hiệu, logo và nhãn hiệu của Công ty, bao gồm nhưng không giới hạn ở EMURGO Co., Ltd., EMURGO, Yoroi, Ví tiền mã hóa Yoroi, Ví Yoroi, Ứng dụng Yoroi và các biến thể từ ngữ của các thương hiệu, logo và nhãn hiệu nói trên. -## 10. Warnings +## 10. Cảnh báo -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +Người dùng thừa nhận rằng Công ty sẽ không chịu trách nhiệm chuyển giao, bảo vệ hoặc duy trì khóa riêng và/hoặc ADA của Người dùng hoặc bất kỳ loại tiền mã hóa nào khác. Nếu Người dùng và/hoặc bất kỳ cơ quan đồng ký tên nào làm mất, xử lý sai hoặc đánh cắp khóa cá nhân được liên kết hoặc nếu người đồng ký tên của Người dùng từ chối cung cấp quyền hạn cần thiết, Người dùng thừa nhận rằng Người dùng có thể không khôi phục được quyền của Người dùng ADA hoặc bất kỳ loại tiền mã hóa nào khác và Công ty sẽ không chịu trách nhiệm về tổn thất đó. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +Người dùng thừa nhận và đồng ý rằng ADA hoặc bất kỳ giao dịch tiền mã hóa nào khác được hỗ trợ bởi Phần mềm và/hoặc Công ty có thể bị trì hoãn và Công ty sẽ không chịu trách nhiệm cho bất kỳ tổn thất nào liên quan. Người dùng thừa nhận và đồng ý rằng Công ty sẽ không chịu trách nhiệm về bất kỳ khía cạnh nào của thông tin, nội dung hoặc dịch vụ có trong bất kỳ tài liệu của bên thứ ba nào hoặc trên bất kỳ trang web của bên thứ ba nào có thể truy cập hoặc liên kết với Phần mềm và/hoặc Công ty. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. +Bằng cách sử dụng Phần mềm, Người dùng thừa nhận và đồng ý: (i) rằng Công ty không chịu trách nhiệm về hoạt động của các giao thức cơ bản và Công ty không đảm bảo về chức năng, bảo mật hoặc tính khả dụng của chúng; và (ii) rằng các giao thức cơ bản phải chịu những thay đổi đột ngột của chuỗi chính trong quy tắc vận hành ("phân tách") và rằng các phân nhánh như vậy có thể ảnh hưởng nghiêm trọng đến giá trị và/hoặc chức năng của ADA hoặc bất kỳ loại tiền điện tử nào khác mà Người dùng lưu trữ trên Phần mềm. Trong trường hợp phân nhánh, Người dùng đồng ý rằng Công ty có thể tạm thời đình chỉ hoạt động của Phần mềm (có hoặc không có thông báo cho Người dùng) và Công ty có thể, theo quyết định riêng của mình, (a) định cấu hình hoặc định cấu hình lại hệ thống của mình hoặc (b) quyết định tuy nhiên, không hỗ trợ (hoặc ngừng hỗ trợ) hoàn toàn giao thức phân nhánh, với điều kiện là Người dùng sẽ có cơ hội rút tiền từ Phần mềm. Người dùng thừa nhận và đồng ý rằng Công ty hoàn toàn không chịu bất kỳ trách nhiệm nào đối với nhánh không được hỗ trợ của giao thức phân nhánh. -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +## 11. Khác -## 11. Miscellaneous +**a. Sửa đổi.** Công ty sẽ có quyền, bất cứ lúc nào và không cần thông báo, bổ sung hoặc sửa đổi các điều khoản của Thỏa thuận này, chỉ bằng cách gửi các điều khoản sửa đổi đó cho Người dùng bằng tin nhắn điện tử thông qua bất kỳ phương tiện nào tới bất kỳ địa chỉ nào được cung cấp cho Công ty bởi Người dùng. Việc Người dùng truy cập hoặc sử dụng Phần mềm sau ngày các điều khoản sửa đổi đó được gửi tới Người dùng sẽ được coi là cấu thành sự chấp nhận các điều khoản sửa đổi đó. -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**b. Chấm dứt.** Nếu bất kỳ điều khoản hoặc một phần điều khoản nào của Thỏa thuận này, hoặc trở nên không hợp lệ, bất hợp pháp hoặc không thể thi hành, thì nó sẽ được coi là đã sửa đổi ở mức tối thiểu cần thiết để làm cho nó hợp lệ, hợp pháp và có thể thực thi được. Nếu không thể sửa đổi như vậy, điều khoản hoặc điều khoản một phần có liên quan sẽ được coi là bị xóa. Mọi sửa đổi hoặc xóa một điều khoản hoặc một phần điều khoản theo Điều khoản này sẽ không ảnh hưởng đến hiệu lực và khả năng thực thi của phần còn lại của Thỏa thuận này. -**b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. +**c. Toàn bộ Thỏa thuận – Tuyên bố miễn trừ trách nhiệm**. Thỏa thuận này cấu thành toàn bộ thỏa thuận giữa các Bên liên quan đến chủ đề của thỏa thuận này và thay thế tất cả các thỏa thuận hoặc hiểu biết trước đây giữa các Bên. Người dùng tuyên bố và đảm bảo rõ ràng rằng họ không dựa vào bất kỳ tuyên bố, sự hiểu biết, tuyên bố, kỳ vọng hoặc thỏa thuận nào ngoài những điều được quy định rõ ràng trong Thỏa thuận này. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**d. THỎA THUẬN NÀY PHỤ THUỘC THEO PHÉP TRỌNG TÀI RÀNG BUỘC.** Người dùng đồng ý rằng bất kỳ và tất cả các tranh chấp hoặc khiếu nại chống lại bất kỳ người nào phát sinh từ hoặc theo bất kỳ cách nào liên quan đến Thỏa thuận này hoặc việc truy cập, sử dụng hoặc cài đặt Phần mềm của Người dùng hoặc bất kỳ bên nào khác. người đó sẽ phải chịu sự phân xử ràng buộc theo Quy tắc Trọng tài của Phòng Thương mại Quốc tế bởi một hoặc nhiều trọng tài viên được chỉ định theo Quy tắc nói trên. Địa điểm của trọng tài sẽ là Nhật Bản. Ngôn ngữ của trọng tài sẽ là tiếng Anh. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. +**e. NGÔN NGỮ.** Bất kỳ bản dịch nào của Thỏa thuận này chỉ được thực hiện cho mục đích tham khảo tại địa phương và trong trường hợp có bất kỳ sự mâu thuẫn nào giữa bản tiếng Anh và bất kỳ phiên bản nào không phải tiếng Anh, thì bản tiếng Anh của Thỏa thuận này sẽ được ưu tiên áp dụng và chi phối mọi khía cạnh. -**e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. +## 12. Ủy thác và Cổ phần -## 12. Delegation and Staking +12.1 **Phần thưởng.** Số lượng Phần thưởng mà Người dùng có thể kiếm được từ việc ủy quyền tùy thuộc vào nhiều yếu tố bao gồm nhưng không giới hạn ở sự tham gia của người dùng, tỷ suất lợi nhuận của stakepool và khối lượng quảng cáo được ủy quyền. Có thể việc ủy quyền không tạo ra Phần thưởng cho Người dùng do các yếu tố nêu trên. Phần thưởng kiếm được kể từ khi bắt đầu kỷ nguyên thứ 3 trên chuỗi khối Cardano. -12.1 **Rewards.** The amount of Rewards a User may earn from delegation depends on various factors including, but not limited to, user participation, stakepool profit margins and the volume of ada being delegated. It is possible that delegation generates no Reward for a User due to the above-mentioned factors. Rewards are earned as of the start of the 3rd epoch on the Cardano blockchain. +12.2 **Ủy quyền.** Người dùng có thể ủy quyền cổ phần của họ cho một trong các nhóm cổ phần khác nhau của Công ty hoặc cho nhóm cổ phần(Stake pool) của bên thứ ba. Người dùng sẽ có quyền duy nhất để xác định khối lượng được ủy quyền cho một nhóm cổ phần và có thể tăng hoặc giảm mức độ tham gia của nó bất kỳ lúc nào. Bất kỳ thông tin nào Công ty chia sẻ liên quan đến các bên liên quan, bao gồm chỉ số hiệu suất và Phần thưởng, sẽ chỉ dành cho mục đích biểu thị và có thể không chính xác. Người dùng chỉ có thể ủy quyền cổ phần của họ cho nhóm cổ phần nếu ada của họ nằm trong Daedalus cập nhật hoặc ví Yoroi cập nhật tại thời điểm thiết lập. Người dùng không có bất kỳ quyền tự động nào đối với Phần thưởng do ủy quyền cổ phần của mình. -12.2 **Delegation.** Users may delegate their stake to one of the various stake pools of the Company or to a third party stake pool. User will have the sole right to determine the volume to be delegated to a stake pool and may increase or decrease its level of participation at any time. Any information Company shares regarding stakepools, including performance metrics and Rewards, will be for indicative purposes only and may not be accurate. Users may only delegate their stake to a stake pool if their ada is in an updated Daedalus or an updated Yoroi wallet at the time of the setup process. User does not acquire any automatic right to Rewards as a result of delegating its stake. +12.3 **Các nhóm cổ phần của Công ty.** Công ty sẽ vận hành các nhóm cổ phần khác nhau sẽ hiển thị trong Yoroi. Các yêu cầu về chi phí, mạng và máy chủ để vận hành một cách đáng tin cậy các nhóm cổ phần đó sẽ do Công ty toàn quyền quyết định. Công ty sẽ thông báo tỷ lệ phần trăm Phần thưởng sẽ được chia sẻ với Người dùng thông qua ví Yoroi của Người dùng. Phần thưởng sẽ tích lũy vào cuối mỗi kỷ nguyên và sẽ tự động xuất hiện trong ví Yoroi của Người dùng. -12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. - -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 **Nhận phần thưởng.** Người dùng phải chịu trách nhiệm thanh toán tất cả các loại thuế hiện hành, nếu có, mà Phần thưởng có thể phải chịu và bất kỳ và tất cả các loại thuế khác có thể áp dụng cho Người dùng sau khi Phần thưởng được nhận. From edd21aacd0e0990c688a2988ce433df42f53c798 Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:32 +0100 Subject: [PATCH 369/464] New translations en-us.md (Portuguese, Brazilian) --- .../i18n/locales/terms-of-use/ada/pt-BR.md | 102 ++++++------------ 1 file changed, 35 insertions(+), 67 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/pt-BR.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/pt-BR.md index 62a96a1ef3..0488538cab 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/pt-BR.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/pt-BR.md @@ -1,102 +1,70 @@ -# Terms of Service Agreement +# Acordo de Termos e Condições -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +Este contrato de Termos de Serviço ("Acordo") é realizado entre EMURGO Co., Ltd ("Companhia") e qualquer pessoa ou entidade ("Usuário") que complete o processo de download, utilize, ou opere o software conhecido como aplicativo Yoroi Wallet de criptomoedas, e o serviço de processamento de dados, aplicação, comunicação ou qualquer outro conteúdo oferecido ou provido pelo software da companhia ("Software"). A Companhia e o Usuário são coletivamente referidos como "Partes". AO PRESSIONAR O BOTÃO ACEITAR OU ACESSAR, USAR OU INSTALAR QUALQUER PARTE DO SOFTWARE, É ENTENDIDO QUE O USUÁRIO EXPRESSAMENTE CONCORDA E CONSENTE EM SER LEGALMENTE RESPONSABILIZADO POR TODOS OS TERMOS DESTE ACORDO. SE O USUÁRIO NÃO CONCORDA COM TODOS OS TERMOS DESTE ACORDO, O USUÁRIO NÃO ESTÁ AUTORIZADO A ACESSAR, USAR OU INSTALAR QUALQUER PARTE DESSE SOFTWARE. -## 1. Rights and Obligations +## 1. Direitos e Obrigações -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. Descrição. ** O Software funciona como uma carteira de criptomoeda digital gratuita e de código aberto. O Software não constitui uma conta pela qual a Empresa ou quaisquer outros terceiros sirvam como intermediários financeiros ou custodiantes da ADA do Usuário ou qualquer outra criptomoeda. Enquanto o Software estiver passando por testes beta e continuar a ser aprimorado pelos comentários da comunidade de desenvolvedores, colaboradores de código aberto e testadores beta, a Empresa não pode garantir que não haverá bugs no Software. O Usuário reconhece que corre risco durante o uso do Software, discrição e conformidade com todas as leis aplicáveis. O Usuário é responsável por proteger as senhas, PINs, chaves privadas, chaves de resgate, chaves de venda protegidas, senhas mnemônicas de recuperação de backup, códigos de acesso ADA e outros códigos utilizados pelo Usuário para acessar o Software ou qualquer informação, ADA, voucher ou outra unidade de criptomoeda. SE O USUÁRIO PERDER ACESSO À CARTEIRA DE CRIPTOCURRÊNCIA OU ÀS CHAVES PRIVADAS E NÃO ARMAZENAR SEPARADAMENTE UM BACKUP DA CARTEIRA DE CRIPTOCURRÊNCIA OU RECUPERAR A (S) FRASE (S) MENMÓNICA (S) DE CRIMPROCURRÊNCIA E A SENHA CORRESPONDENTE (S) ASSOCIADA, A CARTEIRA SERÁ INACESSÍVEL. Todas as solicitações de transação são irreversíveis. A Empresa e seus acionistas, diretores, executivos, funcionários, afiliados e agentes não podem garantir a confirmação da transação ou recuperar as chaves ou senhas privadas do Usuário se o Usuário as perder ou esquecer. -**b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. +** b. Acessibilidade. ** O usuário concorda que, de tempos em tempos, o Software poderá ficar inacessível ou inoperável por qualquer motivo, incluindo, sem limitação: (i) mau funcionamento do equipamento; (ii) procedimentos ou reparos periódicos de manutenção que a Companhia possa realizar periodicamente; ou (iii) causas fora do controle da Companhia ou que não sejam razoavelmente previsíveis pela Companhia. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +** c. Equipamento. ** O Usuário será o único responsável por fornecer, manter e garantir a compatibilidade com o Software, todos os requisitos de hardware, software, elétrica e outros requisitos físicos para o uso do Software pelo Usuário, incluindo, sem limitação, conexões de telecomunicações e acesso à Internet e links, navegadores da web ou outros equipamentos, programas e serviços necessários para acessar e usar o Software. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +** d. Segurança. ** O Usuário será o único responsável pela segurança, confidencialidade e integridade de todas as informações e conteúdos que o Usuário recebe, transmite ou armazena no Software. O Usuário será o único responsável por qualquer acesso autorizado ou não autorizado a qualquer conta do Usuário por qualquer pessoa. O Usuário concorda em assumir toda a responsabilidade pela confidencialidade dos dispositivos, informações, chaves e senhas de segurança do Usuário. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +** e. Privacidade. ** Quando razoavelmente praticável, a Empresa tentará respeitar a privacidade do Usuário. A Empresa não monitora, edita ou divulga nenhuma informação pessoal sobre a conta do Usuário ou Usuário, incluindo seu conteúdo ou o uso do Software pelo Usuário, sem o consentimento prévio do Usuário, a menos que a Empresa acredite de boa fé que tal ação é necessária para: (i) cumprir o processo legal ou outros requisitos legais de qualquer autoridade governamental; (ii) proteger e defender os direitos ou propriedades da Companhia; (iii) fazer cumprir este Contrato; (iv) proteger os interesses dos usuários do Software que não sejam o Usuário ou qualquer outra pessoa; ou (v) operar ou realizar manutenção e reparo dos serviços ou equipamentos da Companhia, incluindo o Software conforme autorizado por lei. O usuário não tem expectativa de privacidade em relação à Internet em geral. O endereço IP do usuário é transmitido e gravado com cada mensagem ou outra informação que o usuário envia do software. -## 2. Taxes and Fees +## 2. Impostos e Taxas -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +Todas as cobranças de conversão de moeda, taxas de terceiros, vendas, uso, valor agregado, bens pessoais ou outros impostos, taxas ou impostos de qualquer espécie, incluindo juros e multas, sobre impostos agora ou a seguir por qualquer entidade governamental e taxas incorridas ao Usuário em razão do acesso, uso ou instalação do Software será de exclusiva responsabilidade do Usuário. -## 3. User Representations +## 3. Representações do usuário -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +O Usuário declara e garante à Empresa que: (a) se o Usuário for uma pessoa natural, o Usuário tenha mais de dezoito (18) anos; (b) O Usuário tem o poder e a autoridade para celebrar e executar as obrigações do Usuário sob este Contrato; (c) todas as informações fornecidas pelo Usuário à Empresa são verdadeiras, precisas e completas; (d) O Usuário cumprirá todas as leis e regulamentos de qualquer jurisdição aplicável em relação ao acesso, uso ou instalação do Software; (e) O Usuário deve cumprir todos os termos e condições deste Contrato, incluindo, sem limitação, as disposições estabelecidas na Seção 4; e (f) O Usuário forneceu e fornecerá informações precisas e completas, conforme necessário para acesso, uso ou instalação do Software. -## 4. Prohibited Uses +## 4. Usos Proibidos -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +O Usuário é o único responsável por todos e quaisquer atos e omissões que ocorram na conta, informações de segurança, chaves ou senha do Usuário, e concorda em não se envolver em uso inaceitável do Software, que inclui, sem limitação, uso do Software para: ( a) disseminar, armazenar ou transmitir mensagens não solicitadas, correntes ou e-mail comercial não solicitado; (b) disseminar ou transmitir material que, para uma pessoa razoável, possa ser abusivo, obsceno, pornográfico, difamatório, hostil, ofensivo, vulgar, ameaçador ou malicioso; (c) disseminar, armazenar ou transmitir arquivos, gráficos, software ou outro material que viole de fato ou potencialmente os direitos autorais, marca registrada, patente, segredo comercial ou outro direito de propriedade intelectual de qualquer pessoa; (d) criar uma identidade falsa ou tentar enganar qualquer pessoa quanto à identidade ou origem de qualquer comunicação; (e) exportar, reexportar ou permitir o download de qualquer mensagem ou conteúdo que viole qualquer lei de exportação ou importação, regulamento ou restrição de qualquer jurisdição aplicável ou sem todas as aprovações, licenças ou isenções necessárias; (f) interferir, interromper ou tentar obter acesso não autorizado a outras contas no Software ou em qualquer outra rede de computadores; ou (g) ​​disseminar, armazenar ou transmitir vírus, cavalos de Troia ou qualquer outro código ou programa malicioso. -## 5. Termination +## 5. Rescisão -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +Este Contrato entra em vigor com a aceitação do Usuário, conforme estabelecido neste documento, e continuará em vigor, desde que o Usuário se envolva em qualquer acesso, uso ou instalação do Software. A Empresa reserva-se o direito, a seu exclusivo critério e sem aviso prévio, a qualquer momento e por qualquer motivo, de: (a) remover ou desativar o acesso a todo ou parte do Software; (b) suspender o acesso do Usuário ou o uso de todo ou parte do Software; e (c) rescindir este Contrato. -## 6. Disclaimer of Warranties +## 6. Isenção de Garantias -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +O SOFTWARE É FORNECIDO "TAL COMO ESTÁ", SEM GARANTIA DE QUALQUER TIPO, EXPRESSA OU IMPLÍCITA. O USO DO SOFTWARE É DE RISCO ÚNICO DO USUÁRIO. A EMPRESA NÃO GARANTE QUE O SOFTWARE SERÁ ININTERRUPTO OU LIVRE DE ERROS, NEM A EMPRESA GARANTIA QUALQUER RESULTADO QUE PODE SER OBTIDO PELO USO DO SOFTWARE. A EMPRESA NÃO OFERECE OUTRAS GARANTIAS, EXPRESSAS OU IMPLÍCITAS. A EMPRESA EXPRESSAMENTE EXCLUSIVAMENTE QUALQUER GARANTIA DE COMERCIALIZAÇÃO, GARANTIA DE ADEQUAÇÃO A UM PROPÓSITO PARTICULAR, GARANTIA DE TÍTULO OU INTERESSE OU GARANTIA DE NÃO INFRAÇÃO. -## 7. Limitation of Liability +## 7. Limitação de responsabilidade -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +EM NENHUM CASO A EMPRESA OU SEUS ACIONISTAS, DIRETORES, FUNCIONÁRIOS, AFILIADOS OU AGENTES, OU QUALQUER DE SEUS OU SEUS PRESTADORES DE SERVIÇOS RESPECTIVOS, SERÃO RESPONSÁVEIS PELO USUÁRIO OU QUALQUER TERCEIRA PARTE PARA QUALQUER USO, INTERRUPÇÃO, ATRASO OU INABILIDADE SOFTWARE, RECEITAS OU LUCROS PERDIDOS, ATRASOS, INTERRUPÇÃO OU PERDA DE SERVIÇOS, NEGÓCIOS OU BENS, PERDA OU CORRUPÇÃO DE DADOS, PERDA RESULTANTE DE FALHA EM SERVIÇO DO SISTEMA OU DO SISTEMA, FUNCIONAMENTO OU DESLIGAMENTO, FALHA EM TRANSFERIR, INFORMAÇÃO OU TRANSMISSÃO PRECISA, LER OU TRANSMISSAR ATUALIZAR OU FORNECER INFORMAÇÕES CORRETAS, INCOMPATIBILIDADE DO SISTEMA OU FORNECIMENTO DE INFORMAÇÕES DE COMPATIBILIDADE INCORRETA OU QUEBRA-SE DA SEGURANÇA DO SISTEMA, OU QUAISQUER DANOS CONSEQÜENCIAIS, INCIDENTAIS, INDIRETOS, EXEMPLARES, ESPECIAIS OU PUNITIVOS, SEJA CONCEBIDO DESTE CONTRATO, TORT (INCLUINDO NEGLIGÊNCIA) OU DE OUTRO MODO, INDEPENDENTE QUANTO DANOS FORAM PREVISÍVEIS E SE NÓS FORAMOS OU NÃO AVISADOS DA POSSIBILIDADE DE TAIS DANOS. EM NENHUM CASO A EMPRESA OU SEUS ACIONISTAS, DIRETORES, FUNCIONÁRIOS, AFILIADOS OU AGENTES, OU QUALQUER DE SEUS OU SEUS RESPECTIVOS PRESTADORES DE SERVIÇOS, SERÃO RESPONSÁVEIS POR QUALQUER REIVINDICAÇÃO, DANO OU OUTRA RESPONSABILIDADE, SEJA EM AÇÃO DE CONTRATO, ATOR DE OUTRA FORMA, DECORRENTE OU DE QUALQUER FORMA RELACIONADA AO ACESSO, USO OU INSTALAÇÃO DO SOFTWARE DO USUÁRIO. ALGUMAS JURISDIÇÕES PROIBEM A EXCLUSÃO OU LIMITAÇÃO DE DANOS INCIDENTAIS OU CONSEQÜENCIAIS, POR ISSO, ESTA LIMITAÇÃO DE RESPONSABILIDADE PODE NÃO SE APLICAR AO USUÁRIO. Se o usuário não estiver satisfeito com o software, o recurso exclusivo do usuário será interromper o uso do software. -## 8. Indemnification +## 8. Indenização -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +O Usuário concorda em indenizar, isentar e defender a Empresa, seus acionistas, diretores, executivos, funcionários, afiliadas e agentes ("Partes Indenizadas") de e contra qualquer ação, causa, reclamação, dano, dívida, demanda ou responsabilidade, incluindo razoáveis custos e honorários advocatícios, declarados por qualquer pessoa, decorrentes ou relacionados a: (a) este Contrato; (b) acesso, uso ou instalação do Software pelo Usuário, incluindo quaisquer dados ou trabalhos transmitidos ou recebidos pelo Usuário; e (c) qualquer uso inaceitável do Software por qualquer pessoa, incluindo, sem limitação, qualquer declaração, dado ou conteúdo feito, transmitido ou republicado pelo Usuário ou qualquer pessoa que seja proibida como inaceitável na Seção 4. ESTA INDENIZAÇÃO INCLUI A INDENIZAÇÃO EXPRESSA DA EMPRESA E DE TODAS AS PARTES INDENIZADAS POR QUALQUER NEGLIGÊNCIA ALEGADA (INCLUINDO QUALQUER ALEGAÇÃO DE NEGLIGÊNCIA BRUTA). OU OUTRA ALEGAÇÃO MÁ CONTAUTA DA EMPRESA OU QUALQUER PARTE INDENIZADA. -## 9. Intellectual Property +## 9. Propriedade Intelectual -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +A Empresa mantém todos os direitos, títulos e interesses de e para todas as marcas, logotipos e marcas comerciais da Empresa, incluindo, entre outros, EMURGO Co., Ltd., EMURGO, Yoroi, Carteira de criptomoedas Yoroi, Carteira Yoroi, Yoroi App e variações da redação das marcas, logotipos e marcas comerciais acima mencionados. -## 10. Warnings +## 10. Advertências -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +O Usuário reconhece que a Empresa não será responsável por transferir, salvaguardar ou manter chaves privadas e / ou ADA do Usuário ou qualquer outra criptomoeda. Se o Usuário e / ou qualquer autoridade de co-assinatura perder, manipular incorretamente ou tiver roubado chaves privadas associadas, ou se os assinantes do usuário se recusarem a fornecer a autoridade necessária, o Usuário reconhecerá que o Usuário pode não ser capaz de recuperar a ADA do Usuário ou qualquer outra criptomoeda e que a empresa não será responsável por tal perda. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +O Usuário reconhece e concorda que a ADA ou qualquer outra transação de criptomoeda facilitada pelo Software e / ou pela Empresa pode estar atrasada e que a Empresa não será responsável por nenhuma perda associada. O Usuário reconhece e concorda que a Empresa não será responsável por nenhum aspecto das informações, conteúdo ou serviços contidos em materiais de terceiros ou em sites de terceiros acessíveis ou vinculados ao Software e / ou à Empresa. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. +Ao usar o Software, o Usuário reconhece e concorda: (i) que a Empresa não é responsável pela operação dos protocolos subjacentes e que a Empresa não oferece garantia de sua funcionalidade, segurança ou disponibilidade; e (ii) que os protocolos subjacentes estão sujeitos a mudanças repentinas da cadeia principal nas regras operacionais ("forks") e que esses forks podem afetar materialmente o valor e / ou a função da ADA ou qualquer outra criptomoeda que o Usuário armazena em o software. No caso de uma bifurcação, o Usuário concorda que a Empresa pode suspender temporariamente as operações do Software (com ou sem aviso prévio ao Usuário) e que a Empresa pode, a seu exclusivo critério, (a) configurar ou reconfigurar seus sistemas ou (b) decidir não apoiar (ou deixar de apoiar) o protocolo bifurcado inteiramente, desde que, no entanto, o Usuário tenha a oportunidade de retirar fundos do Software. O Usuário reconhece e concorda que a Empresa não assume absolutamente nenhuma responsabilidade em relação a uma ramificação não suportada de um protocolo bifurcado. -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +## 11. Diversos -## 11. Miscellaneous +** a. Alteração. ** A Empresa terá o direito, a qualquer momento e sem aviso prévio, de adicionar ou modificar os termos deste Contrato, simplesmente entregando esses termos alterados ao Usuário por mensagem eletrônica, por qualquer meio, para qualquer endereço fornecido pelo usuário a empresa. O acesso ou uso do Software pelo Usuário após a data em que esses termos alterados forem entregues ao Usuário será considerado como aceitação desses termos alterados. -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +** b. Indenização. ** Se qualquer disposição ou parte deste Contrato for, ou se tornar inválido, ilegal ou inexequível, ele será considerado modificado na extensão mínima necessária para torná-lo válido, legal e aplicável. Se tal modificação não for possível, a disposição ou parte da disposição relevante será considerada excluída. Qualquer modificação ou exclusão de uma provisão ou provisão parcial nos termos deste artigo não afetará a validade e aplicabilidade do restante deste Contrato. -**b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. +** c. Contrato completo - Isenção de responsabilidade **. Este Contrato constitui o contrato completo entre as Partes com relação ao assunto deste documento e substitui todos os acordos ou entendimentos anteriores entre as Partes. O Usuário expressa e garante expressamente que não está confiando em quaisquer declarações, entendimentos, representações, expectativas ou acordos que não sejam expressamente estabelecidos neste Contrato. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +** d. ESTE CONTRATO ESTÁ SUJEITO A ARBITRAGEM OBRIGATÓRIA. ** O Usuário concorda que toda e qualquer disputa ou reclamação contra qualquer pessoa decorrente de ou de alguma forma relacionada a este Contrato ou ao acesso, uso ou instalação do Software pelo Usuário ou qualquer outra pessoa estará sujeita a arbitragem vinculativa sob as Regras de Arbitragem da Câmara de Comércio Internacional por um ou mais árbitros nomeados de acordo com as referidas Regras. O local da arbitragem será o Japão. O idioma da arbitragem deve ser o inglês. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. - -**e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. +** e. IDIOMA. ** Qualquer tradução deste Contrato é feita apenas para fins de referência local e, no caso de qualquer inconsistência entre as versões em inglês e outras que não sejam em inglês, a versão em inglês deste Contrato prevalecerá e prevalecerá em todos os aspectos. ## 12. Delegation and Staking @@ -106,4 +74,4 @@ If you have any questions or concerns regarding the accuracy or reliability of t 12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. From a92339e70a04ed1ac34e2680a1d6a669b3adf64a Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:35 +0100 Subject: [PATCH 370/464] New translations en-us.md (id-ID) --- .../i18n/locales/terms-of-use/ada/id-ID.md | 102 ++++++------------ 1 file changed, 35 insertions(+), 67 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/id-ID.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/id-ID.md index 62a96a1ef3..d50abf4abb 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/id-ID.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/id-ID.md @@ -1,102 +1,70 @@ -# Terms of Service Agreement +# Perjanjian Ketentuan Layanan -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +PERJANJIAN KETENTUAN LAYANAN INI ("Perjanjian") dibuat antara EMURGO Co., Ltd. ("Perusahaan") dan setiap orang atau entitas ("Pengguna") yang menyelesaikan proses untuk mengunduh, menggunakan, atau mengoperasikan perangkat lunak yang dikenal sebagai Aplikasi Yoroi cryptocurrency Wallet, dan layanan pemrosesan data, aplikasi, layanan komunikasi atau konten lainnya atau ditawarkan atau disediakan dengan perangkat lunak oleh Perusahaan ("Perangkat Lunak"). Perusahaan dan Pengguna secara kolektif disebut sebagai "Para Pihak." DENGAN MENGKLIK TOMBOL PENERIMAAN ATAU MENGAKSES, MENGGUNAKAN ATAU MENGINSTAL BAGIAN DARI PERANGKAT LUNAK, PENGGUNA MENYETUJUI SECARA EKSPRESI KEPADA DAN PERSETUJUAN UNTUK DIADAKAN SECARA SECARA HUKUM DENGAN SEMUA PERSYARATAN PERJANJIAN INI. JIKA PENGGUNA TIDAK MENYETUJUI SEMUA PERSYARATAN PERJANJIAN INI, PENGGUNA TIDAK AKAN berwenang untuk MENGAKSES, MENGGUNAKAN ATAU MENGINSTAL BAGIAN DARI PERANGKAT LUNAK. -## 1. Rights and Obligations +## 1. Hak dan Kewajiban -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. Deskripsi.** Perangkat Lunak berfungsi sebagai dompet cryptocurrency digital gratis dan open source. Perangkat Lunak ini bukan merupakan akun di mana Perusahaan atau pihak ketiga lainnya yang berfungsi sebagai perantara keuangan atau penjaga para pengguna ADA atau mata uang kripto lain. Sementara Perangkat Lunak telah menjalani pengujian beta dan terus ditingkatkan dengan feedback dari komunitas developer, kontributor open-source dan beta-tester, Perusahaan tidak dapat menjamin bahwa tidak akan ada bug dalam Perangkat Lunak. Pengguna mengakui bahwa penggunaan Perangkat Lunak oleh Pengguna adalah risiko, kebijaksanaan dan kepatuhan Pengguna terhadap semua hukum yang berlaku. Pengguna bertanggung jawab atas penyimpanan kata sandi, PIN, private key, redemption key, shielded vending key, backup pemulihan frasa sandi mnemonik, passcode ADA dan kode lain apa pun yang digunakan Pengguna untuk mengakses Perangkat Lunak atau informasi, ADA, voucher, atau unit cryptocurrency lainnya. JIKA PENGGUNA KEHILANGAN AKSES KE WALLET CRYPTOCURRENCY ATAU PRIVATE KEY DAN TIDAK MENYIMPAN BACKUP WALLET CRYPTOCURRENCY ATAU BACKUP RECOVERY FRASA MNEMONIC DAN KATA SANDI YANG BERKAITAN, PENGGUNA MENGAKUI DAN MENYETUJUI BAHWA ADA ATAU CRYPTOCURRENCY LAIN NYA YANG BERKAITAN DENGAN WALLET CRYPTOCURRENCY AKAN MENJADI TIDAK DAPAT DIAKSES. Semua permintaan transaksi tidak dapat dibatalkan. Perusahaan dan pemegang saham, direktur, pejabat, karyawan, afiliasi, dan agennya tidak dapat menjamin konfirmasi transaksi atau mengembalikan private key atau kata sandi Pengguna jika Pengguna kehilangan atau melupakannya. -**b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. +**b. Aksesibilitas.** Pengguna setuju bahwa dari waktu ke waktu Perangkat Lunak mungkin tidak dapat diakses atau tidak dapat dioperasikan karena alasan apa pun, termasuk, tanpa batasan: (i) kerusakan peralatan; (ii) prosedur pemeliharaan berkala atau perbaikan yang dapat dilakukan Perusahaan dari waktu ke waktu; atau (iii) dikarenakan hal yang ada di luar kendali Perusahaan atau yang tidak dapat diperkirakan secara wajar oleh Perusahaan. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. Peralatan.** Pengguna bertanggung jawab penuh untuk menyediakan, memelihara, dan memastikan kompatibilitas dengan Perangkat Lunak, semua perangkat keras, perangkat lunak, listrik, dan persyaratan fisik lainnya untuk penggunaan Perangkat Lunak oleh Pengguna, tanpa batasan, telekomunikasi dan koneksi akses internet dan link, browser web atau peralatan lainnya, program, dan layanan yang diperlukan untuk mengakses dan menggunakan Perangkat Lunak. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. Keamanan.** Pengguna sepenuhnya bertanggung jawab atas keamanan, kerahasiaan, dan integritas semua informasi dan konten yang diterima Pengguna, ditransmisikan, atau disimpan di Perangkat Lunak. Pengguna bertanggung jawab penuh atas akses yang diizinkan atau tidak ke akun Pengguna apa pun oleh siapa pun. Pengguna setuju untuk memegang semua tanggung jawab atas kerahasiaan perangkat keamanan, informasi, kunci, dan kata sandi Pengguna. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. Privasi.** Ketika dapat dipraktikkan secara wajar, Perusahaan akan berusaha untuk menghormati privasi Pengguna. Perusahaan tidak akan memantau, mengedit, atau mengungkapkan informasi pribadi apa pun tentang Pengguna atau akun Pengguna, termasuk kontennya atau penggunaan Perangkat Lunak oleh Pengguna, tanpa persetujuan Pengguna sebelumnya kecuali jika Perusahaan yakin dengan itikad baik bahwa tindakan tersebut diperlukan untuk: (i) mematuhi proses hukum atau persyaratan hukum lainnya dari otoritas pemerintah mana pun; (ii) melindungi dan membela hak atau properti Perusahaan; (iii) menegakkan Perjanjian ini; (iv) melindungi kepentingan pengguna Perangkat Lunak selain Pengguna atau orang lain; atau (v) mengoperasikan atau melakukan pemeliharaan dan perbaikan layanan atau peralatan Perusahaan, termasuk Perangkat Lunak sebagaimana diizinkan oleh hukum. Pengguna tidak memiliki ekspektasi privasi sehubungan dengan Internet secara umum. Alamat IP pengguna dikirimkan dan dicatat dengan setiap pesan atau informasi lain yang dikirimkan Pengguna dari Perangkat Lunak. -## 2. Taxes and Fees +## 2. Pajak dan Biaya -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +Semua biaya konversi mata uang, biaya pihak ketiga, penjualan, penggunaan, nilai tambah, properti pribadi atau pajak lainnya, bea atau pungutan dalam bentuk apa pun, termasuk bunga dan denda atasnya, baik yang dikenakan sekarang atau selanjutnya oleh entitas pemerintah, dan biaya yang dikeluarkan oleh Pengguna dengan alasan akses, penggunaan, atau instalasi Perangkat Lunak oleh Pengguna menjadi tanggung jawab Pengguna. -## 3. User Representations +## 3. Representasi Pengguna -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +Pengguna menyatakan dan menjamin kepada Perusahaan bahwa: (a) jika Pengguna adalah orang yang secara alami berusia di atas delapan belas (18); (B) Pengguna memiliki kekuatan dan otoritas untuk masuk dan melakukan kewajiban Pengguna berdasarkan Perjanjian ini; (c) semua informasi yang diberikan oleh Pengguna kepada Perusahaan adalah benar, akurat dan lengkap; (D) Pengguna akan mematuhi semua hukum dan peraturan dari yurisdiksi yang berlaku sehubungan dengan akses, penggunaan, atau instalasi Perangkat Lunak oleh Pengguna; (e) Pengguna harus mematuhi semua syarat dan ketentuan Perjanjian ini, termasuk, tanpa batasan, ketentuan yang ditetapkan pada Bagian 4; dan (f) Pengguna telah menyediakan dan akan memberikan informasi yang akurat dan lengkap sebagaimana diperlukan untuk mengakses, menggunakan, atau menginstal Perangkat Lunak. -## 4. Prohibited Uses +## 4. Penggunaan Dilarang -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +Pengguna bertanggung jawab penuh atas setiap dan semua tindakan dan kelalaian yang terjadi di bawah akun Pengguna, informasi keamanan, kunci atau kata sandi, dan Pengguna setuju untuk tidak terlibat dalam penggunaan Perangkat Lunak yang tidak dapat diterima, yang meliputi, tanpa batasan, penggunaan Perangkat Lunak untuk: ( a) menyebarkan, menyimpan atau mengirimkan pesan yang tidak diminta, surat berantai atau email komersial yang tidak diminta; (B) menyebarluaskan atau mengirimkan materi kepada orang yang kejam, cabul, pornografi, memfitnah, melecehkan, sangat ofensif, vulgar, mengancam atau jahat; (c) menyebarluaskan, menyimpan atau mengirimkan file, grafik, perangkat lunak, atau materi lain yang benar-benar atau berpotensi melanggar hak cipta, merek dagang, paten, rahasia dagang, atau hak kekayaan intelektual lainnya dari siapa pun; (d) membuat identitas palsu atau untuk mencoba menyesatkan orang lain mengenai identitas atau asal komunikasi apa pun; (e) mengekspor, mengekspor kembali atau mengizinkan pengunduhan pesan atau konten apa pun yang melanggar undang-undang ekspor atau impor, peraturan, atau pembatasan yurisdiksi apa pun yang berlaku, atau tanpa semua persetujuan, lisensi, atau pengecualian yang diperlukan; (f) mengganggu, mengganggu atau berupaya mendapatkan akses tidak sah ke akun lain pada Perangkat Lunak atau jaringan komputer lainnya; atau (g) ​​menyebarkan, menyimpan atau mengirimkan virus, Trojan horse atau kode atau program jahat lainnya. -## 5. Termination +## 5. Penghentian -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +Perjanjian ini berlaku setelah penerimaan Pengguna sebagaimana ditentukan di sini dan akan terus berlaku penuh selama Pengguna masih mengakses, penggunaan atau instalasi Perangkat Lunak. Perusahaan berhak, atas kebijakannya sendiri dan tanpa pemberitahuan, kapan saja dan dengan alasan apa pun, untuk: (a) menghapus atau menonaktifkan akses ke semua atau sebagian dari Perangkat Lunak; (B) menangguhkan akses Pengguna ke atau menggunakan semua atau sebagian dari Perangkat Lunak; dan (c) mengakhiri Perjanjian ini. -## 6. Disclaimer of Warranties +## 6. Penolakan Jaminan -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +PERANGKAT LUNAK INI DISEDIAKAN "SEBAGAIMANA ADANYA", TANPA JAMINAN APA PUN, BAIK TERSURAT MAUPUN TERSIRAT. PENGGUNAAN PERANGKAT LUNAK INI ADALAH RISIKO PENGGUNA SENDIRI. PERUSAHAAN TIDAK MENJAMIN BAHWA PERANGKAT LUNAK TERSEBUT TIDAK AKAN TERGANGGU ATAU BEBAS DARI KESALAHAN, JUGA TIDAK ADA PERUSAHAAN YANG MEMBERIKAN JAMINAN ATAS HASIL APA PUN YANG MUNGKIN DIPEROLEH DENGAN MENGGUNAKAN PERANGKAT LUNAK TERSEBUT. PERUSAHAAN SECARA TEGAS MENYANGKAL SEGALA JAMINAN YANG DAPAT DIPERJUALBELIKAN, JAMINAN KESESUAIAN UNTUK TUJUAN TERTENTU, JAMINAN HAK ATAU KEPENTINGAN, ATAU JAMINAN TIDAK ADA PELANGGARAN. -## 7. Limitation of Liability +## 7. Batasan Tanggung Jawab -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +DALAM HAL APA PUN PERUSAHAAN ATAU PEMEGANG SAHAM, DIREKTUR, PEJABAT, KARYAWAN, AFILIASI ATAU AGENNYA, ATAU SALAH SATU DARI PENYEDIA LAYANANNYA TIDAK BERTANGGUNG JAWAB KEPADA PENGGUNA ATAU PIHAK KETIGA MANA PUN ATAS SEGALA PENGGUNAAN, GANGGUAN, KETERLAMBATAN ATAU KETIDAKMAMPUAN UNTUK MENGGUNAKAN PERANGKAT LUNAK, PENDAPATAN ATAU LABA YANG HILANG, KETERLAMBATAN, GANGGUAN ATAU KEHILANGAN LAYANAN, BISNIS ATAU ITIKAD BAIK, KEHILANGAN ATAU KERUSAKAN DATA, KEHILANGAN YANG DISEBABKAN OLEH KEGAGALAN SISTEM ATAU LAYANAN SISTEM, KEGAGALAN FUNGSI ATAU SHUTDOWN, KEGAGALAN UNTUK MENTRANSFER SECARA AKURAT, MEMBACA ATAU MENGIRIMKAN INFORMASI, KEGAGALAN UNTUK MEMPERBARUI ATAU MEMBERIKAN INFORMASI YANG BENAR, KETIDAKSESUAIAN SISTEM ATAU PENYEDIAAN INFORMASI KOMPATIBILITAS YANG SALAH ATAU PELANGGARAN DALAM KEAMANAN SISTEM, ATAU UNTUK SEGALA KONSEKUENSI, INSIDENTAL, TIDAK LANGSUNG, KERUSAKAN KHUSUS, BAIK YANG TIMBUL DARI ATAU SEHUBUNGAN DENGAN PERJANJIAN INI, PELANGGARAN KONTRAK, TORT (TERMASUK KELALAIAN) ATAU SEBALIKNYA, TERLEPAS DARI APAKAH KERUSAKAN TERSEBUT DAPAT DIPERKIRAKAN DAN APAKAH KAMI DIBERITAHU ATAU TIDAK KEMUNGKINAN KERUSAKAN TERSEBUT. DALAM HAL APA PUN PERUSAHAAN ATAU PEMEGANG SAHAM, DIREKTUR, PEJABAT, KARYAWAN, AFILIASI ATAU AGENNYA, ATAU PENYEDIA LAYANANNYA MASING-MASING, TIDAK BERTANGGUNG JAWAB ATAS KLAIM, KERUSAKAN, ATAU TANGGUNG JAWAB LAIN, BAIK DALAM TINDAKAN KONTRAK, KESALAHAN ATAU JIKA TIDAK, YANG TIMBUL DARI ATAU DENGAN CARA APA PUN TERKAIT DENGAN AKSES, PENGGUNAAN, ATAU PEMASANGAN PERANGKAT LUNAK PENGGUNA. BEBERAPA YURISDIKSI MELARANG PENGECUALIAN ATAU PEMBATASAN KERUSAKAN INSIDENTAL ATAU KONSEKUENSIAL, SEHINGGA PEMBATASAN TANGGUNG JAWAB INI MUNGKIN TIDAK BERLAKU BAGI PENGGUNA. JIKA PENGGUNA TIDAK PUAS DENGAN PERANGKAT LUNAK, SOLUSI SATU-SATUNYA DAN EKSKLUSIF PENGGUNA ADALAH BAGI PENGGUNA UNTUK MENGHENTIKAN PENGGUNAAN PERANGKAT LUNAK. -## 8. Indemnification +## 8. Ganti rugi -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +Pengguna setuju untuk mengganti rugi, tidak membahayakan, dan membela Perusahaan, pemegang saham, direktur, pejabat, karyawan, afiliasi, dan agennya ("Pihak Ganti Rugi") dari dan terhadap tindakan apa pun, menyebabkan, mengklaim, merusak, utang, permintaan atau kewajiban, termasuk biaya dan biaya pengacara, ditegaskan oleh siapa saja, yang timbul dari atau berkaitan dengan: (a) Perjanjian ini; (b) Akses, penggunaan, atau instalasi Perangkat Lunak oleh Pengguna, termasuk data atau pekerjaan apa pun yang dikirimkan atau diterima oleh Pengguna; dan (c) setiap penggunaan Perangkat Lunak yang tidak dapat diterima oleh siapa pun, termasuk, namun tidak terbatas pada, pernyataan, data atau konten apa pun yang dibuat, ditransmisikan atau diterbitkan ulang oleh Pengguna atau siapa pun yang dilarang sebagai tidak dapat diterima berdasarkan Bagian 4. GANTI RUGI INI MENCAKUP GANTI RUGI TEGAS DARI PERUSAHAAN DAN SEMUA PIHAK YANG DIBERI GANTI RUGI UNTUK SETIAP KELALAIAN YANG DITUDUHKAN (TERMASUK SEGALA KELALAIAN YANG DITUDUHKAN). ATAU DUGAAN PELANGGARAN PERUSAHAAN ATAU PIHAK YANG MENDAPAT GANTI RUGI APA PUN. -## 9. Intellectual Property +## 9. Properti Intelektual -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +Perusahaan memiliki semua hak, kepemilikan, dan kepentingan dalam dan untuk semua merek, logo, dan merek dagang Perusahaan, termasuk, tetapi tidak terbatas pada, EMURGO Co., Ltd., EMURGO, Yoroi, Wallet Cryptocurrency Yoroi, Wallet Yoroi, Aplikasi Yoroi, dan variasi kata-kata dari merek, logo, dan merek dagang yang disebutkan di atas. -## 10. Warnings +## 10. Peringatan -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +Pengguna mengakui bahwa Perusahaan tidak akan bertanggung jawab untuk mentransfer, menjaga, atau memelihara private key dan / atau ADA Pengguna atau mata uang kripto lain. Jika Pengguna dan / atau otoritas penandatanganan bersama kehilangan, salah penanganan, atau telah kecurian private key terkait, atau jika pengguna menolak untuk memberikan otoritas yang diperlukan, Pengguna mengakui bahwa Pengguna mungkin tidak dapat memulihkan ADA Pengguna atau cryptocurrency lainnya, dan bahwa Perusahaan tidak akan bertanggung jawab atas kerugian tersebut. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +Pengguna mengakui dan menyetujui bahwa ADA atau transaksi cryptocurrency lainnya yang difasilitasi oleh Perangkat Lunak dan / atau Perusahaan dapat ditunda, dan bahwa Perusahaan tidak akan bertanggung jawab atas kerugian terkait. Pengguna mengakui dan menyetujui bahwa Perusahaan tidak akan bertanggung jawab atas segala aspek informasi, konten, atau layanan yang terkandung dalam materi pihak ketiga atau pada situs pihak ketiga mana pun yang dapat diakses atau ditautkan dengan Perangkat Lunak dan / atau Perusahaan. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. +Dengan menggunakan Perangkat Lunak, Pengguna mengakui dan menyetujui: (i) bahwa Perusahaan tidak bertanggung jawab atas pengoperasian protokol yang mendasarinya dan bahwa Perusahaan tidak memberikan jaminan fungsionalitas, keamanan, atau ketersediaannya; dan (ii) bahwa protokol yang mendasarinya mengikuti perubahan main-chain dalam aturan operasi ("fork"), dan bahwa fork tersebut secara material dapat mempengaruhi nilai, dan / atau fungsi ADA atau cryptocurrency lain yang disimpan oleh Pengguna. Perangkat Lunak. Jika terjadi fork, Pengguna setuju bahwa Perusahaan dapat untuk sementara menangguhkan operasi Perangkat Lunak (dengan atau tanpa pemberitahuan kepada Pengguna) dan bahwa Perusahaan dapat melakukan, atas kebijakannya sendiri, (a) mengkonfigurasi atau mengkonfigurasi ulang sistemnya atau (b) memutuskan tidak untuk mendukung (atau menghentikan dukungan) protokol fork sepenuhnya, asalkan, bahwa Pengguna akan memiliki kesempatan untuk menarik dana dari Perangkat Lunak. Pengguna mengakui dan menyetujui bahwa Perusahaan sama sekali tidak bertanggung jawab sehubungan dengan cabang dari protokol fork yang tidak didukung. -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +## 11. Lain-lain -## 11. Miscellaneous +**a. Amandemen.** Perusahaan berhak, kapan saja dan tanpa pemberitahuan, untuk menambah atau memodifikasi ketentuan Perjanjian ini, hanya dengan memberikan ketentuan yang diubah tersebut kepada Pengguna melalui pesan elektronik melalui media apa pun ke alamat apa pun yang diberikan kepada Perusahaan oleh Pengguna. Akses Pengguna ke atau penggunaan Perangkat Lunak setelah tanggal ketentuan yang diubah tersebut dikirimkan kepada Pengguna akan dianggap sebagai penerimaan terhadap ketentuan yang diubah tersebut. -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**b. Pemutusan.** Jika ada ketentuan atau bagian-ketentuan dari Perjanjian ini adalah, atau menjadi tidak valid, ilegal atau tidak dapat dilaksanakan, itu akan dianggap dimodifikasi sampai batas minimum yang diperlukan untuk membuatnya valid, sah dan dapat ditegakkan. Jika modifikasi semacam itu tidak dimungkinkan, ketentuan yang relevan atau ketentuan bagian akan dianggap dihapus. Setiap modifikasi atau penghapusan ketentuan atau bagian-ketentuan dalam Pasal ini tidak akan mempengaruhi validitas dan keberlakuan dari sisa Perjanjian ini. -**b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. +**c. Seluruh Perjanjian - Penyangkalan Kepercayaan**. Perjanjian ini merupakan seluruh perjanjian antara Para Pihak berkenaan dengan masalah pokok perjanjian ini dan menggantikan semua perjanjian atau pemahaman sebelumnya antara Para Pihak. Pengguna secara tegas menyatakan dan menjamin bahwa itu tidak bergantung pada pernyataan, pemahaman, representasi, harapan atau perjanjian selain dari yang secara tegas diatur dalam Perjanjian ini. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**d. PERJANJIAN INI BERGANTUNG PADA ARBITRASI YANG MENGIKAT.** Pengguna setuju bahwa setiap dan semua perselisihan atau klaim terhadap siapa pun yang timbul dari atau dengan cara apa pun terkait dengan Perjanjian ini atau akses, penggunaan atau instalasi Perangkat Lunak oleh Pengguna atau orang lain harus bergantung pada arbitrase yang mengikat berdasarkan Peraturan Arbitrase Ruang Dagang Internasional oleh satu atau lebih arbiter yang ditunjuk sesuai dengan Aturan tersebut. Lokasi arbitrase adalah Jepang. Bahasa arbitrase adalah bahasa Inggris. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. - -**e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. +**e. BAHASA.** Semua Terjemahan dalam Perjanjian ini dibuat untuk tujuan rujukan lokal dan jika terjadi ketidakkonsistenan antara versi bahasa Inggris dan non-Inggris, versi bahasa Inggris dari Perjanjian ini yang akan berlaku dan mengatur dalam segala hal. ## 12. Delegation and Staking @@ -106,4 +74,4 @@ If you have any questions or concerns regarding the accuracy or reliability of t 12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. From 3b8addb8a8f79bce67610840b02cc47c385c330c Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:30:37 +0100 Subject: [PATCH 371/464] New translations en-us.md (Croatian) --- .../i18n/locales/terms-of-use/ada/hr-HR.md | 72 ++++++------------- 1 file changed, 20 insertions(+), 52 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/hr-HR.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/hr-HR.md index 62a96a1ef3..617f0e1f22 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/hr-HR.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/hr-HR.md @@ -1,102 +1,70 @@ # Terms of Service Agreement -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Co., Ltd. ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties." BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. ## 1. Rights and Obligations -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. **b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. ## 2. Taxes and Fees -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. ## 3. User Representations -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. ## 4. Prohibited Uses -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. ## 5. Termination -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. ## 6. Disclaimer of Warranties -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. ## 7. Limitation of Liability -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. ## 8. Indemnification -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. ## 9. Intellectual Property -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to, EMURGO Co., Ltd., EMURGO, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. ## 10. Warnings -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. - -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. ## 11. Miscellaneous -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. **b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**c. Entire Agreement – Disclaimer of Reliance**. This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. +**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. **e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. ## 12. Delegation and Staking @@ -106,4 +74,4 @@ If you have any questions or concerns regarding the accuracy or reliability of t 12.3 **Company Stake-Pools.** The Company will operate various stake pools which will be visible in Yoroi. The cost and network and server requirements to reliably operate such stake pools shall be determined by the Company in its sole discretion. Company will communicate the percentage amount of Reward to be shared with Users through the User’s Yoroi wallet. Rewards will accrue at the end of each epoch and will automatically appear in the User’s Yoroi wallet. -12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. \ No newline at end of file +12.4 **Redeeming Rewards.** User shall be responsible for payment of all applicable taxes, if any, to which the Rewards might be subject and any and all other taxes which may apply to User once Rewards are redeemed. From 7d2d909f2396445cbd6c8eee276690af5ed77fd0 Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Tue, 9 Jul 2024 10:40:09 +0100 Subject: [PATCH 372/464] New translations en-us.md (ja-JP) --- .../i18n/locales/terms-of-use/ada/ja-JP.md | 102 ++++++------------ 1 file changed, 35 insertions(+), 67 deletions(-) diff --git a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/ja-JP.md b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/ja-JP.md index 2cf69f4877..c2d6afc522 100644 --- a/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/ja-JP.md +++ b/packages/yoroi-extension/app/i18n/locales/terms-of-use/ada/ja-JP.md @@ -1,102 +1,70 @@ -# Terms of Service Agreement +# サービス規約 -THIS TERMS OF SERVICE AGREEMENT ("Agreement") is made between EMURGO Fintech Inc ("Company") and any person or entity ("User") who completes the process to download, utilize, or operate the software known as the Yoroi cryptocurrency Wallet application, and data processing service, application, communication service or other content or offered or provided with the software by the Company ("Software"). The Company and User are collectively referred to as the "Parties". - -BY CLICKING THE ACCEPTANCE BUTTON OR ACCESSING, USING OR INSTALLING ANY PART OF THE SOFTWARE, USER EXPRESSLY AGREES TO AND CONSENTS TO BE LEGALLY BOUND BY ALL OF THE TERMS OF THIS AGREEMENT. IF USER DOES NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, THE USER SHALL NOT BE AUTHORIZED TO ACCESS, USE OR INSTALL ANY PART OF THE SOFTWARE. +このサービス規約(以下「本規約」といいます。)は、株式会社EMURGO(以下「当社」といいます。)と、ヨロイクリプトカレンシーウォレットと称するアプリケーションとしてのソフトウェアおよび上記ソフトウェアとともに当社により提供または作成されるデータプロセシングサービス、アプリケーション、通信サービスその他コンテンツ(以下「本ソフトウェア」といいます。)をダウンロードし、利用し、または操作するための手続を完了した者(個人又は法人)(以下「ユーザー」といいます。)との間で締結されるものです。当社およびユーザーを「両当事者」と総称します。 承認ボタンをクリックする、あるいは本ソフトウェアのいずれかの部分にアクセスし、本ソフトウェアのいずれかの部分を利用し、または本ソフトウェアのいずれかの部分をインストールすることにより、ユーザーは、本規約のすべての条項に法的に拘束されることについて明示的に同意したこととなります。本規約のすべての条項に同意しない場合には、ユーザーは、本ソフトウェアのいずれの部分もアクセスし、利用し、またはインストールすることができないものとします。 -## 1. Rights and Obligations +## 1. 権利および義務 -**a. Description.** The Software functions as a free, open source, digital cryptocurrency wallet. The Software does not constitute an account by which the Company or any other third parties serve as financial intermediaries or custodians of User's ADA or any other cryptocurrency. -While the Software has undergone beta testing and continues to be improved by feedback from the developers community, open-source contributors and beta-testers, the Company cannot guarantee that there will be no bugs in the Software. User acknowledges that User's use of the Software is at User's risk, discretion and in compliance with all applicable laws. User is responsible for safekeeping User's passwords, PINs, private keys, redemption keys, shielded vending keys, backup recovery mnemonic passphrases, ADA passcodes and any other codes User uses to access the Software or any information, ADA, voucher, or other cryptocurrency unit. - -IF USER LOSES ACCESS TO USER'S CRYPTOCURRENCY WALLET OR PRIVATE KEYS AND HAS NOT SEPARATELY STORED A BACKUP OF USER'S CRYPTOCURRENCY WALLET OR BACKUP RECOVERY MNEMONIC PHRASE(S) AND CORRESPONDING PASSWORD(S), USER ACKNOWLEDGES AND AGREES THAT ANY ADA OR ANY OTHER CRYPTOCURRENCIES USER HAS ASSOCIATED WITH THAT CRYPTOCURRENCY WALLET WILL BECOME INACCESSIBLE. - - All transaction requests are irreversible. The Company and its shareholders, directors, officers, employees, affiliates and agents cannot guarantee transaction confirmation or retrieve User's private keys or passwords if User loses or forgets them. +**a. 種類** 本ソフトウェアは、無償のオープンソースの仮想通貨ウォレットとして機能します。本ソフトウェアは、当社またはその他の第三者がユーザーのADAその他の仮想通貨に関する金融仲介業者または管理業者となるアカウントを構成するものではありません。 本ソフトウェアはベータ・テストを受けており、デベロッパーコミュニティ、オープンソースコントリビューターおよびベータテスターからのフィードバックにより引き続き改良されますが、当社は、本ソフトウェアにバグがないことを保証するものではありません。ユーザーは、ユーザーによる本ソフトウェアの利用はユーザーの責任、裁量によるものであり、かつ、適用されるすべての法律に従うことを承知しています。ユーザーは、本ソフトウェアまたは何らかの情報、ADA、バウチャーその他の仮想通貨ユニットにアクセスするためにユーザーが利用するユーザーのパスワード、個人識別番号(PIN)、プライベートキー、還元キー、保護されたベンディングキー(shielded Vending Key)、バックアップリカバリー・ニーモニックパスフレーズ(backup recovery mnemonic passphrases)、ADAパスコードおよびその他のコードを保管する責任を負います。 ユーザーがユーザーの仮想通貨ウォレットまたはプライベートキーへのアクセスを失ったものの、ユーザーの仮想通貨ウォレットまたはバックアップリカバリー・ニーモニックフレーズおよび対応するパスワードのバックアップを別途保存していなかった場合には、ユーザーは、ユーザーが当該仮想通貨ウォレットに関連づけていたADAその他の仮想通貨にアクセスできなくなることを承知しており、これに同意します。なお、いずれの取引要求も撤回できません。当社ならびにその株主、取締役、役員、従業員、関連会社および代理人は、取引確認を保証することができず、ユーザーがユーザーのプライベートキーまたはパスワードを紛失または失念した場合であってもそれらを取り戻すことができません。 -**b. Accessibility.** User agrees that from time to time the Software may be inaccessible or inoperable for any reason, including, without limitation: (i) equipment malfunctions; (ii) periodic maintenance procedures or repairs which the Company may undertake from time to time; or (iii) causes beyond the control of the Company or which are not reasonably foreseeable by the Company. +**b. アクセシビリティ** ユーザーは、本ソフトウェアが何らかの理由((i)機器の故障、(ii)当社が随時実施することのある定期メンテナンス手続または定期修理、または(iii)当社が制御できないまたは当社が合理的に予見できない原因を含みますが、これらに限られません。)により随時アクセス不能または操作不能となる可能性があることに同意します。 -**c. Equipment.** User shall be solely responsible for providing, maintaining and ensuring compatibility with the Software, all hardware, software, electrical and other physical requirements for User's use of the Software, including, without limitation, telecommunications and internet access connections and links, web browsers or other equipment, programs and services required to access and use the Software. +**c. 機器** ユーザーは、ユーザーが本ソフトウェアを利用するためのすべてのハードウェア、ソフトウェア、電気に関する要件その他の物理的要件(本ソフトウェアにアクセスし、本ソフトウェアを利用するために必要な電気通信ならびにインターネットアクセス接続およびリンク、ウェブブラウザその他の機器、プログラムおよびサービスを含みますが、これらに限られません。)を提供し、維持し、本ソフトウェアとの互換性を確保することについて単独で責任を負うものとします。 -**d. Security.** User shall be solely responsible for the security, confidentiality and integrity of all information and content that User receives, transmits through or stores on the Software. User shall be solely responsible for any authorized or unauthorized access to any account of User by any person. User agrees to bear all responsibility for the confidentiality of User's security devices, information, keys, and passwords. +**d. セキュリティ** ユーザーは、ユーザーが本ソフトウェアを通じて送受信し、または本ソフトウェア上で保存するすべての情報およびコンテンツのセキュリティ、機密性および完全性について単独で責任を負うものとします。ユーザーは、いずれかの者によるユーザーのアカウントへの正規のアクセスまたは不正なアクセスについて単独で責任を負うものとします。ユーザーは、ユーザーのセキュリティデバイス、情報、キーおよびパスワードの機密性について一切の責任を負うことに同意します。 -**e. Privacy.** When reasonably practicable, the Company will attempt to respect User's privacy. The Company will not monitor, edit, or disclose any personal information about User or User's account, including its contents or User's use of the Software, without User's prior consent unless the Company believes in good faith that such action is necessary to: (i) comply with legal process or other legal requirements of any governmental authority; (ii) protect and defend the rights or property of the Company; (iii) enforce this Agreement; (iv) protect the interests of users of the Software other than User or any other person; or (v) operate or conduct maintenance and repair of the Company's services or equipment, including the Software as authorized by law. User has no expectation of privacy with respect to the Internet generally. User's IP address is transmitted and recorded with each message or other information User sends from the Software. +**e. プライバシー** 合理的に実施可能な場合には、当社は、ユーザーのプライバシーを尊重するよう努めます。当社は、ユーザーの事前の同意なくユーザーまたはユーザーのアカウント(その内容またはユーザーによる本ソフトウェアの利用を含みます。)に関する個人情報を監視し、編集し、または開示しません(但し、(i)政府当局の法的手続またはその他の法的要件に従うために、(ii)当社の権利または財産を守るために、(iii)本規約を履行するために、(iv)ユーザー以外の本ソフトウェアの利用者またはその他の者の権利を保護するために、または(v)当社のサービスまたは機器(法律により認められる場合には本ソフトウェアを含みます。)を運用し、またはそれらのメンテナンスおよび修理を行うためにかかる行為が必要であると当社が誠実に判断した場合については、この限りでありません。)。ユーザーは、インターネット全般についてプライバシーを期待できません。ユーザーのIPアドレスは、ユーザーが本ソフトウェアから送信する各メッセージまたはその他の情報とともに送信され、記録されます。 -## 2. Taxes and Fees +## 2. 税金および手数料 -All currency conversion charges, third party fees, sales, use, value-added, personal property or other tax, duty or levy of any kind, including interest and penalties thereon, whether imposed now or hereinafter by any governmental entity, and fees incurred by User by reason of User's access, use or installation of the Software shall be the sole responsibility of User. +通貨両替手数料、第三者の手数料、売上税、使用税、付加価値税、動産税その他のあらゆる種類の税金、関税および賦課金(これらに係る利息および罰金を含みます。)(政府機関により現在課せられているものか、または将来課せられるものかを問いません。)、ならびにユーザーによる本ソフトウェアへのアクセス、本ソフトウェアの利用または本ソフトウェアのインストールによりユーザーに生じる手数料は、すべてユーザーが単独で負担するものとします。 -## 3. User Representations +## 3. ユーザーの表明 -User represents and warrants to the Company that: (a) if User is a natural person, User is over the age of eighteen (18); (b) User has the power and authority to enter into and perform User's obligations under this Agreement; (c) all information provided by User to the Company is truthful, accurate and complete; (d) User will comply with all laws and regulations of any applicable jurisdiction with regard to User's access, use or installation of the Software; (e) User shall comply with all terms and conditions of this Agreement, including, without limitation, the provisions set forth at Section 4; and (f) User has provided and will provide accurate and complete information as required for access, use or installation of the Software. +ユーザーは、当社に対し、(a)ユーザーが自然人である場合には、ユーザーが18歳を超えていること、(b)ユーザーは本規約を締結し、本規約に基づくユーザーの義務を履行する権限および権能を有していること、(c)ユーザーが当社に提供する情報はすべて真実、正確かつ完全であること、(d)ユーザーはユーザーによる本ソフトウェアへのアクセス、本ソフトウェアの利用または本ソフトウェアのインストールに関して関係法域のすべての法令を遵守すること、(e)ユーザーは本規約のすべての条項(第4条に定める規定を含みますが、これに限られません。)を遵守すること、ならびに(f)ユーザーは本ソフトウェアへのアクセス、本ソフトウェアの利用または本ソフトウェアのインストールに必要な正確かつ完全な情報を提供しており、今後も提供することを表明し、保証します。 -## 4. Prohibited Uses +## 4. 禁止される利用 -User is solely responsible for any and all acts and omissions that occur under User's account, security information, keys or password, and User agrees not to engage in unacceptable use of the Software, which includes, without limitation, use of the Software to: (a) disseminate, store or transmit unsolicited messages, chain letters or unsolicited commercial email; (b) disseminate or transmit material that, to a reasonable person may be abusive, obscene, pornographic, defamatory, harassing, grossly offensive, vulgar, threatening or malicious; (c) disseminate, store or transmit files, graphics, software or other material that actually or potentially infringes the copyright, trademark, patent, trade secret or other intellectual property right of any person; (d) create a false identity or to otherwise attempt to mislead any person as to the identity or origin of any communication; (e) export, re-export or permit downloading of any message or content in violation of any export or import law, regulation or restriction of any applicable jurisdiction, or without all required approvals, licenses or exemptions; (f) interfere, disrupt or attempt to gain unauthorized access to other accounts on the Software or any other computer network; or (g) disseminate, store or transmit viruses, Trojan horses or any other malicious code or program. +ユーザーは、ユーザーのアカウント、セキュリティ情報、キーまたはパスワードにより生じるすべての作為および不作為について単独で責任を負います。また、ユーザーは、容認できない本ソフトウェアの利用((a)一方的なメッセージ、チェーンレターまたは一方的な商業電子メールを拡散し、保存し、または送信すること、(b)一般に侮辱的である、卑猥である、猥褻である、中傷的である、嫌がらせである、著しく不快である、淫らである、脅迫的であるまたは悪意のある可能性のある資料等を拡散し、または送信すること、(c)いずれかの者の著作権、商標、特許、営業秘密またはその他の知的財産権を実際に侵害しているかまたは侵害する可能性のあるファイル、画像、ソフトウェアまたはその他の資料等を拡散し、保存し、または送信すること、(d)通信の同一性もしくは出所について、別人になりすます、またはその他の形でいずれかの者を誤解させようと試みること、(e)関係法域の輸出入関係法令もしくは規則に違反して、または必要なすべての許認可もしくは免除を受けずにメッセージまたはコンテンツを輸出し、再輸出し、またはそれらのダウンロードを許可すること、(f)本ソフトウェアまたはその他のコンピュータネットワーク上のその他のアカウントを妨害し、中断し、またはかかるアカウントに不正にアクセスしようと試みること、または(g)ウイルス、トロイの木馬その他の悪意のあるコードまたはプログラムを拡散し、保存し、または送信することを目的とした本ソフトウェアの利用を含みますが、これらに限られません。)を行わないことに同意します。 -## 5. Termination +## 5. 解除 -This Agreement is effective upon User's acceptance as set forth herein and shall continue in full force so long as User engages in any access, use or installation of the Software. The Company reserves the right, in its sole discretion and without notice, at any time and for any reason, to: (a) remove or disable access to all or any portion of the Software; (b) suspend User's access to or use of all or any portion of the Software; and (c) terminate this Agreement. +本規約は、本規約に規定するユーザーによる承認をもって発効し、ユーザーが本ソフトウェアへのアクセス、本ソフトウェアの利用または本ソフトウェアのインストールを行う間有効に存続するものとします。当社は、自己の裁量で、通知なく、いつでも理由の如何を問わず(a)本ソフトウェアの全部または一部へのアクセスを除外し、または無効とし、(b)ユーザーによる本ソフトウェアの全部または一部へのアクセスまたはその利用を停止し、(c)本規約を解除する権利を有します。 -## 6. Disclaimer of Warranties +## 6. 保証の放棄 -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USE OF THE SOFTWARE IS AT USER'S SOLE RISK. THE COMPANY DOES NOT WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE, NOR DOES THE COMPANY MAKE ANY WARRANTY AS TO ANY RESULTS THAT MAY BE OBTAINED BY USE OF THE SOFTWARE. THE COMPANY MAKES NO OTHER WARRANTIES, EXPRESS OR IMPLIED. THE COMPANY EXPRESSLY DISCLAIMS ANY WARRANTY OF MERCHANTABILITY, WARRANTY OF SUITABILITY FOR A PARTICULAR PURPOSE, WARRANTY OF TITLE OR INTEREST, OR WARRANTY OF NONINFRINGEMENT. +本ソフトウェアは、明示または黙示を問わずいかなる種類の保証もない「現状有姿」で提供されます。本ソフトウェアの利用は、ユーザーの単独の責任によります。当社は、本ソフトウェアが中断されずエラーフリーであることを保証せず、本ソフトウェアを利用することにより得られる可能性のある結果についても何ら保証しません。当社は、明示または黙示を問わずその他の保証を行いません。当社は、商品性の保証、特定目的適合性の保証、所有権または権利の保証および不侵害の保証を明確に放棄します。 -## 7. Limitation of Liability +## 7. 責任の限定 -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE TO USER OR ANY THIRD PARTY FOR ANY USE, INTERRUPTION, DELAY OR INABILITY TO USE THE SOFTWARE, LOST REVENUES OR PROFITS, DELAYS, INTERRUPTION OR LOSS OF SERVICES, BUSINESS OR GOODWILL, LOSS OR CORRUPTION OF DATA, LOSS RESULTING FROM SYSTEM OR SYSTEM SERVICE FAILURE, MALFUNCTION OR SHUTDOWN, FAILURE TO ACCURATELY TRANSFER, READ OR TRANSMIT INFORMATION, FAILURE TO UPDATE OR PROVIDE CORRECT INFORMATION, SYSTEM INCOMPATIBILITY OR PROVISION OF INCORRECT COMPATIBILITY INFORMATION OR BREACHES IN SYSTEM SECURITY, OR FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT, EXEMPLARY, SPECIAL OR PUNITIVE DAMAGES, WHETHER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, REGARDLESS OF WHETHER SUCH DAMAGES WERE FORESEEABLE AND WHETHER OR NOT WE WERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -IN NO EVENT SHALL THE COMPANY OR ITS SHAREHOLDERS, DIRECTORS, OFFICERS, EMPLOYEES, AFFILIATES OR AGENTS, OR ANY OF ITS OR THEIR RESPECTIVE SERVICE PROVIDERS, BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM OR IN ANY WAY RELATED TO USER'S ACCESS, USE OR INSTALLATION OF THE SOFTWARE. -SOME JURISDICTIONS PROHIBIT THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, THUS THIS LIMITATION OF LIABILITY MAY NOT APPLY TO USER. IF USER IS DISSATISFIED WITH THE SOFTWARE, USER'S SOLE AND EXCLUSIVE REMEDY SHALL BE FOR USER TO DISCONTINUE USE OF THE SOFTWARE. +いかなる場合であっても、当社ならびにその株主、取締役、役員、従業員、関連会社および代理人ならびに当社およびこれらのサービスプロバイダは、利用、中断、遅延または本ソフトウェアの利用不能、収益減または逸失利益、サービス、事業または信用の遅延、中断または喪失、データの喪失または破損、システムまたはシステムサービスの障害に起因する損失、誤作動またはシャットダウン、情報の正確な転送、読み取りまたは送信ができないこと、正確な情報を更新しまたは提供できないこと、システムの非互換性、不正確な互換性情報の提供またはシステムセキュリティの侵害について、また、間接損害賠償金、付随的損害賠償金、懲罰的損害賠償金または特別損害賠償金(本規約、契約違反、不法行為(過失を含みます。)またはその他に起因または関連するか否かを問いません。)(かかる損害賠償金が予見可能であったか否か、また、当社らがかかる損害賠償金の可能性について通知を受けていたか否かを問いません。)について、ユーザーまたは第三者に対し責任を負わないものとします。 いかなる場合であっても、当社ならびにその株主、取締役、役員、従業員、関連会社または代理人ならびに当社およびこれらのサービスプロバイダは、ユーザーによる本ソフトウェアへのアクセス、本ソフトウェアの利用または本ソフトウェアのインストールに起因し、または何らかの形で関連するいかなる請求、損害その他の債務(訴訟上、契約上、不法行為上またはその他の別を問いません。)についても責任を負わないものとします。 一部の法域では付随的損害賠償金または間接損害賠償金の除外または制限を禁止しているため、この責任の限定がユーザーに適用されない可能性があります。ユーザーが本ソフトウェアに満足していない場合におけるユーザーの唯一かつ排他的な救済手段は、ユーザーによる本ソフトウェアの利用の中止とします。 -## 8. Indemnification +## 8. 補償 -User agrees to indemnify, hold harmless and defend the Company, its shareholders, directors, officers, employees, affiliates and agents ("Indemnified Parties") from and against any action, cause, claim, damage, debt, demand or liability, including reasonable costs and attorney's fees, asserted by any person, arising out of or relating to: (a) this Agreement; (b) User's access, use or installation of the Software, including any data or work transmitted or received by User; and (c) any unacceptable use of the Software by any person, including, without limitation, any statement, data or content made, transmitted or republished by User or any person which is prohibited as unacceptable under Section 4. THIS INDEMNIFICATION INCLUDES THE EXPRESS INDEMNIFICATION OF THE COMPANY AND ALL INDEMNIFIED PARTIES FOR ANY ALLEGED NEGLIGENCE (INCLUDING ANY ALLEGED GROSS NEGLIGENCE). OR OTHER ALLEGED MISCONDUCT OF THE COMPANY OR ANY INDEMNIFIED PARTIES. +ユーザーは、(a)本規約、(b)ユーザーによる本ソフトウェア(ユーザーが送受信するデータまたは著作物を含みます。)へのアクセス、本ソフトウェア(ユーザーが送受信するデータまたは著作物を含みます。)の利用または本ソフトウェア(ユーザーが送送受信するデータまたは著作物を含みます。)のインストール、および(c)いずれかの者による本ソフトウェアの容認されない利用(第4条により容認されないものとして禁止されている、ユーザーまたはいずれかの者により行われ、送信され、または再公表される陳述、データまたはコンテンツを含みますが、これらに限られません。)に起因または関連していずれかの者が主張するいかなる訴え、訴訟、請求、損害、負債、要求または債務(合理的な費用および弁護士報酬を含みます。)についても当社、その株主、取締役、役員、従業員、関連会社および代理人(以下「被補償当事者」といいます。)を補償し、被補償当事者を免責し、被補償当事者を防御することに同意します。この補償には、当社または被補償当事者の過失とされるもの(重過失とされるものを含みます。)またはその他の違法行為とされるものに対する当社およびすべての被補償当事者の明示の補償を含みます。 -## 9. Intellectual Property +## 9. 知的財産 -The Company retains all right, title, and interest in and to all of the Company's brands, logos, and trademarks, including, but not limited to EMURGO,, Yoroi, Yoroi Cryptocurrency Wallet, Yoroi Wallet, Yoroi App, and variations of the wording of the aforementioned brands, logos, and trademarks. +当社は、当社のすべてのブランド、ロゴおよび商標(株式会社EMURGO、EMURGO、ヨロイ、ヨロイクリプトカレンシーウォレット、ヨロイウォレット、ヨロイアプリならびに上記のブランド、ロゴおよび商標の表現が変化したものを含みますが、これらに限られません。)に関するすべての権利、権限および利益を有します。 -## 10. Warnings +## 10. 警告 -User acknowledges that the Company shall not be responsible for transferring, safeguarding, or maintaining private keys and/or User's ADA or any other cryptocurrency. If User and/or any co-signing authorities lose, mishandle, or have stolen associated private keys, or if User's cosigners refuse to provide requisite authority, User acknowledges that User may not be able to recover User's ADA or any other cryptocurrency, and that the Company shall not be responsible for such loss. +ユーザーは、当社がプライベートキーおよび/またはユーザーのADAその他の仮想通貨を移動させ、保管し、または維持する責任を負わないものとすることを承知しています。ユーザーおよび/または共同署名権者が関連するプライベートキーを紛失し、その取扱いを誤り、もしくは窃取された場合またはユーザーの共同署名者が必要な権限を提供することを拒否した場合には、ユーザーは、ユーザーがユーザーのADAその他の仮想通貨を回収できなくなる可能性があること、また、かかる損失について当社は責任を負わないものとすることを承知しています。 ユーザーは、本ソフトウェアおよび/または当社により促進されるADAその他の仮想通貨の取引が遅延する可能性があること、また、遅延に伴ういかなる損失についても当社は責任を負わないものとすることを承知しており、これに同意します。 ユーザーは、本ソフトウェアおよび/または当社にアクセス可能なまたはリンクする第三者の資料等または第三者のサイトに含まれる情報、コンテンツまたはサービスのいずれの側面についても当社は責任を負わないものとすることを承知しており、これに同意します。 ユーザーは、ユーザーがユーザーの証明書をいかなる自然人または法人(当社、カルダノ財団、インプット・アウトプット・エイチケイ・リミテッドまたはその他の組織を含みます。)とも共有しないことに同意します。また、ユーザーは、ユーザーの証明書を共有することによりユーザーのADAその他の仮想通貨が失われる可能性があることを承知しており、かかる損失について当社は責任を負わないものとすることに同意します。 ユーザーは、テストネット上でADAを還元することによりユーザーはテストADAのみを還元すること、また、実際のADAを還元するためには、ユーザーはリリース後にメインネット上で手続を繰り返さなければならないことを承知しており、これに同意します。 本ソフトウェアを利用することにより、ユーザーは、(i)当社が下層プロトコルの運用について責任を負わないこと、また、当社がその機能性、セキュリティおよび可用性について何ら保証しないこと、(ii)規則の運用上、下層プロトコルはメインチェーンの突然の変更(以下「フォーク」といいます。)による影響を受ける可能性があること、また、かかるフォークはユーザーが本ソフトウェア上で保管するADAその他の仮想通貨の価値および/または機能に重大な影響を及ぼす可能性があることを承知しており、これらに同意します。フォークした場合、ユーザーは、当社が(ユーザーに通知した上で、またはユーザーに通知することなく)本ソフトウェアの運用を一時的に停止することができること、また、当社が自己の裁量で(a)自社システムの設定または再設定を行うことができること、または(b)フォークしたプロトコルを一切サポートしない(またはサポートを停止する)旨決定することができることに同意します(但し、ユーザーは、本ソフトウェアから資金を引き出す機会を有するものとします。)。ユーザーは、フォークしたプロトコルのうちサポート対象外のブランチについて当社は一切責任を負わないことを承知しており、これに同意します。 -User acknowledges and agrees that ADA or any other cryptocurrency transactions facilitated by the Software and/or the Company may be delayed, and that the Company shall not be responsible for any associated loss. - -User acknowledges and agrees that the Company shall not be responsible for any aspect of the information, content, or services contained in any third-party materials or on any third party sites accessible or linked to the Software and/or the Company. +**a. 変更** 当社は、ユーザーから当社に届け出のあったアドレス宛てのいずれかの媒体を通じた電子メッセージにより、変更後の条項をユーザーに提示することにより、いつでも通知なく本規約の条項を追加し、または変更することができるものとします。かかる変更後の条項がユーザーに提示された日の後にユーザーが本ソフトウェアにアクセスし、または本ソフトウェアを利用した場合には、かかる変更後の条項が承諾されたものとみなします。 -User agrees that User should never share User's certificate with any natural or legal person, including the Company, Cardano Foundation, Input Output HK Limited, or any other entity. Further, User acknowledges that sharing User's certificate may result in loss of User's ADA or any other cryptocurrency, and User agrees that the Company shall not be responsible for such loss. - -User acknowledges and agrees that by redeeming ADA in the testnet, User redeems test-ADA only, and that in order to redeem actual ADA, User must repeat the procedure in the mainnet, once released. +**b. 分離解釈** 本規約のいずれかの規定またはいずれかの規定の一部が無効、違法または強制執行不能であるか、無効、違法または強制執行不能となる場合には、当該規定または当該規定の一部は、有効、適法かつ強制執行可能とするために必要な最小限度で変更されたものとみなします。かかる変更を行えない場合には、当該規定または当該規定の一部は削除されたものとみなします。本条に基づくいずれかの規定またはいずれかの規定の一部の変更または削除は、本規約の残りの規定の有効性および強制執行可能性に影響を及ぼさないものとします。 -By using the Software, User acknowledges and agrees: (i) that the Company is not responsible for the operation of the underlying protocols and that the Company makes no guarantee of their functionality, security, or availability; and (ii) that the underlying protocols are subject to sudden main-chain changes in operating rules ("forks"), and that such forks may materially affect the value, and/or function of the ADA or any other cryptocurrency that User stores on the Software. In the event of a fork, User agrees that the Company may temporarily suspend the Software operations (with or without notice to User) and that the Company may, in its sole discretion, (a) configure or reconfigure its systems or (b) decide not to support (or cease supporting) the forked protocol entirely, provided, however, that User will have an opportunity to withdraw funds from the Software. User acknowledges and agrees that the Company assumes absolutely no responsibility whatsoever in respect of an unsupported branch of a forked protocol. +## 11. その他 -## 11. Miscellaneous +**a. 変更 **当社は、ユーザーから当社に届け出のあったアドレス宛てのいずれかの媒体を通じた電子メッセージにより、変更後の条項をユーザーに提示することにより、いつでも通知なく本規約の条項を追加し、または変更することができるものとします。かかる変更後の条項がユーザーに提示された日の後にユーザーが本ソフトウェアにアクセスし、または本ソフトウェアを利用した場合には、かかる変更後の条項が承諾されたものとみなします。 -**a. Amendment.** The Company shall have the right, at any time and without notice, to add to or modify the terms of this Agreement, simply by delivering such amended terms to User by electronic message through any medium to any address provided to the Company by User. User's access to or use of the Software after the date such amended terms are delivered to User shall be deemed to constitute acceptance of such amended terms. +**b. 分離解釈 **本規約のいずれかの規定またはいずれかの規定の一部が無効、違法または強制執行不能であるか、無効、違法または強制執行不能となる場合には、当該規定または当該規定の一部は、有効、適法かつ強制執行可能とするために必要な最小限度で変更されたものとみなします。かかる変更を行えない場合には、当該規定または当該規定の一部は削除されたものとみなします。本条に基づくいずれかの規定またはいずれかの規定の一部の変更または削除は、本規約の残りの規定の有効性および強制執行可能性に影響を及ぼさないものとします。 -**b. Severance.** If any provision or part-provision of this Agreement is, or becomes invalid, illegal or unenforceable, it shall be deemed modified to the minimum extent necessary to make it valid, legal and enforceable. If such modification is not possible, the relevant provision or part-provision shall be deemed deleted. Any modification to or deletion of a provision or part-provision under this Article shall not affect the validity and enforceability of the rest of this Agreement. +**c. 完全合意 – 依拠の放棄** 本規約は、本規約の内容に関する両当事者間の完全な合意を構成し、両当事者間における従前のすべての合意事項および了解事項に優先します。ユーザーは、本規約に明記されるもの以外の陳述、了解事項、表明事項、期待事項または合意事項に依拠していないことを明示的に表明し、保証します。 -**c. Entire Agreement – Disclaimer of Reliance.** This Agreement constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior agreements or understandings between the Parties. User expressly represents and warrants that it is not relying upon any statements, understandings, representations, expectations or agreements other than those expressly set forth in this Agreement. +**d. 本規約は、拘束力のある仲裁に服します** ユーザーは、本規約またはユーザーもしくはその他の者による本ソフトウェアへのアクセス、本ソフトウェアの利用もしくは本ソフトウェアのインストールに起因し、または何らかの点で関連する紛争またはいずれかの者に対する請求はすべて国際商業会議所の仲裁規則に基づき選任される1名ないし複数名の仲裁人による同規則に基づく拘束力のある仲裁に服するものとすることに同意します。また、仲裁地は日本とし、仲裁言語は英語とします。 -**d. THIS AGREEMENT IS SUBJECT TO BINDING ARBITRATION.** User agrees that any and all disputes or claims against any person arising out of or in any way related to this Agreement or the access, use or installation of the Software by User or any other person shall be subject to binding arbitration under the Rules of Arbitration of the International Chamber of Commerce by one or more arbitrators appointed in accordance with the said Rules. The location of the arbitration shall be Japan. The language of the arbitration shall be English. - -**e. LANGUAGE.** Any translation of this Agreement is made for purposes of local reference only and in the event of any inconsistency between the English and any non-English versions, the English version of this Agreement shall prevail and govern in all respects. - -**f. TRANSLATIONS.** The Company and its team strives to provide accurate and reliable translations, there may be limitations and discrepancies inherent to the translation process. However, translations are provided by an automated system or human translators, and there may be instances where the meaning and nuance of the original text are not fully captured or may be interpreted differently in the translated version. - -The translated content on the Software is provided for convenience and informational purposes only. In the event of any discrepancies or conflicts between the translated version and the original content, the original version in the source language (English) shall prevail and be considered authoritative. - -Translated versions of the Software should not be regarded as legally binding or official. Any legal or contractual obligations, terms, or conditions are governed by the original version in the source language (English). If there are specific legal implications or requirements, it is advisable to consult the original content or seek professional advice. - -We may provide translations on the Software through automated systems or engage translators through the YOROI community . In such cases, we do not guarantee the accuracy, reliability, or completeness of third-party translations, and we do not assume any responsibility for any inaccuracies, errors, or omissions in the translated content. - -Users who rely on translated versions of documentation on our Software do so at their own risk. It is the user's responsibility to assess the accuracy, reliability, and suitability of the translated content for their intended purposes. We encourage users to refer to the original source language content or seek assistance when in doubt. - -Translations may not always reflect the most current information or updates on our Software. We reserve the right to modify, update, or remove translated content without prior notice. It is advisable to periodically visit the original content or contact us for the latest information. - -By using the translated versions of our Software you acknowledge and accept the limitations and risks associated with translations. We disclaim any liability for any losses, damages, or inconveniences arising from the use of translated content. For critical information, accuracy, and legal matters, we recommend consulting the original content or contacting us directly. - -If you have any questions or concerns regarding the accuracy or reliability of the translated content, please contact us for clarification. +**e. 言語** 本規約の翻訳は、現地における参照の便宜のためにのみ作成されるものであり、英語版と英語以外の言語版との間に齟齬がある場合には本規約の英語版がすべての点において優先するものとします。 ## 12. 委任とステーキング @@ -106,4 +74,4 @@ If you have any questions or concerns regarding the accuracy or reliability of t 12.3 **当社のステークプール** 当社は、複数のステークプールを運営し、当該ステークプールはヨロイで可視化されます。かかるステークプールを確実に運営するためのコストならびにネットワークおよびサーバー要件は、当社の単独の裁量で決定されるものとします。当社は、ユーザーと共有する報酬額の割合をユーザーのヨロイウォレット経由で通知します。報酬は、各エポックの終了時に発生し、ユーザーのヨロイウォレットに自動的に表示されます。 -12.4 ** 報酬の引き出し** ユーザーは、報酬に課される可能性のあるすべての税金(該当する場合)、および報酬の引き出し後にユーザーに課される可能性のあるその他すべての税金の支払いに責任を負うものとします。 \ No newline at end of file +12.4 ** 報酬の引き出し** ユーザーは、報酬に課される可能性のあるすべての税金(該当する場合)、および報酬の引き出し後にユーザーに課される可能性のあるその他すべての税金の支払いに責任を負うものとします。 From 52b74d510ddc0d93be0d8502c7849e68ef6dd3c0 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Fri, 12 Jul 2024 11:13:56 +0200 Subject: [PATCH 373/464] update --- packages/yoroi-extension/package-lock.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/yoroi-extension/package-lock.json b/packages/yoroi-extension/package-lock.json index 6da72307d4..c889d467e7 100644 --- a/packages/yoroi-extension/package-lock.json +++ b/packages/yoroi-extension/package-lock.json @@ -20,7 +20,7 @@ "@emurgo/cip4-js": "1.0.5", "@emurgo/cross-csl-browser": "4.4.0", "@emurgo/yoroi-eutxo-txs": "0.0.2-alpha.8", - "@emurgo/yoroi-lib": "0.15.6-alpha.1", + "@emurgo/yoroi-lib": "0.15.6-alpha.2", "@ledgerhq/hw-transport-u2f": "5.36.0-deprecated", "@ledgerhq/hw-transport-webauthn": "5.36.0-deprecated", "@ledgerhq/hw-transport-webhid": "5.51.1", @@ -2708,9 +2708,9 @@ } }, "node_modules/@emurgo/yoroi-lib": { - "version": "0.15.6-alpha.1", - "resolved": "https://registry.npmjs.org/@emurgo/yoroi-lib/-/yoroi-lib-0.15.6-alpha.1.tgz", - "integrity": "sha512-uI3fjgVC17LZ5yRQsCWh6epYISSNdxG9N2rMtD6XsK4YfWFRQoGu9jaBHzKF69mskGYeB7KGyqnCaBGflQqWmA==", + "version": "0.15.6-alpha.2", + "resolved": "https://registry.npmjs.org/@emurgo/yoroi-lib/-/yoroi-lib-0.15.6-alpha.2.tgz", + "integrity": "sha512-onY17cnLROEqQQ4DxpQ4tWoJOXuKO/PlMNFZnNqQxFJldjQxdm6pAOW1kZMWfVuh0vtCtBNVf+CwlJERqvwvDg==", "dependencies": { "@cardano-foundation/ledgerjs-hw-app-cardano": "^6.0.0", "@emurgo/cross-csl-core": "4.4.0", From c889270f738dbc832e5973c19800ead41aec6077 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Fri, 12 Jul 2024 11:32:51 +0200 Subject: [PATCH 374/464] fix flow and lint --- packages/yoroi-extension/.eslintrc.js | 8 +++++--- .../app/api/ada/lib/storage/database/primitives/tables.js | 2 +- .../wallet/dialogs/GovernanceParticipateDialog.js | 5 ++--- .../app/containers/wallet/staking/StakingPageContent.js | 6 +++++- .../app/stores/toplevel/DelegationStore.js | 8 +++++--- 5 files changed, 18 insertions(+), 11 deletions(-) diff --git a/packages/yoroi-extension/.eslintrc.js b/packages/yoroi-extension/.eslintrc.js index 27dee28d5b..51fb35a255 100644 --- a/packages/yoroi-extension/.eslintrc.js +++ b/packages/yoroi-extension/.eslintrc.js @@ -95,14 +95,16 @@ module.exports = { 'prefer-const': 1, 'object-curly-spacing': 1, 'spaced-comment': 0, - 'simple-import-sort/exports': 'error', - 'simple-import-sort/imports': 'error', + 'simple-import-sort/imports': 0, + 'no-nested-ternary': 0, + 'import/no-unresolved': 0, + 'import/extensions': 0, quotes: ['error', 'single', { avoidEscape: true, allowTemplateLiterals: true }], 'import/imports-first': 1, 'react/jsx-indent': 1, 'flowtype/define-flow-type': 1, 'flowtype/use-flow-type': 1, - 'flowtype/require-valid-file-annotation': [2, 'always'], + 'flowtype/require-valid-file-annotation': 0, 'global-require': 'off', 'no-await-in-loop': 0, 'no-unused-expressions': 2, diff --git a/packages/yoroi-extension/app/api/ada/lib/storage/database/primitives/tables.js b/packages/yoroi-extension/app/api/ada/lib/storage/database/primitives/tables.js index d2aad52267..03d79fc4a6 100644 --- a/packages/yoroi-extension/app/api/ada/lib/storage/database/primitives/tables.js +++ b/packages/yoroi-extension/app/api/ada/lib/storage/database/primitives/tables.js @@ -3,10 +3,10 @@ import type { lf$schema$Builder } from 'lovefield'; import { ConstraintAction, ConstraintTiming, Type } from 'lovefield'; -import type { CertificateKind } from '@emurgo/cardano-serialization-lib-browser/cardano_serialization_lib'; import type { CertificateRelationType, CoreAddressT, TxStatusCodesType } from './enums'; import type { KeyKindType } from '../../../cardanoCrypto/keys/types'; import type { CoinTypesT } from '../../../../../../config/numbersConfig'; +import typeof { CertificateKind } from '@emurgo/cardano-serialization-lib-browser/cardano_serialization_lib'; export type CommonBaseConfig = {| /** diff --git a/packages/yoroi-extension/app/containers/wallet/dialogs/GovernanceParticipateDialog.js b/packages/yoroi-extension/app/containers/wallet/dialogs/GovernanceParticipateDialog.js index ecab259b87..69ee93bf81 100644 --- a/packages/yoroi-extension/app/containers/wallet/dialogs/GovernanceParticipateDialog.js +++ b/packages/yoroi-extension/app/containers/wallet/dialogs/GovernanceParticipateDialog.js @@ -1,11 +1,10 @@ // @flow import Dialog from '../../../components/widgets/Dialog'; -import { Typography, Button, Grid, Stack } from '@mui/material'; +import { Typography, Button } from '@mui/material'; import { styled } from '@mui/material/styles'; import DialogCloseButton from '../../../components/widgets/DialogCloseButton'; -import { defineMessages, FormattedMessage } from 'react-intl'; +import { defineMessages } from 'react-intl'; -import type { PoolTransition } from '../../../stores/toplevel/DelegationStore'; import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; import { ROUTES } from '../../../routes-config'; diff --git a/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js b/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js index 1ba010f64d..5999c13a5d 100644 --- a/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js +++ b/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js @@ -1,11 +1,12 @@ // @flow import { observer } from 'mobx-react'; import moment from 'moment'; -import type { Node } from 'react'; +import type { ComponentType, Node } from 'react'; import { Component } from 'react'; import { intlShape } from 'react-intl'; import type { ConfigType } from '../../../../config/config-types'; import { withLayout } from '../../../styles/context/layout'; +import type { TokenEntry } from '../../../api/common/lib/MultiToken'; import { Box, styled } from '@mui/system'; import { PublicDeriver } from '../../../api/ada/lib/storage/models/PublicDeriver/index'; @@ -28,6 +29,9 @@ import WalletEmptyBanner from '../WalletEmptyBanner'; import { GovernanceParticipateDialog } from '../dialogs/GovernanceParticipateDialog'; import CardanoStakingPage from './CardanoStakingPage'; import WithdrawRewardsDialog from './WithdrawRewardsDialog'; +import type { LayoutComponentMap } from '../../../styles/context/layout'; +import type { StoresAndActionsProps } from '../../../types/injectedProps.types'; +import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; // populated by ConfigWebpackPlugin declare var CONFIG: ConfigType; diff --git a/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js b/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js index 35b16b8a9b..416b2e9274 100644 --- a/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js +++ b/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js @@ -274,7 +274,7 @@ export default class DelegationStore extends Store { runInAction(() => { this.poolTransitionRequestInfo[walletId] = { ...response }; - }) + }); } catch (error) { console.warn('Failed to check pool transition', error); } @@ -326,13 +326,15 @@ export default class DelegationStore extends Store { const govApi = new GovernanceApi({ oldBackendUrl: String(backendService), newBackendUrl: String(backendServiceZero), - networkId: networkId, + networkId, wasmFactory: RustModule.CrossCsl.init, }); const governanceStatus = await govApi.getAccountState(skey, skey); this.setGovernanceStatus(governanceStatus); - } catch (e) {} + } catch (e) { + console.warn(e); + } }; @action.bound From d4b6f91e7edf942fbc1d966ef8dd5ac23f666f1a Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Mon, 15 Jul 2024 20:12:27 +0300 Subject: [PATCH 375/464] after merge fixes --- .../yoroi-extension/app/containers/swap/orders/OrdersPage.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js b/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js index c9fd379e06..d4815e3cab 100644 --- a/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js +++ b/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js @@ -28,8 +28,6 @@ import { createFormattedTokenValues } from './util'; import type { RemoteTokenInfo } from '../../../api/ada/lib/state-fetch/types'; import type { MappedOrder } from './hooks'; import type { FormattedTokenValue } from './util'; -import moment from 'moment'; -import { signTransactionHex } from '../../../api/ada/transactions/signTransactionHex'; import NoCompleteOrders from './NoCompleteOrders'; import NoOpenOrders from './NoOpenOrders'; From e4e6d8b615292b6cf19dbaf8a027431b6b9e1268 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 17 Jul 2024 11:58:18 +0300 Subject: [PATCH 376/464] add passsword check --- .../module/GovernanceContextProvider.tsx | 25 ++++++++++- .../DelagationForm/DelagationForm.tsx | 41 +++++++++++-------- 2 files changed, 47 insertions(+), 19 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx index 1c4e7a6a04..41378e5862 100644 --- a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx @@ -3,7 +3,7 @@ import * as React from 'react'; import { RustModule } from '../../../../api/ada/lib/cardanoCrypto/rustLoader'; import { unwrapStakingKey } from '../../../../api/ada/lib/storage/bridge/utils'; -import { asGetStakingKey } from '../../../../api/ada/lib/storage/models/PublicDeriver/traits'; +import { asGetSigningKey, asGetStakingKey } from '../../../../api/ada/lib/storage/models/PublicDeriver/traits'; import { useGovernanceManagerMaker } from '../common/useGovernanceManagerMaker'; import { GovernanceActionType, GovernanceReducer, defaultGovernanceActions, defaultGovernanceState } from './state'; @@ -12,7 +12,9 @@ const initialGovernanceProvider = { ...defaultGovernanceActions, walletId: '', governanceManager: null, + checkUserPassword: (_password: string) => Response, }; + const GovernanceContext = React.createContext(initialGovernanceProvider); type GovernanceProviderProps = { @@ -21,7 +23,6 @@ type GovernanceProviderProps = { }; export const GovernanceContextProvider = ({ children, currentWallet }: GovernanceProviderProps) => { - console.log('currentWallet', currentWallet); if (!currentWallet?.selectedWallet) throw new Error(`requires a wallet to be selected`); const [state, dispatch] = React.useReducer(GovernanceReducer, { ...defaultGovernanceState, @@ -32,6 +33,25 @@ export const GovernanceContextProvider = ({ children, currentWallet }: Governanc const { walletId, networkId, currentPool, selectedWallet, backendService, backendServiceZero } = currentWallet; const governanceManager = useGovernanceManagerMaker(walletId, networkId); + // TODO to me moved in rootStore and use this globbaly whenever we need a wallet password check + const checkUserPassword = async (password: string): Promise => { + try { + // check the password + const withSigningKey = asGetSigningKey(selectedWallet); + if (!withSigningKey) { + throw new Error(`[sign tx] no signing key`); + } + const signingKeyFromStorage = await withSigningKey.getSigningKey(); + // will throw a WrongPasswordError + await withSigningKey.normalizeKey({ + ...signingKeyFromStorage, + password, + }); + } catch (error) { + return error; + } + }; + React.useEffect(() => { const withStakingKey = asGetStakingKey(selectedWallet); if (withStakingKey == null) { @@ -86,6 +106,7 @@ export const GovernanceContextProvider = ({ children, currentWallet }: Governanc walletId: currentWallet.walletId, stakingKeyHash, stakingKeyHex, + checkUserPassword, }; return {children}; diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx index 4c6fbe66c6..19f048d608 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx @@ -1,15 +1,15 @@ -import * as React from 'react'; -import { styled } from '@mui/material/styles'; -import Typography from '@mui/material/Typography'; +import { Button } from '@mui/material'; import Box from '@mui/material/Box'; import Stack from '@mui/material/Stack'; -import { Button } from '@mui/material'; -import { useNavigateTo } from '../../common/useNavigateTo'; -import { useGovernance } from '../../module/GovernanceContextProvider'; -import { useStrings } from '../../common/useStrings'; -import { useCreateAndSendDrepDelegationTransaction } from '../../api/useCreateAndSendDrepDelegationTransaction'; +import { styled } from '@mui/material/styles'; +import Typography from '@mui/material/Typography'; +import * as React from 'react'; import { Collapsible } from '../../../../components/Collapsible/Collapsible'; import { PasswordInput } from '../../../../components/Input/PasswordInput'; +import { useCreateAndSendDrepDelegationTransaction } from '../../api/useCreateAndSendDrepDelegationTransaction'; +import { useNavigateTo } from '../../common/useNavigateTo'; +import { useStrings } from '../../common/useStrings'; +import { useGovernance } from '../../module/GovernanceContextProvider'; const Container = styled(Box)(() => ({ paddingTop: '23px', @@ -43,20 +43,27 @@ const Actions = styled(Stack)(() => ({ export const DelagationForm = () => { const [passwaord, setPassword] = React.useState(''); + const [isIncorectPasswaord, setIsIncorectPassword] = React.useState(false); const navigateTo = useNavigateTo(); - const { governanceVote, walletId } = useGovernance(); + const { governanceVote, walletId, checkUserPassword } = useGovernance(); const strings = useStrings(); - const confirmDelegation = () => { - // TODO mock functionality - if (passwaord.includes('oo')) { - navigateTo.transactionFail(); + const confirmDelegation = async () => { + const response = await checkUserPassword(passwaord); + if (response?.name === 'WrongPassphraseError') { + setIsIncorectPassword(true); + // TODO - add this path once we have the submit api + // navigateTo.transactionFail(); } else { + alert('Submit functionality is mocked and not yet implemented'); navigateTo.transactionSubmited(); useCreateAndSendDrepDelegationTransaction({ walletId, governanceVote }); } }; - const idPasswordInvalid = passwaord.match(/\d+/g); + + React.useEffect(() => { + setIsIncorectPassword(false); + }, [passwaord]); return ( @@ -123,8 +130,8 @@ export const DelagationForm = () => { id="outlined-adornment-password" onChange={event => setPassword(event.target.value)} value={passwaord} - error={!!idPasswordInvalid} - helperText={idPasswordInvalid ? strings.wrongPassword : ' '} + error={!!isIncorectPasswaord} + helperText={isIncorectPasswaord ? strings.wrongPassword : ' '} /> @@ -133,7 +140,7 @@ export const DelagationForm = () => { {strings.back} {/* @ts-ignore */} - From 0cc49746e7232579a36fe7f989540976ce9f2b6c Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 17 Jul 2024 12:08:13 +0300 Subject: [PATCH 377/464] update snapshots --- .../ada/lib/storage/tests/__snapshots__/index.test.js.snap | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/yoroi-extension/app/api/ada/lib/storage/tests/__snapshots__/index.test.js.snap b/packages/yoroi-extension/app/api/ada/lib/storage/tests/__snapshots__/index.test.js.snap index 8fd9419664..d76ee8f8df 100644 --- a/packages/yoroi-extension/app/api/ada/lib/storage/tests/__snapshots__/index.test.js.snap +++ b/packages/yoroi-extension/app/api/ada/lib/storage/tests/__snapshots__/index.test.js.snap @@ -1238,6 +1238,7 @@ Object { Object { "Backend": Object { "BackendService": "https://api.yoroiwallet.com", + "BackendServiceZero": "https://yoroi-backend-zero-mainnet.emurgornd.com", "TokenInfoService": "https://cdn.yoroiwallet.com", }, "BaseConfig": Array [ @@ -1306,6 +1307,7 @@ Object { Object { "Backend": Object { "BackendService": "https://preprod-backend.yoroiwallet.com", + "BackendServiceZero": "https://yoroi-backend-zero-preprod.emurgornd.com", "TokenInfoService": "https://stage-cdn.yoroiwallet.com", }, "BaseConfig": Array [ @@ -1340,6 +1342,7 @@ Object { Object { "Backend": Object { "BackendService": "https://preview-backend.emurgornd.com", + "BackendServiceZero": "https://yoroi-backend-zero-previes.emurgornd.com", "TokenInfoService": "https://stage-cdn.yoroiwallet.com", }, "BaseConfig": Array [ @@ -1374,6 +1377,7 @@ Object { Object { "Backend": Object { "BackendService": "https://sanchonet-backend.yoroiwallet.com", + "BackendServiceZero": "https://yoroi-backend-zero-sanchonet.emurgornd.com", "TokenInfoService": "https://stage-cdn.yoroiwallet.com", }, "BaseConfig": Array [ From 554247da8a1132515c3ec6abc09ce7d7065afa51 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Thu, 18 Jul 2024 16:17:48 +0300 Subject: [PATCH 378/464] Version bump: 5.2.201 (nightly) --- packages/yoroi-extension/package-lock.json | 4 ++-- packages/yoroi-extension/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/yoroi-extension/package-lock.json b/packages/yoroi-extension/package-lock.json index 18d3385f52..9cacf3c9ff 100644 --- a/packages/yoroi-extension/package-lock.json +++ b/packages/yoroi-extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "yoroi", - "version": "5.2.200", + "version": "5.2.201", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "yoroi", - "version": "5.2.200", + "version": "5.2.201", "license": "MIT", "dependencies": { "@amplitude/analytics-browser": "^2.1.3", diff --git a/packages/yoroi-extension/package.json b/packages/yoroi-extension/package.json index 41903f2fc2..b5c4481fdf 100644 --- a/packages/yoroi-extension/package.json +++ b/packages/yoroi-extension/package.json @@ -1,6 +1,6 @@ { "name": "yoroi", - "version": "5.2.200", + "version": "5.2.201", "description": "Cardano ADA wallet", "scripts": { "dev-mv2": "rimraf dev/ && NODE_OPTIONS=--openssl-legacy-provider babel-node scripts-mv2/build --type=debug --env 'mainnet'", From fdf5ed78045d8227732903d5779733821d40dd2d Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Fri, 19 Jul 2024 11:05:36 +0300 Subject: [PATCH 379/464] fix table and nft default svg --- .../app/assets/images/default-nft.inline.svg | 52 +++++++++---------- .../app/components/swap/SelectPoolDialog.js | 15 +++--- .../app/components/wallet/assets/NFTsList.js | 11 +++- 3 files changed, 41 insertions(+), 37 deletions(-) diff --git a/packages/yoroi-extension/app/assets/images/default-nft.inline.svg b/packages/yoroi-extension/app/assets/images/default-nft.inline.svg index 33ffcb85da..c7a080c4ce 100644 --- a/packages/yoroi-extension/app/assets/images/default-nft.inline.svg +++ b/packages/yoroi-extension/app/assets/images/default-nft.inline.svg @@ -1,32 +1,32 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - + diff --git a/packages/yoroi-extension/app/components/swap/SelectPoolDialog.js b/packages/yoroi-extension/app/components/swap/SelectPoolDialog.js index ae365aa87f..520946fdad 100644 --- a/packages/yoroi-extension/app/components/swap/SelectPoolDialog.js +++ b/packages/yoroi-extension/app/components/swap/SelectPoolDialog.js @@ -9,7 +9,7 @@ import { SwapPoolIcon } from './SwapPoolComponents'; import BigNumber from 'bignumber.js'; const tableColumns = ['DEX name', 'Price', 'TVL', 'DEX fee', 'Liquidity provider fee']; -const templateColumns = 'minmax(auto, 208px) 120px 200px 90px 160px'; +const templateColumns = 'minmax(auto, 208px) 120px 200px 90px 158px'; const PRECISION = 10; type Props = {| @@ -31,7 +31,6 @@ export default function SelectPoolDialog({ onPoolSelected, onClose, }: Props): React$Node { - const handlePoolSelected = poolId => { onPoolSelected(poolId); onClose(); @@ -51,13 +50,11 @@ export default function SelectPoolDialog({ .toString(10); const formattedTvl = Quantities.format(tvl, ptDecimals, 0); const marketPrice = getMarketPrice(pool, sellTokenId); - const formattedMarketPrice = denomination >= 0 ? Quantities.format( - marketPrice ?? Quantities.zero, - denomination, - PRECISION, - ) : '-'; - const formattedPoolFee = Quantities - .format(batcherFee.quantity, ptDecimals, ptDecimals); + const formattedMarketPrice = + denomination >= 0 + ? Quantities.format(marketPrice ?? Quantities.zero, denomination, PRECISION) + : '-'; + const formattedPoolFee = Quantities.format(batcherFee.quantity, ptDecimals, ptDecimals); return ( - + {list.length === 0 ? intl.formatMessage(globalMessages.sidebarNfts) : intl.formatMessage(messages.nftsCount, { number: list.length })} @@ -280,7 +286,8 @@ function NftCardImage({ ipfsUrl, name }: {| ipfsUrl: string | null, name: string - Date: Fri, 19 Jul 2024 13:41:36 +0100 Subject: [PATCH 380/464] New translations en-us.json (Hungarian) --- .../app/i18n/locales/hu-HU.json | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/i18n/locales/hu-HU.json b/packages/yoroi-extension/app/i18n/locales/hu-HU.json index 2ccb0ce494..85e2bad524 100644 --- a/packages/yoroi-extension/app/i18n/locales/hu-HU.json +++ b/packages/yoroi-extension/app/i18n/locales/hu-HU.json @@ -168,6 +168,8 @@ "global.labels.stakepool": "Stake pool neve", "global.labels.stakingKeyHash": "Staking key hash", "global.labels.upgrade": "Frissités", + "global.labels.wrongPassword": "Wrong password", + "global.labels.incorectFormat": "Incorrect format", "global.language.chinese.simplified": "简体中文", "global.language.chinese.traditional": "繁體中文", "global.language.czech": "Czech", @@ -337,6 +339,7 @@ "sidebar.newUpdates": "New updates", "sidebar.nfts": "NFTs", "sidebar.settings": "Settings", + "sidebar.governance": "Governance", "sidebar.staking": "Staking", "sidebar.stakingDashboard": "Staking Dashboard", "sidebar.swap": "Swap", @@ -934,6 +937,11 @@ "wallet.transaction.received": "{currency} received", "wallet.transaction.sent": "{currency} sent", "wallet.transaction.state.failed": "failed", + "wallet.transaction.transactionFailed": "Transaction failed", + "wallet.transaction.transactionFailedInfo": " Your transaction has not been processed properly due to technical issues", + "wallet.transaction.tryAgain": "Try again", + "wallet.transaction.transactionSubmitted": "Transaction submitted", + "wallet.transaction.transactionSubmittedInfo": "Check this transaction in the list of wallet transactions", "wallet.transaction.state.pending": "pending", "wallet.transaction.state.submitted": "submitted", "wallet.transaction.success.button.label": "Go To Transactions", @@ -1026,5 +1034,29 @@ "yoroiTransfer.waiting.checkingAddresses.generatingTx": "Generating transfer transaction", "yoroiTransfer.waiting.progressInfo.checkingAddresses": "Checking addresses funds", "yoroiTransfer.waiting.progressInfo.restoringAddresses": "Fetching addresses", - "yoroiTransfer.waiting.title.label": "Wallet is being restored" + "yoroiTransfer.waiting.title.label": "Wallet is being restored", + "governance.delegateToDRep": "Delegate to a DRep", + "governance.delegateingToDRep": "Delegateing to a DRep", + "governance.designatingSomeoneElse": "You are designating someone else to cast your vote on your behalf for all proposals now and in the future.", + "governance.governanceStatus": "Governance status", + "governance.governanceStatusInfo": "Governance status", + "governance.abstain": "Abstain", + "governance.abstainInfo": "You are choosing not to cast a vote on all proposals now and in the future.", + "governance.noConfidence": "No Confidence", + "governance.noConfidenceInfo": "You are expressing a lack of trust for all proposals now and in the future.", + "governance.learnMore": "Learn more About Governance", + "governance.becomeADrep": "Want to became a Drep?", + "governance.drepId": "Drep ID:", + "governance.statusSelected": "You have selected {status} as your governance status. You can change it at any time by clicking in the card bellow", + "governance.registerGovernance": "Register in Governance", + "governance.chooseDrep": "Choose your Drep", + "governance.reviewSelection": "Review the selections carefully to assign yourself a Governance Status", + "governance.participateDialog.title": "Withdraw warning", + "governance.participateDialog.contentInfo": "To withdraw your rewards, you need to participate in the Cardano Governance. Your rewards will continue to accumulate, but you are only able to withdraw it once you join the Governance process.", + "governance.participateDialog.buttonText": "Participate on governance", + "governance.operations": "Operations", + "governance.selectAbstein": "Select abstain", + "governance.selectNoConfidenc": "Select no confidence", + "governance.identifyDrep": "Identify your preferred DRep and enter their ID below to delegate your vote", + "governance.designatedSomeone": "You are designating someone else to cast your vote on your behalf for all proposals now and in the future." } From 5602aa82fe90c993b1845ebc7352e89c4ee7cb3f Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Fri, 19 Jul 2024 13:41:37 +0100 Subject: [PATCH 381/464] New translations en-us.json (Vietnamese) --- .../app/i18n/locales/vi-VN.json | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/i18n/locales/vi-VN.json b/packages/yoroi-extension/app/i18n/locales/vi-VN.json index c7e0fdb300..40eda77863 100644 --- a/packages/yoroi-extension/app/i18n/locales/vi-VN.json +++ b/packages/yoroi-extension/app/i18n/locales/vi-VN.json @@ -168,6 +168,8 @@ "global.labels.stakepool": "Tên nhóm cổ phần", "global.labels.stakingKeyHash": "Hash khóa đặt cược", "global.labels.upgrade": "Nâng cấp", + "global.labels.wrongPassword": "Wrong password", + "global.labels.incorectFormat": "Incorrect format", "global.language.chinese.simplified": "Tiếng Trung giản thể", "global.language.chinese.traditional": "Truyền thống Trung Quốc", "global.language.czech": "Cộng Hòa Séc", @@ -337,6 +339,7 @@ "sidebar.newUpdates": "Cập nhật mới", "sidebar.nfts": "NFTs", "sidebar.settings": "Thiết lập", + "sidebar.governance": "Governance", "sidebar.staking": "Ủy thác", "sidebar.stakingDashboard": "Màn hình ủy thác", "sidebar.swap": "Tráo đổi", @@ -934,6 +937,11 @@ "wallet.transaction.received": "{currency} nhận được", "wallet.transaction.sent": "{currency} đã gửi", "wallet.transaction.state.failed": "lỗi", + "wallet.transaction.transactionFailed": "Transaction failed", + "wallet.transaction.transactionFailedInfo": " Your transaction has not been processed properly due to technical issues", + "wallet.transaction.tryAgain": "Try again", + "wallet.transaction.transactionSubmitted": "Transaction submitted", + "wallet.transaction.transactionSubmittedInfo": "Check this transaction in the list of wallet transactions", "wallet.transaction.state.pending": "đang giải quyết", "wallet.transaction.state.submitted": "đã gửi", "wallet.transaction.success.button.label": "Go To Transactions", @@ -1026,5 +1034,29 @@ "yoroiTransfer.waiting.checkingAddresses.generatingTx": "Tạo giao dịch chuyển khoản", "yoroiTransfer.waiting.progressInfo.checkingAddresses": "Kiểm tra địa chỉ quỹ", "yoroiTransfer.waiting.progressInfo.restoringAddresses": "Đang tìm nạp địa chỉ", - "yoroiTransfer.waiting.title.label": "Ví đang được khôi phục" + "yoroiTransfer.waiting.title.label": "Ví đang được khôi phục", + "governance.delegateToDRep": "Delegate to a DRep", + "governance.delegateingToDRep": "Delegateing to a DRep", + "governance.designatingSomeoneElse": "You are designating someone else to cast your vote on your behalf for all proposals now and in the future.", + "governance.governanceStatus": "Governance status", + "governance.governanceStatusInfo": "Governance status", + "governance.abstain": "Abstain", + "governance.abstainInfo": "You are choosing not to cast a vote on all proposals now and in the future.", + "governance.noConfidence": "No Confidence", + "governance.noConfidenceInfo": "You are expressing a lack of trust for all proposals now and in the future.", + "governance.learnMore": "Learn more About Governance", + "governance.becomeADrep": "Want to became a Drep?", + "governance.drepId": "Drep ID:", + "governance.statusSelected": "You have selected {status} as your governance status. You can change it at any time by clicking in the card bellow", + "governance.registerGovernance": "Register in Governance", + "governance.chooseDrep": "Choose your Drep", + "governance.reviewSelection": "Review the selections carefully to assign yourself a Governance Status", + "governance.participateDialog.title": "Withdraw warning", + "governance.participateDialog.contentInfo": "To withdraw your rewards, you need to participate in the Cardano Governance. Your rewards will continue to accumulate, but you are only able to withdraw it once you join the Governance process.", + "governance.participateDialog.buttonText": "Participate on governance", + "governance.operations": "Operations", + "governance.selectAbstein": "Select abstain", + "governance.selectNoConfidenc": "Select no confidence", + "governance.identifyDrep": "Identify your preferred DRep and enter their ID below to delegate your vote", + "governance.designatedSomeone": "You are designating someone else to cast your vote on your behalf for all proposals now and in the future." } From 3289e6847414090c568dcf63f83786f2f653d2e4 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Fri, 19 Jul 2024 19:26:44 +0300 Subject: [PATCH 382/464] chromedriver version fix --- packages/e2e-tests/package-lock.json | 2 +- packages/e2e-tests/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/e2e-tests/package-lock.json b/packages/e2e-tests/package-lock.json index e9cca01537..d4e9c1dafc 100644 --- a/packages/e2e-tests/package-lock.json +++ b/packages/e2e-tests/package-lock.json @@ -41,7 +41,7 @@ "@emurgo/cardano-serialization-lib-nodejs": "^12.0.0-alpha.26", "bignumber.js": "^9.1.2", "chai": "^4.3.10", - "chromedriver": "^126.0.4", + "chromedriver": "126.0.4", "cross-env": "^7.0.3", "json-server": "^0.17.4", "mocha": "^10.2.0", diff --git a/packages/e2e-tests/package.json b/packages/e2e-tests/package.json index 493d402f7e..6fd5a98821 100644 --- a/packages/e2e-tests/package.json +++ b/packages/e2e-tests/package.json @@ -47,7 +47,7 @@ "@emurgo/cardano-serialization-lib-nodejs": "^12.0.0-alpha.26", "bignumber.js": "^9.1.2", "chai": "^4.3.10", - "chromedriver": "^126.0.4", + "chromedriver": "126.0.4", "cross-env": "^7.0.3", "json-server": "^0.17.4", "mocha": "^10.2.0", From a3841b87ce89ccada782464e5f087c5f586f595b Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Sat, 20 Jul 2024 18:06:14 +0300 Subject: [PATCH 383/464] refactored delegating to not set pools as a separate step --- .../ada/delegation-transaction-actions.js | 1 - .../wallet/staking/CardanoStakingPage.js | 26 ++++++++++--------- .../wallet/staking/StakingPageContent.js | 9 +++---- .../ada/AdaDelegationTransactionStore.js | 16 ------------ .../app/stores/toplevel/DelegationStore.js | 19 +++----------- 5 files changed, 21 insertions(+), 50 deletions(-) diff --git a/packages/yoroi-extension/app/actions/ada/delegation-transaction-actions.js b/packages/yoroi-extension/app/actions/ada/delegation-transaction-actions.js index a92aee6e28..fa5ffa548e 100644 --- a/packages/yoroi-extension/app/actions/ada/delegation-transaction-actions.js +++ b/packages/yoroi-extension/app/actions/ada/delegation-transaction-actions.js @@ -3,7 +3,6 @@ import { AsyncAction, Action } from '../lib/Action'; import { PublicDeriver } from '../../api/ada/lib/storage/models/PublicDeriver/index'; export default class DelegationTransactionActions { - setPools: AsyncAction> = new AsyncAction(); createTransaction: AsyncAction<{| publicDeriver: PublicDeriver<>, poolRequest: string | void, diff --git a/packages/yoroi-extension/app/containers/wallet/staking/CardanoStakingPage.js b/packages/yoroi-extension/app/containers/wallet/staking/CardanoStakingPage.js index e4dcbc3292..e340cd5cdd 100644 --- a/packages/yoroi-extension/app/containers/wallet/staking/CardanoStakingPage.js +++ b/packages/yoroi-extension/app/containers/wallet/staking/CardanoStakingPage.js @@ -42,7 +42,10 @@ type Props = {| type InjectedLayoutProps = {| +renderLayoutComponent: LayoutComponentMap => Node, |}; -type State = {| firstPool: PoolData | void |}; +type State = {| + firstPool: PoolData | void, + selectedPoolId: ?string, +|}; type AllProps = {| ...Props, ...InjectedLayoutProps |}; @observer @@ -52,6 +55,7 @@ class CardanoStakingPage extends Component { }; state: State = { firstPool: undefined, + selectedPoolId: undefined, }; @observable notificationElementId: string = ''; @@ -66,7 +70,6 @@ class CardanoStakingPage extends Component { async componentWillUnmount() { this.props.actions.ada.delegationTransaction.reset.trigger({ justTransaction: false }); - await this.props.actions.ada.delegationTransaction.setPools.trigger([]); this.props.stores.delegation.poolInfoQuery.reset(); } @@ -105,8 +108,7 @@ class CardanoStakingPage extends Component { totalAda={totalAda} poolList={poolList} stakepoolSelectedAction={async poolId => { - await this.props.stores.delegation.delegateToSpecificPool(poolId); - await this.props.stores.delegation.createDelegationTransaction(); + await this.props.stores.delegation.createDelegationTransaction(poolId); }} />
    @@ -118,8 +120,7 @@ class CardanoStakingPage extends Component { { - await this.props.stores.delegation.delegateToSpecificPool(poolId); - await this.props.stores.delegation.createDelegationTransaction(); + await this.props.stores.delegation.createDelegationTransaction(poolId); }} poolInfo={this.state.firstPool} isWalletWithNoFunds={isWalletWithNoFunds} @@ -146,8 +147,7 @@ class CardanoStakingPage extends Component { this.setState({ firstPool: pool }); }} stakepoolSelectedAction={async poolId => { - await this.props.stores.delegation.delegateToSpecificPool(poolId); - await this.props.stores.delegation.createDelegationTransaction(); + await this.props.stores.delegation.createDelegationTransaction(poolId); }} /> @@ -168,11 +168,13 @@ class CardanoStakingPage extends Component { poolQueryError={this.props.stores.delegation.poolInfoQuery.error} isProcessing={this.props.stores.delegation.poolInfoQuery.isExecuting} updatePool={poolId => { - /* note: it's okay for triggering a pool update to be async, so we don't await */ - // eslint-disable-next-line no-unused-vars - const _ = this.props.stores.delegation.delegateToSpecificPool(poolId); + this.setState({ selectedPoolId: poolId }); + }} + onNext={async () => { + if (this.state.selectedPoolId != null) { + return this.props.stores.delegation.createDelegationTransaction(this.state.selectedPoolId); + } }} - onNext={async () => this.props.stores.delegation.createDelegationTransaction()} /> {this._displayPoolInfo()}
    diff --git a/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js b/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js index 3617072955..71c9c76080 100644 --- a/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js +++ b/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js @@ -60,8 +60,7 @@ class StakingPageContent extends Component { if (this.props.stores.delegation.getPoolTransitionConfig(publicDeriver).shouldUpdatePool) { const poolTransitionInfo = this.props.stores.delegation.getPoolTransitionInfo(publicDeriver); if (poolTransitionInfo?.suggestedPool) { - this.props.stores.delegation.delegateToSpecificPool(poolTransitionInfo.suggestedPool.hash); - noop(this.props.stores.delegation.createDelegationTransaction()); + noop(this.props.stores.delegation.createDelegationTransaction(poolTransitionInfo.suggestedPool.hash)); } } } @@ -117,10 +116,8 @@ class StakingPageContent extends Component { poolTransition={delegationStore.getPoolTransitionInfo(publicDeriver)} delegatedPool={delegatedPool} undelegate={async () => this.createWithdrawalTx(true)} // shouldDeregister=true - delegateToSpecificPool={async (poolId): any => { - this.props.stores.delegation.delegateToSpecificPool(poolId); - this.props.stores.delegation.createDelegationTransaction(); - }} + delegateToSpecificPool={async (poolId): any => + this.props.stores.delegation.createDelegationTransaction(poolId)} /> ); }; diff --git a/packages/yoroi-extension/app/stores/ada/AdaDelegationTransactionStore.js b/packages/yoroi-extension/app/stores/ada/AdaDelegationTransactionStore.js index 13998fff8c..c869d273d6 100644 --- a/packages/yoroi-extension/app/stores/ada/AdaDelegationTransactionStore.js +++ b/packages/yoroi-extension/app/stores/ada/AdaDelegationTransactionStore.js @@ -25,8 +25,6 @@ export type CreateWithdrawalTxRequest = LocalizedRequest>; export default class AdaDelegationTransactionStore extends Store { - @observable selectedPools: Array; - @observable createWithdrawalTx: LocalizedRequest< DeferredCall > = new LocalizedRequest>(request => request()); @@ -55,18 +53,6 @@ export default class AdaDelegationTransactionStore extends Store) => Promise = async pools => { - this.selectedPools = pools; - if (pools.length > 0) { - try { - await this.stores.delegation.poolInfoQuery.execute(pools); - } catch (_e) { - /* error handled by request */ - } - } - }; - @action.bound markStale: boolean => void = status => { this.isStale = status; @@ -79,7 +65,6 @@ export default class AdaDelegationTransactionStore extends Store { } }; - delegateToSpecificPool: (?string) => Promise = async poolId => { - this.stores.delegation.poolInfoQuery.reset(); - if (poolId == null) { - await this.actions.ada.delegationTransaction.setPools.trigger([]); - return; - } - await this.actions.ada.delegationTransaction.setPools.trigger([poolId]); - }; - - createDelegationTransaction: void => Promise = async () => { + createDelegationTransaction: (string) => Promise = async poolId => { const selectedWallet = this.stores.wallets.selected; if (selectedWallet == null) { return; } - const { delegationTransaction } = this.stores.substores.ada; - if (delegationTransaction.selectedPools.length === 0) { - return; - } + this.stores.delegation.poolInfoQuery.reset(); + await this.stores.delegation.poolInfoQuery.execute([poolId]); await this.actions.ada.delegationTransaction.createTransaction.trigger({ - poolRequest: delegationTransaction.selectedPools[0], + poolRequest: poolId, publicDeriver: selectedWallet, }); }; From ca9bedd52a6950479f1d1dc265d5bbe284e80e8f Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Sat, 20 Jul 2024 18:53:25 +0300 Subject: [PATCH 384/464] flow fixes --- .../dashboard-revamp/DelegatedStakePoolCard.js | 2 +- .../containers/wallet/staking/CardanoStakingPage.js | 12 ++++++------ .../containers/wallet/staking/StakingPageContent.js | 7 +++++-- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/packages/yoroi-extension/app/components/wallet/staking/dashboard-revamp/DelegatedStakePoolCard.js b/packages/yoroi-extension/app/components/wallet/staking/dashboard-revamp/DelegatedStakePoolCard.js index 89a09b1b57..1db685a74f 100644 --- a/packages/yoroi-extension/app/components/wallet/staking/dashboard-revamp/DelegatedStakePoolCard.js +++ b/packages/yoroi-extension/app/components/wallet/staking/dashboard-revamp/DelegatedStakePoolCard.js @@ -37,7 +37,7 @@ function DelegatedStakePoolCard({ return ( delegateToSpecificPool(poolTransition.suggestedPool?.hash ?? '')} + onClick={() => delegateToSpecificPool(poolTransition.suggestedPool?.hash)} > {intl.formatMessage(globalMessages.updatePool)} diff --git a/packages/yoroi-extension/app/containers/wallet/staking/CardanoStakingPage.js b/packages/yoroi-extension/app/containers/wallet/staking/CardanoStakingPage.js index e340cd5cdd..3217594d9c 100644 --- a/packages/yoroi-extension/app/containers/wallet/staking/CardanoStakingPage.js +++ b/packages/yoroi-extension/app/containers/wallet/staking/CardanoStakingPage.js @@ -270,12 +270,11 @@ class CardanoStakingPage extends Component { }; _getPoolInfo: (PublicDeriver<>) => void | PoolMeta = publicDeriver => { - const { delegationTransaction } = this.props.stores.substores.ada; - return delegationTransaction.selectedPools.length === 0 - ? undefined + const selectedPoolId = this.state.selectedPoolId; + return selectedPoolId == null ? undefined : this.props.stores.delegation.getLocalPoolInfo( publicDeriver.getParent().getNetworkInfo(), - delegationTransaction.selectedPools[0] + selectedPoolId ); }; @@ -378,7 +377,8 @@ class CardanoStakingPage extends Component { if (delegationTransaction.createDelegationTx.error != null) { return this._errorDialog(delegationTransaction.createDelegationTx.error); } - if (delegationTx != null && delegationTransaction.selectedPools.length >= 1 && showSignDialog) { + const selectedPoolId = this.state.selectedPoolId; + if (delegationTx != null && selectedPoolId != null && showSignDialog) { // may happen for a split second before backend query starts if (selectedPoolInfo == null) return null; return ( @@ -387,7 +387,7 @@ class CardanoStakingPage extends Component { poolName={ selectedPoolInfo.info?.name ?? intl.formatMessage(globalMessages.unknownPoolLabel) } - poolHash={delegationTransaction.selectedPools[0]} + poolHash={selectedPoolId} transactionFee={delegationTx.signTxRequest.fee()} amountToDelegate={delegationTx.totalAmountToDelegate} approximateReward={approximateReward( diff --git a/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js b/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js index 71c9c76080..7d535ea054 100644 --- a/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js +++ b/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js @@ -116,8 +116,11 @@ class StakingPageContent extends Component { poolTransition={delegationStore.getPoolTransitionInfo(publicDeriver)} delegatedPool={delegatedPool} undelegate={async () => this.createWithdrawalTx(true)} // shouldDeregister=true - delegateToSpecificPool={async (poolId): any => - this.props.stores.delegation.createDelegationTransaction(poolId)} + delegateToSpecificPool={async (poolId): any => { + if (poolId != null) { + return this.props.stores.delegation.createDelegationTransaction(poolId); + } + }} /> ); }; From 2ae18fbbcbbac1d40cc11f3cba1836f2f52e10b4 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Sat, 20 Jul 2024 19:40:06 +0300 Subject: [PATCH 385/464] removed chromedriver version update on install-all --- install-all.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install-all.sh b/install-all.sh index 491927c392..70ef198db7 100755 --- a/install-all.sh +++ b/install-all.sh @@ -1,3 +1,3 @@ npm i --legacy-peer-deps \ && npm i --legacy-peer-deps --prefix packages/yoroi-extension \ -&& npm i --prefix packages/e2e-tests chromedriver --chromedriver_version=LATEST +&& npm i --prefix packages/e2e-tests From 2f877b420e6612210cccf91eac4c0e54d8496868 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Sun, 21 Jul 2024 10:13:29 +0300 Subject: [PATCH 386/464] delegation state updating fix --- .../app/containers/wallet/staking/CardanoStakingPage.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/yoroi-extension/app/containers/wallet/staking/CardanoStakingPage.js b/packages/yoroi-extension/app/containers/wallet/staking/CardanoStakingPage.js index 3217594d9c..4231ed9c95 100644 --- a/packages/yoroi-extension/app/containers/wallet/staking/CardanoStakingPage.js +++ b/packages/yoroi-extension/app/containers/wallet/staking/CardanoStakingPage.js @@ -108,6 +108,7 @@ class CardanoStakingPage extends Component { totalAda={totalAda} poolList={poolList} stakepoolSelectedAction={async poolId => { + this.setState({ selectedPoolId: poolId }); await this.props.stores.delegation.createDelegationTransaction(poolId); }} /> @@ -120,6 +121,7 @@ class CardanoStakingPage extends Component { { + this.setState({ selectedPoolId: poolId }); await this.props.stores.delegation.createDelegationTransaction(poolId); }} poolInfo={this.state.firstPool} @@ -147,6 +149,7 @@ class CardanoStakingPage extends Component { this.setState({ firstPool: pool }); }} stakepoolSelectedAction={async poolId => { + this.setState({ selectedPoolId: poolId }); await this.props.stores.delegation.createDelegationTransaction(poolId); }} /> From 84c91416880431b8b47f220ee020f74c23eeb733 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Sun, 21 Jul 2024 10:57:37 +0300 Subject: [PATCH 387/464] comment --- .../app/stores/ada/AdaDelegationTransactionStore.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/yoroi-extension/app/stores/ada/AdaDelegationTransactionStore.js b/packages/yoroi-extension/app/stores/ada/AdaDelegationTransactionStore.js index c869d273d6..5f9a6ef2a0 100644 --- a/packages/yoroi-extension/app/stores/ada/AdaDelegationTransactionStore.js +++ b/packages/yoroi-extension/app/stores/ada/AdaDelegationTransactionStore.js @@ -30,9 +30,8 @@ export default class AdaDelegationTransactionStore extends Store = new LocalizedRequest>(request => request()); @observable - createDelegationTx: LocalizedRequest = new LocalizedRequest( - this.api.ada.createDelegationTx - ); + createDelegationTx: LocalizedRequest = + new LocalizedRequest(this.api.ada.createDelegationTx); @observable shouldDeregister: boolean = false; @@ -75,6 +74,7 @@ export default class AdaDelegationTransactionStore extends Store This function is only called from one place via indirection. Can be simplified @action _createTransaction: ({| publicDeriver: PublicDeriver<>, From f773ff5095868b0e395604c7a12fb81f5c802707 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Tue, 23 Jul 2024 15:08:01 +0300 Subject: [PATCH 388/464] removed checkGovernanceStatus fnc from render --- .../app/containers/wallet/staking/StakingPageContent.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js b/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js index 3617072955..223f4c0d70 100644 --- a/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js +++ b/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js @@ -194,7 +194,6 @@ class StakingPageContent extends Component { if (delegationRequests == null) { throw new Error(`${nameof(StakingPageContent)} opened for non-reward wallet`); } - stores.delegation.checkGovernanceStatus(publicDeriver); const balance = stores.transactions.getBalance(publicDeriver); const isWalletWithNoFunds = balance != null && balance.getDefaultEntry().amount.isZero(); From 7511bcf068874d7b3ec4dfb6217f50b4063ccf28 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Thu, 25 Jul 2024 20:04:30 +0300 Subject: [PATCH 389/464] fixing price calculation for listed orders --- packages/yoroi-extension/app/containers/swap/orders/hooks.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/containers/swap/orders/hooks.js b/packages/yoroi-extension/app/containers/swap/orders/hooks.js index b2312a70bf..ffa4e84da9 100644 --- a/packages/yoroi-extension/app/containers/swap/orders/hooks.js +++ b/packages/yoroi-extension/app/containers/swap/orders/hooks.js @@ -22,11 +22,12 @@ function mapOrderAssets( from: any, to: any, |} { - const price = Quantities.quotient(from.quantity, from.quantity); + const price = Quantities.quotient(from.quantity, to.quantity); const fromDecimals = from.token?.decimals ?? 0; const toDecimals = to.token?.decimals ?? 0; const priceDenomination = fromDecimals - toDecimals; const formattedPrice = Quantities.format(price, priceDenomination, PRICE_PRECISION); + console.log(price, formattedPrice, fromDecimals, toDecimals, priceDenomination); const formattedToQuantity = Quantities.format( to.quantity, toDecimals, From 883490d5a3979fc80dbfc98822de57019a88afa9 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Thu, 25 Jul 2024 20:05:32 +0300 Subject: [PATCH 390/464] log removed --- packages/yoroi-extension/app/containers/swap/orders/hooks.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/yoroi-extension/app/containers/swap/orders/hooks.js b/packages/yoroi-extension/app/containers/swap/orders/hooks.js index ffa4e84da9..40946ae25a 100644 --- a/packages/yoroi-extension/app/containers/swap/orders/hooks.js +++ b/packages/yoroi-extension/app/containers/swap/orders/hooks.js @@ -27,7 +27,6 @@ function mapOrderAssets( const toDecimals = to.token?.decimals ?? 0; const priceDenomination = fromDecimals - toDecimals; const formattedPrice = Quantities.format(price, priceDenomination, PRICE_PRECISION); - console.log(price, formattedPrice, fromDecimals, toDecimals, priceDenomination); const formattedToQuantity = Quantities.format( to.quantity, toDecimals, From 71f24869c5ac4fede55ff10d7de2223367c40766 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Fri, 26 Jul 2024 14:19:51 +0300 Subject: [PATCH 391/464] simplified indirect call producing a delegation transaction --- .../actions/ada/delegation-transaction-actions.js | 4 ---- .../stores/ada/AdaDelegationTransactionStore.js | 14 ++++++-------- .../app/stores/toplevel/DelegationStore.js | 2 +- 3 files changed, 7 insertions(+), 13 deletions(-) diff --git a/packages/yoroi-extension/app/actions/ada/delegation-transaction-actions.js b/packages/yoroi-extension/app/actions/ada/delegation-transaction-actions.js index fa5ffa548e..2bbca22326 100644 --- a/packages/yoroi-extension/app/actions/ada/delegation-transaction-actions.js +++ b/packages/yoroi-extension/app/actions/ada/delegation-transaction-actions.js @@ -3,10 +3,6 @@ import { AsyncAction, Action } from '../lib/Action'; import { PublicDeriver } from '../../api/ada/lib/storage/models/PublicDeriver/index'; export default class DelegationTransactionActions { - createTransaction: AsyncAction<{| - publicDeriver: PublicDeriver<>, - poolRequest: string | void, - |}> = new AsyncAction(); createWithdrawalTxForWallet: AsyncAction<{| publicDeriver: PublicDeriver<>, |}> = new AsyncAction(); diff --git a/packages/yoroi-extension/app/stores/ada/AdaDelegationTransactionStore.js b/packages/yoroi-extension/app/stores/ada/AdaDelegationTransactionStore.js index 5f9a6ef2a0..7a0c2b7e93 100644 --- a/packages/yoroi-extension/app/stores/ada/AdaDelegationTransactionStore.js +++ b/packages/yoroi-extension/app/stores/ada/AdaDelegationTransactionStore.js @@ -61,7 +61,6 @@ export default class AdaDelegationTransactionStore extends Store This function is only called from one place via indirection. Can be simplified @action - _createTransaction: ({| + createTransaction: ({| publicDeriver: PublicDeriver<>, poolRequest: string | void, |}) => Promise = async request => { const publicDeriver = request.publicDeriver; const withUtxos = asGetAllUtxos(publicDeriver); if (withUtxos == null) { - throw new Error(`${nameof(this._createTransaction)} missing utxo functionality`); + throw new Error(`${nameof(this.createTransaction)} missing utxo functionality`); } const withHasUtxoChains = asHasUtxoChains(withUtxos); if (withHasUtxoChains == null) { - throw new Error(`${nameof(this._createTransaction)} missing chains functionality`); + throw new Error(`${nameof(this.createTransaction)} missing chains functionality`); } const withStakingKey = asGetAllAccounting(withHasUtxoChains); if (withStakingKey == null) { - throw new Error(`${nameof(this._createTransaction)} missing staking key functionality`); + throw new Error(`${nameof(this.createTransaction)} missing staking key functionality`); } const withPublicKey = asGetPublicKey(withStakingKey); if (withPublicKey == null) { - throw new Error(`${nameof(this._createTransaction)} missing public key functionality`); + throw new Error(`${nameof(this.createTransaction)} missing public key functionality`); } const basePubDeriver = withPublicKey; @@ -116,7 +114,7 @@ export default class AdaDelegationTransactionStore extends Store { } this.stores.delegation.poolInfoQuery.reset(); await this.stores.delegation.poolInfoQuery.execute([poolId]); - await this.actions.ada.delegationTransaction.createTransaction.trigger({ + await this.stores.substores.ada.delegationTransaction.createTransaction({ poolRequest: poolId, publicDeriver: selectedWallet, }); From 5cdc3172d4fb711abe6a825ce95db33802034c19 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Fri, 26 Jul 2024 20:54:56 +0300 Subject: [PATCH 392/464] function createDrepDelegationTransaction is added --- packages/yoroi-extension/app/api/ada/index.js | 14 +++--- .../ada/lib/storage/bridge/delegationUtils.js | 50 +++++++++++++------ .../ada/AdaDelegationTransactionStore.js | 4 +- .../app/stores/toplevel/DelegationStore.js | 13 +++-- 4 files changed, 55 insertions(+), 26 deletions(-) diff --git a/packages/yoroi-extension/app/api/ada/index.js b/packages/yoroi-extension/app/api/ada/index.js index df1d832b06..39bf2614df 100644 --- a/packages/yoroi-extension/app/api/ada/index.js +++ b/packages/yoroi-extension/app/api/ada/index.js @@ -352,7 +352,8 @@ export type CreateDelegationTxRequest = {| ), absSlotNumber: BigNumber, registrationStatus: boolean, - poolRequest: void | string, + poolRequest?: string, + drepCredential?: string, valueInAccount: MultiToken, |}; @@ -1349,11 +1350,12 @@ export default class AdaApi { }, }).to_raw_key(); - const stakeDelegationCert = createCertificate( - stakingKey, + const delegationCerts = createCertificate( + stakingKey.hash().to_hex(), request.registrationStatus, - request.poolRequest - ); + request.poolRequest, + request.drepCredential, + ) const allUtxo = await publicDeriver.getAllUtxos(); const addressedUtxo = asAddressedUtxo(allUtxo); @@ -1370,7 +1372,7 @@ export default class AdaApi { addressedUtxo, request.absSlotNumber, protocolParams, - stakeDelegationCert, + delegationCerts, [], false, ); diff --git a/packages/yoroi-extension/app/api/ada/lib/storage/bridge/delegationUtils.js b/packages/yoroi-extension/app/api/ada/lib/storage/bridge/delegationUtils.js index 7ae1645505..0b9a537437 100644 --- a/packages/yoroi-extension/app/api/ada/lib/storage/bridge/delegationUtils.js +++ b/packages/yoroi-extension/app/api/ada/lib/storage/bridge/delegationUtils.js @@ -7,6 +7,7 @@ import { PublicDeriver, } from '../models/PublicDeriver/index'; import { normalizeToAddress, unwrapStakingKey, } from './utils'; import type { IGetAllUtxosResponse, IGetStakingKey, } from '../models/PublicDeriver/interfaces'; import { MultiToken, } from '../../../../common/lib/MultiToken'; +import { maybe, fail } from '../../../../../coreUtils'; export type GetDelegatedBalanceRequest = {| publicDeriver: PublicDeriver<> & IGetStakingKey, @@ -134,24 +135,40 @@ export async function getUtxoDelegatedBalance( return utxoSum; } +export const DREP_ALWAYS_ABSTAIN = 'ALWAYS_ABSTAIN'; +export const DREP_ALWAYS_NO_CONFIDENCE = 'ALWAYS_NO_CONFIDENCE'; + +// +function parseDrep(drepCredential: string): RustModule.WalletV4.DRep { + const DRep = RustModule.WalletV4.DRep; + if (drepCredential === DREP_ALWAYS_ABSTAIN) return DRep.new_always_abstain(); + if (drepCredential === DREP_ALWAYS_NO_CONFIDENCE) return DRep.new_always_no_confidence(); + const credential = RustModule.WalletV4.Credential.from_hex(drepCredential); + return maybe(credential.to_keyhash(), k => DRep.new_key_hash(k)) + ?? maybe(credential.to_scripthash(), s => DRep.new_script_hash(s)) + ?? fail('weird credential cannot be converted into a drep: ' + credential.to_hex()) +} + +// export function createCertificate( - stakingKey: RustModule.WalletV4.PublicKey, + stakingKeyHashHex: string, isRegistered: boolean, poolRequest: void | string, + drepCredential: void | string, ): Array { const credential = RustModule.WalletV4.Credential.from_keyhash( - stakingKey.hash() + RustModule.WalletV4.Ed25519KeyHash.from_hex(stakingKeyHashHex) ); - - if (poolRequest == null) { + if (poolRequest == null && drepCredential == null) { if (isRegistered) { - return [RustModule.WalletV4.Certificate.new_stake_deregistration( - RustModule.WalletV4.StakeDeregistration.new(credential) - )]; + return [ + RustModule.WalletV4.Certificate.new_stake_deregistration( + RustModule.WalletV4.StakeDeregistration.new(credential) + ) + ]; } return []; // no need to undelegate if no staking key registered } - const result = []; if (!isRegistered) { // if unregistered, need to register first @@ -159,12 +176,17 @@ export function createCertificate( RustModule.WalletV4.StakeRegistration.new(credential) )); } - result.push(RustModule.WalletV4.Certificate.new_stake_delegation( - RustModule.WalletV4.StakeDelegation.new( - credential, - RustModule.WalletV4.Ed25519KeyHash.from_bytes(Buffer.from(poolRequest, 'hex')) - ) - )); + if (poolRequest != null) { + const poolKeyHash = RustModule.WalletV4.Ed25519KeyHash.from_hex(poolRequest); + result.push(RustModule.WalletV4.Certificate.new_stake_delegation( + RustModule.WalletV4.StakeDelegation.new(credential, poolKeyHash), + )); + } + if (drepCredential != null) { + result.push(RustModule.WalletV4.Certificate.new_vote_delegation( + RustModule.WalletV4.VoteDelegation.new(credential, parseDrep(drepCredential)), + )); + } return result; } diff --git a/packages/yoroi-extension/app/stores/ada/AdaDelegationTransactionStore.js b/packages/yoroi-extension/app/stores/ada/AdaDelegationTransactionStore.js index 7a0c2b7e93..4818372dbb 100644 --- a/packages/yoroi-extension/app/stores/ada/AdaDelegationTransactionStore.js +++ b/packages/yoroi-extension/app/stores/ada/AdaDelegationTransactionStore.js @@ -76,7 +76,8 @@ export default class AdaDelegationTransactionStore extends Store, - poolRequest: string | void, + poolRequest?: string, + drepCredential?: string, |}) => Promise = async request => { const publicDeriver = request.publicDeriver; const withUtxos = asGetAllUtxos(publicDeriver); @@ -109,6 +110,7 @@ export default class AdaDelegationTransactionStore extends Store { }; createDelegationTransaction: (string) => Promise = async poolId => { - const selectedWallet = this.stores.wallets.selected; - if (selectedWallet == null) { - return; - } this.stores.delegation.poolInfoQuery.reset(); await this.stores.delegation.poolInfoQuery.execute([poolId]); await this.stores.substores.ada.delegationTransaction.createTransaction({ poolRequest: poolId, - publicDeriver: selectedWallet, + publicDeriver: this.stores.wallets.selectedOrFail, + }); + }; + + createDrepDelegationTransaction: (string) => Promise = async drepCredential => { + await this.stores.substores.ada.delegationTransaction.createTransaction({ + drepCredential, + publicDeriver: this.stores.wallets.selectedOrFail, }); }; From 2f78b9019ae979602870e507bb92fefb66b71386 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Fri, 26 Jul 2024 21:21:33 +0300 Subject: [PATCH 393/464] fix to only handle drep as key hash for now --- .../app/api/ada/lib/storage/bridge/delegationUtils.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/api/ada/lib/storage/bridge/delegationUtils.js b/packages/yoroi-extension/app/api/ada/lib/storage/bridge/delegationUtils.js index 0b9a537437..a54ceb0119 100644 --- a/packages/yoroi-extension/app/api/ada/lib/storage/bridge/delegationUtils.js +++ b/packages/yoroi-extension/app/api/ada/lib/storage/bridge/delegationUtils.js @@ -8,6 +8,7 @@ import { normalizeToAddress, unwrapStakingKey, } from './utils'; import type { IGetAllUtxosResponse, IGetStakingKey, } from '../models/PublicDeriver/interfaces'; import { MultiToken, } from '../../../../common/lib/MultiToken'; import { maybe, fail } from '../../../../../coreUtils'; +import { isHex } from '@emurgo/yoroi-lib/dist/internals/utils/index'; export type GetDelegatedBalanceRequest = {| publicDeriver: PublicDeriver<> & IGetStakingKey, @@ -138,12 +139,20 @@ export async function getUtxoDelegatedBalance( export const DREP_ALWAYS_ABSTAIN = 'ALWAYS_ABSTAIN'; export const DREP_ALWAYS_NO_CONFIDENCE = 'ALWAYS_NO_CONFIDENCE'; +// +function parseKey(key: string): RustModule.WalletV4.Ed25519KeyHash { + return isHex(key) + ? RustModule.WalletV4.Ed25519KeyHash.from_hex(key) + : RustModule.WalletV4.Ed25519KeyHash.from_bech32(key); +} + // function parseDrep(drepCredential: string): RustModule.WalletV4.DRep { const DRep = RustModule.WalletV4.DRep; if (drepCredential === DREP_ALWAYS_ABSTAIN) return DRep.new_always_abstain(); if (drepCredential === DREP_ALWAYS_NO_CONFIDENCE) return DRep.new_always_no_confidence(); - const credential = RustModule.WalletV4.Credential.from_hex(drepCredential); + // to handle script hashes + const credential = RustModule.WalletV4.Credential.from_keyhash(parseKey(drepCredential)); return maybe(credential.to_keyhash(), k => DRep.new_key_hash(k)) ?? maybe(credential.to_scripthash(), s => DRep.new_script_hash(s)) ?? fail('weird credential cannot be converted into a drep: ' + credential.to_hex()) From 90d03084019b9500aa019efc67af487b86aacaac Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 31 Jul 2024 14:39:06 +0300 Subject: [PATCH 394/464] wip : governance --- packages/yoroi-extension/app/Routes.js | 14 ++- .../app/UI/components/Input/PasswordInput.tsx | 4 +- .../app/UI/components/icons/ChevronDown.tsx | 4 +- .../common/GovernanceVoteingCard.tsx | 4 +- .../UI/features/governace/common/constants.ts | 3 + .../module/GovernanceContextProvider.tsx | 69 ++++++++--- .../app/UI/features/governace/module/state.ts | 7 +- .../DelagationForm/DelagationForm.tsx | 71 ++++++++--- .../GovernanceStatusSelection.tsx | 93 ++++----------- .../ada/AdaDelegationTransactionStore.js | 46 ++++---- .../yoroi-extension/app/stores/lib/Request.js | 110 ++++++++++-------- .../app/stores/toplevel/DelegationStore.js | 37 +++--- 12 files changed, 250 insertions(+), 212 deletions(-) diff --git a/packages/yoroi-extension/app/Routes.js b/packages/yoroi-extension/app/Routes.js index aa85fa87e4..0a137da5ce 100644 --- a/packages/yoroi-extension/app/Routes.js +++ b/packages/yoroi-extension/app/Routes.js @@ -513,8 +513,20 @@ export function wrapReceive(receiveProps: StoresAndActionsProps, children: Node) // NEW UI - TODO: to be refactred export function wrapGovernance(governanceProps: StoresAndActionsProps, children: Node): Node { const currentWalletInfo = createCurrrentWalletInfo(governanceProps.stores); + + const { delegationTransaction } = governanceProps.stores.substores.ada; + const delegationTxResult = delegationTransaction.createDelegationTx.result; + const delegationTxError = delegationTransaction.createDelegationTx.error; + console.log('delegationTx result', delegationTxResult); + return ( - + {children}; ); diff --git a/packages/yoroi-extension/app/UI/components/Input/PasswordInput.tsx b/packages/yoroi-extension/app/UI/components/Input/PasswordInput.tsx index 20c4fff722..5e7a5daf99 100644 --- a/packages/yoroi-extension/app/UI/components/Input/PasswordInput.tsx +++ b/packages/yoroi-extension/app/UI/components/Input/PasswordInput.tsx @@ -17,9 +17,10 @@ type StyledInputProps = { value?: string; error?: boolean; helperText?: string; + disabled?: boolean; }; -export const PasswordInput = ({ id, label, onChange, value, error, helperText }: StyledInputProps) => { +export const PasswordInput = ({ id, label, onChange, value, error, disabled, helperText }: StyledInputProps) => { const [showPassword, setShowPassword] = React.useState(false); const handleClickShowPassword = () => setShowPassword(show => !show); @@ -39,6 +40,7 @@ export const PasswordInput = ({ id, label, onChange, value, error, helperText }: type={showPassword ? 'text' : 'password'} onChange={onChange} value={value} + disabled={disabled} endAdornment={ { return ( diff --git a/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.tsx b/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.tsx index d2df791ba2..68219180db 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.tsx @@ -61,8 +61,8 @@ const SpinnerBox = styled(Box)(() => ({ top: 15, })); -export const GovernanceVoteingCard = ({ title, description, icon, selected, onClick, pending }: Props) => ( - +export const GovernanceVoteingCard = ({ title, description, icon, selected, onClick, pending = false }: Props) => ( + {pending && selected && ( diff --git a/packages/yoroi-extension/app/UI/features/governace/common/constants.ts b/packages/yoroi-extension/app/UI/features/governace/common/constants.ts index 0a3a45a58e..d41f2fda45 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/constants.ts +++ b/packages/yoroi-extension/app/UI/features/governace/common/constants.ts @@ -1,2 +1,5 @@ export const BECOME_DREP_LINK = 'https://emurgohelpdesk.zendesk.com/hc/en-us/articles/8600742035855-Who-are-DReps-on-Cardano'; export const LEARN_MORE_LINK = 'https://emurgohelpdesk.zendesk.com/hc/en-us/sections/8582793481231-Governance'; + +export const DREP_ALWAYS_ABSTAIN = 'ALWAYS_ABSTAIN'; +export const DREP_ALWAYS_NO_CONFIDENCE = 'ALWAYS_NO_CONFIDENCE'; diff --git a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx index 41378e5862..6f208c40b4 100644 --- a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx @@ -7,12 +7,20 @@ import { asGetSigningKey, asGetStakingKey } from '../../../../api/ada/lib/storag import { useGovernanceManagerMaker } from '../common/useGovernanceManagerMaker'; import { GovernanceActionType, GovernanceReducer, defaultGovernanceActions, defaultGovernanceState } from './state'; +type drepDelegation = string | null; + const initialGovernanceProvider = { ...defaultGovernanceState, ...defaultGovernanceActions, walletId: '', governanceManager: null, checkUserPassword: (_password: string) => Response, + txDelegationResult: null, + txDelegationError: null, + createDrepDelegationTransaction: async (_drepCredential: string) => Response, + signDelegationTransaction: async (_params: any) => Response, + selectedWallet: null, + governanceStatus: undefined, }; const GovernanceContext = React.createContext(initialGovernanceProvider); @@ -20,20 +28,31 @@ const GovernanceContext = React.createContext(initialGovernanceProvider); type GovernanceProviderProps = { children: React.ReactNode; currentWallet: any; // TODO to be defined + createDrepDelegationTransaction: (drepCredential: String) => Promise; + txDelegationResult: any; + txDelegationError: any; + signDelegationTransaction: (params: any) => Promise; }; -export const GovernanceContextProvider = ({ children, currentWallet }: GovernanceProviderProps) => { +export const GovernanceContextProvider = ({ + children, + currentWallet, + createDrepDelegationTransaction, + txDelegationResult, + txDelegationError, + signDelegationTransaction, +}: GovernanceProviderProps) => { if (!currentWallet?.selectedWallet) throw new Error(`requires a wallet to be selected`); const [state, dispatch] = React.useReducer(GovernanceReducer, { ...defaultGovernanceState, }); const [stakingKeyHash, setStakingKeyHash] = React.useState(null); const [stakingKeyHex, setStakingKeyHex] = React.useState(null); - + const [governanceStatus, setGovernanceStatus] = React.useState(null); const { walletId, networkId, currentPool, selectedWallet, backendService, backendServiceZero } = currentWallet; const governanceManager = useGovernanceManagerMaker(walletId, networkId); - // TODO to me moved in rootStore and use this globbaly whenever we need a wallet password check + // TODO to me moved in rootStore and use this globbaly whenever we need just a wallet password check const checkUserPassword = async (password: string): Promise => { try { // check the password @@ -57,7 +76,6 @@ export const GovernanceContextProvider = ({ children, currentWallet }: Governanc if (withStakingKey == null) { throw new Error(`missing staking key functionality`); } - withStakingKey .getStakingKey() .then(async stakingKeyResp => { @@ -67,24 +85,34 @@ export const GovernanceContextProvider = ({ children, currentWallet }: Governanc throw new Error('Cannot get staking key from the wallet!'); } setStakingKeyHex(skey); - - const govApi = new GovernanceApi({ - oldBackendUrl: String(backendService), - newBackendUrl: String(backendServiceZero), - networkId: networkId, - wasmFactory: RustModule.CrossCsl.init, - }); - - const governanceStatus = await govApi.getAccountState(skey, skey); - console.log('governanceStatus', governanceStatus); - - return null; }) .catch(err => { console.error(`unexpected erorr: failed to get wallet staking key: ${err}`); }); }, []); + React.useEffect(() => { + if (stakingKeyHex) { + getGovApiState().catch(err => { + console.log('ERROR on getGovApiState', err); + }); + } + }, [stakingKeyHex]); + + const getGovApiState = async () => { + const govApi = new GovernanceApi({ + oldBackendUrl: String(backendService), + newBackendUrl: String(backendServiceZero), + networkId: networkId, + wasmFactory: RustModule.CrossCsl.init, + }); + console.log('[getGovApiState stakingKeyHex]', stakingKeyHex); + + const governanceStatusState = await govApi.getAccountState(stakingKeyHex || '', stakingKeyHex || ''); + + setGovernanceStatus(governanceStatusState?.drepDelegation?.drep || null); + }; + const actions = React.useRef({ governanceVoteChanged: (vote: any) => { dispatch({ @@ -96,8 +124,7 @@ export const GovernanceContextProvider = ({ children, currentWallet }: Governanc dispatch({ type: GovernanceActionType.DRepIdChanged, dRepId }); }, }).current; - console.log('stakingKeyHash', stakingKeyHash); - console.log('stakingKeyHex', stakingKeyHex); + const context: any = { ...state, ...actions, @@ -107,6 +134,12 @@ export const GovernanceContextProvider = ({ children, currentWallet }: Governanc stakingKeyHash, stakingKeyHex, checkUserPassword, + createDrepDelegationTransaction, + txDelegationResult, + txDelegationError, + signDelegationTransaction, + governanceStatus, + selectedWallet: currentWallet.selectedWallet, }; return {children}; diff --git a/packages/yoroi-extension/app/UI/features/governace/module/state.ts b/packages/yoroi-extension/app/UI/features/governace/module/state.ts index 4d6ff5566d..b69babcc3d 100644 --- a/packages/yoroi-extension/app/UI/features/governace/module/state.ts +++ b/packages/yoroi-extension/app/UI/features/governace/module/state.ts @@ -1,12 +1,11 @@ import { invalid } from '@yoroi/common'; import { produce } from 'immer'; -type VoteKind = 'none' | 'delegate' | 'abstain' | 'no-confidence'; -export type Vote = { kind: VoteKind; drepID?: string }; +export type Vote = { kind: string; drepID?: string }; // Define types export type GovernanceActions = { - governanceVoteChanged: (vote: Vote) => void; + governanceVoteChanged: (vote: any) => void; dRepIdChanged: (id: string) => void; }; @@ -27,7 +26,7 @@ export type GovernanceAction = // Define state type export type GovernanceState = { - governanceVote: Vote; + governanceVote: any; dRepId?: string; }; diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx index 19f048d608..d853a9ee1e 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx @@ -1,3 +1,4 @@ +import { LoadingButton } from '@mui/lab'; import { Button } from '@mui/material'; import Box from '@mui/material/Box'; import Stack from '@mui/material/Stack'; @@ -6,7 +7,6 @@ import Typography from '@mui/material/Typography'; import * as React from 'react'; import { Collapsible } from '../../../../components/Collapsible/Collapsible'; import { PasswordInput } from '../../../../components/Input/PasswordInput'; -import { useCreateAndSendDrepDelegationTransaction } from '../../api/useCreateAndSendDrepDelegationTransaction'; import { useNavigateTo } from '../../common/useNavigateTo'; import { useStrings } from '../../common/useStrings'; import { useGovernance } from '../../module/GovernanceContextProvider'; @@ -42,28 +42,65 @@ const Actions = styled(Stack)(() => ({ })); export const DelagationForm = () => { - const [passwaord, setPassword] = React.useState(''); + const [password, setPassword] = React.useState(''); + const [formLoading, setFormLoading] = React.useState(false); const [isIncorectPasswaord, setIsIncorectPassword] = React.useState(false); const navigateTo = useNavigateTo(); - const { governanceVote, walletId, checkUserPassword } = useGovernance(); + const { + governanceVote, + checkUserPassword, + createDrepDelegationTransaction, + txDelegationResult, + txDelegationError, + selectedWallet, + signDelegationTransaction, + } = useGovernance(); + const strings = useStrings(); + React.useEffect(() => { + console.log('txDelegationError', txDelegationError); + console.log('txDelegationResult', txDelegationResult); + const signTx = async () => { + const result = await signDelegationTransaction({ + password, + publicDeriver: selectedWallet, + dialog: null, + }); + + navigateTo.transactionSubmited(); + try { + } catch (error) { + console.log('ERROR on signDelegationTransaction', error); + setFormLoading(false); + navigateTo.transactionFail(); + } + }; + + if (txDelegationResult != null && password.length > 0) { + signTx(); + } + }, [txDelegationResult, txDelegationError]); + const confirmDelegation = async () => { - const response = await checkUserPassword(passwaord); + const response = await checkUserPassword(password); if (response?.name === 'WrongPassphraseError') { setIsIncorectPassword(true); - // TODO - add this path once we have the submit api - // navigateTo.transactionFail(); } else { - alert('Submit functionality is mocked and not yet implemented'); - navigateTo.transactionSubmited(); - useCreateAndSendDrepDelegationTransaction({ walletId, governanceVote }); + try { + setFormLoading(true); + await createDrepDelegationTransaction(governanceVote.kind === 'delegate' ? governanceVote.drepID : governanceVote.kind); + } catch (error) { + console.log('ERROR on createDrepDelegationTransaction', error); + setFormLoading(false); + navigateTo.transactionFail(); + } } }; React.useEffect(() => { setIsIncorectPassword(false); - }, [passwaord]); + }, [password]); return ( @@ -129,9 +166,10 @@ export const DelagationForm = () => { label={strings.password} id="outlined-adornment-password" onChange={event => setPassword(event.target.value)} - value={passwaord} + value={password} error={!!isIncorectPasswaord} helperText={isIncorectPasswaord ? strings.wrongPassword : ' '} + disabled={formLoading} /> @@ -139,10 +177,15 @@ export const DelagationForm = () => { - {/* @ts-ignore */} - + ); diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx index 093018bdc0..4505891769 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx @@ -3,15 +3,14 @@ import Box from '@mui/material/Box'; import Link from '@mui/material/Link'; import Typography from '@mui/material/Typography'; import { styled } from '@mui/material/styles'; -import { GovernanceProvider, useDelegationCertificate, useVotingCertificate } from '@yoroi/staking'; +import { GovernanceProvider } from '@yoroi/staking'; import * as React from 'react'; import { useModal } from '../../../../components/modals/ModalContext'; -import { useDrepDelegationState } from '../../api/useDrepDelegationState'; import { ChooseDRepModal } from '../../common/ChooseDRepModal'; import { GovernanceVoteingCard } from '../../common/GovernanceVoteingCard'; import { VotingSkeletonCard } from '../../common/VotingSkeletonCard'; -import { BECOME_DREP_LINK, LEARN_MORE_LINK } from '../../common/constants'; +import { BECOME_DREP_LINK, DREP_ALWAYS_ABSTAIN, DREP_ALWAYS_NO_CONFIDENCE, LEARN_MORE_LINK } from '../../common/constants'; import { Abstein } from '../../common/ilustrations/Abstein'; import { DRepIlustration } from '../../common/ilustrations/DRepIlustration'; import { NoConfidance } from '../../common/ilustrations/NoConfidance'; @@ -28,43 +27,24 @@ const Container = styled(Box)(() => ({ paddingTop: '24px', })); -const mapStatus = { - drep: 'Delegate to a Drep', - abstain: 'Abstaining', - 'no-confidence': 'No confidence', +export const mapStatus = { + delegate: 'Delegate to a Drep', + DREP_ALWAYS_ABSTAIN: 'Abstaining', + DREP_ALWAYS_NO_CONFIDENCE: 'No confidence', }; export const GovernanceStatusSelection = () => { const [pendingVote] = React.useState(false); - const [pendingPage] = React.useState(false); + const { governanceStatus, governanceManager, governanceVoteChanged } = useGovernance(); const navigateTo = useNavigateTo(); - const { openModal } = useModal(); - const { governanceVote, governanceManager, governanceVoteChanged, walletId } = useGovernance(); - const { data: governanceData } = useDrepDelegationState(walletId); - const strings = useStrings(); - // TODO not woking - the sancho testnet is down and other networks throw error - // const { data: stakingStatus } = useStakingKeyState('e09fe806015ff6b7c62331ba9d7a68160f9c9c41b7a0765966250c2ea8', { - // suspense: true, - // }); - // console.log('stakingStatus', stakingStatus); - // const action = stakingStatus ? mapStakingKeyStateToGovernanceAction(stakingStatus) : null - - // @ts-ignore - const { createCertificate, isLoading: isCreatingDelegationCertificate } = useDelegationCertificate({ - useErrorBoundary: true, - }); - - // @ts-ignore - const { createCertificate: createVotingCertificate, isLoading: isCreatingVotingCertificate } = useVotingCertificate({ - useErrorBoundary: true, - }); + console.log('[governanceStatus]', governanceStatus); - const pageTitle = governanceData?.kind === 'none' ? strings.registerGovernance : strings.governanceStatus; - const statusRawText = mapStatus[governanceVote?.kind]; - const pageSubtitle = governanceData?.kind === 'none' ? strings.reviewSelection : strings.statusSelected(statusRawText); + const pageTitle = governanceStatus ? strings.governanceStatus : strings.registerGovernance; + const statusRawText = mapStatus['delegate']; + const pageSubtitle = governanceStatus === null ? strings.reviewSelection : strings.statusSelected(statusRawText); const openDRepIdModal = (onSubmit: (drepID: string) => void) => { if (!governanceManager) { @@ -87,58 +67,27 @@ export const GovernanceStatusSelection = () => { const vote: Vote = { kind: 'delegate', drepID }; governanceVoteChanged(vote); navigateTo.delegationForm(); - // createCertificate( - // { drepID, stakePoolKeyHash }, - // { - // onSuccess: async certificate => { - // // const unsignedTx = await createGovernanceTxMutation TODO - should be implemented - // const vote = { kind: 'delegate', drepID }; - // setPendingVote(vote.kind); - // dRepIdChanged(drepID); - // governanceStatusChanged(drepID); - // navigateTo.delegationForm('delegate'); - // }, - // } - // ); }); }; const handleAbstain = () => { - const vote: Vote = { kind: 'abstain' }; - // setPendingVote(vote.kind); + const vote: Vote = { kind: DREP_ALWAYS_ABSTAIN }; governanceVoteChanged(vote); navigateTo.delegationForm(); - // createVotingCertificate( - // { vote: 'abstain', stakingKey }, - // { - // onSuccess: async certificate => { - // navigateTo.delegationForm('delegate'); - // }, - // } - // ); }; const handleNoConfidence = () => { - const vote: Vote = { kind: 'no-confidence' }; - // setPendingVote(vote.kind); + const vote: Vote = { kind: DREP_ALWAYS_NO_CONFIDENCE }; governanceVoteChanged(vote); navigateTo.delegationForm(); - // createVotingCertificate( - // { vote: 'no-confidence', stakePoolKeyHash }, - // { - // onSuccess: async certificate => { - // navigateTo.confirmTx({ unsignedTx, vote }); - // }, - // } - // ); }; const optionsList = [ { - title: governanceData?.kind === 'delegate' ? strings.delegateingToDRep : strings.delegateToDRep, + title: governanceStatus ? strings.delegateingToDRep : strings.delegateToDRep, description: strings.designatingSomeoneElse, icon: , - selected: governanceData?.kind === 'delegate', + selected: governanceStatus !== null ? true : false, onClick: handleDelegate, pending: pendingVote, }, @@ -146,7 +95,7 @@ export const GovernanceStatusSelection = () => { title: strings.abstain, description: strings.abstainInfo, icon: , - selected: governanceData?.kind === 'abstain', + selected: governanceStatus === 'abstain' ? true : false, onClick: handleAbstain, pending: pendingVote, }, @@ -154,7 +103,7 @@ export const GovernanceStatusSelection = () => { title: strings.noConfidence, description: strings.noConfidenceInfo, icon: , - selected: governanceData?.kind === 'no-confidence', + selected: governanceStatus === 'no-confidence' ? true : false, onClick: handleNoConfidence, pending: pendingVote, }, @@ -171,7 +120,7 @@ export const GovernanceStatusSelection = () => { {pageSubtitle} - {!pendingPage + {true ? optionsList.map((option, index) => { return ( { - {governanceData?.kind === 'delegate' && ( + {governanceStatus && ( - `${strings.drepId} ${governanceData?.drepID}` + `${strings.drepId} ${governanceStatus}` )} - {governanceData?.kind === 'none' && ( + {governanceStatus === null && ( {strings.becomeADrep} diff --git a/packages/yoroi-extension/app/stores/ada/AdaDelegationTransactionStore.js b/packages/yoroi-extension/app/stores/ada/AdaDelegationTransactionStore.js index 4818372dbb..9e14a50953 100644 --- a/packages/yoroi-extension/app/stores/ada/AdaDelegationTransactionStore.js +++ b/packages/yoroi-extension/app/stores/ada/AdaDelegationTransactionStore.js @@ -1,37 +1,34 @@ // @flow -import { observable, action, reaction } from 'mobx'; import BigNumber from 'bignumber.js'; -import Store from '../base/Store'; -import LocalizedRequest from '../lib/LocalizedRequest'; +import { action, observable, reaction } from 'mobx'; +import type { ActionsMap } from '../../actions/index'; import type { CreateDelegationTxFunc, CreateWithdrawalTxResponse } from '../../api/ada'; -import { buildRoute } from '../../utils/routing'; -import { ROUTES } from '../../routes-config'; +import { isLedgerNanoWallet, isTrezorTWallet } from '../../api/ada/lib/storage/models/ConceptualWallet/index'; +import { PublicDeriver } from '../../api/ada/lib/storage/models/PublicDeriver/index'; import { - asGetAllUtxos, - asHasUtxoChains, asGetAllAccounting, + asGetAllUtxos, asGetPublicKey, + asHasUtxoChains, } from '../../api/ada/lib/storage/models/PublicDeriver/traits'; -import { PublicDeriver } from '../../api/ada/lib/storage/models/PublicDeriver/index'; -import { - isLedgerNanoWallet, - isTrezorTWallet, -} from '../../api/ada/lib/storage/models/ConceptualWallet/index'; -import type { ActionsMap } from '../../actions/index'; +import { ROUTES } from '../../routes-config'; +import { buildRoute } from '../../utils/routing'; +import Store from '../base/Store'; import type { StoresMap } from '../index'; +import LocalizedRequest from '../lib/LocalizedRequest'; -export type CreateWithdrawalTxRequest = - LocalizedRequest>; +export type CreateWithdrawalTxRequest = LocalizedRequest>; export default class AdaDelegationTransactionStore extends Store { - @observable createWithdrawalTx: LocalizedRequest< + @observable createWithdrawalTx: LocalizedRequest> = new LocalizedRequest< DeferredCall - > = new LocalizedRequest>(request => request()); + >(request => request()); @observable - createDelegationTx: LocalizedRequest = - new LocalizedRequest(this.api.ada.createDelegationTx); + createDelegationTx: LocalizedRequest = new LocalizedRequest( + this.api.ada.createDelegationTx + ); @observable shouldDeregister: boolean = false; @@ -115,10 +112,13 @@ export default class AdaDelegationTransactionStore extends Store = {| @@ -22,7 +22,6 @@ export type ApiCallType = {| // Note: Do not use this class directly. Only use LocalizedRequest or CachedLocalizedRequest export default class Request Promise, Err> { - @observable result: ?PromisslessReturnType = null; @observable error: ?Err = null; @observable isExecuting: boolean = false; @@ -45,9 +44,12 @@ export default class Request Promise, Err> { // This timeout is necessary to avoid warnings from mobx // regarding triggering actions as side-effect of getters - setTimeout(action('Request::execute (setting this.isExecuting)', () => { - this.isExecuting = true; - }), 0); + setTimeout( + action('Request::execute (setting this.isExecuting)', () => { + this.isExecuting = true; + }), + 0 + ); const executionId = Math.random(); this.currentlyExecuting.add(executionId); @@ -57,44 +59,53 @@ export default class Request Promise, Err> { reject(new ApiMethodNotYetImplementedError()); } this._method(...callArgs) - .then((result) => { + .then(result => { if (this.currentlyExecuting.has(executionId)) { this.currentlyExecuting.delete(executionId); } else { resolve(result); return; } - setTimeout(action('Request::execute/then', () => { - if (this.result != null && isObservableArray(this.result) && Array.isArray(result)) { - this.result.replace(result); - } else { - this.result = result; - } - if (this._currentApiCall) this._currentApiCall.result = result; - this.isExecuting = false; - this.wasExecuted = true; - this.error = null; - this._isWaitingForResponse = false; - resolve(result); - }), 1); + setTimeout( + action('Request::execute/then', () => { + if (this.result != null && isObservableArray(this.result) && Array.isArray(result)) { + this.result.replace(result); + } else { + this.result = result; + } + if (this._currentApiCall) this._currentApiCall.result = result; + this.isExecuting = false; + this.wasExecuted = true; + this.error = null; + this._isWaitingForResponse = false; + resolve(result); + }), + 1 + ); + console.log('EXECUTE RESULT', result); return result; }) - .catch(action('Request::execute/catch', (error) => { - if (this.currentlyExecuting.has(executionId)) { - this.currentlyExecuting.delete(executionId); - } else { - reject(error); - return; - } - setTimeout(action(() => { - this.error = error; - this.result = null; - this.isExecuting = false; - this.wasExecuted = true; - this._isWaitingForResponse = false; - reject(error); - }), 1); - })); + .catch( + action('Request::execute/catch', error => { + if (this.currentlyExecuting.has(executionId)) { + this.currentlyExecuting.delete(executionId); + } else { + reject(error); + return; + } + setTimeout( + action(() => { + this.error = error; + this.result = null; + this.isExecuting = false; + this.wasExecuted = true; + this._isWaitingForResponse = false; + reject(error); + }), + 1 + ); + }) + ); }); this._isWaitingForResponse = true; @@ -103,11 +114,7 @@ export default class Request Promise, Err> { } isExecutingWithArgs(...args: Arguments): boolean { - return ( - this.isExecuting && - (this._currentApiCall != null) - && isEqual(this._currentApiCall.args, args) - ); + return this.isExecuting && this._currentApiCall != null && isEqual(this._currentApiCall.args, args); } @computed get isExecutingFirstTime(): boolean { @@ -135,16 +142,17 @@ export default class Request Promise, Err> { * * @returns {Promise} */ - patch( - modify: PromisslessReturnType => ?PromisslessReturnType - ): Promise> { - return new Promise((resolve) => { - setTimeout(action(() => { - const override = modify(this.result); - if (override !== undefined) this.result = override; - if (this._currentApiCall) this._currentApiCall.result = this.result; - resolve(this); - }), 0); + patch(modify: (PromisslessReturnType) => ?PromisslessReturnType): Promise> { + return new Promise(resolve => { + setTimeout( + action(() => { + const override = modify(this.result); + if (override !== undefined) this.result = override; + if (this._currentApiCall) this._currentApiCall.result = this.result; + resolve(this); + }), + 0 + ); }); } diff --git a/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js b/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js index e067de24c0..d816c1299c 100644 --- a/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js +++ b/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js @@ -1,30 +1,22 @@ // @flow -import { action, observable, runInAction } from 'mobx'; +import { PoolInfoApi } from '@emurgo/yoroi-lib'; +import { GovernanceApi } from '@emurgo/yoroi-lib/dist/governance/emurgo-api'; import { find } from 'lodash'; -import type { NetworkRow } from '../../api/ada/lib/storage/database/primitives/tables'; +import { action, observable, runInAction } from 'mobx'; +import type { ActionsMap } from '../../actions/index'; +import { unwrapStakingKey } from '../../api/ada/lib/storage/bridge/utils'; import { PublicDeriver } from '../../api/ada/lib/storage/models/PublicDeriver/index'; -import LocalizedRequest from '../lib/LocalizedRequest'; -import Store from '../base/Store'; -import { GovernanceApi } from '@emurgo/yoroi-lib/dist/governance/emurgo-api'; -import CachedRequest from '../lib/LocalizedCachedRequest'; -import LocalizableError from '../../i18n/LocalizableError'; +import { asGetStakingKey } from '../../api/ada/lib/storage/models/PublicDeriver/traits'; import { PoolMissingApiError } from '../../api/common/errors'; -import type { MangledAmountFunc, MangledAmountsResponse } from '../stateless/mangledAddresses'; -import type { ActionsMap } from '../../actions/index'; -import type { StoresMap } from '../index'; -import type { ExplorerPoolInfo as PoolInfo } from '@emurgo/yoroi-lib'; -import { PoolInfoApi } from '@emurgo/yoroi-lib'; import { MultiToken } from '../../api/common/lib/MultiToken'; import { forceNonNull, maybe } from '../../coreUtils'; -import { asGetStakingKey } from '../../api/ada/lib/storage/models/PublicDeriver/traits'; -import { unwrapStakingKey } from '../../api/ada/lib/storage/bridge/utils'; - -import type { - GetDelegatedBalanceFunc, - GetDelegatedBalanceResponse, - RewardHistoryFunc, -} from '../../api/ada/lib/storage/bridge/delegationUtils'; +import LocalizableError from '../../i18n/LocalizableError'; +import Store from '../base/Store'; +import type { StoresMap } from '../index'; +import CachedRequest from '../lib/LocalizedCachedRequest'; +import LocalizedRequest from '../lib/LocalizedRequest'; +import type { MangledAmountsResponse } from '../stateless/mangledAddresses'; import { RustModule } from '../../api/ada/lib/cardanoCrypto/rustLoader'; @@ -280,7 +272,7 @@ export default class DelegationStore extends Store { } }; - createDelegationTransaction: (string) => Promise = async poolId => { + createDelegationTransaction: string => Promise = async poolId => { this.stores.delegation.poolInfoQuery.reset(); await this.stores.delegation.poolInfoQuery.execute([poolId]); await this.stores.substores.ada.delegationTransaction.createTransaction({ @@ -289,7 +281,8 @@ export default class DelegationStore extends Store { }); }; - createDrepDelegationTransaction: (string) => Promise = async drepCredential => { + createDrepDelegationTransaction: string => Promise = async drepCredential => { + console.log('STORE CREATE DELEGATION drepCredential ', drepCredential); await this.stores.substores.ada.delegationTransaction.createTransaction({ drepCredential, publicDeriver: this.stores.wallets.selectedOrFail, From 5af480d97f12e7d45e44c17d5d5d5afaf2fc4c91 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 31 Jul 2024 15:58:23 +0300 Subject: [PATCH 395/464] fix table width --- .../app/components/common/table/Table.js | 12 ++- .../app/containers/swap/orders/OrdersPage.js | 87 +++++-------------- 2 files changed, 28 insertions(+), 71 deletions(-) diff --git a/packages/yoroi-extension/app/components/common/table/Table.js b/packages/yoroi-extension/app/components/common/table/Table.js index 9f70c23caf..5771150a0c 100644 --- a/packages/yoroi-extension/app/components/common/table/Table.js +++ b/packages/yoroi-extension/app/components/common/table/Table.js @@ -51,10 +51,14 @@ export default function Table({ {name} ))} - {columnNames.length > 0 && } + {columnNames.length > 0 && ( + + )} {children} ); diff --git a/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js b/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js index d4815e3cab..58eb9ceb66 100644 --- a/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js +++ b/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js @@ -6,10 +6,7 @@ import type { Node } from 'react'; import { useState } from 'react'; import { addressBech32ToHex } from '../../../api/ada/lib/cardanoCrypto/utils'; import { signTransactionHex } from '../../../api/ada/transactions/signTransactionHex'; -import { - getTransactionFeeFromCbor, - getTransactionTotalOutputFromCbor, -} from '../../../api/ada/transactions/utils'; +import { getTransactionFeeFromCbor, getTransactionTotalOutputFromCbor } from '../../../api/ada/transactions/utils'; import AssetPair from '../../../components/common/assets/AssetPair'; import Table from '../../../components/common/table/Table'; import Tabs from '../../../components/common/tabs/Tabs'; @@ -53,7 +50,7 @@ const orderColumns: Array = [ { name: 'Pair (From / To)', align: 'left', - width: '176px', + width: ({ completedOrders }) => (completedOrders ? 'auto' : '176px'), }, { name: 'Asset price', @@ -61,24 +58,24 @@ const orderColumns: Array = [ }, { name: 'Asset amount', - width: '166px', + width: ({ completedOrders }) => (completedOrders ? 'auto' : '166px'), }, { name: 'Total', - width: '150px', + width: ({ completedOrders }) => (completedOrders ? 'auto' : '150px'), openOrdersOnly: true, }, { name: 'DEX', align: 'left', leftPadding: '32px', - width: '216px', + width: ({ completedOrders }) => (completedOrders ? '0px' : '216px'), openOrdersOnly: true, }, { name: ({ completedOrders }) => (completedOrders ? 'Time executed' : 'Time created'), align: 'left', - width: '240px', + width: ({ completedOrders }) => (completedOrders ? 'auto' : '240px'), }, { name: 'Transaction ID', @@ -113,15 +110,10 @@ export default function SwapOrdersPage(props: StoresAndActionsProps): Node { const walletVariant = wallet.getParent().getWalletVariant(); const defaultTokenInfo = tokenInfoStore.getDefaultTokenInfoSummary(network.NetworkId); - const selectedExplorer = - explorers.selectedExplorer.get(network.NetworkId) ?? fail('No explorer for wallet network'); + const selectedExplorer = explorers.selectedExplorer.get(network.NetworkId) ?? fail('No explorer for wallet network'); - const fetchTransactionTimestamps = txHashes => - swapStore.fetchTransactionTimestamps({ wallet, txHashes }); - let { openOrders, completedOrders, transactionTimestamps } = useRichOrders( - defaultTokenInfo, - fetchTransactionTimestamps - ); + const fetchTransactionTimestamps = txHashes => swapStore.fetchTransactionTimestamps({ wallet, txHashes }); + let { openOrders, completedOrders, transactionTimestamps } = useRichOrders(defaultTokenInfo, fetchTransactionTimestamps); const txHashToRenderedTimestamp: string => string = txHash => { const date = transactionTimestamps[txHash]; @@ -137,33 +129,19 @@ export default function SwapOrdersPage(props: StoresAndActionsProps): Node { let collateralReorgTxHex: ?string = null; let collateralReorgTxData: ?CardanoConnectorSignRequest = null; if (utxoHex == null) { - const { - unsignedTxHex, - txData, - collateralUtxoHex, - } = await swapStore.createCollateralReorgForCancel({ wallet }); + const { unsignedTxHex, txData, collateralUtxoHex } = await swapStore.createCollateralReorgForCancel({ wallet }); collateralReorgTxHex = unsignedTxHex; collateralReorgTxData = txData; utxoHex = collateralUtxoHex; } - return handleCreateCancelTransaction( - order, - utxoHex, - collateralReorgTxHex, - collateralReorgTxData - ); + return handleCreateCancelTransaction(order, utxoHex, collateralReorgTxHex, collateralReorgTxData); } catch (e) { console.error('Failed to prepare a collateral utxo for cancel', e); throw e; } }; - const handleCreateCancelTransaction = async ( - order, - utxoHex, - collateralReorgTx, - collateralReorgTxData - ) => { + const handleCreateCancelTransaction = async (order, utxoHex, collateralReorgTx, collateralReorgTxData) => { const sender = order.sender; if (sender == null) { throw new Error('Cannot cancel a completed order (sender == null)'); @@ -176,10 +154,7 @@ export default function SwapOrdersPage(props: StoresAndActionsProps): Node { collateral: utxoHex, }, }); - const totalCancelOutput = getTransactionTotalOutputFromCbor( - cancelTxCbor, - wallet.getParent().getDefaultToken() - ); + const totalCancelOutput = getTransactionTotalOutputFromCbor(cancelTxCbor, wallet.getParent().getDefaultToken()); const formattedCancelValues = createFormattedTokenValues({ entries: totalCancelOutput.entries().map(e => ({ id: e.identifier, @@ -202,9 +177,7 @@ export default function SwapOrdersPage(props: StoresAndActionsProps): Node { return { order: s.order, collateralReorgTx: - collateralReorgTx && collateralReorgTxData - ? { cbor: collateralReorgTx, txData: collateralReorgTxData } - : undefined, + collateralReorgTx && collateralReorgTxData ? { cbor: collateralReorgTx, txData: collateralReorgTxData } : undefined, tx: { cbor: cancelTxCbor, formattedFee: formattedFeeValue, @@ -231,11 +204,7 @@ export default function SwapOrdersPage(props: StoresAndActionsProps): Node { console.log('Reorg transaction is not available. Ignoring.'); return; } - const signedCollateralReorgTx = await signTransactionHex( - wallet, - password, - collateralReorgTx.cbor - ); + const signedCollateralReorgTx = await signTransactionHex(wallet, password, collateralReorgTx.cbor); setCancellationState({ order, signedCollateralReorgTx, tx }); }; @@ -254,10 +223,7 @@ export default function SwapOrdersPage(props: StoresAndActionsProps): Node { } setCancellationState({ order, signedCollateralReorgTx, tx, isSubmitting: true }); const signedCancelTx = await signTransactionHex(wallet, password, tx.cbor); - const signedTransactionHexes = - signedCollateralReorgTx != null - ? [signedCollateralReorgTx, signedCancelTx] - : [signedCancelTx]; + const signedTransactionHexes = signedCollateralReorgTx != null ? [signedCollateralReorgTx, signedCancelTx] : [signedCancelTx]; await swapStore.executeTransactionHexes({ wallet, signedTransactionHexes, @@ -271,12 +237,8 @@ export default function SwapOrdersPage(props: StoresAndActionsProps): Node { showCompletedOrders && c.openOrdersOnly ? '' : resolveValueOrGetter(c.name, columnContext) ); const columnAlignment = orderColumns.map(c => resolveValueOrGetter(c.align ?? '', columnContext)); - const columnLeftPaddings = orderColumns.map(c => - resolveValueOrGetter(c.leftPadding ?? '', columnContext) - ); - const gridTemplateColumns = orderColumns - .map(c => resolveValueOrGetter(c.width ?? 'auto', columnContext)) - .join(' '); + const columnLeftPaddings = orderColumns.map(c => resolveValueOrGetter(c.leftPadding ?? '', columnContext)); + const gridTemplateColumns = orderColumns.map(c => resolveValueOrGetter(c.width ?? 'auto', columnContext)).join(' '); const isDisplayOpenOrdersEmpty = !showCompletedOrders && openOrders?.length === 0; const isDisplayCompletedOrdersEmpty = showCompletedOrders && completedOrders?.length === 0; @@ -374,12 +336,7 @@ const OrderRow = ({ |}) => { return ( <> - + {order.price} {order.amount} @@ -396,11 +353,7 @@ const OrderRow = ({ {txHashToRenderedTimestamp(order.txId)} - + {truncateAddressShort(order.txId)} {maybe(handleCancel, f => ( From da849f3cee31619bf7e344ec7d87b3e8e2e59d40 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 31 Jul 2024 16:02:34 +0300 Subject: [PATCH 396/464] add missing Min Ada display in pool info --- .../containers/swap/asset-swap/edit-pool/EditPool.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/packages/yoroi-extension/app/containers/swap/asset-swap/edit-pool/EditPool.js b/packages/yoroi-extension/app/containers/swap/asset-swap/edit-pool/EditPool.js index 8d16049f17..02c5f6f6e8 100644 --- a/packages/yoroi-extension/app/containers/swap/asset-swap/edit-pool/EditPool.js +++ b/packages/yoroi-extension/app/containers/swap/asset-swap/edit-pool/EditPool.js @@ -33,10 +33,7 @@ export default function EditSwapPool({ handleEditPool, defaultTokenInfo }: Props const { pool } = calculation; - const formattedTotal = - formattedNonPtAmount == null - ? formattedPtAmount - : `${formattedNonPtAmount} + ${formattedPtAmount}`; + const formattedTotal = formattedNonPtAmount == null ? formattedPtAmount : `${formattedNonPtAmount} + ${formattedPtAmount}`; const titleTotalFeesFormatted = `Total: ${formattedTotal}`; const isLimitOrder = type === 'limit'; @@ -64,8 +61,7 @@ export default function EditSwapPool({ handleEditPool, defaultTokenInfo }: Props - {maybe(pool.provider, p => `${capitalize(p)} ${isAutoPool ? '(Auto)' : ''}`) ?? - 'No pool found'} + {maybe(pool.provider, p => `${capitalize(p)} ${isAutoPool ? '(Auto)' : ''}`) ?? 'No pool found'} {isLimitOrder && ( @@ -113,7 +109,7 @@ export default function EditSwapPool({ handleEditPool, defaultTokenInfo }: Props - {showFullInfo && } + {showFullInfo && } ); From 5644a2cf374d6650f2b930cb79cdb3fb2162f70d Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Thu, 1 Aug 2024 09:29:44 +0100 Subject: [PATCH 397/464] New translations en-us.json (Hungarian) --- .../app/i18n/locales/hu-HU.json | 102 +++++++++++++++++- 1 file changed, 101 insertions(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/i18n/locales/hu-HU.json b/packages/yoroi-extension/app/i18n/locales/hu-HU.json index 85e2bad524..5ea7f991cc 100644 --- a/packages/yoroi-extension/app/i18n/locales/hu-HU.json +++ b/packages/yoroi-extension/app/i18n/locales/hu-HU.json @@ -334,6 +334,7 @@ "settings.unitOfAccount.revamp.label": "Select currency", "settings.unitOfAccount.title": "Fiat pairing", "sidebar.assets": "Assets", + "sidebar.portfolio": "Portfolio", "sidebar.faq": "Faq", "sidebar.feedback": "Feedback", "sidebar.newUpdates": "New updates", @@ -1035,6 +1036,29 @@ "yoroiTransfer.waiting.progressInfo.checkingAddresses": "Checking addresses funds", "yoroiTransfer.waiting.progressInfo.restoringAddresses": "Fetching addresses", "yoroiTransfer.waiting.title.label": "Wallet is being restored", + "gouvernace.delegateToDRep": "Delegate to a DRep", + "gouvernace.delegateingToDRep": "Delegateing to a DRep", + "gouvernace.designatingSomeoneElse": "You are designating someone else to cast your vote on your behalf for all proposals now and in the future.", + "gouvernace.governanceStatus": "Governance status", + "gouvernace.governanceStatusInfo": "Governance status", + "gouvernace.abstain": "Abstain", + "gouvernace.abstainInfo": "You are choosing not to cast a vote on all proposals now and in the future.", + "gouvernace.noConfidence": "No Confidence", + "gouvernace.noConfidenceInfo": "You are expressing a lack of trust for all proposals now and in the future.", + "gouvernace.learnMore": "Learn more About Governance", + "gouvernace.becomeADrep": "Want to became a Drep?", + "gouvernace.drepId": "Drep ID:", + "gouvernace.participateDialog.title": "Withdraw warning", + "gouvernace.participateDialog.contentInfo": "To withdraw your rewards, you need to participate in the Cardano Governance. Your rewards will continue to accumulate, but you are only able to withdraw it once you join the Governance process.", + "gouvernace.participateDialog.buttonText": "Participate on governance", + "gouvernace.statusSelected": "You have selected {status} as your governance status. You can change it at any time by clicking in the card bellow", + "gouvernace.registerGovernance": "Register in Governance", + "gouvernace.chooseDrep": "chooseDrep", + "gouvernace.reviewSelection": "Review the selections carefully to assign yourself a Governance Status", + "gouvernace.operations": "Operations", + "gouvernace.selectAbstein": "Select abstain", + "gouvernace.selectNoConfidenc": "Select no confidence", + "gouvernace.designatedSomeone": "You are designating someone else to cast your vote on your behalf for all proposals now and in the future.", "governance.delegateToDRep": "Delegate to a DRep", "governance.delegateingToDRep": "Delegateing to a DRep", "governance.designatingSomeoneElse": "You are designating someone else to cast your vote on your behalf for all proposals now and in the future.", @@ -1057,6 +1081,82 @@ "governance.operations": "Operations", "governance.selectAbstein": "Select abstain", "governance.selectNoConfidenc": "Select no confidence", + "governance.designatedSomeone": "You are designating someone else to cast your vote on your behalf for all proposals now and in the future.", "governance.identifyDrep": "Identify your preferred DRep and enter their ID below to delegate your vote", - "governance.designatedSomeone": "You are designating someone else to cast your vote on your behalf for all proposals now and in the future." + "portfolio.main.header.text": "Tokens", + "portfolio.main.search.text": "Search by asset name or ID", + "portfolio.common.soonAvailable": "Soon available", + "portfolio.common.noResultsForThisSearch": "No results for this search", + "portfolio.common.dex": "DEX", + "portfolio.common.totalValue": "Total value", + "portfolio.detail.header.text": "Token details", + "portfolio.menu.wallet.link.label": "Wallet", + "portfolio.menu.dapps.link.label": "Dapps", + "portfolio.tooltip.balancePerformance": "Balance performance", + "portfolio.tooltip.balanceChange": "Balance change", + "portfolio.tooltip.tokenPriceChange": "Token price change", + "portfolio.tooltip.in24hours": "in 24 hours", + "portfolio.tooltip.dapps": "DApps", + "portfolio.button.backToPortfolio": "Back to portfolio", + "portfolio.button.swap": "Swap", + "portfolio.button.send": "Send", + "portfolio.button.receive": "Receive", + "portfolio.button.liquidityPool": "Liquidity pool", + "portfolio.button.openOrders": "Open orders", + "portfolio.button.lendAndBorrow": "Lend & Borrow", + "portfolio.tokenInfo.balance": "balance", + "portfolio.tokenInfo.marketPrice": "Market price", + "portfolio.tokenInfo.menuLabel.overview": "Overview", + "portfolio.tokenInfo.menuLabel.performance": "Performance", + "portfolio.tokenInfo.overview.description": "Description", + "portfolio.tokenInfo.overview.website": "Website", + "portfolio.tokenInfo.overview.policyId": "Policy ID", + "portfolio.tokenInfo.overview.fingerprint": "Fingerprint", + "portfolio.tokenInfo.overview.detailsOn": "Details on", + "portfolio.tokenInfo.performance.marketData": "Market data", + "portfolio.tokenInfo.performance.tokenPrice": "Token price", + "portfolio.tokenInfo.performance.marketCap": "Market cap", + "portfolio.tokenInfo.performance.24hVolumn": "24h volumn", + "portfolio.tokenInfo.performance.rank": "Rank", + "portfolio.tokenInfo.performance.circulating": "Circulating", + "portfolio.tokenInfo.performance.totalSupply": "Total supply", + "portfolio.tokenInfo.performance.maxSupply": "Max supply", + "portfolio.tokenInfo.performance.allTimeHigh": "All time high", + "portfolio.tokenInfo.performance.allTimeLow": "All time low", + "portfolio.statsTable.header.name": "Name", + "portfolio.statsTable.header.price": "Price", + "portfolio.chart.button.24H": "24H", + "portfolio.chart.button.1W": "1W", + "portfolio.chart.button.1M": "1M", + "portfolio.chart.button.6M": "6M", + "portfolio.chart.button.1Y": "1Y", + "portfolio.chart.button.ALL": "ALL", + "portfolio.statsTable.header.portfolio": "Portfolio", + "portfolio.statsTable.header.totalAmount": "Total amount", + "portfolio.transactionTable.title": "Transaction history", + "portfolio.transactionTable.header.transactionType": "Transaction type", + "portfolio.transactionTable.header.status": "Status", + "portfolio.transactionTable.header.fee": "Fee", + "portfolio.transactionTable.header.amount": "Amount", + "portfolio.transactionTable.timestamp.today": "Today", + "portfolio.transactionTable.timestamp.yesterday": "Yesterday", + "portfolio.transactionTable.label.sent": "Sent", + "portfolio.transactionTable.label.received": "Received", + "portfolio.transactionTable.label.transactionError": "Transaction error", + "portfolio.transactionTable.label.rewardWithdraw": "Reward withdrawn", + "portfolio.transactionTable.label.stakeDelegate": "Stake delegated", + "portfolio.transactionTable.status.low": "Low", + "portfolio.transactionTable.status.high": "High", + "portfolio.transactionTable.status.failed": "Failed", + "portfolio.transactionTable.amount.assets": "assets", + "portfolio.liquidityTable.header.tokenPair": "Token pair", + "portfolio.liquidityTable.header.firstTokenValue": "Token value 1", + "portfolio.liquidityTable.header.secondTokenValue": "Token value 2", + "portfolio.liquidityTable.header.lpTokens": "LP tokens", + "portfolio.orderTable.header.pair": "Pair (From / To)", + "portfolio.orderTable.header.assetPrice": "Asset price", + "portfolio.orderTable.header.assetAmount": "Asset amount", + "portfolio.orderTable.header.transactionId": "Transaction ID", + "portfolio.welcomeBanner.title": "Welcome to Yoroi", + "portfolio.welcomeBanner.description": "With new features and upgraded performance, transactions can be done faster and more securely than ever before." } From 34d08f181d5ee492e5e47e1c06c6d99e215af4e4 Mon Sep 17 00:00:00 2001 From: Juliano Lazzarotto <30806844+stackchain@users.noreply.github.com> Date: Thu, 1 Aug 2024 09:29:46 +0100 Subject: [PATCH 398/464] New translations en-us.json (Vietnamese) --- .../app/i18n/locales/vi-VN.json | 102 +++++++++++++++++- 1 file changed, 101 insertions(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/i18n/locales/vi-VN.json b/packages/yoroi-extension/app/i18n/locales/vi-VN.json index 40eda77863..124aaa3063 100644 --- a/packages/yoroi-extension/app/i18n/locales/vi-VN.json +++ b/packages/yoroi-extension/app/i18n/locales/vi-VN.json @@ -334,6 +334,7 @@ "settings.unitOfAccount.revamp.label": "Select currency", "settings.unitOfAccount.title": "Fiat pairing", "sidebar.assets": "Tài sản", + "sidebar.portfolio": "Portfolio", "sidebar.faq": "Câu hỏi thường gặp", "sidebar.feedback": "Phản hồi", "sidebar.newUpdates": "Cập nhật mới", @@ -1035,6 +1036,29 @@ "yoroiTransfer.waiting.progressInfo.checkingAddresses": "Kiểm tra địa chỉ quỹ", "yoroiTransfer.waiting.progressInfo.restoringAddresses": "Đang tìm nạp địa chỉ", "yoroiTransfer.waiting.title.label": "Ví đang được khôi phục", + "gouvernace.delegateToDRep": "Delegate to a DRep", + "gouvernace.delegateingToDRep": "Delegateing to a DRep", + "gouvernace.designatingSomeoneElse": "You are designating someone else to cast your vote on your behalf for all proposals now and in the future.", + "gouvernace.governanceStatus": "Governance status", + "gouvernace.governanceStatusInfo": "Governance status", + "gouvernace.abstain": "Abstain", + "gouvernace.abstainInfo": "You are choosing not to cast a vote on all proposals now and in the future.", + "gouvernace.noConfidence": "No Confidence", + "gouvernace.noConfidenceInfo": "You are expressing a lack of trust for all proposals now and in the future.", + "gouvernace.learnMore": "Learn more About Governance", + "gouvernace.becomeADrep": "Want to became a Drep?", + "gouvernace.drepId": "Drep ID:", + "gouvernace.participateDialog.title": "Withdraw warning", + "gouvernace.participateDialog.contentInfo": "To withdraw your rewards, you need to participate in the Cardano Governance. Your rewards will continue to accumulate, but you are only able to withdraw it once you join the Governance process.", + "gouvernace.participateDialog.buttonText": "Participate on governance", + "gouvernace.statusSelected": "You have selected {status} as your governance status. You can change it at any time by clicking in the card bellow", + "gouvernace.registerGovernance": "Register in Governance", + "gouvernace.chooseDrep": "chooseDrep", + "gouvernace.reviewSelection": "Review the selections carefully to assign yourself a Governance Status", + "gouvernace.operations": "Operations", + "gouvernace.selectAbstein": "Select abstain", + "gouvernace.selectNoConfidenc": "Select no confidence", + "gouvernace.designatedSomeone": "You are designating someone else to cast your vote on your behalf for all proposals now and in the future.", "governance.delegateToDRep": "Delegate to a DRep", "governance.delegateingToDRep": "Delegateing to a DRep", "governance.designatingSomeoneElse": "You are designating someone else to cast your vote on your behalf for all proposals now and in the future.", @@ -1057,6 +1081,82 @@ "governance.operations": "Operations", "governance.selectAbstein": "Select abstain", "governance.selectNoConfidenc": "Select no confidence", + "governance.designatedSomeone": "You are designating someone else to cast your vote on your behalf for all proposals now and in the future.", "governance.identifyDrep": "Identify your preferred DRep and enter their ID below to delegate your vote", - "governance.designatedSomeone": "You are designating someone else to cast your vote on your behalf for all proposals now and in the future." + "portfolio.main.header.text": "Tokens", + "portfolio.main.search.text": "Search by asset name or ID", + "portfolio.common.soonAvailable": "Soon available", + "portfolio.common.noResultsForThisSearch": "No results for this search", + "portfolio.common.dex": "DEX", + "portfolio.common.totalValue": "Total value", + "portfolio.detail.header.text": "Token details", + "portfolio.menu.wallet.link.label": "Wallet", + "portfolio.menu.dapps.link.label": "Dapps", + "portfolio.tooltip.balancePerformance": "Balance performance", + "portfolio.tooltip.balanceChange": "Balance change", + "portfolio.tooltip.tokenPriceChange": "Token price change", + "portfolio.tooltip.in24hours": "in 24 hours", + "portfolio.tooltip.dapps": "DApps", + "portfolio.button.backToPortfolio": "Back to portfolio", + "portfolio.button.swap": "Swap", + "portfolio.button.send": "Send", + "portfolio.button.receive": "Receive", + "portfolio.button.liquidityPool": "Liquidity pool", + "portfolio.button.openOrders": "Open orders", + "portfolio.button.lendAndBorrow": "Lend & Borrow", + "portfolio.tokenInfo.balance": "balance", + "portfolio.tokenInfo.marketPrice": "Market price", + "portfolio.tokenInfo.menuLabel.overview": "Overview", + "portfolio.tokenInfo.menuLabel.performance": "Performance", + "portfolio.tokenInfo.overview.description": "Description", + "portfolio.tokenInfo.overview.website": "Website", + "portfolio.tokenInfo.overview.policyId": "Policy ID", + "portfolio.tokenInfo.overview.fingerprint": "Fingerprint", + "portfolio.tokenInfo.overview.detailsOn": "Details on", + "portfolio.tokenInfo.performance.marketData": "Market data", + "portfolio.tokenInfo.performance.tokenPrice": "Token price", + "portfolio.tokenInfo.performance.marketCap": "Market cap", + "portfolio.tokenInfo.performance.24hVolumn": "24h volumn", + "portfolio.tokenInfo.performance.rank": "Rank", + "portfolio.tokenInfo.performance.circulating": "Circulating", + "portfolio.tokenInfo.performance.totalSupply": "Total supply", + "portfolio.tokenInfo.performance.maxSupply": "Max supply", + "portfolio.tokenInfo.performance.allTimeHigh": "All time high", + "portfolio.tokenInfo.performance.allTimeLow": "All time low", + "portfolio.statsTable.header.name": "Name", + "portfolio.statsTable.header.price": "Price", + "portfolio.chart.button.24H": "24H", + "portfolio.chart.button.1W": "1W", + "portfolio.chart.button.1M": "1M", + "portfolio.chart.button.6M": "6M", + "portfolio.chart.button.1Y": "1Y", + "portfolio.chart.button.ALL": "ALL", + "portfolio.statsTable.header.portfolio": "Portfolio", + "portfolio.statsTable.header.totalAmount": "Total amount", + "portfolio.transactionTable.title": "Transaction history", + "portfolio.transactionTable.header.transactionType": "Transaction type", + "portfolio.transactionTable.header.status": "Status", + "portfolio.transactionTable.header.fee": "Fee", + "portfolio.transactionTable.header.amount": "Amount", + "portfolio.transactionTable.timestamp.today": "Today", + "portfolio.transactionTable.timestamp.yesterday": "Yesterday", + "portfolio.transactionTable.label.sent": "Sent", + "portfolio.transactionTable.label.received": "Received", + "portfolio.transactionTable.label.transactionError": "Transaction error", + "portfolio.transactionTable.label.rewardWithdraw": "Reward withdrawn", + "portfolio.transactionTable.label.stakeDelegate": "Stake delegated", + "portfolio.transactionTable.status.low": "Low", + "portfolio.transactionTable.status.high": "High", + "portfolio.transactionTable.status.failed": "Failed", + "portfolio.transactionTable.amount.assets": "assets", + "portfolio.liquidityTable.header.tokenPair": "Token pair", + "portfolio.liquidityTable.header.firstTokenValue": "Token value 1", + "portfolio.liquidityTable.header.secondTokenValue": "Token value 2", + "portfolio.liquidityTable.header.lpTokens": "LP tokens", + "portfolio.orderTable.header.pair": "Pair (From / To)", + "portfolio.orderTable.header.assetPrice": "Asset price", + "portfolio.orderTable.header.assetAmount": "Asset amount", + "portfolio.orderTable.header.transactionId": "Transaction ID", + "portfolio.welcomeBanner.title": "Welcome to Yoroi", + "portfolio.welcomeBanner.description": "With new features and upgraded performance, transactions can be done faster and more securely than ever before." } From 5701f2611551b6115cfeccc1809d6968f03b5149 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 1 Aug 2024 13:00:44 +0300 Subject: [PATCH 399/464] fix dialog checkbox --- .../app/components/widgets/DangerousActionDialog.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/packages/yoroi-extension/app/components/widgets/DangerousActionDialog.js b/packages/yoroi-extension/app/components/widgets/DangerousActionDialog.js index d52e4dc267..1c5dfc4a80 100644 --- a/packages/yoroi-extension/app/components/widgets/DangerousActionDialog.js +++ b/packages/yoroi-extension/app/components/widgets/DangerousActionDialog.js @@ -49,11 +49,7 @@ class DangerousActionDialog extends Component { const dialogClasses = classnames(['removeWalletDialog', styles.dialog]); - const confirmButtonClasses = classnames([ - 'confirmButton', - styles.removeButton, - isSubmitting ? styles.isSubmitting : null, - ]); + const confirmButtonClasses = classnames(['confirmButton', styles.removeButton, isSubmitting ? styles.isSubmitting : null]); const actions = [ { @@ -91,14 +87,14 @@ class DangerousActionDialog extends Component { const revampLayout = ( {this.props.children} - + } id={id + '-acknowledgeAction-checkbox'} From cebd10076f4eee15bf05ecf986a1360c2e1cc2de Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 1 Aug 2024 13:18:22 +0300 Subject: [PATCH 400/464] sort completed orders --- .../app/containers/swap/orders/OrdersPage.js | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js b/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js index 58eb9ceb66..ef6efdf14d 100644 --- a/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js +++ b/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js @@ -120,6 +120,21 @@ export default function SwapOrdersPage(props: StoresAndActionsProps): Node { return date == null ? '-' : moment(date).format('MMM D, YYYY H:mm'); }; + const getComparableDate = txHash => { + const renderedTimestamp = txHashToRenderedTimestamp(txHash); + return renderedTimestamp === '-' ? null : moment(renderedTimestamp, 'MMM D, YYYY H:mm').toDate(); + }; + + const sortOrdersByDate = orders => { + return orders.sort((a, b) => { + const dateA = getComparableDate(a.txId); + const dateB = getComparableDate(b.txId); + if (dateA && dateB) { + return dateB - dateA; // Sort descending + } + return dateA ? -1 : 1; // Handle null dates + }); + }; const handleCancelRequest = async order => { setCancellationState({ order, tx: null }); try { @@ -244,6 +259,9 @@ export default function SwapOrdersPage(props: StoresAndActionsProps): Node { const isDisplayCompletedOrdersEmpty = showCompletedOrders && completedOrders?.length === 0; const safeColumnNames = isDisplayOpenOrdersEmpty || isDisplayCompletedOrdersEmpty ? [] : columnNames; + const sortedCompletedOrders = sortOrdersByDate(completedOrders); + + console.log('completedOrders', completedOrders); return ( @@ -274,7 +292,7 @@ export default function SwapOrdersPage(props: StoresAndActionsProps): Node { columnRightPaddings={['0px', '0px', '0px', '0px', '0px', '0px', '0px']} > {showCompletedOrders - ? completedOrders.map(order => ( + ? sortedCompletedOrders.map(order => ( Promise, txHashToRenderedTimestamp: string => string, |}) => { + console.log('transactionTimestamps[txHash]', txHashToRenderedTimestamp(order.txId)); return ( <> From 0eb13349aadfa9cf89029bb947c2e2fd29fc3c2a Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 1 Aug 2024 13:54:36 +0300 Subject: [PATCH 401/464] fix text alignment --- .../wallet/transactions/TransactionRevamp.js | 128 ++++-------------- 1 file changed, 28 insertions(+), 100 deletions(-) diff --git a/packages/yoroi-extension/app/components/wallet/transactions/TransactionRevamp.js b/packages/yoroi-extension/app/components/wallet/transactions/TransactionRevamp.js index c7f88c0d23..4a38bf5c25 100644 --- a/packages/yoroi-extension/app/components/wallet/transactions/TransactionRevamp.js +++ b/packages/yoroi-extension/app/components/wallet/transactions/TransactionRevamp.js @@ -5,10 +5,7 @@ import type { $npm$ReactIntl$IntlFormat } from 'react-intl'; import type { TransactionDirectionType } from '../../../api/ada/transactions/types'; import type { AssuranceLevel } from '../../../types/transactionAssurance.types'; import type { TxStatusCodesType } from '../../../api/ada/lib/storage/database/primitives/enums'; -import type { - CertificateRow, - TokenRow, -} from '../../../api/ada/lib/storage/database/primitives/tables'; +import type { CertificateRow, TokenRow } from '../../../api/ada/lib/storage/database/primitives/tables'; import type { TxMemoTableRow } from '../../../api/ada/lib/storage/database/memos/tables'; import type { Notification } from '../../../types/notification.types'; import type { TxDataOutput, TxDataInput } from '../../../api/common/types'; @@ -47,23 +44,11 @@ import CopyableAddress from '../../widgets/CopyableAddress'; import { genAddressLookup } from '../../../stores/stateless/addressStores'; import { MultiToken } from '../../../api/common/lib/MultiToken'; import { hiddenAmount } from '../../../utils/strings'; -import { - getTokenName, - getTokenIdentifierIfExists, - assetNameFromIdentifier, -} from '../../../stores/stateless/tokenHelpers'; -import { - parseMetadata, - parseMetadataDetailed, -} from '../../../api/ada/lib/storage/bridge/metadataUtils'; +import { getTokenName, getTokenIdentifierIfExists, assetNameFromIdentifier } from '../../../stores/stateless/tokenHelpers'; +import { parseMetadata, parseMetadataDetailed } from '../../../api/ada/lib/storage/bridge/metadataUtils'; import CodeBlock from '../../widgets/CodeBlock'; import { ComplexityLevels } from '../../../types/complexityLevelType'; -import { - assuranceLevelTranslations, - shelleyCertificateKinds, - stateTranslations, - messages, -} from './Transaction'; +import { assuranceLevelTranslations, shelleyCertificateKinds, stateTranslations, messages } from './Transaction'; type Props = {| +data: WalletTransaction, @@ -128,9 +113,7 @@ export default class TransactionRevamp extends Component { const features = data.getFeatures(); if ( (features.includes('Withdrawal') && features.length === 1) || - (features.includes('Withdrawal') && - features.includes('StakeDeregistration') && - features.length === 2) + (features.includes('Withdrawal') && features.includes('StakeDeregistration') && features.length === 2) ) { return { icon: 'reward', @@ -142,9 +125,7 @@ export default class TransactionRevamp extends Component { } if ( (features.includes('StakeDelegation') && features.length === 1) || - (features.includes('StakeDelegation') && - features.includes('StakeRegistration') && - features.length === 2) + (features.includes('StakeDelegation') && features.includes('StakeRegistration') && features.length === 2) ) { return { icon: 'stake', msg: intl.formatMessage(messages.stakeDelegated) }; } @@ -171,12 +152,7 @@ export default class TransactionRevamp extends Component { return { icon: '', msg: '???' }; } - getStatusString( - intl: $npm$ReactIntl$IntlFormat, - state: number, - assuranceLevel: AssuranceLevel, - isValid: boolean - ): string { + getStatusString(intl: $npm$ReactIntl$IntlFormat, state: number, assuranceLevel: AssuranceLevel, isValid: boolean): string { if (!isValid) { return intl.formatMessage(stateTranslations.failed); } @@ -206,15 +182,10 @@ export default class TransactionRevamp extends Component { const numberOfDecimals = tokenInfo?.Metadata.numberOfDecimals ?? 0; const shiftedAmount = request.entry.amount.shiftedBy(-numberOfDecimals); - const [beforeDecimalRewards, afterDecimalRewards] = splitAmount( - shiftedAmount, - numberOfDecimals - ); + const [beforeDecimalRewards, afterDecimalRewards] = splitAmount(shiftedAmount, numberOfDecimals); // we may need to explicitly add + for positive values - const adjustedBefore = beforeDecimalRewards.startsWith('-') - ? beforeDecimalRewards - : '+' + beforeDecimalRewards; + const adjustedBefore = beforeDecimalRewards.startsWith('-') ? beforeDecimalRewards : '+' + beforeDecimalRewards; if (request.getRawNumber === true) { return adjustedBefore + afterDecimalRewards; @@ -266,9 +237,7 @@ export default class TransactionRevamp extends Component { if (price != null) { const amount = calculateAndFormatValue(shiftedAmount, price); const [beforeDecimal, afterDecimal] = amount.split('.'); - const beforeDecimalWithSign = beforeDecimal.startsWith('-') - ? beforeDecimal - : '+' + beforeDecimal; + const beforeDecimalWithSign = beforeDecimal.startsWith('-') ? beforeDecimal : '+' + beforeDecimal; fiatDisplay = ( <> {beforeDecimalWithSign} @@ -300,7 +269,7 @@ export default class TransactionRevamp extends Component { } return ( - + {this.renderAmountDisplay({ entry: request.entry })} {this.getTicker(request.entry)} ); @@ -325,10 +294,7 @@ export default class TransactionRevamp extends Component { const tokenInfo = this.props.getTokenInfo(defaultEntry); const shiftedAmount = defaultEntry.amount.shiftedBy(-tokenInfo.Metadata.numberOfDecimals).abs(); - const [beforeDecimalRewards, afterDecimalRewards] = splitAmount( - shiftedAmount, - tokenInfo.Metadata.numberOfDecimals - ); + const [beforeDecimalRewards, afterDecimalRewards] = splitAmount(shiftedAmount, tokenInfo.Metadata.numberOfDecimals); if (this.props.unitOfAccountSetting.enabled) { const { currency } = this.props.unitOfAccountSetting; @@ -358,8 +324,7 @@ export default class TransactionRevamp extends Component { <> {beforeDecimalRewards} - {afterDecimalRewards}{' '} - {this.getTicker(defaultEntry)} + {afterDecimalRewards} {this.getTicker(defaultEntry)} {fiatDisplay} {currency} @@ -377,9 +342,7 @@ export default class TransactionRevamp extends Component { getTicker: TokenEntry => string = tokenEntry => { const tokenInfo = this.props.getTokenInfo(tokenEntry); - return tokenInfo != null - ? truncateToken(getTokenName(tokenInfo)) - : assetNameFromIdentifier(tokenEntry.identifier); + return tokenInfo != null ? truncateToken(getTokenName(tokenInfo)) : assetNameFromIdentifier(tokenEntry.identifier); }; getFingerprint: TokenEntry => string | void = tokenEntry => { @@ -456,12 +419,7 @@ export default class TransactionRevamp extends Component { })}{' '} {fingerprint !== undefined ? ( - + {this.getTicker(entry)} @@ -487,9 +445,7 @@ export default class TransactionRevamp extends Component { - this.props.onCopyAddressTooltip(request.address.address, notificationElementId) - } + onCopyAddress={() => this.props.onCopyAddressTooltip(request.address.address, notificationElementId)} notification={this.props.notification} placementTooltip="bottom-start" id={request.addressRowId} @@ -500,11 +456,7 @@ export default class TransactionRevamp extends Component { light linkType="address" > - + {truncateAddressShort(this.props.addressToDisplayString(request.address.address))} @@ -542,24 +494,18 @@ export default class TransactionRevamp extends Component { const contentStyles = classnames(styles.content); - const detailsStyles = classnames([ - styles.details, - isExpanded ? styles.expanded : styles.closed, - ]); + const detailsStyles = classnames([styles.details, isExpanded ? styles.expanded : styles.closed]); const arrowClasses = isExpanded ? styles.collapseArrow : styles.expandArrow; const status = this.getStatusString(intl, state, assuranceLevel, isValidTransaction); const txType = this.getTxType(intl, this.getTicker(data.amount.getDefaultEntry()), data); - const txIdBasePart = `${this.props.id}:transaction_${this.props.txIndex}` - const txIdFullInfoBasePart = `${txIdBasePart}:txFullInfo` + const txIdBasePart = `${this.props.id}:transaction_${this.props.txIndex}`; + const txIdFullInfoBasePart = `${txIdBasePart}:txFullInfo`; return ( - + {/* ==== Clickable Header -> toggles details ==== */} { justifyContent: 'flex-end', }} > - + {this.renderFeeDisplay({ amount: data.fee, type: data.type, @@ -652,9 +593,7 @@ export default class TransactionRevamp extends Component { gap: '8px', }} > - + { > {intl.formatMessage(globalMessages.fromAddresses)}:{' '} - + {data.addresses.from.length} @@ -778,10 +714,7 @@ export default class TransactionRevamp extends Component { > {intl.formatMessage(globalMessages.toAddresses)}:{' '} - + {data.addresses.to.length} @@ -818,10 +751,7 @@ export default class TransactionRevamp extends Component { {status}.{' '} - + {this.props.numberOfConfirmations} {' '} {intl.formatMessage(messages.confirmations)}. @@ -1040,9 +970,7 @@ export default class TransactionRevamp extends Component { const wrapCertificateText = (node, manyCerts) => ( - {manyCerts - ? intl.formatMessage(messages.certificatesLabel) - : intl.formatMessage(messages.certificateLabel)} + {manyCerts ? intl.formatMessage(messages.certificatesLabel) : intl.formatMessage(messages.certificateLabel)} {node} @@ -1055,7 +983,7 @@ export default class TransactionRevamp extends Component { return null; } const certBlock = data.certificates.reduce((acc, curr, idx) => { - const certComponentId=`${txIdFullInfoBasePart}-txCertificate_${idx}-text` + const certComponentId = `${txIdFullInfoBasePart}-txCertificate_${idx}-text`; const newElem = ( // eslint-disable-next-line react/no-array-index-key From 54f4eaa4a13362b03bcc91b12f83a413e68f5cb3 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 1 Aug 2024 14:34:27 +0300 Subject: [PATCH 402/464] removed console.logs --- .../yoroi-extension/app/containers/swap/orders/OrdersPage.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js b/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js index ef6efdf14d..18df1107ca 100644 --- a/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js +++ b/packages/yoroi-extension/app/containers/swap/orders/OrdersPage.js @@ -261,7 +261,6 @@ export default function SwapOrdersPage(props: StoresAndActionsProps): Node { const sortedCompletedOrders = sortOrdersByDate(completedOrders); - console.log('completedOrders', completedOrders); return ( @@ -352,7 +351,6 @@ const OrderRow = ({ handleCancel?: () => Promise, txHashToRenderedTimestamp: string => string, |}) => { - console.log('transactionTimestamps[txHash]', txHashToRenderedTimestamp(order.txId)); return ( <> From 02f783ec15428627fcca542e0a5decd33213b7df Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Thu, 1 Aug 2024 14:50:43 +0300 Subject: [PATCH 403/464] package-lock update --- packages/yoroi-extension/package-lock.json | 409 +++++++++++++++++---- 1 file changed, 347 insertions(+), 62 deletions(-) diff --git a/packages/yoroi-extension/package-lock.json b/packages/yoroi-extension/package-lock.json index 6b72bd2bd4..17700c915d 100644 --- a/packages/yoroi-extension/package-lock.json +++ b/packages/yoroi-extension/package-lock.json @@ -10,6 +10,7 @@ "license": "MIT", "dependencies": { "@amplitude/analytics-browser": "^2.1.3", + "@babel/preset-typescript": "^7.24.7", "@cardano-foundation/ledgerjs-hw-app-cardano": "7.1.3", "@emotion/react": "^11.4.1", "@emotion/styled": "^11.3.0", @@ -30,6 +31,7 @@ "@svgr/webpack": "5.5.0", "@yoroi/exchange": "2.0.1", "@yoroi/resolver": "2.0.2", + "@yoroi/staking": "^1.5.1", "@yoroi/swap": "1.5.2", "@yoroi/types": "1.5.4", "assert": "2.1.0", @@ -54,7 +56,7 @@ "dropbox": "4.0.30", "es6-error": "4.1.1", "file-saver": "2.0.5", - "immer": "10.1.1", + "immer": "^10.1.1", "jdenticon": "3.2.0", "lodash": "4.17.21", "lottie-react": "2.4.0", @@ -85,6 +87,8 @@ "stream-browserify": "3.0.0", "tinycolor2": "1.4.2", "trezor-connect-flow": "Emurgo/trezor-connect-flow#92d6d8c8faef25c0ea1d481aa1ecb4ba77ce539c", + "ts-loader": "^9.5.1", + "typescript": "^5.4.5", "ua-parser-js": "1.0.37", "url": "0.11.3", "util": "0.12.5" @@ -111,6 +115,9 @@ "@emurgo/cardano-serialization-lib-nodejs": "12.0.0-alpha.26", "@emurgo/cross-csl-nodejs": "4.4.0", "@pmmmwh/react-refresh-webpack-plugin": "0.5.11", + "@types/chrome": "^0.0.268", + "@types/react-intl": "^3.0.0", + "@types/react-router-dom": "^5.3.3", "@yoroi/common": "1.5.0", "autoprefixer": "10.2.4", "babel-eslint": "11.0.0-beta.2", @@ -140,6 +147,7 @@ "eslint-plugin-prettier": "3.3.1", "eslint-plugin-promise": "4.3.1", "eslint-plugin-react": "7.22.0", + "eslint-plugin-simple-import-sort": "^12.1.0", "file-loader": "6.2.0", "flow-bin": "0.142.0", "flow-typed": "3.3.1", @@ -238,6 +246,19 @@ "node": ">=12.0.0" } }, + "node_modules/@amplitude/ampli/node_modules/typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, "node_modules/@amplitude/analytics-browser": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/@amplitude/analytics-browser/-/analytics-browser-2.8.1.tgz", @@ -437,11 +458,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", - "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", "dependencies": { - "@babel/types": "^7.24.7", + "@babel/types": "^7.25.0", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -497,18 +518,16 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz", - "integrity": "sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz", + "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.8", "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/helper-replace-supers": "^7.24.7", + "@babel/helper-replace-supers": "^7.25.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/traverse": "^7.25.0", "semver": "^6.3.1" }, "engines": { @@ -585,12 +604,12 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.7.tgz", - "integrity": "sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", + "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -638,9 +657,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", - "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", "engines": { "node": ">=6.9.0" } @@ -662,13 +681,13 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz", - "integrity": "sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", + "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.7", - "@babel/helper-optimise-call-expression": "^7.24.7" + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -713,9 +732,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", - "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", "engines": { "node": ">=6.9.0" } @@ -799,9 +818,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", - "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", + "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "dependencies": { + "@babel/types": "^7.25.2" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -1256,6 +1278,20 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", + "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", @@ -1816,6 +1852,24 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz", + "integrity": "sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-syntax-typescript": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-unicode-escapes": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", @@ -1972,6 +2026,24 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-typescript": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz", + "integrity": "sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "@babel/plugin-syntax-jsx": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.7", + "@babel/plugin-transform-typescript": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/register": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.12.13.tgz", @@ -2012,31 +2084,28 @@ } }, "node_modules/@babel/template": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", - "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", "dependencies": { "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", - "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", + "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", "dependencies": { "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-hoist-variables": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2045,11 +2114,11 @@ } }, "node_modules/@babel/types": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", - "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", + "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", "dependencies": { - "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-string-parser": "^7.24.8", "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, @@ -6303,6 +6372,16 @@ "@types/responselike": "^1.0.0" } }, + "node_modules/@types/chrome": { + "version": "0.0.268", + "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.0.268.tgz", + "integrity": "sha512-7N1QH9buudSJ7sI8Pe4mBHJr5oZ48s0hcanI9w3wgijAlv1OZNUZve9JR4x42dn5lJ5Sm87V1JNfnoh10EnQlA==", + "dev": true, + "dependencies": { + "@types/filesystem": "*", + "@types/har-format": "*" + } + }, "node_modules/@types/connect": { "version": "3.4.38", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", @@ -6381,6 +6460,21 @@ "@types/send": "*" } }, + "node_modules/@types/filesystem": { + "version": "0.0.36", + "resolved": "https://registry.npmjs.org/@types/filesystem/-/filesystem-0.0.36.tgz", + "integrity": "sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA==", + "dev": true, + "dependencies": { + "@types/filewriter": "*" + } + }, + "node_modules/@types/filewriter": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/filewriter/-/filewriter-0.0.33.tgz", + "integrity": "sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==", + "dev": true + }, "node_modules/@types/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", @@ -6400,6 +6494,18 @@ "@types/node": "*" } }, + "node_modules/@types/har-format": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@types/har-format/-/har-format-1.2.15.tgz", + "integrity": "sha512-RpQH4rXLuvTXKR0zqHq3go0RVXYv/YVqv4TnPH95VbwUxZdQlK1EtcMvQvMpDngHbt13Csh9Z4qT9AbkiQH5BA==", + "dev": true + }, + "node_modules/@types/history": { + "version": "4.7.11", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", + "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==", + "dev": true + }, "node_modules/@types/hoist-non-react-statics": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", @@ -6606,6 +6712,16 @@ "csstype": "^3.0.2" } }, + "node_modules/@types/react-intl": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/react-intl/-/react-intl-3.0.0.tgz", + "integrity": "sha512-k8F3d05XQGEqSWIfK97bBjZe4z9RruXU9Wa7OZ2iUC5pdeIpzuQDZe/9C2J3Xir5//ZtAkhcv08Wfx3n5TBTQg==", + "deprecated": "This is a stub types definition. react-intl provides its own type definitions, so you do not need this installed.", + "dev": true, + "dependencies": { + "react-intl": "*" + } + }, "node_modules/@types/react-redux": { "version": "7.1.33", "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.33.tgz", @@ -6617,6 +6733,27 @@ "redux": "^4.0.0" } }, + "node_modules/@types/react-router": { + "version": "5.1.20", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", + "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", + "dev": true, + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*" + } + }, + "node_modules/@types/react-router-dom": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", + "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", + "dev": true, + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "*" + } + }, "node_modules/@types/react-transition-group": { "version": "4.4.10", "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz", @@ -7140,6 +7277,59 @@ "node": ">= 6" } }, + "node_modules/@yoroi/staking": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@yoroi/staking/-/staking-1.5.1.tgz", + "integrity": "sha512-CgJhPR7rf07QSstwdhPt5C+P8jNuZiqv3s4+ODlj8x60johIl6/5sz2vt+zGcx4R8pzFw1D/pDyFmdw0BDvzlg==", + "dependencies": { + "@emurgo/cip14-js": "^3.0.1", + "bech32": "^2.0.0", + "bip39": "^3.1.0", + "immer": "^10.0.2" + }, + "engines": { + "node": ">= 16.19.0" + }, + "optionalDependencies": { + "@react-native-async-storage/async-storage": "^1.19.3" + }, + "peerDependencies": { + "@react-native-async-storage/async-storage": ">= 1.19.3 <= 1.20.0", + "react": ">= 16.8.0 <= 19.0.0", + "react-query": "^3.39.3" + } + }, + "node_modules/@yoroi/staking/node_modules/@emurgo/cip14-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@emurgo/cip14-js/-/cip14-js-3.0.1.tgz", + "integrity": "sha512-u0XobeajNSlmeGBmY3ntA+NE/Vns7hKP0xrFzWyAO7YubETOifTjUddJN4gpvXE4S08DPUcNBVe3sx1m5GPIOg==", + "dependencies": { + "bech32": "2.0.0", + "blake2b": "2.1.3" + } + }, + "node_modules/@yoroi/staking/node_modules/blake2b": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/blake2b/-/blake2b-2.1.3.tgz", + "integrity": "sha512-pkDss4xFVbMb4270aCyGD3qLv92314Et+FsKzilCLxDz5DuZ2/1g3w4nmBbu6nKApPspnjG7JcwTjGZnduB1yg==", + "dependencies": { + "blake2b-wasm": "^1.1.0", + "nanoassert": "^1.0.0" + } + }, + "node_modules/@yoroi/staking/node_modules/blake2b-wasm": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/blake2b-wasm/-/blake2b-wasm-1.1.7.tgz", + "integrity": "sha512-oFIHvXhlz/DUgF0kq5B1CqxIDjIJwh9iDeUUGQUcvgiGz7Wdw03McEO7CfLBy7QKGdsydcMCgO9jFNBAFCtFcA==", + "dependencies": { + "nanoassert": "^1.0.0" + } + }, + "node_modules/@yoroi/staking/node_modules/nanoassert": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-1.1.0.tgz", + "integrity": "sha512-C40jQ3NzfkP53NsO8kEOFd79p4b9kDXQMwgiY1z8ZwrDZgUyom0AHwGegF4Dm99L+YoYhuaB0ceerUcXmqr1rQ==" + }, "node_modules/@yoroi/swap": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/@yoroi/swap/-/swap-1.5.2.tgz", @@ -12235,7 +12425,6 @@ "version": "5.17.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", - "dev": true, "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -12852,6 +13041,15 @@ "node": ">=0.10.0" } }, + "node_modules/eslint-plugin-simple-import-sort": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-12.1.1.tgz", + "integrity": "sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==", + "dev": true, + "peerDependencies": { + "eslint": ">=5.0.0" + } + }, "node_modules/eslint-scope": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", @@ -14734,8 +14932,7 @@ "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "node_modules/graphql": { "version": "15.8.0", @@ -19932,7 +20129,6 @@ "version": "4.0.7", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", - "dev": true, "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -26052,7 +26248,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, "engines": { "node": ">=6" } @@ -26577,6 +26772,97 @@ "integrity": "sha512-e4g0EJtAjk64xgnFPD6kTBUtpnMVzDrMb12N1YZV0VvSlhnVT3SGxiYTLdGy8Q5cYHOIC/FAHmZ10eGrAguicQ==", "dev": true }, + "node_modules/ts-loader": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", + "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/ts-loader/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ts-loader/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ts-loader/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ts-loader/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/ts-loader/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-loader/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/ts-loader/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", @@ -26765,16 +27051,15 @@ "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==" }, "node_modules/typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", - "dev": true, + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/typescript-compiler": { From 38e797ac1b12344ab5dcbfc7e625f6f34f5a7619 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 1 Aug 2024 15:07:57 +0300 Subject: [PATCH 404/464] fix route --- .../containers/swap/asset-swap/SwapPage.js | 65 +++++-------------- 1 file changed, 18 insertions(+), 47 deletions(-) diff --git a/packages/yoroi-extension/app/containers/swap/asset-swap/SwapPage.js b/packages/yoroi-extension/app/containers/swap/asset-swap/SwapPage.js index 741669c5b8..5b7bf8f718 100644 --- a/packages/yoroi-extension/app/containers/swap/asset-swap/SwapPage.js +++ b/packages/yoroi-extension/app/containers/swap/asset-swap/SwapPage.js @@ -47,13 +47,7 @@ function SwapPage(props: StoresAndActionsProps): Node { }, frontendFeeTiersChanged, } = useSwap(); - const { - sellTokenInfo, - buyTokenInfo, - resetSwapForm, - sellQuantity, - buyQuantity, - } = useSwapForm(); + const { sellTokenInfo, buyTokenInfo, resetSwapForm, sellQuantity, buyQuantity } = useSwapForm(); const isMarketOrder = orderType === 'market'; const impact = isMarketOrder ? Number(selectedPoolCalculation?.prices.priceImpact ?? 0) : 0; @@ -77,30 +71,25 @@ function SwapPage(props: StoresAndActionsProps): Node { ); const swapFormCanContinue = - selectedPoolCalculation != null - && sell.quantity !== '0' - && buy.quantity !== '0' - && sellQuantity.error == null - && buyQuantity.error == null - && isValidTickers; + selectedPoolCalculation != null && + sell.quantity !== '0' && + buy.quantity !== '0' && + sellQuantity.error == null && + buyQuantity.error == null && + isValidTickers; const confirmationCanContinue = userPasswordState.value !== '' && signRequest != null; const isButtonLoader = orderStep === 1 && signRequest == null; - const isSwapEnabled = - (orderStep === 0 && swapFormCanContinue) - || (orderStep === 1 && confirmationCanContinue); + const isSwapEnabled = (orderStep === 0 && swapFormCanContinue) || (orderStep === 1 && confirmationCanContinue); const wallet = props.stores.wallets.selectedOrFail; const network = wallet.getParent().getNetworkInfo(); - const defaultTokenInfo = props.stores.tokenInfoStore.getDefaultTokenInfoSummary( - network.NetworkId - ); - const getTokenInfoBatch: Array => { [string]: Promise } = ids => + const defaultTokenInfo = props.stores.tokenInfoStore.getDefaultTokenInfoSummary(network.NetworkId); + const getTokenInfoBatch: (Array) => { [string]: Promise } = ids => props.stores.tokenInfoStore.fetchMissingAndGetLocalOrRemoteMetadata(network, ids); - const getTokenInfo: string => Promise = id => - getTokenInfoBatch([id])[id].then(res => res ?? {}); + const getTokenInfo: string => Promise = id => getTokenInfoBatch([id])[id].then(res => res ?? {}); const disclaimerFlag = props.stores.substores.ada.swapStore.swapDisclaimerAcceptanceFlag; @@ -279,21 +268,13 @@ function SwapPage(props: StoresAndActionsProps): Node { } } - const onRemoteOrderDataResolved: any => Promise = async ({ - contractAddress, - datum, - datumHash, - }) => { + const onRemoteOrderDataResolved: any => Promise = async ({ contractAddress, datum, datumHash }) => { // creating tx if (selectedPoolCalculation == null) { - throw new Error( - 'Incorrect state. Pool calculations are not available to prepare the transaction' - ); + throw new Error('Incorrect state. Pool calculations are not available to prepare the transaction'); } if (contractAddress == null || datum == null || datumHash == null) { - throw new Error( - `Incorrect remote order resolve! ${JSON.stringify({ contractAddress, datum, datumHash })}` - ); + throw new Error(`Incorrect remote order resolve! ${JSON.stringify({ contractAddress, datum, datumHash })}`); } const { pool: { provider: poolProvider, deposit, batcherFee }, @@ -312,9 +293,7 @@ function SwapPage(props: StoresAndActionsProps): Node { ptFees, poolProvider, }; - const txSignRequest: HaskellShelleyTxSignRequest = await props.stores.substores.ada.swapStore.createUnsignedSwapTx( - swapTxReq - ); + const txSignRequest: HaskellShelleyTxSignRequest = await props.stores.substores.ada.swapStore.createUnsignedSwapTx(swapTxReq); runInAction(() => { setSignRequest(txSignRequest); }); @@ -323,11 +302,7 @@ function SwapPage(props: StoresAndActionsProps): Node { return ( <> - + {orderStep === 0 && ( { - props.actions.router.goToRoute.trigger({ route: ROUTES.SWAP.ORDERS }); + props.actions.router.goToRoute.trigger({ route: ROUTES.WALLETS.ROOT }); }} /> )} @@ -373,11 +348,7 @@ function SwapPage(props: StoresAndActionsProps): Node { sx={{ height: '97px' }} > {orderStep === 1 && ( - )} From d4606c3bb0fe806f122ca0c326735c7708758ebf Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Thu, 1 Aug 2024 17:45:47 +0300 Subject: [PATCH 405/464] Version bump: 5.2.301 (nightly) --- packages/yoroi-extension/package-lock.json | 4 ++-- packages/yoroi-extension/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/yoroi-extension/package-lock.json b/packages/yoroi-extension/package-lock.json index 17700c915d..a0360280a9 100644 --- a/packages/yoroi-extension/package-lock.json +++ b/packages/yoroi-extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "yoroi", - "version": "5.2.300", + "version": "5.2.301", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "yoroi", - "version": "5.2.300", + "version": "5.2.301", "license": "MIT", "dependencies": { "@amplitude/analytics-browser": "^2.1.3", diff --git a/packages/yoroi-extension/package.json b/packages/yoroi-extension/package.json index b5e08d7930..5d477a736c 100644 --- a/packages/yoroi-extension/package.json +++ b/packages/yoroi-extension/package.json @@ -1,6 +1,6 @@ { "name": "yoroi", - "version": "5.2.300", + "version": "5.2.301", "description": "Cardano ADA wallet", "scripts": { "dev-mv2": "rimraf dev/ && NODE_OPTIONS=--openssl-legacy-provider babel-node scripts-mv2/build --type=debug --env 'mainnet'", From 50a4b37be85346a966b7cad010262ac746053d83 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Fri, 2 Aug 2024 19:50:33 +0300 Subject: [PATCH 406/464] safe metadata parsing --- packages/yoroi-extension/app/coreUtils.js | 7 +++++++ .../app/domain/CardanoShelleyTransaction.js | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/coreUtils.js b/packages/yoroi-extension/app/coreUtils.js index a0a64b3a73..075c2b399e 100644 --- a/packages/yoroi-extension/app/coreUtils.js +++ b/packages/yoroi-extension/app/coreUtils.js @@ -166,3 +166,10 @@ export function cast(t: any): T { // $FlowIgnore return t; } + +/** + * Returns true in case the argument is a null, undefined, or an empty array + */ +export function nullOrEmptyArray(t: any): boolean { + return t == null || (Array.isArray(t) && t.length === 0); +} diff --git a/packages/yoroi-extension/app/domain/CardanoShelleyTransaction.js b/packages/yoroi-extension/app/domain/CardanoShelleyTransaction.js index 2b6cce2257..221afae460 100644 --- a/packages/yoroi-extension/app/domain/CardanoShelleyTransaction.js +++ b/packages/yoroi-extension/app/domain/CardanoShelleyTransaction.js @@ -17,6 +17,7 @@ import { MultiToken } from '../api/common/lib/MultiToken'; import { parseMetadata } from '../api/ada/lib/storage/bridge/metadataUtils'; import { CatalystLabels } from '../api/ada/lib/cardanoCrypto/catalyst'; import { RustModule } from '../api/ada/lib/cardanoCrypto/rustLoader'; +import { nullOrEmptyArray } from '../coreUtils'; export type CardanoShelleyTransactionFeature = | 'CatalystVotingRegistration' @@ -137,7 +138,7 @@ export default class CardanoShelleyTransaction extends WalletTransaction { } isCatalystVotingRegistration(): boolean { - if (this.metadata === null) { + if (nullOrEmptyArray(this.metadata)) { return false; } const metadataString = parseMetadata(this.metadata); From 9c46ec0008886a147eca4dd92b412380616e98c8 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Mon, 5 Aug 2024 16:54:12 +0300 Subject: [PATCH 407/464] flow fixes --- packages/yoroi-extension/app/coreUtils.js | 6 +++--- .../yoroi-extension/app/domain/CardanoShelleyTransaction.js | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/yoroi-extension/app/coreUtils.js b/packages/yoroi-extension/app/coreUtils.js index 075c2b399e..d88cc5e144 100644 --- a/packages/yoroi-extension/app/coreUtils.js +++ b/packages/yoroi-extension/app/coreUtils.js @@ -168,8 +168,8 @@ export function cast(t: any): T { } /** - * Returns true in case the argument is a null, undefined, or an empty array + * Returns true in case the argument is an empty array */ -export function nullOrEmptyArray(t: any): boolean { - return t == null || (Array.isArray(t) && t.length === 0); +export function isEmptyArray(t: any): boolean { + return Array.isArray(t) && t.length === 0; } diff --git a/packages/yoroi-extension/app/domain/CardanoShelleyTransaction.js b/packages/yoroi-extension/app/domain/CardanoShelleyTransaction.js index 221afae460..98376c71e5 100644 --- a/packages/yoroi-extension/app/domain/CardanoShelleyTransaction.js +++ b/packages/yoroi-extension/app/domain/CardanoShelleyTransaction.js @@ -17,7 +17,7 @@ import { MultiToken } from '../api/common/lib/MultiToken'; import { parseMetadata } from '../api/ada/lib/storage/bridge/metadataUtils'; import { CatalystLabels } from '../api/ada/lib/cardanoCrypto/catalyst'; import { RustModule } from '../api/ada/lib/cardanoCrypto/rustLoader'; -import { nullOrEmptyArray } from '../coreUtils'; +import { isEmptyArray } from '../coreUtils'; export type CardanoShelleyTransactionFeature = | 'CatalystVotingRegistration' @@ -138,7 +138,7 @@ export default class CardanoShelleyTransaction extends WalletTransaction { } isCatalystVotingRegistration(): boolean { - if (nullOrEmptyArray(this.metadata)) { + if (this.metadata == null || isEmptyArray(this.metadata)) { return false; } const metadataString = parseMetadata(this.metadata); From e068b4da43b0cd9de72af518e777b67f29225528 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Tue, 6 Aug 2024 12:06:17 +0300 Subject: [PATCH 408/464] wip --- .../DelagationForm/DelagationForm.tsx | 10 +++--- .../GovernanceStatusSelection.tsx | 8 ++--- .../complexity-level/ComplexityLevelForm.js | 31 +++++++------------ 3 files changed, 20 insertions(+), 29 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx index d853a9ee1e..b0f8c19995 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx @@ -59,15 +59,14 @@ export const DelagationForm = () => { const strings = useStrings(); React.useEffect(() => { - console.log('txDelegationError', txDelegationError); - console.log('txDelegationResult', txDelegationResult); const signTx = async () => { const result = await signDelegationTransaction({ password, publicDeriver: selectedWallet, dialog: null, }); - + console.log('result', result); + setFormLoading(false); navigateTo.transactionSubmited(); try { } catch (error) { @@ -80,7 +79,7 @@ export const DelagationForm = () => { if (txDelegationResult != null && password.length > 0) { signTx(); } - }, [txDelegationResult, txDelegationError]); + }, [txDelegationResult, txDelegationError, password]); const confirmDelegation = async () => { const response = await checkUserPassword(password); @@ -88,8 +87,9 @@ export const DelagationForm = () => { setIsIncorectPassword(true); } else { try { - setFormLoading(true); await createDrepDelegationTransaction(governanceVote.kind === 'delegate' ? governanceVote.drepID : governanceVote.kind); + setFormLoading(false); + setPassword(''); } catch (error) { console.log('ERROR on createDrepDelegationTransaction', error); setFormLoading(false); diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx index 4505891769..59b67a6102 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx @@ -89,7 +89,7 @@ export const GovernanceStatusSelection = () => { icon: , selected: governanceStatus !== null ? true : false, onClick: handleDelegate, - pending: pendingVote, + pending: governanceStatus === null, }, { title: strings.abstain, @@ -97,7 +97,7 @@ export const GovernanceStatusSelection = () => { icon: , selected: governanceStatus === 'abstain' ? true : false, onClick: handleAbstain, - pending: pendingVote, + pending: governanceStatus === null, }, { title: strings.noConfidence, @@ -105,7 +105,7 @@ export const GovernanceStatusSelection = () => { icon: , selected: governanceStatus === 'no-confidence' ? true : false, onClick: handleNoConfidence, - pending: pendingVote, + pending: governanceStatus === null, }, ]; @@ -140,7 +140,7 @@ export const GovernanceStatusSelection = () => { {governanceStatus && ( - `${strings.drepId} ${governanceStatus}` + {strings.drepId} {governanceStatus} )} {governanceStatus === null && ( diff --git a/packages/yoroi-extension/app/components/profile/complexity-level/ComplexityLevelForm.js b/packages/yoroi-extension/app/components/profile/complexity-level/ComplexityLevelForm.js index 1a4e933be9..7e4a516c20 100644 --- a/packages/yoroi-extension/app/components/profile/complexity-level/ComplexityLevelForm.js +++ b/packages/yoroi-extension/app/components/profile/complexity-level/ComplexityLevelForm.js @@ -92,18 +92,13 @@ class ComplexityLevel extends Component { return ( {isRevampLayout && ( - + {intl.formatMessage(settingsMenuMessages.levelOfComplexity)} )} - { {complexityLevel && ( - { {...messages.selectedLevelLabel} values={{ level: intl.formatMessage( - complexityLevel === ComplexityLevels.Advanced - ? messages.titleAdvancedLevel - : messages.titleSimpleLevel + complexityLevel === ComplexityLevels.Advanced ? messages.titleAdvancedLevel : messages.titleSimpleLevel ), }} /> @@ -165,10 +159,7 @@ class ComplexityLevel extends Component { textAlign: 'center', p: '1px', border: 'solid 1px transparent', - background: theme => - isSelected - ? theme.palette.gradients.green - : 'linear-gradient( 0deg, var(--yoroi-palette-common-white), var(--yoroi-palette-common-white)), linear-gradient(180deg, #e4e8f7 0%, #c6f7f7 100%)', + background: theme => (isSelected ? theme.palette.ds.bg_gradient_1 : theme.palette.ds.bg_gradient_3), backgroundClip: 'content-box, border-box', backgroundOrigin: 'border-box', borderRadius: '8px', @@ -201,7 +192,9 @@ class ComplexityLevel extends Component { {level.name} - {level.description} + + {level.description} + @@ -212,9 +205,7 @@ class ComplexityLevel extends Component {
    {levels.map(level => (
    -
    - {level.image} -
    +
    {level.image}

    {level.name}

    From 4881f0821c2feccfb8f213ff556c8396b452d4ea Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Tue, 6 Aug 2024 14:49:26 +0300 Subject: [PATCH 409/464] update api --- packages/yoroi-extension/app/Routes.js | 1 - .../module/GovernanceContextProvider.tsx | 20 +++++++---- .../DelagationForm/DelagationForm.tsx | 35 +++++-------------- .../GovernanceStatusSelection.tsx | 33 ++++++++--------- .../yoroi-extension/app/stores/lib/Request.js | 1 - 5 files changed, 37 insertions(+), 53 deletions(-) diff --git a/packages/yoroi-extension/app/Routes.js b/packages/yoroi-extension/app/Routes.js index 0a137da5ce..2228f765af 100644 --- a/packages/yoroi-extension/app/Routes.js +++ b/packages/yoroi-extension/app/Routes.js @@ -517,7 +517,6 @@ export function wrapGovernance(governanceProps: StoresAndActionsProps, children: const { delegationTransaction } = governanceProps.stores.substores.ada; const delegationTxResult = delegationTransaction.createDelegationTx.result; const delegationTxError = delegationTransaction.createDelegationTx.error; - console.log('delegationTx result', delegationTxResult); return ( Response, signDelegationTransaction: async (_params: any) => Response, selectedWallet: null, - governanceStatus: undefined, + governanceStatus: { status: null, drep: null }, }; const GovernanceContext = React.createContext(initialGovernanceProvider); @@ -48,7 +49,7 @@ export const GovernanceContextProvider = ({ }); const [stakingKeyHash, setStakingKeyHash] = React.useState(null); const [stakingKeyHex, setStakingKeyHex] = React.useState(null); - const [governanceStatus, setGovernanceStatus] = React.useState(null); + const [governanceStatus, setGovernanceStatus] = React.useState({ status: null, drep: null }); const { walletId, networkId, currentPool, selectedWallet, backendService, backendServiceZero } = currentWallet; const governanceManager = useGovernanceManagerMaker(walletId, networkId); @@ -106,11 +107,18 @@ export const GovernanceContextProvider = ({ networkId: networkId, wasmFactory: RustModule.CrossCsl.init, }); - console.log('[getGovApiState stakingKeyHex]', stakingKeyHex); - const governanceStatusState = await govApi.getAccountState(stakingKeyHex || '', stakingKeyHex || ''); + const governanceStatusState: any = await govApi.getAccountState(stakingKeyHex || '', stakingKeyHex || ''); - setGovernanceStatus(governanceStatusState?.drepDelegation?.drep || null); + if (governanceStatusState && governanceStatusState.drepDelegation?.drep === 'abstain') { + setGovernanceStatus({ status: DREP_ALWAYS_ABSTAIN, drep: null }); + } else if (governanceStatusState && governanceStatusState.drepDelegation?.drep === 'no_confidence') { + setGovernanceStatus({ status: DREP_ALWAYS_NO_CONFIDENCE, drep: null }); + } else if (governanceStatusState !== null && governanceStatusState.drepDelegation?.drep.length > 0) { + setGovernanceStatus({ status: 'delegate', drep: governanceStatusState.drepDelegation?.drep || null }); + } else { + setGovernanceStatus({ status: 'none', drep: null }); + } }; const actions = React.useRef({ diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx index b0f8c19995..8f97ea256d 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx @@ -50,48 +50,29 @@ export const DelagationForm = () => { governanceVote, checkUserPassword, createDrepDelegationTransaction, - txDelegationResult, - txDelegationError, selectedWallet, signDelegationTransaction, } = useGovernance(); const strings = useStrings(); - - React.useEffect(() => { - const signTx = async () => { - const result = await signDelegationTransaction({ - password, - publicDeriver: selectedWallet, - dialog: null, - }); - console.log('result', result); - setFormLoading(false); - navigateTo.transactionSubmited(); - try { - } catch (error) { - console.log('ERROR on signDelegationTransaction', error); - setFormLoading(false); - navigateTo.transactionFail(); - } - }; - - if (txDelegationResult != null && password.length > 0) { - signTx(); - } - }, [txDelegationResult, txDelegationError, password]); - const confirmDelegation = async () => { const response = await checkUserPassword(password); if (response?.name === 'WrongPassphraseError') { setIsIncorectPassword(true); } else { try { + setFormLoading(true); await createDrepDelegationTransaction(governanceVote.kind === 'delegate' ? governanceVote.drepID : governanceVote.kind); + await signDelegationTransaction({ + password, + publicDeriver: selectedWallet, + dialog: null, + }); setFormLoading(false); + navigateTo.transactionSubmited(); setPassword(''); } catch (error) { - console.log('ERROR on createDrepDelegationTransaction', error); + console.warn('[createDrepDelegationTransaction,signDelegationTransaction]', error); setFormLoading(false); navigateTo.transactionFail(); } diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx index 59b67a6102..6bfe02f961 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx @@ -29,22 +29,19 @@ const Container = styled(Box)(() => ({ export const mapStatus = { delegate: 'Delegate to a Drep', - DREP_ALWAYS_ABSTAIN: 'Abstaining', - DREP_ALWAYS_NO_CONFIDENCE: 'No confidence', + ALWAYS_ABSTAIN: 'Abstaining', + ALWAYS_NO_CONFIDENCE: 'No confidence', }; export const GovernanceStatusSelection = () => { - const [pendingVote] = React.useState(false); const { governanceStatus, governanceManager, governanceVoteChanged } = useGovernance(); const navigateTo = useNavigateTo(); const { openModal } = useModal(); const strings = useStrings(); - console.log('[governanceStatus]', governanceStatus); - - const pageTitle = governanceStatus ? strings.governanceStatus : strings.registerGovernance; - const statusRawText = mapStatus['delegate']; - const pageSubtitle = governanceStatus === null ? strings.reviewSelection : strings.statusSelected(statusRawText); + const pageTitle = governanceStatus.status !== 'none' ? strings.governanceStatus : strings.registerGovernance; + const statusRawText = mapStatus[governanceStatus.status || '']; + const pageSubtitle = governanceStatus.status === 'none' ? strings.reviewSelection : strings.statusSelected(statusRawText); const openDRepIdModal = (onSubmit: (drepID: string) => void) => { if (!governanceManager) { @@ -84,28 +81,28 @@ export const GovernanceStatusSelection = () => { const optionsList = [ { - title: governanceStatus ? strings.delegateingToDRep : strings.delegateToDRep, + title: governanceStatus.status === 'delegate' ? strings.delegateingToDRep : strings.delegateToDRep, description: strings.designatingSomeoneElse, icon: , - selected: governanceStatus !== null ? true : false, + selected: governanceStatus.status === 'delegate' ? true : false, onClick: handleDelegate, - pending: governanceStatus === null, + pending: governanceStatus.status === null, }, { title: strings.abstain, description: strings.abstainInfo, icon: , - selected: governanceStatus === 'abstain' ? true : false, + selected: governanceStatus.status === DREP_ALWAYS_ABSTAIN ? true : false, onClick: handleAbstain, - pending: governanceStatus === null, + pending: governanceStatus.status === null, }, { title: strings.noConfidence, description: strings.noConfidenceInfo, icon: , - selected: governanceStatus === 'no-confidence' ? true : false, + selected: governanceStatus.status === DREP_ALWAYS_NO_CONFIDENCE ? true : false, onClick: handleNoConfidence, - pending: governanceStatus === null, + pending: governanceStatus.status === null, }, ]; @@ -138,12 +135,12 @@ export const GovernanceStatusSelection = () => { - {governanceStatus && ( + {governanceStatus.drep !== null && ( - {strings.drepId} {governanceStatus} + {strings.drepId} {governanceStatus.drep} )} - {governanceStatus === null && ( + {governanceStatus.status === 'none' && ( {strings.becomeADrep} diff --git a/packages/yoroi-extension/app/stores/lib/Request.js b/packages/yoroi-extension/app/stores/lib/Request.js index 35f817e4bd..9c012eeeca 100644 --- a/packages/yoroi-extension/app/stores/lib/Request.js +++ b/packages/yoroi-extension/app/stores/lib/Request.js @@ -82,7 +82,6 @@ export default class Request Promise, Err> { }), 1 ); - console.log('EXECUTE RESULT', result); return result; }) .catch( From 37dcd139c2fe6cab067e3ccfc6af948f7b641a81 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Tue, 6 Aug 2024 14:51:03 +0300 Subject: [PATCH 410/464] remove unused files --- ...eCreateAndSendDrepDelegationTransaction.ts | 11 ------ .../governace/api/useDrepDelegationState.ts | 37 ------------------- 2 files changed, 48 deletions(-) delete mode 100644 packages/yoroi-extension/app/UI/features/governace/api/useCreateAndSendDrepDelegationTransaction.ts delete mode 100644 packages/yoroi-extension/app/UI/features/governace/api/useDrepDelegationState.ts diff --git a/packages/yoroi-extension/app/UI/features/governace/api/useCreateAndSendDrepDelegationTransaction.ts b/packages/yoroi-extension/app/UI/features/governace/api/useCreateAndSendDrepDelegationTransaction.ts deleted file mode 100644 index d8ad5c1f73..0000000000 --- a/packages/yoroi-extension/app/UI/features/governace/api/useCreateAndSendDrepDelegationTransaction.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Vote } from '../module/state'; - -export const useCreateAndSendDrepDelegationTransaction = ({ - walletId, - governanceVote, -}: { - walletId: string; - governanceVote: Vote; -}): void => { - localStorage.setItem(`Governance - ${walletId}`, JSON.stringify(governanceVote)); -}; diff --git a/packages/yoroi-extension/app/UI/features/governace/api/useDrepDelegationState.ts b/packages/yoroi-extension/app/UI/features/governace/api/useDrepDelegationState.ts deleted file mode 100644 index f006e48204..0000000000 --- a/packages/yoroi-extension/app/UI/features/governace/api/useDrepDelegationState.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { useQuery } from 'react-query'; - -type PoolTransition = { - kind: null | 'none' | 'delegate' | 'abstain' | 'no-confidence'; - drepID: 'drep1c93a2zvs3aw8e4naez0ynpmc48jbc7yaa3n2k8ljhwfdt70yscts' | null; -}; - -// TODO mock impementation - add real endpoint -export const getDrepDelegationState = async (walletId: string): Promise => { - const storage = localStorage.getItem(`Governance - ${walletId}`); - - if (storage === null || storage === undefined) { - return new Promise(resolve => { - resolve({ - kind: 'none', - drepID: null, - }); - }); - } else { - const parsedStorage = JSON.parse(storage); - return new Promise(resolve => { - resolve({ - kind: parsedStorage.kind, - drepID: parsedStorage?.drepID ?? null, - }); - }); - } -}; - -export const useDrepDelegationState = (walletId: string): any => { - const DrepDelegationQuery = useQuery({ - queryKey: [walletId, 'DrepDelegationState'], - queryFn: () => getDrepDelegationState(walletId), - }); - - return DrepDelegationQuery; -}; From 1664895c00c9bd5d4dad91b62fda95abb4e95d21 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Tue, 6 Aug 2024 14:53:57 +0300 Subject: [PATCH 411/464] removed console.log --- packages/yoroi-extension/app/stores/toplevel/DelegationStore.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js b/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js index d816c1299c..ad51b36d65 100644 --- a/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js +++ b/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js @@ -282,7 +282,6 @@ export default class DelegationStore extends Store { }; createDrepDelegationTransaction: string => Promise = async drepCredential => { - console.log('STORE CREATE DELEGATION drepCredential ', drepCredential); await this.stores.substores.ada.delegationTransaction.createTransaction({ drepCredential, publicDeriver: this.stores.wallets.selectedOrFail, From 372eaa27e71b72f687693f7280e23ac37597ddb1 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Tue, 6 Aug 2024 15:05:36 +0300 Subject: [PATCH 412/464] fix flow --- .../app/stores/toplevel/DelegationStore.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js b/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js index ad51b36d65..17b5bd21fa 100644 --- a/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js +++ b/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js @@ -14,10 +14,16 @@ import { forceNonNull, maybe } from '../../coreUtils'; import LocalizableError from '../../i18n/LocalizableError'; import Store from '../base/Store'; import type { StoresMap } from '../index'; +import type { + GetDelegatedBalanceFunc, + GetDelegatedBalanceResponse, + RewardHistoryFunc, +} from '../../api/ada/lib/storage/bridge/delegationUtils'; import CachedRequest from '../lib/LocalizedCachedRequest'; import LocalizedRequest from '../lib/LocalizedRequest'; -import type { MangledAmountsResponse } from '../stateless/mangledAddresses'; - +import type { MangledAmountsResponse, MangledAmountFunc } from '../stateless/mangledAddresses'; +import type { NetworkRow } from '../../api/ada/lib/storage/database/primitives/tables'; +import type { ExplorerPoolInfo as PoolInfo } from '@emurgo/yoroi-lib'; import { RustModule } from '../../api/ada/lib/cardanoCrypto/rustLoader'; export type DelegationRequests = {| From c28963ae8f0ead0ccb5ea31fee14bd7ec2894d33 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 7 Aug 2024 14:19:47 +0300 Subject: [PATCH 413/464] add try again on click handler --- .../UI/components/TransactionFailed/TransactionFailed.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/yoroi-extension/app/UI/components/TransactionFailed/TransactionFailed.tsx b/packages/yoroi-extension/app/UI/components/TransactionFailed/TransactionFailed.tsx index 98d539f21c..fcf0100d83 100644 --- a/packages/yoroi-extension/app/UI/components/TransactionFailed/TransactionFailed.tsx +++ b/packages/yoroi-extension/app/UI/components/TransactionFailed/TransactionFailed.tsx @@ -1,10 +1,12 @@ +import { Button, Stack, Typography } from '@mui/material'; import React from 'react'; -import { Stack, Typography, Button } from '@mui/material'; -import { FailedIlustration } from './FailedIlustration'; import { FormattedMessage } from 'react-intl'; import globalMessages from '../../../i18n/global-messages'; +import { useNavigateTo } from '../../features/governace/common/useNavigateTo'; +import { FailedIlustration } from './FailedIlustration'; export const TransactionFailed = () => { + const navigate = useNavigateTo(); return ( @@ -15,7 +17,7 @@ export const TransactionFailed = () => { {/* @ts-ignore */} - From 5faa2a229180ca658a6d1d725b7481e2028ccbd8 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 7 Aug 2024 14:35:09 +0300 Subject: [PATCH 414/464] fix info display --- .../features/governace/common/useStrings.tsx | 8 +-- .../DelagationForm/DelagationForm.tsx | 51 ++++++++++--------- .../GovernanceStatusSelection.tsx | 2 +- .../app/i18n/locales/en-US.json | 4 +- .../app/i18n/locales/hu-HU.json | 4 +- .../app/i18n/locales/vi-VN.json | 4 +- 6 files changed, 39 insertions(+), 34 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/governace/common/useStrings.tsx b/packages/yoroi-extension/app/UI/features/governace/common/useStrings.tsx index d30048949e..d1c4f39582 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/useStrings.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/common/useStrings.tsx @@ -45,8 +45,8 @@ export const messages = Object.freeze( id: 'governance.delegateToDRep', defaultMessage: '!!!Delegate to a DRep', }, - delegateingToDRep: { - id: 'governance.delegateingToDRep', + delegatingToDRep: { + id: 'governance.delegatingToDRep', defaultMessage: '!!!Delegating to a DRep', }, designatingSomeoneElse: { @@ -127,7 +127,7 @@ export const useStrings = () => { const { intl } = useIntl(); return React.useRef({ delegateToDRep: intl.formatMessage(messages.delegateToDRep), - delegateingToDRep: intl.formatMessage(messages.delegateingToDRep), + delegatingToDRep: intl.formatMessage(messages.delegatingToDRep), designatingSomeoneElse: intl.formatMessage(messages.designatingSomeoneElse), governanceStatus: intl.formatMessage(messages.governanceStatus), governanceStatusInfo: intl.formatMessage(messages.governanceStatusInfo), @@ -146,7 +146,7 @@ export const useStrings = () => { transactionDetails: intl.formatMessage(messages.transactionDetails), operations: intl.formatMessage(messages.operations), selectAbstein: intl.formatMessage(messages.selectAbstein), - selectNoConfidenc: intl.formatMessage(messages.selectNoConfidenc), + selectNoConfidence: intl.formatMessage(messages.selectNoConfidenc), back: intl.formatMessage(messages.back), confirm: intl.formatMessage(messages.confirm), total: intl.formatMessage(messages.total), diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx index 8f97ea256d..4d9e442687 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx @@ -7,6 +7,7 @@ import Typography from '@mui/material/Typography'; import * as React from 'react'; import { Collapsible } from '../../../../components/Collapsible/Collapsible'; import { PasswordInput } from '../../../../components/Input/PasswordInput'; +import { DREP_ALWAYS_ABSTAIN, DREP_ALWAYS_NO_CONFIDENCE } from '../../common/constants'; import { useNavigateTo } from '../../common/useNavigateTo'; import { useStrings } from '../../common/useStrings'; import { useGovernance } from '../../module/GovernanceContextProvider'; @@ -114,30 +115,11 @@ export const DelagationForm = () => { content={ {governanceVote.kind === 'delegate' && ( - <> - {`Delegate voting to ${governanceVote.drepID}`} - - - Transaction fee - - - 0.5 ADA - - - + )} - {governanceVote.kind === 'abstain' && ( - <> - {strings.selectAbstein} - - )} - {governanceVote.kind === 'no-confidence' && ( - <> - {strings.selectNoConfidenc} - + {governanceVote.kind === DREP_ALWAYS_ABSTAIN && } + {governanceVote.kind === DREP_ALWAYS_NO_CONFIDENCE && ( + )} } @@ -171,3 +153,26 @@ export const DelagationForm = () => { ); }; + +type OperationInfoProps = { + label: string; + fee: string; +}; + +const OperationInfo = ({ label, fee }: OperationInfoProps) => { + return ( + <> + + {label} + + + + Transaction fee + + + {fee} ADA + + + + ); +}; diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx index 6bfe02f961..06c4234fa5 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx @@ -81,7 +81,7 @@ export const GovernanceStatusSelection = () => { const optionsList = [ { - title: governanceStatus.status === 'delegate' ? strings.delegateingToDRep : strings.delegateToDRep, + title: governanceStatus.status === 'delegate' ? strings.delegatingToDRep : strings.delegateToDRep, description: strings.designatingSomeoneElse, icon: , selected: governanceStatus.status === 'delegate' ? true : false, diff --git a/packages/yoroi-extension/app/i18n/locales/en-US.json b/packages/yoroi-extension/app/i18n/locales/en-US.json index 91f9219b55..48ac38e886 100644 --- a/packages/yoroi-extension/app/i18n/locales/en-US.json +++ b/packages/yoroi-extension/app/i18n/locales/en-US.json @@ -1037,7 +1037,7 @@ "yoroiTransfer.waiting.progressInfo.restoringAddresses": "Fetching addresses", "yoroiTransfer.waiting.title.label": "Wallet is being restored", "gouvernace.delegateToDRep": "Delegate to a DRep", - "gouvernace.delegateingToDRep": "Delegateing to a DRep", + "gouvernace.delegatingToDRep": "Delegating to a DRep", "gouvernace.designatingSomeoneElse": "You are designating someone else to cast your vote on your behalf for all proposals now and in the future.", "gouvernace.governanceStatus": "Governance status", "gouvernace.governanceStatusInfo": "Governance status", @@ -1060,7 +1060,7 @@ "gouvernace.selectNoConfidenc": "Select no confidence", "gouvernace.designatedSomeone": "You are designating someone else to cast your vote on your behalf for all proposals now and in the future.", "governance.delegateToDRep": "Delegate to a DRep", - "governance.delegateingToDRep": "Delegateing to a DRep", + "governance.delegatingToDRep": "Delegating to a DRep", "governance.designatingSomeoneElse": "You are designating someone else to cast your vote on your behalf for all proposals now and in the future.", "governance.governanceStatus": "Governance status", "governance.governanceStatusInfo": "Governance status", diff --git a/packages/yoroi-extension/app/i18n/locales/hu-HU.json b/packages/yoroi-extension/app/i18n/locales/hu-HU.json index 5ea7f991cc..c98c76a779 100644 --- a/packages/yoroi-extension/app/i18n/locales/hu-HU.json +++ b/packages/yoroi-extension/app/i18n/locales/hu-HU.json @@ -1037,7 +1037,7 @@ "yoroiTransfer.waiting.progressInfo.restoringAddresses": "Fetching addresses", "yoroiTransfer.waiting.title.label": "Wallet is being restored", "gouvernace.delegateToDRep": "Delegate to a DRep", - "gouvernace.delegateingToDRep": "Delegateing to a DRep", + "gouvernace.delegatingToDRep": "Delegating to a DRep", "gouvernace.designatingSomeoneElse": "You are designating someone else to cast your vote on your behalf for all proposals now and in the future.", "gouvernace.governanceStatus": "Governance status", "gouvernace.governanceStatusInfo": "Governance status", @@ -1060,7 +1060,7 @@ "gouvernace.selectNoConfidenc": "Select no confidence", "gouvernace.designatedSomeone": "You are designating someone else to cast your vote on your behalf for all proposals now and in the future.", "governance.delegateToDRep": "Delegate to a DRep", - "governance.delegateingToDRep": "Delegateing to a DRep", + "governance.delegatingToDRep": "Delegating to a DRep", "governance.designatingSomeoneElse": "You are designating someone else to cast your vote on your behalf for all proposals now and in the future.", "governance.governanceStatus": "Governance status", "governance.governanceStatusInfo": "Governance status", diff --git a/packages/yoroi-extension/app/i18n/locales/vi-VN.json b/packages/yoroi-extension/app/i18n/locales/vi-VN.json index 124aaa3063..747de16f40 100644 --- a/packages/yoroi-extension/app/i18n/locales/vi-VN.json +++ b/packages/yoroi-extension/app/i18n/locales/vi-VN.json @@ -1037,7 +1037,7 @@ "yoroiTransfer.waiting.progressInfo.restoringAddresses": "Đang tìm nạp địa chỉ", "yoroiTransfer.waiting.title.label": "Ví đang được khôi phục", "gouvernace.delegateToDRep": "Delegate to a DRep", - "gouvernace.delegateingToDRep": "Delegateing to a DRep", + "gouvernace.delegatingToDRep": "Delegating to a DRep", "gouvernace.designatingSomeoneElse": "You are designating someone else to cast your vote on your behalf for all proposals now and in the future.", "gouvernace.governanceStatus": "Governance status", "gouvernace.governanceStatusInfo": "Governance status", @@ -1060,7 +1060,7 @@ "gouvernace.selectNoConfidenc": "Select no confidence", "gouvernace.designatedSomeone": "You are designating someone else to cast your vote on your behalf for all proposals now and in the future.", "governance.delegateToDRep": "Delegate to a DRep", - "governance.delegateingToDRep": "Delegateing to a DRep", + "governance.delegatingToDRep": "Delegating to a DRep", "governance.designatingSomeoneElse": "You are designating someone else to cast your vote on your behalf for all proposals now and in the future.", "governance.governanceStatus": "Governance status", "governance.governanceStatusInfo": "Governance status", From 34eaf07a14d9f47431fd67c2edcaee36a8b2aad3 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 7 Aug 2024 14:45:15 +0300 Subject: [PATCH 415/464] add skeleton, fix label --- .../governace/useCases/DelagationForm/DelagationForm.tsx | 3 ++- .../SelectGovernanceStatus/GovernanceStatusSelection.tsx | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx index 4d9e442687..b9159a8f50 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx @@ -11,6 +11,7 @@ import { DREP_ALWAYS_ABSTAIN, DREP_ALWAYS_NO_CONFIDENCE } from '../../common/con import { useNavigateTo } from '../../common/useNavigateTo'; import { useStrings } from '../../common/useStrings'; import { useGovernance } from '../../module/GovernanceContextProvider'; +import { mapStatus } from '../SelectGovernanceStatus/GovernanceStatusSelection'; const Container = styled(Box)(() => ({ paddingTop: '23px', @@ -88,7 +89,7 @@ export const DelagationForm = () => { - {strings.delegateToDRep} + {mapStatus[governanceVote.kind || '']} {strings.designatedSomeone} diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx index 06c4234fa5..8fd1987546 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx @@ -117,7 +117,7 @@ export const GovernanceStatusSelection = () => { {pageSubtitle} - {true + {governanceStatus.status !== null ? optionsList.map((option, index) => { return ( Date: Wed, 7 Aug 2024 17:53:56 +0300 Subject: [PATCH 416/464] refactor --- packages/yoroi-extension/app/Routes.js | 3 +- .../module/GovernanceContextProvider.tsx | 4 +- .../DelagationForm/DelagationForm.tsx | 21 ++++++++-- .../GovernanceStatusSelection.tsx | 38 ++++++++++++++----- 4 files changed, 51 insertions(+), 15 deletions(-) diff --git a/packages/yoroi-extension/app/Routes.js b/packages/yoroi-extension/app/Routes.js index ad3f828ab4..649b86e1be 100644 --- a/packages/yoroi-extension/app/Routes.js +++ b/packages/yoroi-extension/app/Routes.js @@ -559,7 +559,7 @@ export function wrapGovernance(governanceProps: StoresAndActionsProps, children: const { delegationTransaction } = governanceProps.stores.substores.ada; const delegationTxResult = delegationTransaction.createDelegationTx.result; const delegationTxError = delegationTransaction.createDelegationTx.error; - + console.log('delegationTxResult', delegationTxResult); return ( {children}; diff --git a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx index 4c4197c86a..26579f4ce6 100644 --- a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx @@ -33,6 +33,7 @@ type GovernanceProviderProps = { txDelegationResult: any; txDelegationError: any; signDelegationTransaction: (params: any) => Promise; + tokenInfo: any; }; export const GovernanceContextProvider = ({ @@ -42,6 +43,7 @@ export const GovernanceContextProvider = ({ txDelegationResult, txDelegationError, signDelegationTransaction, + tokenInfo, }: GovernanceProviderProps) => { if (!currentWallet?.selectedWallet) throw new Error(`requires a wallet to be selected`); const [state, dispatch] = React.useReducer(GovernanceReducer, { @@ -52,7 +54,6 @@ export const GovernanceContextProvider = ({ const [governanceStatus, setGovernanceStatus] = React.useState({ status: null, drep: null }); const { walletId, networkId, currentPool, selectedWallet, backendService, backendServiceZero } = currentWallet; const governanceManager = useGovernanceManagerMaker(walletId, networkId); - // TODO to me moved in rootStore and use this globbaly whenever we need just a wallet password check const checkUserPassword = async (password: string): Promise => { try { @@ -148,6 +149,7 @@ export const GovernanceContextProvider = ({ signDelegationTransaction, governanceStatus, selectedWallet: currentWallet.selectedWallet, + tokenInfo, }; return {children}; diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx index b9159a8f50..3312cc513b 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx @@ -5,6 +5,7 @@ import Stack from '@mui/material/Stack'; import { styled } from '@mui/material/styles'; import Typography from '@mui/material/Typography'; import * as React from 'react'; +import { genFormatTokenAmount, genLookupOrFail } from '../../../../../stores/stateless/tokenHelpers'; import { Collapsible } from '../../../../components/Collapsible/Collapsible'; import { PasswordInput } from '../../../../components/Input/PasswordInput'; import { DREP_ALWAYS_ABSTAIN, DREP_ALWAYS_NO_CONFIDENCE } from '../../common/constants'; @@ -46,6 +47,7 @@ const Actions = styled(Stack)(() => ({ export const DelagationForm = () => { const [password, setPassword] = React.useState(''); const [formLoading, setFormLoading] = React.useState(false); + const [txFee, setTxFee] = React.useState(''); const [isIncorectPasswaord, setIsIncorectPassword] = React.useState(false); const navigateTo = useNavigateTo(); const { @@ -54,8 +56,19 @@ export const DelagationForm = () => { createDrepDelegationTransaction, selectedWallet, signDelegationTransaction, + txDelegationResult, + tokenInfo, } = useGovernance(); + React.useEffect(() => { + if (txDelegationResult != null) { + const rawFee = txDelegationResult?.signTxRequest.fee(); + const getTokenInfo = genLookupOrFail(tokenInfo); + const formatValue = genFormatTokenAmount(getTokenInfo); + setTxFee(formatValue(rawFee.getDefaultEntry())); + } + }, [txDelegationResult]); + const strings = useStrings(); const confirmDelegation = async () => { const response = await checkUserPassword(password); @@ -100,7 +113,7 @@ export const DelagationForm = () => { - 0.5 ADA + {txFee} ADA 0.15 USD @@ -116,11 +129,11 @@ export const DelagationForm = () => { content={ {governanceVote.kind === 'delegate' && ( - + )} - {governanceVote.kind === DREP_ALWAYS_ABSTAIN && } + {governanceVote.kind === DREP_ALWAYS_ABSTAIN && } {governanceVote.kind === DREP_ALWAYS_NO_CONFIDENCE && ( - + )} } diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx index 8fd1987546..3872cc0240 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx @@ -4,8 +4,8 @@ import Link from '@mui/material/Link'; import Typography from '@mui/material/Typography'; import { styled } from '@mui/material/styles'; import { GovernanceProvider } from '@yoroi/staking'; - import * as React from 'react'; +import { NotEnoughMoneyToSendError } from '../../../../../api/common/errors'; import { useModal } from '../../../../components/modals/ModalContext'; import { ChooseDRepModal } from '../../common/ChooseDRepModal'; import { GovernanceVoteingCard } from '../../common/GovernanceVoteingCard'; @@ -34,9 +34,10 @@ export const mapStatus = { }; export const GovernanceStatusSelection = () => { - const { governanceStatus, governanceManager, governanceVoteChanged } = useGovernance(); + const { governanceStatus, governanceManager, governanceVoteChanged, createDrepDelegationTransaction } = useGovernance(); + const [error, setError] = React.useState(null); const navigateTo = useNavigateTo(); - const { openModal } = useModal(); + const { openModal, closeModal } = useModal(); const strings = useStrings(); const pageTitle = governanceStatus.status !== 'none' ? strings.governanceStatus : strings.registerGovernance; @@ -59,24 +60,38 @@ export const GovernanceStatusSelection = () => { }); }; - const handleDelegate = () => { + const handleDelegate = async () => { openDRepIdModal(drepID => { const vote: Vote = { kind: 'delegate', drepID }; + createUnsignTx(drepID); governanceVoteChanged(vote); - navigateTo.delegationForm(); }); }; - const handleAbstain = () => { + const handleAbstain = async () => { + await createUnsignTx(DREP_ALWAYS_ABSTAIN); const vote: Vote = { kind: DREP_ALWAYS_ABSTAIN }; governanceVoteChanged(vote); - navigateTo.delegationForm(); }; - const handleNoConfidence = () => { + const handleNoConfidence = async () => { + await createUnsignTx(DREP_ALWAYS_NO_CONFIDENCE); const vote: Vote = { kind: DREP_ALWAYS_NO_CONFIDENCE }; governanceVoteChanged(vote); - navigateTo.delegationForm(); + }; + + const createUnsignTx = async kind => { + try { + await createDrepDelegationTransaction(kind); + setError(null); + navigateTo.delegationForm(); + } catch (e) { + if (e instanceof NotEnoughMoneyToSendError) { + setError('Not enoght ADA to Vote'); + closeModal(); + } + return; + } }; const optionsList = [ @@ -135,6 +150,11 @@ export const GovernanceStatusSelection = () => { + {error && ( + + {error} + + )} {governanceStatus.drep !== null && ( {strings.drepId} {governanceStatus.drep} From e0ddc09f53dbd4a5e401bd037f364af3bd38c381 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 7 Aug 2024 18:26:38 +0300 Subject: [PATCH 417/464] Add alert --- .../SelectGovernanceStatus/GovernanceStatusSelection.tsx | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx index 3872cc0240..1eb7af34cb 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx @@ -1,4 +1,4 @@ -import { Stack } from '@mui/material'; +import { Alert, Stack } from '@mui/material'; import Box from '@mui/material/Box'; import Link from '@mui/material/Link'; import Typography from '@mui/material/Typography'; @@ -150,11 +150,7 @@ export const GovernanceStatusSelection = () => { - {error && ( - - {error} - - )} + {error && {error}} {governanceStatus.drep !== null && ( {strings.drepId} {governanceStatus.drep} From 3e1a20f58fd1c718f04cefc6cddbe21a1f210398 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 7 Aug 2024 18:27:27 +0300 Subject: [PATCH 418/464] fix typo --- .../SelectGovernanceStatus/GovernanceStatusSelection.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx index 1eb7af34cb..3b159274b8 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx @@ -87,7 +87,7 @@ export const GovernanceStatusSelection = () => { navigateTo.delegationForm(); } catch (e) { if (e instanceof NotEnoughMoneyToSendError) { - setError('Not enoght ADA to Vote'); + setError('Not enough ADA to Vote'); closeModal(); } return; From dbc10e0c08757d713288264dd06ec8b7882a6eec Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 8 Aug 2024 10:37:31 +0300 Subject: [PATCH 419/464] add fiat conversion --- packages/yoroi-extension/app/Routes.js | 2 +- .../app/UI/features/governace/common/helpers.ts | 16 ++++++++++++++++ .../module/GovernanceContextProvider.tsx | 17 ++++++++++++++++- .../useCases/DelagationForm/DelagationForm.tsx | 8 +++++--- 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/packages/yoroi-extension/app/Routes.js b/packages/yoroi-extension/app/Routes.js index 649b86e1be..be9565ded4 100644 --- a/packages/yoroi-extension/app/Routes.js +++ b/packages/yoroi-extension/app/Routes.js @@ -559,7 +559,7 @@ export function wrapGovernance(governanceProps: StoresAndActionsProps, children: const { delegationTransaction } = governanceProps.stores.substores.ada; const delegationTxResult = delegationTransaction.createDelegationTx.result; const delegationTxError = delegationTransaction.createDelegationTx.error; - console.log('delegationTxResult', delegationTxResult); + return ( { if (!state.drepDelegation) return null; const vote = state.drepDelegation; @@ -54,7 +57,20 @@ export const createCurrrentWalletInfo = (stores: any) => { networkId, walletId: currentWalletId, selectedWallet: selectedWallet, + unitOfAccount: stores.profile.unitOfAccount, + defaultTokenInfo: stores.tokenInfoStore.getDefaultTokenInfoSummary(networkId), + getCurrentPrice: stores.coinPriceStore.getCurrentPrice, backendService, backendServiceZero, }; }; + +// extract this and fix all places where it's duplicated +export const getFormattedPairingValue = (getCurrentPrice, defaultTokenInfo, unitOfAccount, lovelaces: string): string => { + const { currency } = unitOfAccount; + if (currency == null || defaultTokenInfo.ticker == null) return '-'; + const price = getCurrentPrice(defaultTokenInfo.ticker, currency); + const shiftedAmount = new BigNumber(lovelaces).shiftedBy(-(defaultTokenInfo.decimals ?? 0)); + const val = price ? calculateAndFormatValue(shiftedAmount, price) : '-'; + return `${val} ${currency}`; +}; diff --git a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx index 26579f4ce6..79b0fc9533 100644 --- a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx @@ -5,6 +5,7 @@ import { RustModule } from '../../../../api/ada/lib/cardanoCrypto/rustLoader'; import { unwrapStakingKey } from '../../../../api/ada/lib/storage/bridge/utils'; import { asGetSigningKey, asGetStakingKey } from '../../../../api/ada/lib/storage/models/PublicDeriver/traits'; import { DREP_ALWAYS_ABSTAIN, DREP_ALWAYS_NO_CONFIDENCE } from '../common/constants'; +import { getFormattedPairingValue } from '../common/helpers'; import { useGovernanceManagerMaker } from '../common/useGovernanceManagerMaker'; import { GovernanceActionType, GovernanceReducer, defaultGovernanceActions, defaultGovernanceState } from './state'; @@ -18,6 +19,8 @@ const initialGovernanceProvider = { checkUserPassword: (_password: string) => Response, txDelegationResult: null, txDelegationError: null, + tokenInfo: null, + getFormattedPairingAmount: (_amount: string) => Response, createDrepDelegationTransaction: async (_drepCredential: string) => Response, signDelegationTransaction: async (_params: any) => Response, selectedWallet: null, @@ -52,7 +55,17 @@ export const GovernanceContextProvider = ({ const [stakingKeyHash, setStakingKeyHash] = React.useState(null); const [stakingKeyHex, setStakingKeyHex] = React.useState(null); const [governanceStatus, setGovernanceStatus] = React.useState({ status: null, drep: null }); - const { walletId, networkId, currentPool, selectedWallet, backendService, backendServiceZero } = currentWallet; + const { + walletId, + networkId, + currentPool, + selectedWallet, + backendService, + defaultTokenInfo, + unitOfAccount, + getCurrentPrice, + backendServiceZero, + } = currentWallet; const governanceManager = useGovernanceManagerMaker(walletId, networkId); // TODO to me moved in rootStore and use this globbaly whenever we need just a wallet password check const checkUserPassword = async (password: string): Promise => { @@ -150,6 +163,8 @@ export const GovernanceContextProvider = ({ governanceStatus, selectedWallet: currentWallet.selectedWallet, tokenInfo, + getFormattedPairingAmount: (amount: string) => + getFormattedPairingValue(getCurrentPrice, defaultTokenInfo, unitOfAccount, amount), }; return {children}; diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx index 3312cc513b..d20bfd9461 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx @@ -47,7 +47,7 @@ const Actions = styled(Stack)(() => ({ export const DelagationForm = () => { const [password, setPassword] = React.useState(''); const [formLoading, setFormLoading] = React.useState(false); - const [txFee, setTxFee] = React.useState(''); + const [txFee, setTxFee] = React.useState(''); const [isIncorectPasswaord, setIsIncorectPassword] = React.useState(false); const navigateTo = useNavigateTo(); const { @@ -58,11 +58,13 @@ export const DelagationForm = () => { signDelegationTransaction, txDelegationResult, tokenInfo, + getFormattedPairingAmount, } = useGovernance(); React.useEffect(() => { if (txDelegationResult != null) { - const rawFee = txDelegationResult?.signTxRequest.fee(); + // @ts-ignore + const rawFee = txDelegationResult.signTxRequest.fee(); const getTokenInfo = genLookupOrFail(tokenInfo); const formatValue = genFormatTokenAmount(getTokenInfo); setTxFee(formatValue(rawFee.getDefaultEntry())); @@ -116,7 +118,7 @@ export const DelagationForm = () => { {txFee} ADA - 0.15 USD + {String(getFormattedPairingAmount(String(Number(txFee) * 1000000)))} From aa235f9c3b98fdd6fb042e9f22ccedf5ecb525de Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 8 Aug 2024 11:28:25 +0300 Subject: [PATCH 420/464] wip --- .../ada/AdaDelegationTransactionStore.js | 23 +++++++------- .../yoroi-extension/app/stores/lib/Request.js | 2 +- .../app/stores/toplevel/DelegationStore.js | 30 ++++++++++--------- 3 files changed, 27 insertions(+), 28 deletions(-) diff --git a/packages/yoroi-extension/app/stores/ada/AdaDelegationTransactionStore.js b/packages/yoroi-extension/app/stores/ada/AdaDelegationTransactionStore.js index 9e14a50953..4e2bb6151d 100644 --- a/packages/yoroi-extension/app/stores/ada/AdaDelegationTransactionStore.js +++ b/packages/yoroi-extension/app/stores/ada/AdaDelegationTransactionStore.js @@ -1,22 +1,22 @@ // @flow +import { observable, action, reaction } from 'mobx'; import BigNumber from 'bignumber.js'; -import { action, observable, reaction } from 'mobx'; -import type { ActionsMap } from '../../actions/index'; +import Store from '../base/Store'; +import LocalizedRequest from '../lib/LocalizedRequest'; import type { CreateDelegationTxFunc, CreateWithdrawalTxResponse } from '../../api/ada'; -import { isLedgerNanoWallet, isTrezorTWallet } from '../../api/ada/lib/storage/models/ConceptualWallet/index'; -import { PublicDeriver } from '../../api/ada/lib/storage/models/PublicDeriver/index'; +import { buildRoute } from '../../utils/routing'; +import { ROUTES } from '../../routes-config'; import { - asGetAllAccounting, asGetAllUtxos, - asGetPublicKey, asHasUtxoChains, + asGetAllAccounting, + asGetPublicKey, } from '../../api/ada/lib/storage/models/PublicDeriver/traits'; -import { ROUTES } from '../../routes-config'; -import { buildRoute } from '../../utils/routing'; -import Store from '../base/Store'; +import { PublicDeriver } from '../../api/ada/lib/storage/models/PublicDeriver/index'; +import { isLedgerNanoWallet, isTrezorTWallet } from '../../api/ada/lib/storage/models/ConceptualWallet/index'; +import type { ActionsMap } from '../../actions/index'; import type { StoresMap } from '../index'; -import LocalizedRequest from '../lib/LocalizedRequest'; export type CreateWithdrawalTxRequest = LocalizedRequest>; @@ -112,13 +112,10 @@ export default class AdaDelegationTransactionStore extends Store Date: Thu, 8 Aug 2024 13:13:53 +0300 Subject: [PATCH 421/464] add hover text --- .../common/GovernanceVoteingCard.tsx | 53 ++++++++++++------- .../GovernanceStatusSelection.tsx | 7 +++ 2 files changed, 42 insertions(+), 18 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.tsx b/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.tsx index 68219180db..bd2001bdf8 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.tsx @@ -8,7 +8,9 @@ import LoadingSpinner from '../../../../components/widgets/LoadingSpinner'; type Props = { title: string; + titleHover?: string; description: string; + descriptionHover?: string; icon: React.ReactNode; selected: boolean; onClick: () => void; @@ -61,21 +63,36 @@ const SpinnerBox = styled(Box)(() => ({ top: 15, })); -export const GovernanceVoteingCard = ({ title, description, icon, selected, onClick, pending = false }: Props) => ( - - {pending && selected && ( - - - - )} - - {icon} - - {title} - - - {description} - - - -); +export const GovernanceVoteingCard = ({ + title, + description, + descriptionHover, + titleHover, + icon, + selected, + onClick, + pending = false, +}: Props) => { + const [hover, onHover] = React.useState(false); + console.log('titleHover', titleHover); + return ( +
    onHover(true)} onMouseLeave={() => onHover(false)}> + + {pending && selected && ( + + + + )} + + {icon} + + {hover && titleHover ? titleHover : title} + + + {descriptionHover && hover ? descriptionHover : description} + + + +
    + ); +}; diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx index 3b159274b8..c30efb1312 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx @@ -97,7 +97,12 @@ export const GovernanceStatusSelection = () => { const optionsList = [ { title: governanceStatus.status === 'delegate' ? strings.delegatingToDRep : strings.delegateToDRep, + titleHover: governanceStatus.status === 'delegate' ? 'Change DRep' : strings.delegateToDRep, description: strings.designatingSomeoneElse, + descriptionHover: + governanceStatus.status === 'delegate' + ? `Current DRep selection: ${governanceStatus.drep}` + : strings.designatingSomeoneElse, icon: , selected: governanceStatus.status === 'delegate' ? true : false, onClick: handleDelegate, @@ -138,7 +143,9 @@ export const GovernanceStatusSelection = () => { Date: Thu, 8 Aug 2024 13:32:37 +0300 Subject: [PATCH 422/464] add Governance tab in preview --- .../yoroi-extension/app/stores/stateless/sidebarCategories.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js b/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js index 65b5e16bf5..7f9ca81870 100644 --- a/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js +++ b/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js @@ -181,7 +181,9 @@ export const allCategoriesRevamp: Array = [ route: '/governance', icon: governanceIcon, label: globalMessages.sidebarGovernance, - isVisible: ({ selected }) => environment.isDev() && selected?.getParent().getNetworkInfo().NetworkId === 450, + isVisible: ({ selected }) => + (environment.isDev() && selected?.getParent().getNetworkInfo().NetworkId === 450) || + (environment.isDev() && selected?.getParent().getNetworkInfo().NetworkId === 350), }, { className: 'settings', From 46d1249029868b1ede450b555d5c255d70f7e437 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 8 Aug 2024 13:39:02 +0300 Subject: [PATCH 423/464] change request based on network --- .../UI/features/governace/module/GovernanceContextProvider.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx index 79b0fc9533..824a571df9 100644 --- a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx @@ -117,7 +117,7 @@ export const GovernanceContextProvider = ({ const getGovApiState = async () => { const govApi = new GovernanceApi({ oldBackendUrl: String(backendService), - newBackendUrl: String(backendServiceZero), + newBackendUrl: String(networkId === 350 ? backendService : backendServiceZero), networkId: networkId, wasmFactory: RustModule.CrossCsl.init, }); From ea2fa1edfd148a8d5e3806e29e2b61923728a4b6 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 8 Aug 2024 13:47:34 +0300 Subject: [PATCH 424/464] remove console.log --- .../app/UI/features/governace/common/GovernanceVoteingCard.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.tsx b/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.tsx index bd2001bdf8..5ed9993c06 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.tsx @@ -74,7 +74,7 @@ export const GovernanceVoteingCard = ({ pending = false, }: Props) => { const [hover, onHover] = React.useState(false); - console.log('titleHover', titleHover); + return (
    onHover(true)} onMouseLeave={() => onHover(false)}> From 1b198dc77941d5fda1a4a09c8a65e7d72b9626ab Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 8 Aug 2024 16:43:48 +0300 Subject: [PATCH 425/464] fix text --- .../useCases/DelagationForm/DelagationForm.tsx | 10 +++++++--- .../GovernanceStatusSelection.tsx | 4 ++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx index d20bfd9461..958e5f107e 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx @@ -53,7 +53,6 @@ export const DelagationForm = () => { const { governanceVote, checkUserPassword, - createDrepDelegationTransaction, selectedWallet, signDelegationTransaction, txDelegationResult, @@ -79,7 +78,6 @@ export const DelagationForm = () => { } else { try { setFormLoading(true); - await createDrepDelegationTransaction(governanceVote.kind === 'delegate' ? governanceVote.drepID : governanceVote.kind); await signDelegationTransaction({ password, publicDeriver: selectedWallet, @@ -96,6 +94,12 @@ export const DelagationForm = () => { } }; + const mapStatusDescription = { + delegate: strings.designatedSomeone, + ALWAYS_ABSTAIN: 'You are choosing not to cast a vote on all proposals now and in the future.', + ALWAYS_NO_CONFIDENCE: 'You are expressing a lack of trust for all proposals now and in the future.', + }; + React.useEffect(() => { setIsIncorectPassword(false); }, [password]); @@ -107,7 +111,7 @@ export const DelagationForm = () => { {mapStatus[governanceVote.kind || '']} - {strings.designatedSomeone} + {mapStatusDescription[governanceVote.kind || '']} diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx index c30efb1312..f4318be160 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx @@ -29,8 +29,8 @@ const Container = styled(Box)(() => ({ export const mapStatus = { delegate: 'Delegate to a Drep', - ALWAYS_ABSTAIN: 'Abstaining', - ALWAYS_NO_CONFIDENCE: 'No confidence', + ALWAYS_ABSTAIN: 'Abstain', + ALWAYS_NO_CONFIDENCE: 'No Confidence', }; export const GovernanceStatusSelection = () => { From dd0eae2ac060c799e7bba6ff964e1a019939eac6 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 8 Aug 2024 17:08:46 +0300 Subject: [PATCH 426/464] hide password input on hw wallet --- .../UI/features/governace/common/helpers.ts | 3 +++ .../module/GovernanceContextProvider.tsx | 2 ++ .../DelagationForm/DelagationForm.tsx | 23 +++++++++++-------- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/governace/common/helpers.ts b/packages/yoroi-extension/app/UI/features/governace/common/helpers.ts index ff4dee2cb2..c3ec9d6854 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/helpers.ts +++ b/packages/yoroi-extension/app/UI/features/governace/common/helpers.ts @@ -1,5 +1,6 @@ import BigNumber from 'bignumber.js'; import { calculateAndFormatValue } from '../../../../utils/unit-of-account'; +import { WalletTypeOption } from '../../../../api/ada/lib/storage/models/ConceptualWallet/interfaces'; export const mapStakingKeyStateToGovernanceAction = (state: any) => { if (!state.drepDelegation) return null; @@ -47,6 +48,7 @@ export const createCurrrentWalletInfo = (stores: any) => { throw new Error(`no selected Wallet. Should never happen`); } + const isHardware = selectedWallet.getParent().getWalletType() === WalletTypeOption.HARDWARE_WALLET; const currentWalletId = selectedWallet.getPublicDeriverId(); const networkInfo = selectedWallet.getParent().getNetworkInfo(); const networkId = networkInfo.NetworkId; @@ -60,6 +62,7 @@ export const createCurrrentWalletInfo = (stores: any) => { unitOfAccount: stores.profile.unitOfAccount, defaultTokenInfo: stores.tokenInfoStore.getDefaultTokenInfoSummary(networkId), getCurrentPrice: stores.coinPriceStore.getCurrentPrice, + isHardwareWallet: isHardware, backendService, backendServiceZero, }; diff --git a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx index 824a571df9..2fd3f4f385 100644 --- a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx @@ -64,6 +64,7 @@ export const GovernanceContextProvider = ({ defaultTokenInfo, unitOfAccount, getCurrentPrice, + isHardwareWallet, backendServiceZero, } = currentWallet; const governanceManager = useGovernanceManagerMaker(walletId, networkId); @@ -163,6 +164,7 @@ export const GovernanceContextProvider = ({ governanceStatus, selectedWallet: currentWallet.selectedWallet, tokenInfo, + isHardwareWallet, getFormattedPairingAmount: (amount: string) => getFormattedPairingValue(getCurrentPrice, defaultTokenInfo, unitOfAccount, amount), }; diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx index 958e5f107e..9b3e0dd784 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx @@ -58,6 +58,7 @@ export const DelagationForm = () => { txDelegationResult, tokenInfo, getFormattedPairingAmount, + isHardwareWallet, } = useGovernance(); React.useEffect(() => { @@ -145,15 +146,19 @@ export const DelagationForm = () => { } /> - setPassword(event.target.value)} - value={password} - error={!!isIncorectPasswaord} - helperText={isIncorectPasswaord ? strings.wrongPassword : ' '} - disabled={formLoading} - /> + {isHardwareWallet ? ( + <> + ) : ( + setPassword(event.target.value)} + value={password} + error={!!isIncorectPasswaord} + helperText={isIncorectPasswaord ? strings.wrongPassword : ' '} + disabled={formLoading} + /> + )} {/* @ts-ignore */} From a659e66c21d9495298a53dd6676d6018fff92068 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 8 Aug 2024 17:16:21 +0300 Subject: [PATCH 427/464] remove password when hw --- .../UI/features/governace/common/helpers.ts | 2 +- .../DelagationForm/DelagationForm.tsx | 40 +++++++++++-------- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/governace/common/helpers.ts b/packages/yoroi-extension/app/UI/features/governace/common/helpers.ts index c3ec9d6854..3c9149d674 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/helpers.ts +++ b/packages/yoroi-extension/app/UI/features/governace/common/helpers.ts @@ -1,6 +1,6 @@ import BigNumber from 'bignumber.js'; -import { calculateAndFormatValue } from '../../../../utils/unit-of-account'; import { WalletTypeOption } from '../../../../api/ada/lib/storage/models/ConceptualWallet/interfaces'; +import { calculateAndFormatValue } from '../../../../utils/unit-of-account'; export const mapStakingKeyStateToGovernanceAction = (state: any) => { if (!state.drepDelegation) return null; diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx index 9b3e0dd784..ab543a6a37 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/DelagationForm/DelagationForm.tsx @@ -74,24 +74,30 @@ export const DelagationForm = () => { const strings = useStrings(); const confirmDelegation = async () => { const response = await checkUserPassword(password); - if (response?.name === 'WrongPassphraseError') { + if (isHardwareWallet) { + signGovernanceTx(); + } else if (response?.name === 'WrongPassphraseError') { setIsIncorectPassword(true); } else { - try { - setFormLoading(true); - await signDelegationTransaction({ - password, - publicDeriver: selectedWallet, - dialog: null, - }); - setFormLoading(false); - navigateTo.transactionSubmited(); - setPassword(''); - } catch (error) { - console.warn('[createDrepDelegationTransaction,signDelegationTransaction]', error); - setFormLoading(false); - navigateTo.transactionFail(); - } + signGovernanceTx(); + } + }; + + const signGovernanceTx = async () => { + try { + setFormLoading(true); + await signDelegationTransaction({ + password, + publicDeriver: selectedWallet, + dialog: null, + }); + setFormLoading(false); + navigateTo.transactionSubmited(); + setPassword(''); + } catch (error) { + console.warn('[createDrepDelegationTransaction,signDelegationTransaction]', error); + setFormLoading(false); + navigateTo.transactionFail(); } }; @@ -169,7 +175,7 @@ export const DelagationForm = () => { // @ts-ignore variant="primary" loading={formLoading} - disabled={password.length === 0} + disabled={isHardwareWallet ? false : password.length === 0} onClick={async () => confirmDelegation()} > {strings.confirm} From d942d56d829e3f88529e2a87b5a48fd32621a776 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 8 Aug 2024 18:09:53 +0300 Subject: [PATCH 428/464] fix type --- .../UI/features/governace/module/GovernanceContextProvider.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx index 2fd3f4f385..99e9018e68 100644 --- a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx @@ -21,6 +21,7 @@ const initialGovernanceProvider = { txDelegationError: null, tokenInfo: null, getFormattedPairingAmount: (_amount: string) => Response, + isHardwareWallet: false, createDrepDelegationTransaction: async (_drepCredential: string) => Response, signDelegationTransaction: async (_params: any) => Response, selectedWallet: null, From 79a6f07628a1b3c5e3e8b3f8543c47fa9b721e0e Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Fri, 9 Aug 2024 11:54:27 +0300 Subject: [PATCH 429/464] add no ada case --- packages/yoroi-extension/app/Routes.js | 2 + .../ilustrations/NoTransactions.tsx | 100 ++++++++++++++++++ .../UI/features/governace/common/helpers.ts | 19 ++++ .../module/GovernanceContextProvider.tsx | 7 ++ .../GovernanceStatusSelection.tsx | 37 +++++-- 5 files changed, 156 insertions(+), 9 deletions(-) create mode 100644 packages/yoroi-extension/app/UI/components/ilustrations/NoTransactions.tsx diff --git a/packages/yoroi-extension/app/Routes.js b/packages/yoroi-extension/app/Routes.js index be9565ded4..e2f5af2e70 100644 --- a/packages/yoroi-extension/app/Routes.js +++ b/packages/yoroi-extension/app/Routes.js @@ -49,6 +49,7 @@ import PortfolioDappsPage from './UI/pages/portfolio/PortfolioDappsPage'; import PortfolioDetailPage from './UI/pages/portfolio/PortfolioDetailPage'; // $FlowIgnore: suppressing this error import PortfolioPage from './UI/pages/portfolio/PortfolioPage'; +import BuySellDialog from './components/buySell/BuySellDialog'; // $FlowIgnore: suppressing this error // PAGES @@ -568,6 +569,7 @@ export function wrapGovernance(governanceProps: StoresAndActionsProps, children: txDelegationResult={delegationTxResult} txDelegationError={delegationTxError} tokenInfo={governanceProps.stores.tokenInfoStore.tokenInfo} + triggerBuySellAdaDialog={() => governanceProps.actions.dialogs.open.trigger({ dialog: BuySellDialog })} > {children}; diff --git a/packages/yoroi-extension/app/UI/components/ilustrations/NoTransactions.tsx b/packages/yoroi-extension/app/UI/components/ilustrations/NoTransactions.tsx new file mode 100644 index 0000000000..a86f4cd7d0 --- /dev/null +++ b/packages/yoroi-extension/app/UI/components/ilustrations/NoTransactions.tsx @@ -0,0 +1,100 @@ +import React from 'react'; + +export const NoTransactions = () => { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +}; diff --git a/packages/yoroi-extension/app/UI/features/governace/common/helpers.ts b/packages/yoroi-extension/app/UI/features/governace/common/helpers.ts index 3c9149d674..0c286896e3 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/helpers.ts +++ b/packages/yoroi-extension/app/UI/features/governace/common/helpers.ts @@ -1,5 +1,7 @@ import BigNumber from 'bignumber.js'; import { WalletTypeOption } from '../../../../api/ada/lib/storage/models/ConceptualWallet/interfaces'; +import { maybe } from '../../../../coreUtils'; +import { genLookupOrFail } from '../../../../stores/stateless/tokenHelpers'; import { calculateAndFormatValue } from '../../../../utils/unit-of-account'; export const mapStakingKeyStateToGovernanceAction = (state: any) => { @@ -48,6 +50,8 @@ export const createCurrrentWalletInfo = (stores: any) => { throw new Error(`no selected Wallet. Should never happen`); } + const walletAdaBalance = getWalletTotalAdaBalance(stores, selectedWallet); + const isHardware = selectedWallet.getParent().getWalletType() === WalletTypeOption.HARDWARE_WALLET; const currentWalletId = selectedWallet.getPublicDeriverId(); const networkInfo = selectedWallet.getParent().getNetworkInfo(); @@ -59,6 +63,7 @@ export const createCurrrentWalletInfo = (stores: any) => { networkId, walletId: currentWalletId, selectedWallet: selectedWallet, + walletAdaBalance: walletAdaBalance.toNumber(), unitOfAccount: stores.profile.unitOfAccount, defaultTokenInfo: stores.tokenInfoStore.getDefaultTokenInfoSummary(networkId), getCurrentPrice: stores.coinPriceStore.getCurrentPrice, @@ -77,3 +82,17 @@ export const getFormattedPairingValue = (getCurrentPrice, defaultTokenInfo, unit const val = price ? calculateAndFormatValue(shiftedAmount, price) : '-'; return `${val} ${currency}`; }; + +const getTotalAmount = (walletAmount, rewards) => { + return maybe(walletAmount, w => rewards.joinAddCopy(w)); +}; + +const getWalletTotalAdaBalance = (stores, selectedWallet) => { + const totalAmount = stores.transactions.getBalance(selectedWallet); + const rewards = stores.delegation.getRewardBalanceOrZero(selectedWallet); + const amount = getTotalAmount(totalAmount, rewards); + const defaultEntry = amount.getDefaultEntry(); + const getTokenInfo = genLookupOrFail(stores.tokenInfoStore.tokenInfo); + const tokenInfo = getTokenInfo(defaultEntry); + return defaultEntry.amount.shiftedBy(-tokenInfo.Metadata.numberOfDecimals); +}; diff --git a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx index 99e9018e68..b3bf6c2812 100644 --- a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx @@ -25,7 +25,9 @@ const initialGovernanceProvider = { createDrepDelegationTransaction: async (_drepCredential: string) => Response, signDelegationTransaction: async (_params: any) => Response, selectedWallet: null, + walletAdaBalance: null, governanceStatus: { status: null, drep: null }, + triggerBuySellAdaDialog: null, }; const GovernanceContext = React.createContext(initialGovernanceProvider); @@ -38,6 +40,7 @@ type GovernanceProviderProps = { txDelegationError: any; signDelegationTransaction: (params: any) => Promise; tokenInfo: any; + triggerBuySellAdaDialog: any; }; export const GovernanceContextProvider = ({ @@ -48,6 +51,7 @@ export const GovernanceContextProvider = ({ txDelegationError, signDelegationTransaction, tokenInfo, + triggerBuySellAdaDialog, }: GovernanceProviderProps) => { if (!currentWallet?.selectedWallet) throw new Error(`requires a wallet to be selected`); const [state, dispatch] = React.useReducer(GovernanceReducer, { @@ -66,6 +70,7 @@ export const GovernanceContextProvider = ({ unitOfAccount, getCurrentPrice, isHardwareWallet, + walletAdaBalance, backendServiceZero, } = currentWallet; const governanceManager = useGovernanceManagerMaker(walletId, networkId); @@ -166,8 +171,10 @@ export const GovernanceContextProvider = ({ selectedWallet: currentWallet.selectedWallet, tokenInfo, isHardwareWallet, + walletAdaBalance, getFormattedPairingAmount: (amount: string) => getFormattedPairingValue(getCurrentPrice, defaultTokenInfo, unitOfAccount, amount), + triggerBuySellAdaDialog, }; return {children}; diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx index f4318be160..6630873939 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx @@ -1,11 +1,11 @@ -import { Alert, Stack } from '@mui/material'; +import { Alert, Button, Stack } from '@mui/material'; import Box from '@mui/material/Box'; import Link from '@mui/material/Link'; import Typography from '@mui/material/Typography'; import { styled } from '@mui/material/styles'; import { GovernanceProvider } from '@yoroi/staking'; import * as React from 'react'; -import { NotEnoughMoneyToSendError } from '../../../../../api/common/errors'; +import { NoTransactions } from '../../../../components/ilustrations/NoTransactions'; import { useModal } from '../../../../components/modals/ModalContext'; import { ChooseDRepModal } from '../../common/ChooseDRepModal'; import { GovernanceVoteingCard } from '../../common/GovernanceVoteingCard'; @@ -34,11 +34,18 @@ export const mapStatus = { }; export const GovernanceStatusSelection = () => { - const { governanceStatus, governanceManager, governanceVoteChanged, createDrepDelegationTransaction } = useGovernance(); + const { + governanceStatus, + governanceManager, + governanceVoteChanged, + createDrepDelegationTransaction, + walletAdaBalance, + triggerBuySellAdaDialog, + } = useGovernance(); const [error, setError] = React.useState(null); const navigateTo = useNavigateTo(); - const { openModal, closeModal } = useModal(); const strings = useStrings(); + const { openModal, closeModal } = useModal(); const pageTitle = governanceStatus.status !== 'none' ? strings.governanceStatus : strings.registerGovernance; const statusRawText = mapStatus[governanceStatus.status || '']; @@ -86,11 +93,8 @@ export const GovernanceStatusSelection = () => { setError(null); navigateTo.delegationForm(); } catch (e) { - if (e instanceof NotEnoughMoneyToSendError) { - setError('Not enough ADA to Vote'); - closeModal(); - } - return; + setError('Error trying to Vote. Please try again later'); + closeModal(); } }; @@ -128,6 +132,21 @@ export const GovernanceStatusSelection = () => { const skeletonsCards = new Array(optionsList.length).fill(null); + if (walletAdaBalance !== null && walletAdaBalance === 0) { + return ( + + + + To participate in governance you need to have ADA in your wallet. + + {/* @ts-ignore */} + + + ); + } + return ( From 0e39ab00764e265057e4c76888dde80f10aad3f0 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Fri, 9 Aug 2024 12:21:11 +0300 Subject: [PATCH 430/464] check gov status when withdraw --- .../app/containers/wallet/staking/StakingPageContent.js | 8 +++++++- .../app/stores/toplevel/DelegationStore.js | 3 ++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js b/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js index 73c40afab4..2e99ed00e4 100644 --- a/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js +++ b/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js @@ -56,7 +56,13 @@ class StakingPageContent extends Component { if (publicDeriver == null) { throw new Error(`${nameof(StakingPageContent)} no public deriver. Should never happen`); } + const networkInfo = publicDeriver.getParent().getNetworkInfo(); + const networkId = networkInfo.NetworkId; + // Check governance only for certain network + if (networkId === 350 || networkId === 450) { + this.props.stores.delegation.checkGovernanceStatus(publicDeriver); + } if (this.props.stores.delegation.getPoolTransitionConfig(publicDeriver).shouldUpdatePool) { const poolTransitionInfo = this.props.stores.delegation.getPoolTransitionInfo(publicDeriver); if (poolTransitionInfo?.suggestedPool) { @@ -205,7 +211,7 @@ class StakingPageContent extends Component { const currentlyDelegating = stores.delegation.isCurrentlyDelegating(publicDeriver); const delegatedUtxo = stores.delegation.getDelegatedUtxoBalance(publicDeriver); const delegatedRewards = stores.delegation.getRewardBalanceOrZero(publicDeriver); - const isParticipatingToGovernance = stores.delegation.governanceStatus; + const isParticipatingToGovernance = stores.delegation.governanceStatus?.drepDelegation !== null; return ( diff --git a/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js b/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js index 7ea7a15bd7..86c864a52f 100644 --- a/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js +++ b/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js @@ -317,12 +317,13 @@ export default class DelegationStore extends Store { const govApi = new GovernanceApi({ oldBackendUrl: String(backendService), - newBackendUrl: String(backendServiceZero), + newBackendUrl: String(networkId === 350 ? backendService : backendServiceZero), networkId, wasmFactory: RustModule.CrossCsl.init, }); const governanceStatus = await govApi.getAccountState(skey, skey); + this.setGovernanceStatus(governanceStatus); } catch (e) { console.warn(e); From 6819f2a5006060c821313e269b381eca13708dbb Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Fri, 9 Aug 2024 12:24:19 +0300 Subject: [PATCH 431/464] fix cards background --- .../components/profile/complexity-level/ComplexityLevelForm.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/components/profile/complexity-level/ComplexityLevelForm.js b/packages/yoroi-extension/app/components/profile/complexity-level/ComplexityLevelForm.js index 7e4a516c20..ae5098b420 100644 --- a/packages/yoroi-extension/app/components/profile/complexity-level/ComplexityLevelForm.js +++ b/packages/yoroi-extension/app/components/profile/complexity-level/ComplexityLevelForm.js @@ -159,7 +159,7 @@ class ComplexityLevel extends Component { textAlign: 'center', p: '1px', border: 'solid 1px transparent', - background: theme => (isSelected ? theme.palette.ds.bg_gradient_1 : theme.palette.ds.bg_gradient_3), + background: theme => (isSelected ? theme.palette.ds.bg_gradient_1 : theme.palette.ds.bg_gradient_2), backgroundClip: 'content-box, border-box', backgroundOrigin: 'border-box', borderRadius: '8px', From d7c19a4350cc764b0a6707764336728122fe63d0 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Fri, 9 Aug 2024 13:15:36 +0300 Subject: [PATCH 432/464] reset gov feedback screen after closing the modal --- .../app/containers/NavBarContainerRevamp.js | 47 +++++++------------ 1 file changed, 18 insertions(+), 29 deletions(-) diff --git a/packages/yoroi-extension/app/containers/NavBarContainerRevamp.js b/packages/yoroi-extension/app/containers/NavBarContainerRevamp.js index b7059ea580..3ef08ca027 100644 --- a/packages/yoroi-extension/app/containers/NavBarContainerRevamp.js +++ b/packages/yoroi-extension/app/containers/NavBarContainerRevamp.js @@ -58,18 +58,13 @@ export default class NavBarContainerRevamp extends Component { const publicDeriver = walletsStore.selected; if (publicDeriver == null) return null; const parent = publicDeriver.getParent(); - const settingsCache = this.props.stores.walletSettings.getConceptualWalletSettingsCache( - parent - ); + const settingsCache = this.props.stores.walletSettings.getConceptualWalletSettingsCache(parent); const withPubKey = asGetPublicKey(publicDeriver); - const plate = - withPubKey == null ? null : this.props.stores.wallets.getPublicKeyCache(withPubKey).plate; + const plate = withPubKey == null ? null : this.props.stores.wallets.getPublicKeyCache(withPubKey).plate; const balance: ?MultiToken = this.props.stores.transactions.getBalance(publicDeriver); - const rewards: MultiToken = this.props.stores.delegation.getRewardBalanceOrZero( - publicDeriver - ); + const rewards: MultiToken = this.props.stores.delegation.getRewardBalanceOrZero(publicDeriver); return ( { menu={this.props.menu} walletDetails={walletsStore.selected !== null ? : null} buyButton={ - - this.props.actions.dialogs.open.trigger({ dialog: BuySellDialog }) - } - /> + this.props.actions.dialogs.open.trigger({ dialog: BuySellDialog })} /> } pageBanner={pageBanner} /> @@ -129,13 +120,10 @@ export default class NavBarContainerRevamp extends Component { const walletAmount = this.props.stores.transactions.getBalance(wallet); const rewards = this.props.stores.delegation.getRewardBalanceOrZero(wallet); const parent = wallet.getParent(); - const settingsCache = this.props.stores.walletSettings.getConceptualWalletSettingsCache( - parent - ); + const settingsCache = this.props.stores.walletSettings.getConceptualWalletSettingsCache(parent); const withPubKey = asGetPublicKey(wallet); - const plate = - withPubKey == null ? null : this.props.stores.wallets.getPublicKeyCache(withPubKey).plate; + const plate = withPubKey == null ? null : this.props.stores.wallets.getPublicKeyCache(withPubKey).plate; const walletMap = { walletId: wallet.getPublicDeriverId(), @@ -156,7 +144,15 @@ export default class NavBarContainerRevamp extends Component { cardanoWallets={cardanoWallets} onSelect={this.onSelectWallet} selectedWallet={this.props.stores.wallets.selected} - close={this.props.actions.dialogs.closeActiveDialog.trigger} + close={() => { + if ( + this.props.stores.app.currentRoute === ROUTES.Governance.FAIL || + this.props.stores.app.currentRoute === ROUTES.Governance.SUBMITTED + ) { + this.props.actions.router.goToRoute.trigger({ route: ROUTES.Governance.ROOT }); + } + this.props.actions.dialogs.closeActiveDialog.trigger(); + }} shouldHideBalance={this.props.stores.profile.shouldHideBalance} onUpdateHideBalance={this.updateHideBalance} getTokenInfo={getTokenInfo} @@ -180,10 +176,7 @@ export default class NavBarContainerRevamp extends Component { const getReceiveAdaAddress = async () => { const receiveAddress = await getReceiveAddress(publicDeriver); if (receiveAddress == null) return null; - return addressToDisplayString( - receiveAddress.addr.Hash, - publicDeriver.getParent().getNetworkInfo() - ); + return addressToDisplayString(receiveAddress.addr.Hash, publicDeriver.getParent().getNetworkInfo()); }; const tokenInfo = getTokenInfo(balance.getDefaultEntry()); @@ -192,12 +185,8 @@ export default class NavBarContainerRevamp extends Component { return ( - this.props.actions.router.goToRoute.trigger({ route: ROUTES.EXCHANGE_END }) - } - currentBalanceAda={ - balance.getDefault().shiftedBy(-numberOfDecimals) - } + onExchangeCallback={() => this.props.actions.router.goToRoute.trigger({ route: ROUTES.EXCHANGE_END })} + currentBalanceAda={balance.getDefault().shiftedBy(-numberOfDecimals)} receiveAdaAddressPromise={getReceiveAdaAddress()} /> ); From eea9b8e818b92e5b75cde21451f82232ddb6c199 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Fri, 9 Aug 2024 15:16:52 +0300 Subject: [PATCH 433/464] preview url fix --- .../app/api/ada/lib/storage/database/prepackaged/networks.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/api/ada/lib/storage/database/prepackaged/networks.js b/packages/yoroi-extension/app/api/ada/lib/storage/database/prepackaged/networks.js index 2141188a76..ef2c7bbc1b 100644 --- a/packages/yoroi-extension/app/api/ada/lib/storage/database/prepackaged/networks.js +++ b/packages/yoroi-extension/app/api/ada/lib/storage/database/prepackaged/networks.js @@ -121,7 +121,7 @@ export const networks = Object.freeze({ Backend: { BackendService: environment.isTest() ? 'http://localhost:21000' : 'https://preview-backend.emurgornd.com', TokenInfoService: 'https://stage-cdn.yoroiwallet.com', - BackendServiceZero: 'https://yoroi-backend-zero-previes.emurgornd.com', + BackendServiceZero: 'https://yoroi-backend-zero-preview.emurgornd.com', }, BaseConfig: ([ Object.freeze({ From aec06f8221759d16f5e96f0d8ccf396871c5b376 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Fri, 9 Aug 2024 15:16:53 +0300 Subject: [PATCH 434/464] remove networkId check --- .../UI/features/governace/module/GovernanceContextProvider.tsx | 2 +- packages/yoroi-extension/app/stores/toplevel/DelegationStore.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx index b3bf6c2812..0d14e91626 100644 --- a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx @@ -124,7 +124,7 @@ export const GovernanceContextProvider = ({ const getGovApiState = async () => { const govApi = new GovernanceApi({ oldBackendUrl: String(backendService), - newBackendUrl: String(networkId === 350 ? backendService : backendServiceZero), + newBackendUrl: String(backendServiceZero), networkId: networkId, wasmFactory: RustModule.CrossCsl.init, }); diff --git a/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js b/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js index 86c864a52f..0d9d00b738 100644 --- a/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js +++ b/packages/yoroi-extension/app/stores/toplevel/DelegationStore.js @@ -317,7 +317,7 @@ export default class DelegationStore extends Store { const govApi = new GovernanceApi({ oldBackendUrl: String(backendService), - newBackendUrl: String(networkId === 350 ? backendService : backendServiceZero), + newBackendUrl: String(backendServiceZero), networkId, wasmFactory: RustModule.CrossCsl.init, }); From 912ca20b1008d601f8c997def28857e6e9146106 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Fri, 9 Aug 2024 15:18:39 +0300 Subject: [PATCH 435/464] fix typo --- .../app/api/ada/lib/storage/database/prepackaged/networks.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/api/ada/lib/storage/database/prepackaged/networks.js b/packages/yoroi-extension/app/api/ada/lib/storage/database/prepackaged/networks.js index 2141188a76..ef2c7bbc1b 100644 --- a/packages/yoroi-extension/app/api/ada/lib/storage/database/prepackaged/networks.js +++ b/packages/yoroi-extension/app/api/ada/lib/storage/database/prepackaged/networks.js @@ -121,7 +121,7 @@ export const networks = Object.freeze({ Backend: { BackendService: environment.isTest() ? 'http://localhost:21000' : 'https://preview-backend.emurgornd.com', TokenInfoService: 'https://stage-cdn.yoroiwallet.com', - BackendServiceZero: 'https://yoroi-backend-zero-previes.emurgornd.com', + BackendServiceZero: 'https://yoroi-backend-zero-preview.emurgornd.com', }, BaseConfig: ([ Object.freeze({ From 4408ee966d3b653a788007be40536f56b85188d1 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Fri, 9 Aug 2024 15:26:30 +0300 Subject: [PATCH 436/464] add extra case when select wallet --- .../app/containers/NavBarContainerRevamp.js | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/packages/yoroi-extension/app/containers/NavBarContainerRevamp.js b/packages/yoroi-extension/app/containers/NavBarContainerRevamp.js index 3ef08ca027..82ea0a659a 100644 --- a/packages/yoroi-extension/app/containers/NavBarContainerRevamp.js +++ b/packages/yoroi-extension/app/containers/NavBarContainerRevamp.js @@ -49,6 +49,15 @@ export default class NavBarContainerRevamp extends Component { this.props.actions.router.goToRoute.trigger({ route, publicDeriver: newWallet }); }; + checkAndResetGovRoutes: void => void = () => { + if ( + this.props.stores.app.currentRoute === ROUTES.Governance.FAIL || + this.props.stores.app.currentRoute === ROUTES.Governance.SUBMITTED + ) { + this.props.actions.router.goToRoute.trigger({ route: ROUTES.Governance.ROOT }); + } + }; + render(): Node { const { stores, pageBanner } = this.props; const { profile } = stores; @@ -142,15 +151,13 @@ export default class NavBarContainerRevamp extends Component { return ( { + this.checkAndResetGovRoutes(); + this.onSelectWallet(publicDeriver); + }} selectedWallet={this.props.stores.wallets.selected} close={() => { - if ( - this.props.stores.app.currentRoute === ROUTES.Governance.FAIL || - this.props.stores.app.currentRoute === ROUTES.Governance.SUBMITTED - ) { - this.props.actions.router.goToRoute.trigger({ route: ROUTES.Governance.ROOT }); - } + this.checkAndResetGovRoutes(); this.props.actions.dialogs.closeActiveDialog.trigger(); }} shouldHideBalance={this.props.stores.profile.shouldHideBalance} From f86e414d65e3bd54687936ce22942300dcd6ac72 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Fri, 9 Aug 2024 20:00:23 +0300 Subject: [PATCH 437/464] refactoring certificate processing in ledger handler --- .../api/ada/transactions/shelley/ledgerTx.js | 106 +++++++++++------- .../app/containers/NavBarContainerRevamp.js | 4 +- 2 files changed, 68 insertions(+), 42 deletions(-) diff --git a/packages/yoroi-extension/app/api/ada/transactions/shelley/ledgerTx.js b/packages/yoroi-extension/app/api/ada/transactions/shelley/ledgerTx.js index 50014aa467..3a8be088de 100644 --- a/packages/yoroi-extension/app/api/ada/transactions/shelley/ledgerTx.js +++ b/packages/yoroi-extension/app/api/ada/transactions/shelley/ledgerTx.js @@ -336,6 +336,62 @@ function formatLedgerWithdrawals( } return result; } + +type LedgerCertificateHandler = {| + getter: RustModule.WalletV4.Certificate => ?CslCert, + converter: (CslCert, RustModule.WalletV4.Credential => number[]) => Certificate, +|} + +function createLedgerCertificateHandler( + getter: RustModule.WalletV4.Certificate => ?CslCert, + converter: (CslCert, RustModule.WalletV4.Credential => number[]) => Certificate, +): LedgerCertificateHandler { + return { getter, converter }; +} + +const CERTIFICATE_CONVERTERS: { [$Values]: LedgerCertificateHandler } = { + [RustModule.WalletV4.CertificateKind.StakeRegistration]: + createLedgerCertificateHandler( + cert => cert.as_stake_registration(), + (registrationCert, getPath) => ({ + type: CertificateType.STAKE_REGISTRATION, + params: { + stakeCredential: { + type: CredentialParamsType.KEY_PATH, + keyPath: getPath(registrationCert.stake_credential()), + }, + }, + }), + ), + [RustModule.WalletV4.CertificateKind.StakeDeregistration]: + createLedgerCertificateHandler ( + cert => cert.as_stake_deregistration(), + (deregistrationCert, getPath) => ({ + type: CertificateType.STAKE_DEREGISTRATION, + params: { + stakeCredential: { + type: CredentialParamsType.KEY_PATH, + keyPath: getPath(deregistrationCert.stake_credential()), + }, + }, + }), + ), + [RustModule.WalletV4.CertificateKind.StakeDelegation]: + createLedgerCertificateHandler ( + cert => cert.as_stake_delegation(), + (delegationCert, getPath) => ({ + type: CertificateType.STAKE_DELEGATION, + params: { + stakeCredential: { + type: CredentialParamsType.KEY_PATH, + keyPath: getPath(delegationCert.stake_credential()), + }, + poolKeyHashHex: delegationCert.pool_keyhash().to_hex(), + }, + }), + ), +}; + function formatLedgerCertificates( networkId: number, certificates: RustModule.WalletV4.Certificates, @@ -348,7 +404,7 @@ function formatLedgerCertificates( networkId, stakeCredential ); - const addressPayload = Buffer.from(rewardAddr.to_address().to_bytes()).toString('hex'); + const addressPayload = rewardAddr.to_address().to_hex(); const addressing = addressingMap(addressPayload); if (addressing == null) { throw new Error(`${nameof(getPath)} Ledger only supports certificates from own address ${addressPayload}`); @@ -360,47 +416,17 @@ function formatLedgerCertificates( for (let i = 0; i < certificates.len(); i++) { const cert = certificates.get(i); - const registrationCert = cert.as_stake_registration(); - if (registrationCert != null) { - result.push({ - type: CertificateType.STAKE_REGISTRATION, - params: { - stakeCredential: { - type: CredentialParamsType.KEY_PATH, - keyPath: getPath(registrationCert.stake_credential()), - }, - } - }); - continue; + const converter = CERTIFICATE_CONVERTERS[cert.kind()] + if (converter == null) { + throw new Error(`${nameof(formatLedgerCertificates)} Ledger doesn't support this certificate type! ` + cert.to_hex()); } - const deregistrationCert = cert.as_stake_deregistration(); - if (deregistrationCert != null) { - result.push({ - type: CertificateType.STAKE_DEREGISTRATION, - params: { - stakeCredential: { - type: CredentialParamsType.KEY_PATH, - keyPath: getPath(deregistrationCert.stake_credential()), - }, - }, - }); - continue; - } - const delegationCert = cert.as_stake_delegation(); - if (delegationCert != null) { - result.push({ - type: CertificateType.STAKE_DELEGATION, - params: { - stakeCredential: { - type: CredentialParamsType.KEY_PATH, - keyPath: getPath(delegationCert.stake_credential()), - }, - poolKeyHashHex: Buffer.from(delegationCert.pool_keyhash().to_bytes()).toString('hex'), - }, - }); - continue; + + const cslCert = converter.getter(cert); + if (cslCert == null) { + throw new Error(`${nameof(formatLedgerCertificates)} Certificate converter did not extract a correct certificate type! ` + cert.to_hex()); } - throw new Error(`${nameof(formatLedgerCertificates)} Ledger doesn't support this certificate type`); + + result.push(converter.converter(cslCert, getPath)); } return result; } diff --git a/packages/yoroi-extension/app/containers/NavBarContainerRevamp.js b/packages/yoroi-extension/app/containers/NavBarContainerRevamp.js index 82ea0a659a..689263bc8d 100644 --- a/packages/yoroi-extension/app/containers/NavBarContainerRevamp.js +++ b/packages/yoroi-extension/app/containers/NavBarContainerRevamp.js @@ -151,9 +151,9 @@ export default class NavBarContainerRevamp extends Component { return ( { + onSelect={wallet => { this.checkAndResetGovRoutes(); - this.onSelectWallet(publicDeriver); + this.onSelectWallet(wallet); }} selectedWallet={this.props.stores.wallets.selected} close={() => { From a29b1b98d357670daa01d674ed0d02ed9e5140a3 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Mon, 12 Aug 2024 11:00:36 +0300 Subject: [PATCH 438/464] wip --- .../common/GovernanceVoteingCard.tsx | 13 +++++------ .../UI/features/governace/common/helpers.ts | 22 +++++++++++++++++++ .../module/GovernanceContextProvider.tsx | 2 ++ .../GovernanceStatusSelection.tsx | 9 +++++--- 4 files changed, 36 insertions(+), 10 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.tsx b/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.tsx index 5ed9993c06..5b972b302d 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.tsx @@ -4,7 +4,6 @@ import CardContent from '@mui/material/CardContent'; import Typography from '@mui/material/Typography'; import { styled } from '@mui/material/styles'; import * as React from 'react'; -import LoadingSpinner from '../../../../components/widgets/LoadingSpinner'; type Props = { title: string; @@ -26,22 +25,22 @@ const StyledCard: any = styled(Stack)(({ theme, selected, pending }: any) => ({ height: '362px', borderRadius: '8px', ...(!selected && { - backgroundImage: theme.palette.ds?.bg_gradient_1, + backgroundImage: !pending && theme.palette.ds?.bg_gradient_1, backgroundOrigin: 'border-box', boxShadow: 'inset 0 100vw white', border: '2px solid transparent', }), ...(selected && { - background: theme.palette.ds.bg_gradient_2, + background: !pending && theme.palette.ds.bg_gradient_2, border: 'none', }), cursor: 'pointer', ...(pending && { - opacity: selected ? 1 : 0.5, + opacity: 0.5, cursor: 'not-allowed', }), '&:hover': { - backgroundImage: theme.palette.ds.bg_gradient_1, + backgroundImage: !pending && theme.palette.ds.bg_gradient_1, backgroundOrigin: 'content-box', boxShadow: 'none', transition: 'all 250ms ease-in-out', @@ -78,11 +77,11 @@ export const GovernanceVoteingCard = ({ return (
    onHover(true)} onMouseLeave={() => onHover(false)}> - {pending && selected && ( + {/* {pending && selected && ( - )} + )} */} {icon} diff --git a/packages/yoroi-extension/app/UI/features/governace/common/helpers.ts b/packages/yoroi-extension/app/UI/features/governace/common/helpers.ts index 0c286896e3..9357f6d737 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/helpers.ts +++ b/packages/yoroi-extension/app/UI/features/governace/common/helpers.ts @@ -1,4 +1,5 @@ import BigNumber from 'bignumber.js'; +import moment from 'moment'; import { WalletTypeOption } from '../../../../api/ada/lib/storage/models/ConceptualWallet/interfaces'; import { maybe } from '../../../../coreUtils'; import { genLookupOrFail } from '../../../../stores/stateless/tokenHelpers'; @@ -58,6 +59,8 @@ export const createCurrrentWalletInfo = (stores: any) => { const networkId = networkInfo.NetworkId; const backendService = selectedWallet.getParent().getNetworkInfo().Backend.BackendService; const backendServiceZero = selectedWallet.getParent().getNetworkInfo().Backend.BackendServiceZero; + + const groupedTx = groupTransactionsByDay(stores.transactions.recent); return { currentPool: walletCurrentPoolInfo, networkId, @@ -67,6 +70,7 @@ export const createCurrrentWalletInfo = (stores: any) => { unitOfAccount: stores.profile.unitOfAccount, defaultTokenInfo: stores.tokenInfoStore.getDefaultTokenInfoSummary(networkId), getCurrentPrice: stores.coinPriceStore.getCurrentPrice, + recentTransactions: groupedTx, isHardwareWallet: isHardware, backendService, backendServiceZero, @@ -96,3 +100,21 @@ const getWalletTotalAdaBalance = (stores, selectedWallet) => { const tokenInfo = getTokenInfo(defaultEntry); return defaultEntry.amount.shiftedBy(-tokenInfo.Metadata.numberOfDecimals); }; + +const dateFormat = 'YYYY-MM-DD'; + +const groupTransactionsByDay = transactions => { + const groups: any = []; + for (const transaction of transactions) { + const date: string = moment(transaction.date).format(dateFormat); + // find the group this transaction belongs in + let group = groups.find(g => g.date === date); + // if first transaction in this group, create the group + if (!group) { + group = { date, transactions: [] }; + groups.push(group); + } + group.transactions.push(transaction); + } + return groups.sort((a, b) => b.transactions[0].date.getTime() - a.transactions[0].date.getTime()); +}; diff --git a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx index 0d14e91626..d0d732c2e1 100644 --- a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx @@ -72,6 +72,7 @@ export const GovernanceContextProvider = ({ isHardwareWallet, walletAdaBalance, backendServiceZero, + recentTransactions, } = currentWallet; const governanceManager = useGovernanceManagerMaker(walletId, networkId); // TODO to me moved in rootStore and use this globbaly whenever we need just a wallet password check @@ -175,6 +176,7 @@ export const GovernanceContextProvider = ({ getFormattedPairingAmount: (amount: string) => getFormattedPairingValue(getCurrentPrice, defaultTokenInfo, unitOfAccount, amount), triggerBuySellAdaDialog, + recentTransactions, }; return {children}; diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx index 6630873939..7726846aa2 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx @@ -41,6 +41,7 @@ export const GovernanceStatusSelection = () => { createDrepDelegationTransaction, walletAdaBalance, triggerBuySellAdaDialog, + recentTransactions, } = useGovernance(); const [error, setError] = React.useState(null); const navigateTo = useNavigateTo(); @@ -51,6 +52,8 @@ export const GovernanceStatusSelection = () => { const statusRawText = mapStatus[governanceStatus.status || '']; const pageSubtitle = governanceStatus.status === 'none' ? strings.reviewSelection : strings.statusSelected(statusRawText); + console.log('recentTransactions', recentTransactions[0].transactions[0].certificates); + // console.log('recentTransactions pending', recentTransactions?.transactions[0]); const openDRepIdModal = (onSubmit: (drepID: string) => void) => { if (!governanceManager) { return; @@ -110,7 +113,7 @@ export const GovernanceStatusSelection = () => { icon: , selected: governanceStatus.status === 'delegate' ? true : false, onClick: handleDelegate, - pending: governanceStatus.status === null, + pending: recentTransactions[0].transactions[0].state === -4, }, { title: strings.abstain, @@ -118,7 +121,7 @@ export const GovernanceStatusSelection = () => { icon: , selected: governanceStatus.status === DREP_ALWAYS_ABSTAIN ? true : false, onClick: handleAbstain, - pending: governanceStatus.status === null, + pending: recentTransactions[0].transactions[0].state === -4, }, { title: strings.noConfidence, @@ -126,7 +129,7 @@ export const GovernanceStatusSelection = () => { icon: , selected: governanceStatus.status === DREP_ALWAYS_NO_CONFIDENCE ? true : false, onClick: handleNoConfidence, - pending: governanceStatus.status === null, + pending: recentTransactions[0].transactions[0].state === -4, }, ]; From ff8b10455be211b9154752d307fbacff5ec5754c Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Mon, 12 Aug 2024 12:23:06 +0300 Subject: [PATCH 439/464] wip --- .../app/UI/features/governace/common/helpers.ts | 4 ++-- .../features/governace/module/GovernanceContextProvider.tsx | 1 + .../SelectGovernanceStatus/GovernanceStatusSelection.tsx | 6 +++--- .../ada/lib/storage/tests/__snapshots__/index.test.js.snap | 2 +- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/governace/common/helpers.ts b/packages/yoroi-extension/app/UI/features/governace/common/helpers.ts index 9357f6d737..5cae9d0e67 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/helpers.ts +++ b/packages/yoroi-extension/app/UI/features/governace/common/helpers.ts @@ -70,7 +70,7 @@ export const createCurrrentWalletInfo = (stores: any) => { unitOfAccount: stores.profile.unitOfAccount, defaultTokenInfo: stores.tokenInfoStore.getDefaultTokenInfoSummary(networkId), getCurrentPrice: stores.coinPriceStore.getCurrentPrice, - recentTransactions: groupedTx, + recentTransactions: groupedTx ? groupedTx : [], isHardwareWallet: isHardware, backendService, backendServiceZero, @@ -95,7 +95,7 @@ const getWalletTotalAdaBalance = (stores, selectedWallet) => { const totalAmount = stores.transactions.getBalance(selectedWallet); const rewards = stores.delegation.getRewardBalanceOrZero(selectedWallet); const amount = getTotalAmount(totalAmount, rewards); - const defaultEntry = amount.getDefaultEntry(); + const defaultEntry = amount?.getDefaultEntry(); const getTokenInfo = genLookupOrFail(stores.tokenInfoStore.tokenInfo); const tokenInfo = getTokenInfo(defaultEntry); return defaultEntry.amount.shiftedBy(-tokenInfo.Metadata.numberOfDecimals); diff --git a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx index d0d732c2e1..19c1ceb5b3 100644 --- a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx @@ -28,6 +28,7 @@ const initialGovernanceProvider = { walletAdaBalance: null, governanceStatus: { status: null, drep: null }, triggerBuySellAdaDialog: null, + recentTransactions: [], }; const GovernanceContext = React.createContext(initialGovernanceProvider); diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx index 7726846aa2..b30f73a679 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx @@ -47,12 +47,12 @@ export const GovernanceStatusSelection = () => { const navigateTo = useNavigateTo(); const strings = useStrings(); const { openModal, closeModal } = useModal(); - + console.log('governanceStatus', governanceStatus); const pageTitle = governanceStatus.status !== 'none' ? strings.governanceStatus : strings.registerGovernance; const statusRawText = mapStatus[governanceStatus.status || '']; const pageSubtitle = governanceStatus.status === 'none' ? strings.reviewSelection : strings.statusSelected(statusRawText); - console.log('recentTransactions', recentTransactions[0].transactions[0].certificates); + console.log('1recentTransactions', recentTransactions); // console.log('recentTransactions pending', recentTransactions?.transactions[0]); const openDRepIdModal = (onSubmit: (drepID: string) => void) => { if (!governanceManager) { @@ -113,7 +113,7 @@ export const GovernanceStatusSelection = () => { icon: , selected: governanceStatus.status === 'delegate' ? true : false, onClick: handleDelegate, - pending: recentTransactions[0].transactions[0].state === -4, + pending: recentTransactions && recentTransactions[0].transactions[0].state === -4, }, { title: strings.abstain, diff --git a/packages/yoroi-extension/app/api/ada/lib/storage/tests/__snapshots__/index.test.js.snap b/packages/yoroi-extension/app/api/ada/lib/storage/tests/__snapshots__/index.test.js.snap index d76ee8f8df..4b58d1d3fa 100644 --- a/packages/yoroi-extension/app/api/ada/lib/storage/tests/__snapshots__/index.test.js.snap +++ b/packages/yoroi-extension/app/api/ada/lib/storage/tests/__snapshots__/index.test.js.snap @@ -1342,7 +1342,7 @@ Object { Object { "Backend": Object { "BackendService": "https://preview-backend.emurgornd.com", - "BackendServiceZero": "https://yoroi-backend-zero-previes.emurgornd.com", + "BackendServiceZero": "https://yoroi-backend-zero-preview.emurgornd.com", "TokenInfoService": "https://stage-cdn.yoroiwallet.com", }, "BaseConfig": Array [ From f1f219451adcdfac6391faa1e10bc34e1ab5d554 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Mon, 12 Aug 2024 12:51:41 +0300 Subject: [PATCH 440/464] ignore ts until more info --- .../governace/common/GovernanceVoteingCard.tsx | 10 +++++----- .../GovernanceStatusSelection.tsx | 9 ++++++--- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.tsx b/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.tsx index 5b972b302d..0f802a70cd 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/common/GovernanceVoteingCard.tsx @@ -56,11 +56,11 @@ const Description = styled(Typography)(({ theme }) => ({ marginTop: theme.spacing(1), })); -const SpinnerBox = styled(Box)(() => ({ - position: 'absolute', - right: 15, - top: 15, -})); +// const SpinnerBox = styled(Box)(() => ({ +// position: 'absolute', +// right: 15, +// top: 15, +// })); export const GovernanceVoteingCard = ({ title, diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx index b30f73a679..f8adf7b3c0 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx @@ -113,7 +113,8 @@ export const GovernanceStatusSelection = () => { icon: , selected: governanceStatus.status === 'delegate' ? true : false, onClick: handleDelegate, - pending: recentTransactions && recentTransactions[0].transactions[0].state === -4, + // @ts-ignore + pending: recentTransactions[0].transactions[0].state === -4, }, { title: strings.abstain, @@ -121,7 +122,8 @@ export const GovernanceStatusSelection = () => { icon: , selected: governanceStatus.status === DREP_ALWAYS_ABSTAIN ? true : false, onClick: handleAbstain, - pending: recentTransactions[0].transactions[0].state === -4, + // @ts-ignore + pending: recentTransactions[0]?.transactions[0].state === -4, }, { title: strings.noConfidence, @@ -129,7 +131,8 @@ export const GovernanceStatusSelection = () => { icon: , selected: governanceStatus.status === DREP_ALWAYS_NO_CONFIDENCE ? true : false, onClick: handleNoConfidence, - pending: recentTransactions[0].transactions[0].state === -4, + // @ts-ignore + pending: recentTransactions[0]?.transactions[0].state === -4, }, ]; From 36c62a5e64b35c0c0e12f58f419fd7455a0073ba Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Mon, 12 Aug 2024 20:00:41 +0300 Subject: [PATCH 441/464] refactoring certificate processing in ledger handler --- packages/yoroi-extension/app/api/ada/index.js | 18 ++-- .../api/ada/transactions/shelley/ledgerTx.js | 83 ++++++++++--------- 2 files changed, 52 insertions(+), 49 deletions(-) diff --git a/packages/yoroi-extension/app/api/ada/index.js b/packages/yoroi-extension/app/api/ada/index.js index 39bf2614df..4737399faf 100644 --- a/packages/yoroi-extension/app/api/ada/index.js +++ b/packages/yoroi-extension/app/api/ada/index.js @@ -1384,16 +1384,16 @@ export default class AdaApi { ); const utxoSum = allUtxosForKey.reduce( - (sum, utxo) => sum.joinAddMutable(new MultiToken( - utxo.output.tokens.map(token => ({ - identifier: token.Token.Identifier, - amount: new BigNumber(token.TokenList.Amount), - networkId: token.Token.NetworkId, - })), - publicDeriver.getParent().getDefaultToken() - )), + (sum, utxo) => sum.joinAddMutable(new MultiToken( + utxo.output.tokens.map(token => ({ + identifier: token.Token.Identifier, + amount: new BigNumber(token.TokenList.Amount), + networkId: token.Token.NetworkId, + })), + publicDeriver.getParent().getDefaultToken() + )), publicDeriver.getParent().getDefaultMultiToken() - ); + ); const differenceAfterTx = getDifferenceAfterTx( unsignedTx, diff --git a/packages/yoroi-extension/app/api/ada/transactions/shelley/ledgerTx.js b/packages/yoroi-extension/app/api/ada/transactions/shelley/ledgerTx.js index 3a8be088de..d02bcce6de 100644 --- a/packages/yoroi-extension/app/api/ada/transactions/shelley/ledgerTx.js +++ b/packages/yoroi-extension/app/api/ada/transactions/shelley/ledgerTx.js @@ -349,48 +349,51 @@ function createLedgerCertificateHandler( return { getter, converter }; } -const CERTIFICATE_CONVERTERS: { [$Values]: LedgerCertificateHandler } = { - [RustModule.WalletV4.CertificateKind.StakeRegistration]: - createLedgerCertificateHandler( - cert => cert.as_stake_registration(), - (registrationCert, getPath) => ({ - type: CertificateType.STAKE_REGISTRATION, - params: { - stakeCredential: { - type: CredentialParamsType.KEY_PATH, - keyPath: getPath(registrationCert.stake_credential()), +const getCertificateConverter: number => ?LedgerCertificateHandler = (certificateKind) => { + switch (certificateKind) { + case RustModule.WalletV4.CertificateKind.StakeRegistration: + return createLedgerCertificateHandler( + cert => cert.as_stake_registration(), + (registrationCert, getPath) => ({ + type: CertificateType.STAKE_REGISTRATION, + params: { + stakeCredential: { + type: CredentialParamsType.KEY_PATH, + keyPath: getPath(registrationCert.stake_credential()), + }, }, - }, - }), - ), - [RustModule.WalletV4.CertificateKind.StakeDeregistration]: - createLedgerCertificateHandler ( - cert => cert.as_stake_deregistration(), - (deregistrationCert, getPath) => ({ - type: CertificateType.STAKE_DEREGISTRATION, - params: { - stakeCredential: { - type: CredentialParamsType.KEY_PATH, - keyPath: getPath(deregistrationCert.stake_credential()), + }), + ); + case RustModule.WalletV4.CertificateKind.StakeDeregistration: + return createLedgerCertificateHandler ( + cert => cert.as_stake_deregistration(), + (deregistrationCert, getPath) => ({ + type: CertificateType.STAKE_DEREGISTRATION, + params: { + stakeCredential: { + type: CredentialParamsType.KEY_PATH, + keyPath: getPath(deregistrationCert.stake_credential()), + }, }, - }, - }), - ), - [RustModule.WalletV4.CertificateKind.StakeDelegation]: - createLedgerCertificateHandler ( - cert => cert.as_stake_delegation(), - (delegationCert, getPath) => ({ - type: CertificateType.STAKE_DELEGATION, - params: { - stakeCredential: { - type: CredentialParamsType.KEY_PATH, - keyPath: getPath(delegationCert.stake_credential()), + }), + ); + case RustModule.WalletV4.CertificateKind.StakeDelegation: + return createLedgerCertificateHandler ( + cert => cert.as_stake_delegation(), + (delegationCert, getPath) => ({ + type: CertificateType.STAKE_DELEGATION, + params: { + stakeCredential: { + type: CredentialParamsType.KEY_PATH, + keyPath: getPath(delegationCert.stake_credential()), + }, + poolKeyHashHex: delegationCert.pool_keyhash().to_hex(), }, - poolKeyHashHex: delegationCert.pool_keyhash().to_hex(), - }, - }), - ), -}; + }), + ); + } + return null; +} function formatLedgerCertificates( networkId: number, @@ -416,7 +419,7 @@ function formatLedgerCertificates( for (let i = 0; i < certificates.len(); i++) { const cert = certificates.get(i); - const converter = CERTIFICATE_CONVERTERS[cert.kind()] + const converter = getCertificateConverter(cert.kind()) if (converter == null) { throw new Error(`${nameof(formatLedgerCertificates)} Ledger doesn't support this certificate type! ` + cert.to_hex()); } From 642140cda57703f7f2850d34b06f6df7bf3df576 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Mon, 12 Aug 2024 20:31:18 +0300 Subject: [PATCH 442/464] added support for conway reg/unreg, vote delegation, and drep registration certs in ledger handler --- .../api/ada/transactions/shelley/ledgerTx.js | 113 +++++++++++++++--- 1 file changed, 95 insertions(+), 18 deletions(-) diff --git a/packages/yoroi-extension/app/api/ada/transactions/shelley/ledgerTx.js b/packages/yoroi-extension/app/api/ada/transactions/shelley/ledgerTx.js index d02bcce6de..b660c58f08 100644 --- a/packages/yoroi-extension/app/api/ada/transactions/shelley/ledgerTx.js +++ b/packages/yoroi-extension/app/api/ada/transactions/shelley/ledgerTx.js @@ -30,6 +30,7 @@ import { DatumType, TxOutputFormat, CIP36VoteDelegationType, + DRepParamsType, } from '@cardano-foundation/ledgerjs-hw-app-cardano'; import { RustModule } from '../../lib/cardanoCrypto/rustLoader'; import { toHexOrBase58 } from '../../lib/storage/bridge/utils'; @@ -41,6 +42,7 @@ import { } from '../../../../config/numbersConfig'; import cbor from 'cbor'; import { derivePublicByAddressing } from '../../lib/cardanoCrypto/deriveByAddressing'; +import { forceNonNull } from '../../../../coreUtils'; // ==================== LEDGER ==================== // /** Generate a payload for Ledger SignTx */ @@ -354,28 +356,38 @@ const getCertificateConverter: number => ?LedgerCertificateHandler = (certi case RustModule.WalletV4.CertificateKind.StakeRegistration: return createLedgerCertificateHandler( cert => cert.as_stake_registration(), - (registrationCert, getPath) => ({ - type: CertificateType.STAKE_REGISTRATION, - params: { - stakeCredential: { - type: CredentialParamsType.KEY_PATH, - keyPath: getPath(registrationCert.stake_credential()), - }, - }, - }), + (registrationCert, getPath) => { + const stakeCredential = { + type: CredentialParamsType.KEY_PATH, + keyPath: getPath(registrationCert.stake_credential()), + }; + const coin = registrationCert.coin(); + return coin == null ? { + type: CertificateType.STAKE_REGISTRATION, + params: { stakeCredential }, + } : { + type: CertificateType.STAKE_REGISTRATION_CONWAY, + params: { stakeCredential, deposit: coin.to_str() }, + }; + }, ); case RustModule.WalletV4.CertificateKind.StakeDeregistration: return createLedgerCertificateHandler ( cert => cert.as_stake_deregistration(), - (deregistrationCert, getPath) => ({ - type: CertificateType.STAKE_DEREGISTRATION, - params: { - stakeCredential: { - type: CredentialParamsType.KEY_PATH, - keyPath: getPath(deregistrationCert.stake_credential()), - }, - }, - }), + (deregistrationCert, getPath) => { + const stakeCredential = { + type: CredentialParamsType.KEY_PATH, + keyPath: getPath(deregistrationCert.stake_credential()), + }; + const coin = deregistrationCert.coin(); + return coin == null ? { + type: CertificateType.STAKE_DEREGISTRATION, + params: { stakeCredential }, + } : { + type: CertificateType.STAKE_DEREGISTRATION_CONWAY, + params: { stakeCredential, deposit: coin.to_str() }, + }; + }, ); case RustModule.WalletV4.CertificateKind.StakeDelegation: return createLedgerCertificateHandler ( @@ -391,6 +403,71 @@ const getCertificateConverter: number => ?LedgerCertificateHandler = (certi }, }), ); + case RustModule.WalletV4.CertificateKind.VoteDelegation: + return createLedgerCertificateHandler ( + cert => cert.as_vote_delegation(), + (delegationCert, getPath) => { + const wasmDrep = delegationCert.drep(); + let dRep; + switch (wasmDrep.kind()) { + case RustModule.WalletV4.DRepKind.KeyHash: + dRep = { + type: DRepParamsType.KEY_HASH, + keyHashHex: forceNonNull(wasmDrep.to_key_hash()).to_hex(), + }; + break; + case RustModule.WalletV4.DRepKind.ScriptHash: + dRep = { + type: DRepParamsType.SCRIPT_HASH, + scriptHashHex: forceNonNull(wasmDrep.to_script_hash()).to_hex(), + }; + break; + case RustModule.WalletV4.DRepKind.AlwaysAbstain: + dRep = { + type: DRepParamsType.ABSTAIN, + }; + break; + case RustModule.WalletV4.DRepKind.AlwaysNoConfidence: + dRep = { + type: DRepParamsType.NO_CONFIDENCE, + }; + break; + default: + throw new Error('Ledger: Unsupported dRep kind: ' + wasmDrep.to_hex()); + } + return { + type: CertificateType.VOTE_DELEGATION, + params: { + stakeCredential: { + type: CredentialParamsType.KEY_PATH, + keyPath: getPath(delegationCert.stake_credential()), + }, + dRep, + }, + }; + }, + ); + case RustModule.WalletV4.CertificateKind.DrepRegistration: + return createLedgerCertificateHandler ( + cert => cert.as_drep_registration(), + (registrationCert, getPath) => { + const wasmAnchor = registrationCert.anchor(); + return { + type: CertificateType.DREP_REGISTRATION, + params: { + dRepCredential: { + type: CredentialParamsType.KEY_PATH, + keyPath: getPath(registrationCert.voting_credential()), + }, + deposit: registrationCert.coin().to_str(), + anchor: wasmAnchor == null ? undefined : { + url: wasmAnchor.url().url(), + hashHex: wasmAnchor.anchor_data_hash().to_hex(), + }, + }, + }; + }, + ); } return null; } From 71c2d732194360f2491764d746a05aba7797d211 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Tue, 13 Aug 2024 16:00:30 +0300 Subject: [PATCH 443/464] added support for all other certs in ledger handler --- .../api/ada/transactions/shelley/ledgerTx.js | 260 +++++++++++------- 1 file changed, 160 insertions(+), 100 deletions(-) diff --git a/packages/yoroi-extension/app/api/ada/transactions/shelley/ledgerTx.js b/packages/yoroi-extension/app/api/ada/transactions/shelley/ledgerTx.js index b660c58f08..ecf2162041 100644 --- a/packages/yoroi-extension/app/api/ada/transactions/shelley/ledgerTx.js +++ b/packages/yoroi-extension/app/api/ada/transactions/shelley/ledgerTx.js @@ -12,7 +12,7 @@ import type { Token, TxOutput, TxInput, - SignTransactionRequest, + SignTransactionRequest, AnchorParams, CredentialParams, DRepParams, StakeDelegationParams, } from '@cardano-foundation/ledgerjs-hw-app-cardano'; import type { Address, Value, Addressing, @@ -341,135 +341,195 @@ function formatLedgerWithdrawals( type LedgerCertificateHandler = {| getter: RustModule.WalletV4.Certificate => ?CslCert, - converter: (CslCert, RustModule.WalletV4.Credential => number[]) => Certificate, + converter: (CslCert, RustModule.WalletV4.Credential => number[]) => Array, |} function createLedgerCertificateHandler( getter: RustModule.WalletV4.Certificate => ?CslCert, - converter: (CslCert, RustModule.WalletV4.Credential => number[]) => Certificate, + converter: (CslCert, RustModule.WalletV4.Credential => number[]) => Array, ): LedgerCertificateHandler { return { getter, converter }; } +function wasmCertToAnchor(wasmCert: any): ?AnchorParams { + const wasmAnchor = wasmCert.anchor(); + return wasmAnchor == null ? undefined : { + url: wasmAnchor.url().url(), + hashHex: wasmAnchor.anchor_data_hash().to_hex(), + }; +} + +function wasmCertToStakeCredential(wasmCert: any, getPath: RustModule.WalletV4.Credential => number[]): CredentialParams { + return { + type: CredentialParamsType.KEY_PATH, + keyPath: getPath(wasmCert.stake_credential()), + }; +} + +function wasmCertToDRepCredential(wasmCert: any, getPath: RustModule.WalletV4.Credential => number[]): CredentialParams { + return { + type: CredentialParamsType.KEY_PATH, + keyPath: getPath(wasmCert.voting_credential()), + }; +} + +function wasmCertToDrep(wasmCert: any): DRepParams { + const wasmDrep = wasmCert.drep(); + switch (wasmDrep.kind()) { + case RustModule.WalletV4.DRepKind.KeyHash: + return { + type: DRepParamsType.KEY_HASH, + keyHashHex: forceNonNull(wasmDrep.to_key_hash()).to_hex(), + }; + case RustModule.WalletV4.DRepKind.ScriptHash: + return { + type: DRepParamsType.SCRIPT_HASH, + scriptHashHex: forceNonNull(wasmDrep.to_script_hash()).to_hex(), + }; + case RustModule.WalletV4.DRepKind.AlwaysAbstain: + return { type: DRepParamsType.ABSTAIN }; + case RustModule.WalletV4.DRepKind.AlwaysNoConfidence: + return { type: DRepParamsType.NO_CONFIDENCE }; + default: + throw new Error('Ledger: Unsupported dRep kind: ' + wasmDrep.to_hex()); + } +} + +function wasmCertToStakeRegistration(wasmCert: any, getPath: RustModule.WalletV4.Credential => number[]): Certificate { + const stakeCredential = wasmCertToStakeCredential(wasmCert, getPath); + const coin = wasmCert.coin(); + return coin == null ? { + type: CertificateType.STAKE_REGISTRATION, + params: { stakeCredential: stakeCredential }, + } : { + type: CertificateType.STAKE_REGISTRATION_CONWAY, + params: { stakeCredential: stakeCredential, deposit: coin.to_str() }, + }; +} + +function wasmCertToStakeDeregistration(wasmCert: any, getPath: RustModule.WalletV4.Credential => number[]): Certificate { + const stakeCredential = wasmCertToStakeCredential(wasmCert, getPath); + const coin = wasmCert.coin(); + return coin == null ? { + type: CertificateType.STAKE_DEREGISTRATION, + params: { stakeCredential }, + } : { + type: CertificateType.STAKE_DEREGISTRATION_CONWAY, + params: { stakeCredential, deposit: coin.to_str() }, + }; +} + +function wasmCertToStakeDelegation(wasmCert: any, getPath: RustModule.WalletV4.Credential => number[]): Certificate { + return { + type: CertificateType.STAKE_DELEGATION, + params: { + stakeCredential: wasmCertToStakeCredential(wasmCert, getPath), + poolKeyHashHex: wasmCert.pool_keyhash().to_hex(), + }, + }; +} + +function wasmCertToVoteDelegation(wasmCert: any, getPath: RustModule.WalletV4.Credential => number[]): Certificate { + return { + type: CertificateType.VOTE_DELEGATION, + params: { + stakeCredential: wasmCertToStakeCredential(wasmCert, getPath), + dRep: wasmCertToDrep(wasmCert), + }, + }; +} + const getCertificateConverter: number => ?LedgerCertificateHandler = (certificateKind) => { switch (certificateKind) { case RustModule.WalletV4.CertificateKind.StakeRegistration: return createLedgerCertificateHandler( cert => cert.as_stake_registration(), - (registrationCert, getPath) => { - const stakeCredential = { - type: CredentialParamsType.KEY_PATH, - keyPath: getPath(registrationCert.stake_credential()), - }; - const coin = registrationCert.coin(); - return coin == null ? { - type: CertificateType.STAKE_REGISTRATION, - params: { stakeCredential }, - } : { - type: CertificateType.STAKE_REGISTRATION_CONWAY, - params: { stakeCredential, deposit: coin.to_str() }, - }; - }, + (wasmCert, getPath) => [wasmCertToStakeRegistration(wasmCert, getPath)], ); case RustModule.WalletV4.CertificateKind.StakeDeregistration: return createLedgerCertificateHandler ( cert => cert.as_stake_deregistration(), - (deregistrationCert, getPath) => { - const stakeCredential = { - type: CredentialParamsType.KEY_PATH, - keyPath: getPath(deregistrationCert.stake_credential()), - }; - const coin = deregistrationCert.coin(); - return coin == null ? { - type: CertificateType.STAKE_DEREGISTRATION, - params: { stakeCredential }, - } : { - type: CertificateType.STAKE_DEREGISTRATION_CONWAY, - params: { stakeCredential, deposit: coin.to_str() }, - }; - }, + (wasmCert, getPath) => [wasmCertToStakeDeregistration(wasmCert, getPath)], ); case RustModule.WalletV4.CertificateKind.StakeDelegation: return createLedgerCertificateHandler ( cert => cert.as_stake_delegation(), - (delegationCert, getPath) => ({ - type: CertificateType.STAKE_DELEGATION, - params: { - stakeCredential: { - type: CredentialParamsType.KEY_PATH, - keyPath: getPath(delegationCert.stake_credential()), - }, - poolKeyHashHex: delegationCert.pool_keyhash().to_hex(), - }, - }), + (wasmCert, getPath) => [wasmCertToStakeDelegation(wasmCert, getPath)], ); case RustModule.WalletV4.CertificateKind.VoteDelegation: return createLedgerCertificateHandler ( cert => cert.as_vote_delegation(), - (delegationCert, getPath) => { - const wasmDrep = delegationCert.drep(); - let dRep; - switch (wasmDrep.kind()) { - case RustModule.WalletV4.DRepKind.KeyHash: - dRep = { - type: DRepParamsType.KEY_HASH, - keyHashHex: forceNonNull(wasmDrep.to_key_hash()).to_hex(), - }; - break; - case RustModule.WalletV4.DRepKind.ScriptHash: - dRep = { - type: DRepParamsType.SCRIPT_HASH, - scriptHashHex: forceNonNull(wasmDrep.to_script_hash()).to_hex(), - }; - break; - case RustModule.WalletV4.DRepKind.AlwaysAbstain: - dRep = { - type: DRepParamsType.ABSTAIN, - }; - break; - case RustModule.WalletV4.DRepKind.AlwaysNoConfidence: - dRep = { - type: DRepParamsType.NO_CONFIDENCE, - }; - break; - default: - throw new Error('Ledger: Unsupported dRep kind: ' + wasmDrep.to_hex()); - } - return { - type: CertificateType.VOTE_DELEGATION, - params: { - stakeCredential: { - type: CredentialParamsType.KEY_PATH, - keyPath: getPath(delegationCert.stake_credential()), - }, - dRep, - }, - }; - }, + (wasmCert, getPath) => [wasmCertToVoteDelegation(wasmCert, getPath)], + ); + case RustModule.WalletV4.CertificateKind.StakeAndVoteDelegation: + return createLedgerCertificateHandler ( + cert => cert.as_stake_and_vote_delegation(), + (wasmCert, getPath) => [ + wasmCertToStakeDelegation(wasmCert, getPath), + wasmCertToVoteDelegation(wasmCert, getPath), + ]); + case RustModule.WalletV4.CertificateKind.StakeRegistrationAndDelegation: + return createLedgerCertificateHandler ( + cert => cert.as_stake_registration_and_delegation(), + (wasmCert, getPath) => [ + wasmCertToStakeRegistration(wasmCert, getPath), + wasmCertToStakeDelegation(wasmCert, getPath), + ], + ); + case RustModule.WalletV4.CertificateKind.VoteRegistrationAndDelegation: + return createLedgerCertificateHandler ( + cert => cert.as_vote_registration_and_delegation(), + (wasmCert, getPath) => [ + wasmCertToStakeRegistration(wasmCert, getPath), + wasmCertToVoteDelegation(wasmCert, getPath), + ], + ); + case RustModule.WalletV4.CertificateKind.StakeVoteRegistrationAndDelegation: + return createLedgerCertificateHandler ( + cert => cert.as_stake_vote_registration_and_delegation(), + (wasmCert, getPath) => [ + wasmCertToStakeRegistration(wasmCert, getPath), + wasmCertToStakeDelegation(wasmCert, getPath), + wasmCertToVoteDelegation(wasmCert, getPath), + ], ); case RustModule.WalletV4.CertificateKind.DrepRegistration: return createLedgerCertificateHandler ( cert => cert.as_drep_registration(), - (registrationCert, getPath) => { - const wasmAnchor = registrationCert.anchor(); - return { - type: CertificateType.DREP_REGISTRATION, - params: { - dRepCredential: { - type: CredentialParamsType.KEY_PATH, - keyPath: getPath(registrationCert.voting_credential()), - }, - deposit: registrationCert.coin().to_str(), - anchor: wasmAnchor == null ? undefined : { - url: wasmAnchor.url().url(), - hashHex: wasmAnchor.anchor_data_hash().to_hex(), - }, - }, - }; - }, + (wasmCert, getPath) => [{ + type: CertificateType.DREP_REGISTRATION, + params: { + dRepCredential: wasmCertToDRepCredential(wasmCert, getPath), + anchor: wasmCertToAnchor(wasmCert), + deposit: wasmCert.coin().to_str(), + }, + }], + ); + case RustModule.WalletV4.CertificateKind.DrepUpdate: + return createLedgerCertificateHandler ( + cert => cert.as_drep_update(), + (wasmCert, getPath) => [{ + type: CertificateType.DREP_UPDATE, + params: { + dRepCredential: wasmCertToDRepCredential(wasmCert, getPath), + anchor: wasmCertToAnchor(wasmCert), + }, + }], + ); + case RustModule.WalletV4.CertificateKind.DrepDeregistration: + return createLedgerCertificateHandler ( + cert => cert.as_drep_deregistration(), + (wasmCert, getPath) => [{ + type: CertificateType.DREP_DEREGISTRATION, + params: { + dRepCredential: wasmCertToDRepCredential(wasmCert, getPath), + deposit: wasmCert.coin().to_str(), + }, + }], ); + default: + return null; } - return null; } function formatLedgerCertificates( @@ -506,7 +566,7 @@ function formatLedgerCertificates( throw new Error(`${nameof(formatLedgerCertificates)} Certificate converter did not extract a correct certificate type! ` + cert.to_hex()); } - result.push(converter.converter(cslCert, getPath)); + result.push(...converter.converter(cslCert, getPath)); } return result; } From 19ecd79b7061dfdfcde345768defe59a2739f576 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Tue, 13 Aug 2024 16:50:11 +0300 Subject: [PATCH 444/464] refactoring certificate processing in ledger handler --- .../api/ada/transactions/shelley/ledgerTx.js | 260 +++++++++--------- 1 file changed, 137 insertions(+), 123 deletions(-) diff --git a/packages/yoroi-extension/app/api/ada/transactions/shelley/ledgerTx.js b/packages/yoroi-extension/app/api/ada/transactions/shelley/ledgerTx.js index ecf2162041..cb31f7a1f1 100644 --- a/packages/yoroi-extension/app/api/ada/transactions/shelley/ledgerTx.js +++ b/packages/yoroi-extension/app/api/ada/transactions/shelley/ledgerTx.js @@ -12,7 +12,10 @@ import type { Token, TxOutput, TxInput, - SignTransactionRequest, AnchorParams, CredentialParams, DRepParams, StakeDelegationParams, + SignTransactionRequest, + AnchorParams, + CredentialParams, + DRepParams, } from '@cardano-foundation/ledgerjs-hw-app-cardano'; import type { Address, Value, Addressing, @@ -339,19 +342,11 @@ function formatLedgerWithdrawals( return result; } -type LedgerCertificateHandler = {| - getter: RustModule.WalletV4.Certificate => ?CslCert, - converter: (CslCert, RustModule.WalletV4.Credential => number[]) => Array, -|} +type WasmCertWithAnchor = + RustModule.WalletV4.DrepRegistration + | RustModule.WalletV4.DrepUpdate; -function createLedgerCertificateHandler( - getter: RustModule.WalletV4.Certificate => ?CslCert, - converter: (CslCert, RustModule.WalletV4.Credential => number[]) => Array, -): LedgerCertificateHandler { - return { getter, converter }; -} - -function wasmCertToAnchor(wasmCert: any): ?AnchorParams { +function wasmCertToAnchor(wasmCert: WasmCertWithAnchor): ?AnchorParams { const wasmAnchor = wasmCert.anchor(); return wasmAnchor == null ? undefined : { url: wasmAnchor.url().url(), @@ -359,21 +354,42 @@ function wasmCertToAnchor(wasmCert: any): ?AnchorParams { }; } -function wasmCertToStakeCredential(wasmCert: any, getPath: RustModule.WalletV4.Credential => number[]): CredentialParams { +type WasmCertWithStakeCredential = + RustModule.WalletV4.StakeRegistration + | RustModule.WalletV4.StakeDeregistration + | RustModule.WalletV4.StakeDelegation + | RustModule.WalletV4.VoteDelegation + | RustModule.WalletV4.StakeAndVoteDelegation + | RustModule.WalletV4.StakeRegistrationAndDelegation + | RustModule.WalletV4.VoteRegistrationAndDelegation + | RustModule.WalletV4.StakeVoteRegistrationAndDelegation; + +function wasmCertToStakeCredential(wasmCert: WasmCertWithStakeCredential, getPath: RustModule.WalletV4.Credential => number[]): CredentialParams { return { type: CredentialParamsType.KEY_PATH, keyPath: getPath(wasmCert.stake_credential()), }; } -function wasmCertToDRepCredential(wasmCert: any, getPath: RustModule.WalletV4.Credential => number[]): CredentialParams { +type WasmCertWithDrepCredential = + RustModule.WalletV4.DrepRegistration + | RustModule.WalletV4.DrepUpdate + | RustModule.WalletV4.DrepDeregistration; + +function wasmCertToDRepCredential(wasmCert: WasmCertWithDrepCredential, getPath: RustModule.WalletV4.Credential => number[]): CredentialParams { return { type: CredentialParamsType.KEY_PATH, keyPath: getPath(wasmCert.voting_credential()), }; } -function wasmCertToDrep(wasmCert: any): DRepParams { +type WasmCertWithDrepDelegation = + RustModule.WalletV4.VoteDelegation + | RustModule.WalletV4.StakeAndVoteDelegation + | RustModule.WalletV4.VoteRegistrationAndDelegation + | RustModule.WalletV4.StakeVoteRegistrationAndDelegation; + +function wasmCertToDrep(wasmCert: WasmCertWithDrepDelegation): DRepParams { const wasmDrep = wasmCert.drep(); switch (wasmDrep.kind()) { case RustModule.WalletV4.DRepKind.KeyHash: @@ -395,19 +411,28 @@ function wasmCertToDrep(wasmCert: any): DRepParams { } } -function wasmCertToStakeRegistration(wasmCert: any, getPath: RustModule.WalletV4.Credential => number[]): Certificate { +type WasmCertWithStakeRegistration = + RustModule.WalletV4.StakeRegistration + | RustModule.WalletV4.StakeRegistrationAndDelegation + | RustModule.WalletV4.VoteRegistrationAndDelegation + | RustModule.WalletV4.StakeVoteRegistrationAndDelegation; + +function wasmCertToStakeRegistration(wasmCert: WasmCertWithStakeRegistration, getPath: RustModule.WalletV4.Credential => number[]): Certificate { const stakeCredential = wasmCertToStakeCredential(wasmCert, getPath); const coin = wasmCert.coin(); return coin == null ? { type: CertificateType.STAKE_REGISTRATION, - params: { stakeCredential: stakeCredential }, + params: { stakeCredential }, } : { type: CertificateType.STAKE_REGISTRATION_CONWAY, - params: { stakeCredential: stakeCredential, deposit: coin.to_str() }, + params: { stakeCredential, deposit: coin.to_str() }, }; } -function wasmCertToStakeDeregistration(wasmCert: any, getPath: RustModule.WalletV4.Credential => number[]): Certificate { +type WasmCertWithStakeDeregistration = + | RustModule.WalletV4.StakeDeregistration; + +function wasmCertToStakeDeregistration(wasmCert: WasmCertWithStakeDeregistration, getPath: RustModule.WalletV4.Credential => number[]): Certificate { const stakeCredential = wasmCertToStakeCredential(wasmCert, getPath); const coin = wasmCert.coin(); return coin == null ? { @@ -419,7 +444,14 @@ function wasmCertToStakeDeregistration(wasmCert: any, getPath: RustModule.Wallet }; } -function wasmCertToStakeDelegation(wasmCert: any, getPath: RustModule.WalletV4.Credential => number[]): Certificate { + +type WasmCertWithStakeDelegation = + | RustModule.WalletV4.StakeDelegation + | RustModule.WalletV4.StakeAndVoteDelegation + | RustModule.WalletV4.StakeRegistrationAndDelegation + | RustModule.WalletV4.StakeVoteRegistrationAndDelegation; + +function wasmCertToStakeDelegation(wasmCert: WasmCertWithStakeDelegation, getPath: RustModule.WalletV4.Credential => number[]): Certificate { return { type: CertificateType.STAKE_DELEGATION, params: { @@ -429,7 +461,7 @@ function wasmCertToStakeDelegation(wasmCert: any, getPath: RustModule.WalletV4.C }; } -function wasmCertToVoteDelegation(wasmCert: any, getPath: RustModule.WalletV4.Credential => number[]): Certificate { +function wasmCertToVoteDelegation(wasmCert: WasmCertWithDrepDelegation, getPath: RustModule.WalletV4.Credential => number[]): Certificate { return { type: CertificateType.VOTE_DELEGATION, params: { @@ -439,96 +471,89 @@ function wasmCertToVoteDelegation(wasmCert: any, getPath: RustModule.WalletV4.Cr }; } -const getCertificateConverter: number => ?LedgerCertificateHandler = (certificateKind) => { - switch (certificateKind) { - case RustModule.WalletV4.CertificateKind.StakeRegistration: - return createLedgerCertificateHandler( - cert => cert.as_stake_registration(), - (wasmCert, getPath) => [wasmCertToStakeRegistration(wasmCert, getPath)], - ); - case RustModule.WalletV4.CertificateKind.StakeDeregistration: - return createLedgerCertificateHandler ( - cert => cert.as_stake_deregistration(), - (wasmCert, getPath) => [wasmCertToStakeDeregistration(wasmCert, getPath)], - ); - case RustModule.WalletV4.CertificateKind.StakeDelegation: - return createLedgerCertificateHandler ( - cert => cert.as_stake_delegation(), - (wasmCert, getPath) => [wasmCertToStakeDelegation(wasmCert, getPath)], - ); - case RustModule.WalletV4.CertificateKind.VoteDelegation: - return createLedgerCertificateHandler ( - cert => cert.as_vote_delegation(), - (wasmCert, getPath) => [wasmCertToVoteDelegation(wasmCert, getPath)], - ); - case RustModule.WalletV4.CertificateKind.StakeAndVoteDelegation: - return createLedgerCertificateHandler ( - cert => cert.as_stake_and_vote_delegation(), - (wasmCert, getPath) => [ - wasmCertToStakeDelegation(wasmCert, getPath), - wasmCertToVoteDelegation(wasmCert, getPath), - ]); - case RustModule.WalletV4.CertificateKind.StakeRegistrationAndDelegation: - return createLedgerCertificateHandler ( - cert => cert.as_stake_registration_and_delegation(), - (wasmCert, getPath) => [ - wasmCertToStakeRegistration(wasmCert, getPath), - wasmCertToStakeDelegation(wasmCert, getPath), - ], - ); - case RustModule.WalletV4.CertificateKind.VoteRegistrationAndDelegation: - return createLedgerCertificateHandler ( - cert => cert.as_vote_registration_and_delegation(), - (wasmCert, getPath) => [ - wasmCertToStakeRegistration(wasmCert, getPath), - wasmCertToVoteDelegation(wasmCert, getPath), - ], - ); - case RustModule.WalletV4.CertificateKind.StakeVoteRegistrationAndDelegation: - return createLedgerCertificateHandler ( - cert => cert.as_stake_vote_registration_and_delegation(), - (wasmCert, getPath) => [ - wasmCertToStakeRegistration(wasmCert, getPath), - wasmCertToStakeDelegation(wasmCert, getPath), - wasmCertToVoteDelegation(wasmCert, getPath), - ], - ); - case RustModule.WalletV4.CertificateKind.DrepRegistration: - return createLedgerCertificateHandler ( - cert => cert.as_drep_registration(), - (wasmCert, getPath) => [{ - type: CertificateType.DREP_REGISTRATION, - params: { - dRepCredential: wasmCertToDRepCredential(wasmCert, getPath), - anchor: wasmCertToAnchor(wasmCert), - deposit: wasmCert.coin().to_str(), - }, - }], - ); - case RustModule.WalletV4.CertificateKind.DrepUpdate: - return createLedgerCertificateHandler ( - cert => cert.as_drep_update(), - (wasmCert, getPath) => [{ - type: CertificateType.DREP_UPDATE, - params: { - dRepCredential: wasmCertToDRepCredential(wasmCert, getPath), - anchor: wasmCertToAnchor(wasmCert), - }, - }], - ); - case RustModule.WalletV4.CertificateKind.DrepDeregistration: - return createLedgerCertificateHandler ( - cert => cert.as_drep_deregistration(), - (wasmCert, getPath) => [{ - type: CertificateType.DREP_DEREGISTRATION, - params: { - dRepCredential: wasmCertToDRepCredential(wasmCert, getPath), - deposit: wasmCert.coin().to_str(), - }, - }], - ); +function convertCertificate( + wasmCertificateWrap: RustModule.WalletV4.Certificate, + getPath: RustModule.WalletV4.Credential => number[] +): Array { + switch (wasmCertificateWrap.kind()) { + case RustModule.WalletV4.CertificateKind.StakeRegistration: { + const wasmCert = forceNonNull(wasmCertificateWrap.as_stake_registration()); + return [wasmCertToStakeRegistration(wasmCert, getPath)]; + } + case RustModule.WalletV4.CertificateKind.StakeDeregistration: { + const wasmCert = forceNonNull(wasmCertificateWrap.as_stake_deregistration()); + return [wasmCertToStakeDeregistration(wasmCert, getPath)]; + } + case RustModule.WalletV4.CertificateKind.StakeDelegation: { + const wasmCert = forceNonNull(wasmCertificateWrap.as_stake_delegation()); + return [wasmCertToStakeDelegation(wasmCert, getPath)]; + } + case RustModule.WalletV4.CertificateKind.VoteDelegation: { + const wasmCert = forceNonNull(wasmCertificateWrap.as_vote_delegation()); + return [wasmCertToVoteDelegation(wasmCert, getPath)]; + } + case RustModule.WalletV4.CertificateKind.StakeAndVoteDelegation: { + const wasmCert = forceNonNull(wasmCertificateWrap.as_stake_and_vote_delegation()); + return [ + wasmCertToStakeDelegation(wasmCert, getPath), + wasmCertToVoteDelegation(wasmCert, getPath), + ]; + } + case RustModule.WalletV4.CertificateKind.StakeRegistrationAndDelegation: { + const wasmCert = forceNonNull(wasmCertificateWrap.as_stake_registration_and_delegation()); + return [ + wasmCertToStakeRegistration(wasmCert, getPath), + wasmCertToStakeDelegation(wasmCert, getPath), + ]; + } + case RustModule.WalletV4.CertificateKind.VoteRegistrationAndDelegation: { + const wasmCert = forceNonNull(wasmCertificateWrap.as_vote_registration_and_delegation()); + return [ + wasmCertToStakeRegistration(wasmCert, getPath), + wasmCertToVoteDelegation(wasmCert, getPath), + ]; + } + case RustModule.WalletV4.CertificateKind.StakeVoteRegistrationAndDelegation: { + const wasmCert = forceNonNull(wasmCertificateWrap.as_stake_vote_registration_and_delegation()); + return [ + wasmCertToStakeRegistration(wasmCert, getPath), + wasmCertToStakeDelegation(wasmCert, getPath), + wasmCertToVoteDelegation(wasmCert, getPath), + ]; + } + case RustModule.WalletV4.CertificateKind.DrepRegistration: { + const wasmCert = forceNonNull(wasmCertificateWrap.as_drep_registration()); + return [{ + type: CertificateType.DREP_REGISTRATION, + params: { + dRepCredential: wasmCertToDRepCredential(wasmCert, getPath), + anchor: wasmCertToAnchor(wasmCert), + deposit: wasmCert.coin().to_str(), + }, + }]; + } + case RustModule.WalletV4.CertificateKind.DrepUpdate: { + const wasmCert = forceNonNull(wasmCertificateWrap.as_drep_update()); + return [{ + type: CertificateType.DREP_UPDATE, + params: { + dRepCredential: wasmCertToDRepCredential(wasmCert, getPath), + anchor: wasmCertToAnchor(wasmCert), + }, + }]; + } + case RustModule.WalletV4.CertificateKind.DrepDeregistration: { + const wasmCert = forceNonNull(wasmCertificateWrap.as_drep_deregistration()); + return [{ + type: CertificateType.DREP_DEREGISTRATION, + params: { + dRepCredential: wasmCertToDRepCredential(wasmCert, getPath), + deposit: wasmCert.coin().to_str(), + }, + }]; + } default: - return null; + throw new Error(`${nameof(formatLedgerCertificates)} Ledger doesn't support this certificate type! ` + wasmCertificateWrap.to_hex()); } } @@ -555,18 +580,7 @@ function formatLedgerCertificates( const result = []; for (let i = 0; i < certificates.len(); i++) { const cert = certificates.get(i); - - const converter = getCertificateConverter(cert.kind()) - if (converter == null) { - throw new Error(`${nameof(formatLedgerCertificates)} Ledger doesn't support this certificate type! ` + cert.to_hex()); - } - - const cslCert = converter.getter(cert); - if (cslCert == null) { - throw new Error(`${nameof(formatLedgerCertificates)} Certificate converter did not extract a correct certificate type! ` + cert.to_hex()); - } - - result.push(...converter.converter(cslCert, getPath)); + result.push(...convertCertificate(cert, getPath)); } return result; } From 5f59cfa41fa4caf08c105f92221f786714c2f0bf Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Wed, 14 Aug 2024 16:46:42 +0300 Subject: [PATCH 445/464] test snapshot fix --- .../api/ada/lib/storage/tests/__snapshots__/index.test.js.snap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/api/ada/lib/storage/tests/__snapshots__/index.test.js.snap b/packages/yoroi-extension/app/api/ada/lib/storage/tests/__snapshots__/index.test.js.snap index d76ee8f8df..4b58d1d3fa 100644 --- a/packages/yoroi-extension/app/api/ada/lib/storage/tests/__snapshots__/index.test.js.snap +++ b/packages/yoroi-extension/app/api/ada/lib/storage/tests/__snapshots__/index.test.js.snap @@ -1342,7 +1342,7 @@ Object { Object { "Backend": Object { "BackendService": "https://preview-backend.emurgornd.com", - "BackendServiceZero": "https://yoroi-backend-zero-previes.emurgornd.com", + "BackendServiceZero": "https://yoroi-backend-zero-preview.emurgornd.com", "TokenInfoService": "https://stage-cdn.yoroiwallet.com", }, "BaseConfig": Array [ From 7f42c298c7964e4e075482e0d93e936e30be6899 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Thu, 15 Aug 2024 16:22:48 +0300 Subject: [PATCH 446/464] fixing delegation center UI when key is registered but not delegating --- .../app/containers/wallet/staking/CardanoStakingPage.js | 3 ++- .../app/containers/wallet/staking/StakingPageContent.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/yoroi-extension/app/containers/wallet/staking/CardanoStakingPage.js b/packages/yoroi-extension/app/containers/wallet/staking/CardanoStakingPage.js index 4231ed9c95..44139581f4 100644 --- a/packages/yoroi-extension/app/containers/wallet/staking/CardanoStakingPage.js +++ b/packages/yoroi-extension/app/containers/wallet/staking/CardanoStakingPage.js @@ -95,6 +95,7 @@ class CardanoStakingPage extends Component { } const balance = this.props.stores.transactions.getBalance(publicDeriver); const isStakeRegistered = this.props.stores.delegation.isStakeRegistered(publicDeriver); + const isCurrentlyDelegating = this.props.stores.delegation.isCurrentlyDelegating(publicDeriver); const isWalletWithNoFunds = balance != null && balance.getDefaultEntry().amount.isZero(); const poolList = delegatedPoolId != null && isStakeRegistered ? [delegatedPoolId] : []; @@ -117,7 +118,7 @@ class CardanoStakingPage extends Component { const revampCardanoStakingPage = ( <> - {!isStakeRegistered ? ( + {!isCurrentlyDelegating ? ( { diff --git a/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js b/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js index 2e99ed00e4..5c5d590ff9 100644 --- a/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js +++ b/packages/yoroi-extension/app/containers/wallet/staking/StakingPageContent.js @@ -219,7 +219,7 @@ class StakingPageContent extends Component { this.props.actions.dialogs.open.trigger({ dialog: BuySellDialog })} /> ) : null} - {isStakeRegistered ? ( + {currentlyDelegating ? ( From a9f9ae971984d7b1a7bcca5fa65b5a9e758c10af Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Mon, 19 Aug 2024 00:32:03 +0300 Subject: [PATCH 447/464] drep delegation check added to pending txs --- .../app/api/ada/lib/storage/bridge/utils.js | 8 ++++++++ .../app/stores/toplevel/TransactionsStore.js | 9 ++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/api/ada/lib/storage/bridge/utils.js b/packages/yoroi-extension/app/api/ada/lib/storage/bridge/utils.js index a0efc8e346..e2503b50bf 100644 --- a/packages/yoroi-extension/app/api/ada/lib/storage/bridge/utils.js +++ b/packages/yoroi-extension/app/api/ada/lib/storage/bridge/utils.js @@ -8,6 +8,7 @@ import { isCardanoHaskell } from '../database/prepackaged/networks'; import { defineMessages } from 'react-intl'; import type { $npm$ReactIntl$MessageDescriptor } from 'react-intl'; import { bech32 as bech32Module } from 'bech32'; +import typeof { CertificateKind } from '@emurgo/cardano-serialization-lib-browser/cardano_serialization_lib'; export function tryAddressToKind( address: string, @@ -386,3 +387,10 @@ export function unwrapStakingKey(stakingAddress: string): RustModule.WalletV4.Cr return stakingKey; } + +export function isCertificateKindDrepDelegation(kind: $Values): boolean { + return kind === RustModule.WalletV4.CertificateKind.VoteDelegation + || kind === RustModule.WalletV4.CertificateKind.StakeAndVoteDelegation + || kind === RustModule.WalletV4.CertificateKind.VoteRegistrationAndDelegation + || kind === RustModule.WalletV4.CertificateKind.StakeVoteRegistrationAndDelegation; +} diff --git a/packages/yoroi-extension/app/stores/toplevel/TransactionsStore.js b/packages/yoroi-extension/app/stores/toplevel/TransactionsStore.js index 920771166b..b1dae78051 100644 --- a/packages/yoroi-extension/app/stores/toplevel/TransactionsStore.js +++ b/packages/yoroi-extension/app/stores/toplevel/TransactionsStore.js @@ -46,7 +46,7 @@ import { cardanoMinAdaRequiredFromRemoteFormat_coinsPerWord, } from '../../api/ada/transactions/utils'; import { PRIMARY_ASSET_CONSTANTS } from '../../api/ada/lib/storage/database/primitives/enums'; -import type { NetworkRow } from '../../api/ada/lib/storage/database/primitives/tables'; +import type { CertificatePart, NetworkRow } from '../../api/ada/lib/storage/database/primitives/tables'; import type { CardanoAddressedUtxo } from '../../api/ada/transactions/types'; import moment from 'moment'; import { loadSubmittedTransactions, persistSubmittedTransactions, } from '../../api/localStorage'; @@ -55,6 +55,7 @@ import { toRequestAddresses } from '../../api/ada/lib/storage/bridge/updateTrans import type { TransactionExportRow } from '../../api/export'; import type { HistoryRequest } from '../../api/ada/lib/state-fetch/types'; import appConfig from '../../config'; +import { isCertificateKindDrepDelegation } from '../../api/ada/lib/storage/bridge/utils'; export type TxHistoryState = {| publicDeriver: PublicDeriver<>, @@ -86,6 +87,7 @@ type SubmittedTransactionEntry = {| publicDeriverId: number, transaction: WalletTransaction, usedUtxos: Array<{| txHash: string, index: number |}>, + isDrepDelegation?: boolean, |}; function getCoinsPerUtxoWord(network: $ReadOnly): BigNumber { @@ -851,11 +853,16 @@ export default class TransactionsStore extends Store { WalletTransaction, Array<{| txHash: string, index: number |}> ) => void = (publicDeriver, transaction, usedUtxos) => { + + const isDrepDelegation = transaction instanceof CardanoShelleyTransaction + && transaction.certificates.some((c: CertificatePart) => isCertificateKindDrepDelegation(c.certificate.Kind)) + this._submittedTransactions.push({ publicDeriverId: publicDeriver.publicDeriverId, networkId: publicDeriver.getParent().getNetworkInfo().NetworkId, transaction, usedUtxos, + isDrepDelegation, }); this._persistSubmittedTransactions(); }; From 8bceb5533e6bb99bec7549cd6b6795b36bd0c73e Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Tue, 20 Aug 2024 12:58:20 +0300 Subject: [PATCH 448/464] ledger drep credential support --- .../app/api/ada/lib/cardanoCrypto/utils.js | 11 +++++++++++ .../app/connector/stores/ConnectorStore.js | 7 ++++++- .../chrome/extension/connector/api.js | 14 +++++++++++++- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/packages/yoroi-extension/app/api/ada/lib/cardanoCrypto/utils.js b/packages/yoroi-extension/app/api/ada/lib/cardanoCrypto/utils.js index d52760d404..283db9682d 100644 --- a/packages/yoroi-extension/app/api/ada/lib/cardanoCrypto/utils.js +++ b/packages/yoroi-extension/app/api/ada/lib/cardanoCrypto/utils.js @@ -36,3 +36,14 @@ export function transactionHexReplaceWitnessSet(txHex: string, witnessSetHex: st return fixedTransaction.to_hex(); }); } + +export function pubKeyHashToRewardAddress(hex: string, network: number) { + return RustModule.WasmScope(Module => + Module.WalletV4.RewardAddress.new( + network, + Module.WalletV4.Credential.from_keyhash( + Module.WalletV4.Ed25519KeyHash.from_hex(hex), + ), + ).to_address().to_hex(), + ); +} diff --git a/packages/yoroi-extension/app/connector/stores/ConnectorStore.js b/packages/yoroi-extension/app/connector/stores/ConnectorStore.js index aa05e57512..1c6601e287 100644 --- a/packages/yoroi-extension/app/connector/stores/ConnectorStore.js +++ b/packages/yoroi-extension/app/connector/stores/ConnectorStore.js @@ -61,6 +61,7 @@ import { connectorGetUsedAddressesWithPaginate, connectorRecordSubmittedCardanoTransaction, connectorSendTxCardano, + getDrepRewardAddressHexAndAddressing, getScriptRequiredSigningKeys, resolveTxOrTxBody, } from '../../../chrome/extension/connector/api'; @@ -1299,6 +1300,9 @@ export default class ConnectorStore extends Store { } const txBody = RustModule.WalletV4.TransactionBody.from_bytes(rawTxBody); + const [drepAddressHex, drepAddressing] = await getDrepRewardAddressHexAndAddressing(publicDeriver); + ownStakeAddressMap[drepAddressHex] = drepAddressing.addressing.path; + let ledgerSignTxPayload; try { ledgerSignTxPayload = toLedgerSignRequest( @@ -1311,7 +1315,8 @@ export default class ConnectorStore extends Store { rawTxBody, additionalRequiredSigners, ); - } catch { + } catch (e) { + console.error('toLedgerSignRequest failed: ', e); runInAction(() => { this.hwWalletError = unsupportedTransactionError; this.isHwWalletErrorRecoverable = false; diff --git a/packages/yoroi-extension/chrome/extension/connector/api.js b/packages/yoroi-extension/chrome/extension/connector/api.js index 7859266b7c..3af279fa5d 100644 --- a/packages/yoroi-extension/chrome/extension/connector/api.js +++ b/packages/yoroi-extension/chrome/extension/connector/api.js @@ -85,7 +85,7 @@ import { derivePrivateByAddressing, derivePublicByAddressing } from '../../../app/api/ada/lib/cardanoCrypto/deriveByAddressing'; -import { transactionHexToHash } from '../../../app/api/ada/lib/cardanoCrypto/utils'; +import { pubKeyHashToRewardAddress, transactionHexToHash } from '../../../app/api/ada/lib/cardanoCrypto/utils'; import { sendTx } from '../../../app/api/ada/lib/state-fetch/remoteFetcher'; function paginateResults(results: T[], paginate: ?Paginate): T[] { @@ -452,6 +452,18 @@ async function _getDRepKeyAndAddressing( ); } +export async function getDrepRewardAddressHexAndAddressing( + wallet: PublicDeriver<>, +): Promise<[string, Addressing]> { + const [pubKey, addressing] = await __pubKeyAndAddressingByChainAndIndex( + wallet, + ChainDerivations.GOVERNANCE_DREP_KEYS, + DREP_KEY_INDEX, + ); + const network = getCardanoHaskellBaseConfig(wallet.getParent().getNetworkInfo()).ChainNetworkId; + return [pubKeyHashToRewardAddress(pubKey.hash().to_hex(), network), addressing]; +} + export async function connectorGetStakeKey( wallet: PublicDeriver<>, getAccountState: AccountStateRequest => Promise, From 3ec0212b0539a42fe6f2f6e819c63db5168b644b Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Tue, 20 Aug 2024 13:05:31 +0300 Subject: [PATCH 449/464] flow fixes --- .../app/api/ada/lib/cardanoCrypto/utils.js | 2 +- .../yoroi-extension/chrome/extension/connector/api.js | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/yoroi-extension/app/api/ada/lib/cardanoCrypto/utils.js b/packages/yoroi-extension/app/api/ada/lib/cardanoCrypto/utils.js index 283db9682d..25a2a66380 100644 --- a/packages/yoroi-extension/app/api/ada/lib/cardanoCrypto/utils.js +++ b/packages/yoroi-extension/app/api/ada/lib/cardanoCrypto/utils.js @@ -37,7 +37,7 @@ export function transactionHexReplaceWitnessSet(txHex: string, witnessSetHex: st }); } -export function pubKeyHashToRewardAddress(hex: string, network: number) { +export function pubKeyHashToRewardAddress(hex: string, network: number): string { return RustModule.WasmScope(Module => Module.WalletV4.RewardAddress.new( network, diff --git a/packages/yoroi-extension/chrome/extension/connector/api.js b/packages/yoroi-extension/chrome/extension/connector/api.js index 3af279fa5d..720ec03321 100644 --- a/packages/yoroi-extension/chrome/extension/connector/api.js +++ b/packages/yoroi-extension/chrome/extension/connector/api.js @@ -22,9 +22,9 @@ import { CannotSendBelowMinimumValueError, NotEnoughMoneyToSendError, } from '.. import { CoreAddressTypes, TxStatusCodes, } from '../../../app/api/ada/lib/storage/database/primitives/enums'; import type { FullAddressPayload } from '../../../app/api/ada/lib/storage/bridge/traitUtils'; import { - getAllUsedAddresses, getAllAddresses, getAllAddressesForDisplay, + getAllUsedAddresses, } from '../../../app/api/ada/lib/storage/bridge/traitUtils'; import { getReceiveAddress } from '../../../app/stores/stateless/addressStores'; @@ -460,7 +460,11 @@ export async function getDrepRewardAddressHexAndAddressing( ChainDerivations.GOVERNANCE_DREP_KEYS, DREP_KEY_INDEX, ); - const network = getCardanoHaskellBaseConfig(wallet.getParent().getNetworkInfo()).ChainNetworkId; + // Make this part of wallet API + const config = getCardanoHaskellBaseConfig( + wallet.getParent().getNetworkInfo() + ).reduce((acc, next) => Object.assign(acc, next), {}); + const network = parseInt(config.ChainNetworkId, 10); return [pubKeyHashToRewardAddress(pubKey.hash().to_hex(), network), addressing]; } From c41ca3486c9a995f427fc0a5f2bee21280846428 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Tue, 20 Aug 2024 19:31:14 +0300 Subject: [PATCH 450/464] fix in handling certificates in pending txs --- packages/yoroi-extension/app/api/ada/index.js | 8 ++++++-- .../shelley/HaskellShelleyTxSignRequest.js | 16 ++++++++++++++++ .../app/stores/ada/AdaTransactionsStore.js | 3 ++- .../app/stores/toplevel/TransactionsStore.js | 15 ++++++--------- 4 files changed, 30 insertions(+), 12 deletions(-) diff --git a/packages/yoroi-extension/app/api/ada/index.js b/packages/yoroi-extension/app/api/ada/index.js index 4737399faf..afcb047d18 100644 --- a/packages/yoroi-extension/app/api/ada/index.js +++ b/packages/yoroi-extension/app/api/ada/index.js @@ -159,6 +159,7 @@ import type { ForeignUtxoFetcher } from '../../connector/stores/ConnectorStore'; import type WalletTransaction from '../../domain/WalletTransaction'; import { derivePrivateByAddressing, derivePublicByAddressing } from './lib/cardanoCrypto/deriveByAddressing'; import TimeUtils from './lib/storage/bridge/timeUtils'; +import { isCertificateKindDrepDelegation } from './lib/storage/bridge/utils'; // ADA specific Request / Response params @@ -2127,7 +2128,8 @@ export default class AdaApi { txId: string, ): Promise<{| transaction: CardanoShelleyTransaction, - usedUtxos: Array<{| txHash: string, index: number |}> + usedUtxos: Array<{| txHash: string, index: number |}>, + isDrepDelegation: boolean, |}> { const p = asHasLevels(publicDeriver); if (!p) { @@ -2204,7 +2206,9 @@ export default class AdaApi { })), isValid: true, }); - return { usedUtxos, transaction }; + + const isDrepDelegation = signRequest.certificates().some(c => isCertificateKindDrepDelegation(c.kind)); + return { usedUtxos, transaction, isDrepDelegation }; } utxosWithSubmittedTxs( diff --git a/packages/yoroi-extension/app/api/ada/transactions/shelley/HaskellShelleyTxSignRequest.js b/packages/yoroi-extension/app/api/ada/transactions/shelley/HaskellShelleyTxSignRequest.js index 283eaef8dc..cd8aaac978 100644 --- a/packages/yoroi-extension/app/api/ada/transactions/shelley/HaskellShelleyTxSignRequest.js +++ b/packages/yoroi-extension/app/api/ada/transactions/shelley/HaskellShelleyTxSignRequest.js @@ -10,6 +10,7 @@ import { toHexOrBase58 } from '../../lib/storage/bridge/utils'; import { MultiToken, } from '../../../common/lib/MultiToken'; import { PRIMARY_ASSET_CONSTANTS } from '../../lib/storage/database/primitives/enums'; import { multiTokenFromCardanoValue, multiTokenFromRemote } from '../utils'; +import typeof { CertificateKind } from '@emurgo/cardano-serialization-lib-browser/cardano_serialization_lib'; /** * We take a copy of these parameters instead of re-evaluating them from the network @@ -268,6 +269,21 @@ implements ISignRequest { return result; } + certificates(): Array<{| kind: $Values, payloadHex: string |}> { + const res = []; + const certs = this.unsignedTx.build().certs(); + if (certs != null) { + for (let i = 0; i < certs.len(); i++) { + const cert = certs.get(i); + res.push({ + kind: cert.kind(), + payloadHex: cert.to_hex(), + }); + } + } + return res; + } + receivers(includeChange: boolean): Array { const outputs = this.unsignedTx.build().outputs(); diff --git a/packages/yoroi-extension/app/stores/ada/AdaTransactionsStore.js b/packages/yoroi-extension/app/stores/ada/AdaTransactionsStore.js index 745206a064..639cd4c917 100644 --- a/packages/yoroi-extension/app/stores/ada/AdaTransactionsStore.js +++ b/packages/yoroi-extension/app/stores/ada/AdaTransactionsStore.js @@ -49,7 +49,7 @@ export default class AdaTransactionsStore extends Store { signRequest, txId, ) => { - const { usedUtxos, transaction } = await this.api.ada.createSubmittedTransactionData( + const { usedUtxos, transaction, isDrepDelegation } = await this.api.ada.createSubmittedTransactionData( publicDeriver, signRequest, txId, @@ -58,6 +58,7 @@ export default class AdaTransactionsStore extends Store { publicDeriver, transaction, usedUtxos, + isDrepDelegation, ); } } diff --git a/packages/yoroi-extension/app/stores/toplevel/TransactionsStore.js b/packages/yoroi-extension/app/stores/toplevel/TransactionsStore.js index b1dae78051..6a0d976ee2 100644 --- a/packages/yoroi-extension/app/stores/toplevel/TransactionsStore.js +++ b/packages/yoroi-extension/app/stores/toplevel/TransactionsStore.js @@ -46,7 +46,7 @@ import { cardanoMinAdaRequiredFromRemoteFormat_coinsPerWord, } from '../../api/ada/transactions/utils'; import { PRIMARY_ASSET_CONSTANTS } from '../../api/ada/lib/storage/database/primitives/enums'; -import type { CertificatePart, NetworkRow } from '../../api/ada/lib/storage/database/primitives/tables'; +import type { NetworkRow } from '../../api/ada/lib/storage/database/primitives/tables'; import type { CardanoAddressedUtxo } from '../../api/ada/transactions/types'; import moment from 'moment'; import { loadSubmittedTransactions, persistSubmittedTransactions, } from '../../api/localStorage'; @@ -55,7 +55,6 @@ import { toRequestAddresses } from '../../api/ada/lib/storage/bridge/updateTrans import type { TransactionExportRow } from '../../api/export'; import type { HistoryRequest } from '../../api/ada/lib/state-fetch/types'; import appConfig from '../../config'; -import { isCertificateKindDrepDelegation } from '../../api/ada/lib/storage/bridge/utils'; export type TxHistoryState = {| publicDeriver: PublicDeriver<>, @@ -849,13 +848,11 @@ export default class TransactionsStore extends Store { @action recordSubmittedTransaction: ( - PublicDeriver<>, - WalletTransaction, - Array<{| txHash: string, index: number |}> - ) => void = (publicDeriver, transaction, usedUtxos) => { - - const isDrepDelegation = transaction instanceof CardanoShelleyTransaction - && transaction.certificates.some((c: CertificatePart) => isCertificateKindDrepDelegation(c.certificate.Kind)) + publicDeriver: PublicDeriver<>, + transaction: WalletTransaction, + usedUtxos: Array<{| txHash: string, index: number |}>, + isDrepDelegation: boolean, + ) => void = (publicDeriver, transaction, usedUtxos, isDrepDelegation) => { this._submittedTransactions.push({ publicDeriverId: publicDeriver.publicDeriverId, From 860b53347f5510c86cd3f55913332a957ae0a491 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Wed, 21 Aug 2024 16:02:40 +0300 Subject: [PATCH 451/464] fix in handling certificates in pending txs --- .../app/stores/toplevel/TransactionsStore.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/stores/toplevel/TransactionsStore.js b/packages/yoroi-extension/app/stores/toplevel/TransactionsStore.js index 6a0d976ee2..b4150d85e4 100644 --- a/packages/yoroi-extension/app/stores/toplevel/TransactionsStore.js +++ b/packages/yoroi-extension/app/stores/toplevel/TransactionsStore.js @@ -81,7 +81,7 @@ export type TxHistoryState = {| const EXPORT_START_DELAY = 800; // in milliseconds [1000 = 1sec] -type SubmittedTransactionEntry = {| +export type SubmittedTransactionEntry = {| networkId: number, publicDeriverId: number, transaction: WalletTransaction, @@ -182,6 +182,10 @@ export default class TransactionsStore extends Store { ]; } + @computed get submitted(): Array { + return Object.freeze(this._submittedTransactions); + } + @computed get hasAny(): boolean { return this.recent.length > 0; } From 97619efa223e0db37cc917f34554c18c6e3803c6 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 21 Aug 2024 16:33:58 +0300 Subject: [PATCH 452/464] remove freeze --- .../yoroi-extension/app/stores/toplevel/TransactionsStore.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/stores/toplevel/TransactionsStore.js b/packages/yoroi-extension/app/stores/toplevel/TransactionsStore.js index b4150d85e4..db795f3d92 100644 --- a/packages/yoroi-extension/app/stores/toplevel/TransactionsStore.js +++ b/packages/yoroi-extension/app/stores/toplevel/TransactionsStore.js @@ -183,7 +183,7 @@ export default class TransactionsStore extends Store { } @computed get submitted(): Array { - return Object.freeze(this._submittedTransactions); + this._submittedTransactions } @computed get hasAny(): boolean { From 189c71540fa6917606abcbdf20c9374d34d63a3e Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 21 Aug 2024 16:41:14 +0300 Subject: [PATCH 453/464] fix: add return --- .../yoroi-extension/app/stores/toplevel/TransactionsStore.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/yoroi-extension/app/stores/toplevel/TransactionsStore.js b/packages/yoroi-extension/app/stores/toplevel/TransactionsStore.js index db795f3d92..a284d26da9 100644 --- a/packages/yoroi-extension/app/stores/toplevel/TransactionsStore.js +++ b/packages/yoroi-extension/app/stores/toplevel/TransactionsStore.js @@ -183,7 +183,7 @@ export default class TransactionsStore extends Store { } @computed get submitted(): Array { - this._submittedTransactions + return this._submittedTransactions; } @computed get hasAny(): boolean { From 04dc83b5ae4cf199b0f90d75cc458128e7baaac3 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Tue, 20 Aug 2024 18:32:32 +0300 Subject: [PATCH 454/464] add new fallback --- packages/yoroi-extension/webpack-mv2/commonConfig.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/yoroi-extension/webpack-mv2/commonConfig.js b/packages/yoroi-extension/webpack-mv2/commonConfig.js index 462e814019..b7a4849f8e 100644 --- a/packages/yoroi-extension/webpack-mv2/commonConfig.js +++ b/packages/yoroi-extension/webpack-mv2/commonConfig.js @@ -238,6 +238,7 @@ const resolve = () /*: * */ => ({ // need these so that @yoroi/common (a dependent of @yoroi/exchange) doesn't break Webpack 'react-native': false, 'react-native-mmkv': false, + 'process/browser': require.resolve('process/browser'), }, alias: { process: 'process/browser' }, }); From b093a92af515b170ebce4cef329f8bee0575cd52 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 22 Aug 2024 12:10:39 +0300 Subject: [PATCH 455/464] add pending state --- .../module/GovernanceContextProvider.tsx | 4 ++++ .../GovernanceStatusSelection.tsx | 15 +++++---------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx index 19c1ceb5b3..252b95643a 100644 --- a/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/module/GovernanceContextProvider.tsx @@ -29,6 +29,7 @@ const initialGovernanceProvider = { governanceStatus: { status: null, drep: null }, triggerBuySellAdaDialog: null, recentTransactions: [], + submitedTransactions: [{ isDrepDelegation: false }], }; const GovernanceContext = React.createContext(initialGovernanceProvider); @@ -74,8 +75,10 @@ export const GovernanceContextProvider = ({ walletAdaBalance, backendServiceZero, recentTransactions, + submitedTransactions, } = currentWallet; const governanceManager = useGovernanceManagerMaker(walletId, networkId); + // TODO to me moved in rootStore and use this globbaly whenever we need just a wallet password check const checkUserPassword = async (password: string): Promise => { try { @@ -178,6 +181,7 @@ export const GovernanceContextProvider = ({ getFormattedPairingValue(getCurrentPrice, defaultTokenInfo, unitOfAccount, amount), triggerBuySellAdaDialog, recentTransactions, + submitedTransactions, }; return {children}; diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx index f8adf7b3c0..13135a41d1 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx @@ -41,19 +41,17 @@ export const GovernanceStatusSelection = () => { createDrepDelegationTransaction, walletAdaBalance, triggerBuySellAdaDialog, - recentTransactions, + submitedTransactions, } = useGovernance(); const [error, setError] = React.useState(null); const navigateTo = useNavigateTo(); const strings = useStrings(); const { openModal, closeModal } = useModal(); - console.log('governanceStatus', governanceStatus); const pageTitle = governanceStatus.status !== 'none' ? strings.governanceStatus : strings.registerGovernance; const statusRawText = mapStatus[governanceStatus.status || '']; const pageSubtitle = governanceStatus.status === 'none' ? strings.reviewSelection : strings.statusSelected(statusRawText); + const isPendindDrepDelegationTx = submitedTransactions.length > 0 && submitedTransactions[0]?.isDrepDelegation === true; - console.log('1recentTransactions', recentTransactions); - // console.log('recentTransactions pending', recentTransactions?.transactions[0]); const openDRepIdModal = (onSubmit: (drepID: string) => void) => { if (!governanceManager) { return; @@ -113,8 +111,7 @@ export const GovernanceStatusSelection = () => { icon: , selected: governanceStatus.status === 'delegate' ? true : false, onClick: handleDelegate, - // @ts-ignore - pending: recentTransactions[0].transactions[0].state === -4, + pending: isPendindDrepDelegationTx, }, { title: strings.abstain, @@ -122,8 +119,7 @@ export const GovernanceStatusSelection = () => { icon: , selected: governanceStatus.status === DREP_ALWAYS_ABSTAIN ? true : false, onClick: handleAbstain, - // @ts-ignore - pending: recentTransactions[0]?.transactions[0].state === -4, + pending: isPendindDrepDelegationTx, }, { title: strings.noConfidence, @@ -131,8 +127,7 @@ export const GovernanceStatusSelection = () => { icon: , selected: governanceStatus.status === DREP_ALWAYS_NO_CONFIDENCE ? true : false, onClick: handleNoConfidence, - // @ts-ignore - pending: recentTransactions[0]?.transactions[0].state === -4, + pending: isPendindDrepDelegationTx, }, ]; From f6cb33fb49fb458770ba76cd8c32772941e25ab9 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Thu, 22 Aug 2024 13:10:17 +0300 Subject: [PATCH 456/464] fix prop --- .../yoroi-extension/app/UI/features/governace/common/helpers.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/yoroi-extension/app/UI/features/governace/common/helpers.ts b/packages/yoroi-extension/app/UI/features/governace/common/helpers.ts index 5cae9d0e67..4a5600fcbe 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/helpers.ts +++ b/packages/yoroi-extension/app/UI/features/governace/common/helpers.ts @@ -71,6 +71,7 @@ export const createCurrrentWalletInfo = (stores: any) => { defaultTokenInfo: stores.tokenInfoStore.getDefaultTokenInfoSummary(networkId), getCurrentPrice: stores.coinPriceStore.getCurrentPrice, recentTransactions: groupedTx ? groupedTx : [], + submitedTransactions: stores.transactions.submitted, isHardwareWallet: isHardware, backendService, backendServiceZero, From c81f1caf5a135a2977d951c60adc6a480bfa7637 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Thu, 22 Aug 2024 18:41:42 +0300 Subject: [PATCH 457/464] reusing existing constant values --- package.json | 1 + .../app/UI/features/governace/common/constants.ts | 9 +++++++-- .../SelectGovernanceStatus/GovernanceStatusSelection.tsx | 4 ++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 0b6f11eeae..eb31e1a028 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "scripts": { "eslint": "lerna run eslint --stream", "flow": "lerna run flow --stream", + "tsc": "lerna run tsc --stream", "test": "lerna run test --stream", "translations:purge": "lerna run translations:purge -- stream", "archive:src": "func() { git rev-parse HEAD > COMMIT && git rev-parse --abbrev-ref HEAD > BRANCH && git archive --format zip --add-file COMMIT --add-file BRANCH -o $1 HEAD && rm COMMIT BRANCH; }; func" diff --git a/packages/yoroi-extension/app/UI/features/governace/common/constants.ts b/packages/yoroi-extension/app/UI/features/governace/common/constants.ts index d41f2fda45..962b3aef38 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/constants.ts +++ b/packages/yoroi-extension/app/UI/features/governace/common/constants.ts @@ -1,5 +1,10 @@ +import { + DREP_ALWAYS_ABSTAIN as API_ABSTAIN, + DREP_ALWAYS_NO_CONFIDENCE as API_NO_CONFIDENCE, +} from '../../../../api/ada/lib/storage/bridge/delegationUtils' + export const BECOME_DREP_LINK = 'https://emurgohelpdesk.zendesk.com/hc/en-us/articles/8600742035855-Who-are-DReps-on-Cardano'; export const LEARN_MORE_LINK = 'https://emurgohelpdesk.zendesk.com/hc/en-us/sections/8582793481231-Governance'; -export const DREP_ALWAYS_ABSTAIN = 'ALWAYS_ABSTAIN'; -export const DREP_ALWAYS_NO_CONFIDENCE = 'ALWAYS_NO_CONFIDENCE'; +export const DREP_ALWAYS_ABSTAIN = API_ABSTAIN; +export const DREP_ALWAYS_NO_CONFIDENCE = API_NO_CONFIDENCE; diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx index 13135a41d1..5a9494223d 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx @@ -29,8 +29,8 @@ const Container = styled(Box)(() => ({ export const mapStatus = { delegate: 'Delegate to a Drep', - ALWAYS_ABSTAIN: 'Abstain', - ALWAYS_NO_CONFIDENCE: 'No Confidence', + [DREP_ALWAYS_ABSTAIN]: 'Abstain', + [DREP_ALWAYS_NO_CONFIDENCE]: 'No Confidence', }; export const GovernanceStatusSelection = () => { From d9674f818d876acfa96f09a5b0c039b486b3043b Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Wed, 28 Aug 2024 09:06:58 +0300 Subject: [PATCH 458/464] added remote flag check for sidebar categories --- .../storage/database/prepackaged/networks.js | 4 + .../lib/storage/database/primitives/tables.js | 1 + .../app/api/localStorage/index.js | 8 ++ .../app/containers/SidebarContainer.js | 38 +++++++++- packages/yoroi-extension/app/coreUtils.js | 29 ++++++++ .../yoroi-extension/app/coreUtils.test.js | 74 +++++++++++++++++++ .../app/stores/stateless/sidebarCategories.js | 6 +- .../app/stores/toplevel/WalletStore.js | 33 +++++++++ packages/yoroi-extension/package-lock.json | 68 ++++++++++++++--- packages/yoroi-extension/package.json | 2 +- 10 files changed, 249 insertions(+), 14 deletions(-) create mode 100644 packages/yoroi-extension/app/coreUtils.test.js diff --git a/packages/yoroi-extension/app/api/ada/lib/storage/database/prepackaged/networks.js b/packages/yoroi-extension/app/api/ada/lib/storage/database/prepackaged/networks.js index ef2c7bbc1b..3b51092ded 100644 --- a/packages/yoroi-extension/app/api/ada/lib/storage/database/prepackaged/networks.js +++ b/packages/yoroi-extension/app/api/ada/lib/storage/database/prepackaged/networks.js @@ -13,6 +13,7 @@ export const networks = Object.freeze({ CardanoMainnet: ({ NetworkId: 0, NetworkName: 'Cardano Mainnet', + NetworkFeatureName: 'mainnet', Backend: { BackendService: environment.isTest() ? 'http://localhost:21000' : 'https://api.yoroiwallet.com', TokenInfoService: 'https://cdn.yoroiwallet.com', @@ -83,6 +84,7 @@ export const networks = Object.freeze({ CardanoPreprodTestnet: ({ NetworkId: 2_50, NetworkName: 'Cardano Preprod Testnet', + NetworkFeatureName: 'preprod', Backend: { BackendService: environment.isTest() ? 'http://localhost:21000' : 'https://preprod-backend.yoroiwallet.com', TokenInfoService: 'https://stage-cdn.yoroiwallet.com', @@ -118,6 +120,7 @@ export const networks = Object.freeze({ CardanoPreviewTestnet: ({ NetworkId: 3_50, NetworkName: 'Cardano Preview Testnet', + NetworkFeatureName: 'preview', Backend: { BackendService: environment.isTest() ? 'http://localhost:21000' : 'https://preview-backend.emurgornd.com', TokenInfoService: 'https://stage-cdn.yoroiwallet.com', @@ -153,6 +156,7 @@ export const networks = Object.freeze({ CardanoSanchoTestnet: ({ NetworkId: 4_50, NetworkName: 'Cardano Sancho Testnet', + NetworkFeatureName: 'sanchonet', Backend: { BackendService: environment.isTest() ? 'http://localhost:21000' : 'https://sanchonet-backend.yoroiwallet.com', TokenInfoService: 'https://stage-cdn.yoroiwallet.com', diff --git a/packages/yoroi-extension/app/api/ada/lib/storage/database/primitives/tables.js b/packages/yoroi-extension/app/api/ada/lib/storage/database/primitives/tables.js index 9a6e7b21cd..6eea29d7d8 100644 --- a/packages/yoroi-extension/app/api/ada/lib/storage/database/primitives/tables.js +++ b/packages/yoroi-extension/app/api/ada/lib/storage/database/primitives/tables.js @@ -58,6 +58,7 @@ export type CardanoHaskellConfig = $ReadOnly< export type NetworkInsert = {| NetworkId: number, NetworkName: string, + NetworkFeatureName?: string, CoinType: CoinTypesT, Backend: {| BackendService?: string, diff --git a/packages/yoroi-extension/app/api/localStorage/index.js b/packages/yoroi-extension/app/api/localStorage/index.js index 02e9f57a0e..93c12eaf98 100644 --- a/packages/yoroi-extension/app/api/localStorage/index.js +++ b/packages/yoroi-extension/app/api/localStorage/index.js @@ -10,6 +10,7 @@ import type { ComplexityLevelType } from '../../types/complexityLevelType'; import type { WhitelistEntry } from '../../../chrome/extension/connector/types'; import type { CatalystRoundInfoResponse } from '../ada/lib/state-fetch/types' import { maybe } from '../../coreUtils'; +import type { StorageAPI } from '@emurgo/yoroi-lib/dist/flags'; declare var chrome; declare var browser; @@ -488,3 +489,10 @@ export function createStorageFlag( const deserializer = s => s === 'true'; return createStorageField(key, serializer, deserializer, defaultValue); } + +export function createFlagStorage(): StorageAPI { + return { + get: async s => (await getLocalItem(s)) ?? null, + set: setLocalItem, + }; +} \ No newline at end of file diff --git a/packages/yoroi-extension/app/containers/SidebarContainer.js b/packages/yoroi-extension/app/containers/SidebarContainer.js index 7ac49689d5..92a1b26a16 100644 --- a/packages/yoroi-extension/app/containers/SidebarContainer.js +++ b/packages/yoroi-extension/app/containers/SidebarContainer.js @@ -5,6 +5,7 @@ import { observer } from 'mobx-react'; import Sidebar from '../components/topbar/Sidebar'; import type { StoresAndActionsProps } from '../types/injectedProps.types'; import { allCategories, allCategoriesRevamp } from '../stores/stateless/sidebarCategories'; +import type { SidebarCategoryRevamp } from '../stores/stateless/sidebarCategories'; import { PublicDeriver } from '../api/ada/lib/storage/models/PublicDeriver'; import SidebarRevamp from '../components/topbar/SidebarRevamp'; import { withLayout } from '../styles/context/layout'; @@ -20,12 +21,46 @@ type InjectedLayoutProps = {| |}; type AllProps = {| ...Props, ...InjectedLayoutProps |}; +type State = {| + featureFlags: { [string]: boolean }, +|}; + @observer -class SidebarContainer extends Component { +class SidebarContainer extends Component { + + state: State = { + featureFlags: {}, + }; + toggleSidebar: void => Promise = async () => { await this.props.actions.profile.toggleSidebar.trigger(); }; + componentDidMount(): * { + allCategoriesRevamp.forEach(c => { + const feature = c.featureFlagName; + if (feature != null) { + this.props.stores.wallets.getRemoteFeatureFlag(feature) + .then((flag: ?boolean) => { + console.log('> ', feature, flag); + if (flag) { + this.setState(s => ({ + featureFlags: { ...s.featureFlags, [feature]: true }, + })) + } + return null; + }) + .catch(e => { + console.error('Failed to resolve remote flag for feature: ' + feature, e); + }); + } + }) + } + + categoryFeatureFlagEnabled(category: SidebarCategoryRevamp): boolean { + return category.featureFlagName == null || this.state.featureFlags[category.featureFlagName]; + } + render(): Node { const { stores, actions } = this.props; const { profile } = stores; @@ -72,6 +107,7 @@ class SidebarContainer extends Component { isRewardWallet: (publicDeriver: PublicDeriver<>) => stores.delegation.isRewardWallet(publicDeriver), }) + && this.categoryFeatureFlagEnabled(category) )} /> ); diff --git a/packages/yoroi-extension/app/coreUtils.js b/packages/yoroi-extension/app/coreUtils.js index d88cc5e144..8e529db6c8 100644 --- a/packages/yoroi-extension/app/coreUtils.js +++ b/packages/yoroi-extension/app/coreUtils.js @@ -167,9 +167,38 @@ export function cast(t: any): T { return t; } +/** + * Async pause, does nothing except stops time and yields when awaited + */ +export async function delay(time: number): Promise { + return new Promise(resolve => setTimeout(resolve, time)); +} + /** * Returns true in case the argument is an empty array */ export function isEmptyArray(t: any): boolean { return Array.isArray(t) && t.length === 0; } + +/** + * Wraps sync or async func and returns another func that caches results for the specified time + * + * @param fun - the original function to be wrapped and cached + * @param ttl - caching time millis: no caching if zero, infinite caching if negative + * @return {function(): (R)} - wrapped caching function + */ +export function timeCached(fun: () => R, ttl: number): () => R { + const cache: [?{| value: R, time: number |}] = [null]; + return () => { + const time = Date.now(); + if (cache[0] != null && ttl !== 0) { + if (ttl < 0 || time < (cache[0].time + ttl)) { + return cache[0].value; + } + } + const value = fun(); + cache[0] = { value, time }; + return value; + } +} diff --git a/packages/yoroi-extension/app/coreUtils.test.js b/packages/yoroi-extension/app/coreUtils.test.js new file mode 100644 index 0000000000..c9bea00349 --- /dev/null +++ b/packages/yoroi-extension/app/coreUtils.test.js @@ -0,0 +1,74 @@ +import { delay, timeCached } from './coreUtils'; + +describe('timeCached', () => { + + test('ttl = 0 | no caching', () => { + + const callCounter = [0]; + + const cachedIncrement = timeCached(() => { + return ++callCounter[0]; + }, 0); + + expect(cachedIncrement()).toEqual(1); + expect(cachedIncrement()).toEqual(2); + expect(cachedIncrement()).toEqual(3); + expect(cachedIncrement()).toEqual(4); + expect(cachedIncrement()).toEqual(5); + }); + + test('ttl < 0 | infinite caching', async () => { + + const callCounter = [0]; + + const cachedIncrement = timeCached(() => { + return ++callCounter[0]; + }, -1); + + expect(cachedIncrement()).toEqual(1); + expect(cachedIncrement()).toEqual(1); + + await delay(3_000); + + expect(cachedIncrement()).toEqual(1); + expect(cachedIncrement()).toEqual(1); + }); + + test('ttl > 0 | temporary caching', async () => { + + const callCounter = [0]; + + const cachedIncrement = timeCached(() => { + return ++callCounter[0]; + }, 2_000); + + expect(cachedIncrement()).toEqual(1); + expect(cachedIncrement()).toEqual(1); + + await delay(3_000); + + expect(cachedIncrement()).toEqual(2); + expect(cachedIncrement()).toEqual(2); + }); + + test('async ttl > 0 | temporary async caching', async (done) => { + + const callCounter = [0]; + + const cachedIncrement = timeCached(async () => { + await delay(100); + return ++callCounter[0]; + }, 2_000); + + expect(await cachedIncrement()).toEqual(1); + expect(await cachedIncrement()).toEqual(1); + + await delay(2_000); + + expect(await cachedIncrement()).toEqual(2); + expect(await cachedIncrement()).toEqual(2); + + done(); + }); + +}); diff --git a/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js b/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js index 7f9ca81870..fe1f12963a 100644 --- a/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js +++ b/packages/yoroi-extension/app/stores/stateless/sidebarCategories.js @@ -102,6 +102,7 @@ export type SidebarCategoryRevamp = {| +icon: string, +label?: MessageDescriptor, +isVisible: isVisibleFunc, + +featureFlagName?: string, |}; // TODO: Fix routes and isVisible prop @@ -181,9 +182,8 @@ export const allCategoriesRevamp: Array = [ route: '/governance', icon: governanceIcon, label: globalMessages.sidebarGovernance, - isVisible: ({ selected }) => - (environment.isDev() && selected?.getParent().getNetworkInfo().NetworkId === 450) || - (environment.isDev() && selected?.getParent().getNetworkInfo().NetworkId === 350), + isVisible: _request => true, + featureFlagName: 'governance', }, { className: 'settings', diff --git a/packages/yoroi-extension/app/stores/toplevel/WalletStore.js b/packages/yoroi-extension/app/stores/toplevel/WalletStore.js index db55b53c71..2318abc007 100644 --- a/packages/yoroi-extension/app/stores/toplevel/WalletStore.js +++ b/packages/yoroi-extension/app/stores/toplevel/WalletStore.js @@ -33,6 +33,10 @@ import type { StoresMap } from '../index'; import { getWalletChecksum } from '../../api/export/utils'; import { MultiToken } from '../../api/common/lib/MultiToken'; import { BigNumber } from 'bignumber.js'; +import { FlagsApi } from '@emurgo/yoroi-lib/dist/flags'; +import type { StorageAPI } from '@emurgo/yoroi-lib/dist/flags'; +import { createFlagStorage } from '../../api/localStorage'; +import { forceNonNull, timeCached } from '../../coreUtils'; type GroupedWallets = {| publicDerivers: Array>, @@ -147,6 +151,9 @@ export default class WalletStore extends Store { ); }; + flagStorage: StorageAPI; + bestblockGetters: { [string]: () => Promise } = {}; + setup(): void { super.setup(); this.publicDerivers = []; @@ -158,6 +165,32 @@ export default class WalletStore extends Store { 'visibilitychange', debounce(_e => this._pollRefresh(), this.ON_VISIBLE_DEBOUNCE_WAIT) ); + this.flagStorage = createFlagStorage(); + } + + + // make it a part of the wallet.network api + async getRemoteFeatureFlag(feature: string): Promise { + const wallet: ?PublicDeriver<> = this.selected; + if (wallet == null) return null; + const network = wallet.getParent().getNetworkInfo(); + const networkName = network.NetworkFeatureName; + if (networkName == null) return null; + + let bestblockGetter = this.bestblockGetters[networkName]; + if (bestblockGetter == null) { + const fetcher = this.stores.substores.ada.stateFetchStore.fetcher; + bestblockGetter = timeCached( + async () => (await fetcher.getBestBlock({ network })).height, + 60_000, // 1 minute + ); + this.bestblockGetters[networkName] = bestblockGetter; + } + + const bestblock = await bestblockGetter(); + + return await new FlagsApi(forceNonNull(network.Backend.BackendService) + '/api', this.flagStorage) + .readFlag(feature, networkName, bestblock); } @action diff --git a/packages/yoroi-extension/package-lock.json b/packages/yoroi-extension/package-lock.json index a0360280a9..22dc8f1193 100644 --- a/packages/yoroi-extension/package-lock.json +++ b/packages/yoroi-extension/package-lock.json @@ -20,7 +20,7 @@ "@emurgo/cip4-js": "1.0.5", "@emurgo/cross-csl-browser": "4.4.0", "@emurgo/yoroi-eutxo-txs": "0.0.2-alpha.8", - "@emurgo/yoroi-lib": "0.15.7", + "@emurgo/yoroi-lib": "1.1.0-beta.1", "@ledgerhq/hw-transport-u2f": "5.36.0-deprecated", "@ledgerhq/hw-transport-webauthn": "5.36.0-deprecated", "@ledgerhq/hw-transport-webhid": "5.51.1", @@ -2708,25 +2708,41 @@ } }, "node_modules/@emurgo/yoroi-lib": { - "version": "0.15.7", - "resolved": "https://registry.npmjs.org/@emurgo/yoroi-lib/-/yoroi-lib-0.15.7.tgz", - "integrity": "sha512-mrT+v1dJvxu+fy+Lm50eKi44bYiVqrN2vjAGSe5gLiondqzpV6cp3luIBWstFm1Ba0rXc67BBs8vCeXhjp3fJQ==", + "version": "1.1.0-beta.1", + "resolved": "https://registry.npmjs.org/@emurgo/yoroi-lib/-/yoroi-lib-1.1.0-beta.1.tgz", + "integrity": "sha512-XaaeK8jcO4tcj/6llTKZs4HuVwIBcmmsMLSVlzAYFdCTPwdYOuLyehx+inNf/A4jf/5ZbIx5Nq9x4dLiguijYQ==", "dependencies": { "@cardano-foundation/ledgerjs-hw-app-cardano": "^7.1.3", "@emurgo/cross-csl-core": "4.4.0", "@noble/hashes": "^1.3.2", - "axios": "^0.24.0", + "axios": "^1.7.5", + "axios-cache-interceptor": "^1.5.3", "bech32": "^2.0.0", "bignumber.js": "^9.0.1", "easy-crc": "1.1.0" } }, "node_modules/@emurgo/yoroi-lib/node_modules/axios": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", - "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz", + "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==", "dependencies": { - "follow-redirects": "^1.14.4" + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/@emurgo/yoroi-lib/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" } }, "node_modules/@eslint/eslintrc": { @@ -8242,6 +8258,25 @@ "follow-redirects": "^1.10.0" } }, + "node_modules/axios-cache-interceptor": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/axios-cache-interceptor/-/axios-cache-interceptor-1.5.3.tgz", + "integrity": "sha512-kPgGId9XW7tR+VF7hgSkqF4f6FrV4ecCyKxjkD9v1hNJ4sXSAskocr7SMKaVHVvrbzVeruwB6yL6Y9/lY1ApKg==", + "dependencies": { + "cache-parser": "1.2.5", + "fast-defer": "1.1.8", + "object-code": "1.3.3" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/arthurfiorette/axios-cache-interceptor?sponsor=1" + }, + "peerDependencies": { + "axios": "^1" + } + }, "node_modules/axobject-query": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", @@ -9552,6 +9587,11 @@ "node": ">=0.10.0" } }, + "node_modules/cache-parser": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/cache-parser/-/cache-parser-1.2.5.tgz", + "integrity": "sha512-Md/4VhAHByQ9frQ15WD6LrMNiVw9AEl/J7vWIXw+sxT6fSOpbtt6LHTp76vy8+bOESPBO94117Hm2bIjlI7XjA==" + }, "node_modules/cacheable-lookup": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-2.0.1.tgz", @@ -13699,6 +13739,11 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "node_modules/fast-defer": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/fast-defer/-/fast-defer-1.1.8.tgz", + "integrity": "sha512-lEJeOH5VL5R09j6AA0D4Uvq7AgsHw0dAImQQ+F3iSyHZuAxyQfWobsagGpTcOPvJr3urmKRHrs+Gs9hV+/Qm/Q==" + }, "node_modules/fast-diff": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", @@ -21308,6 +21353,11 @@ "node": ">=0.10.0" } }, + "node_modules/object-code": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/object-code/-/object-code-1.3.3.tgz", + "integrity": "sha512-/Ds4Xd5xzrtUOJ+xJQ57iAy0BZsZltOHssnDgcZ8DOhgh41q1YJCnTPnWdWSLkNGNnxYzhYChjc5dgC9mEERCA==" + }, "node_modules/object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", diff --git a/packages/yoroi-extension/package.json b/packages/yoroi-extension/package.json index 5d477a736c..94e0b984c8 100644 --- a/packages/yoroi-extension/package.json +++ b/packages/yoroi-extension/package.json @@ -154,7 +154,7 @@ "@emurgo/cip4-js": "1.0.5", "@emurgo/cross-csl-browser": "4.4.0", "@emurgo/yoroi-eutxo-txs": "0.0.2-alpha.8", - "@emurgo/yoroi-lib": "0.15.7", + "@emurgo/yoroi-lib": "1.1.0-beta.1", "@ledgerhq/hw-transport-u2f": "5.36.0-deprecated", "@ledgerhq/hw-transport-webauthn": "5.36.0-deprecated", "@ledgerhq/hw-transport-webhid": "5.51.1", From f726c6c0f6ddb37b2a45c1c0753cbd1b621b5530 Mon Sep 17 00:00:00 2001 From: Sorin Chis Date: Wed, 28 Aug 2024 12:29:09 +0300 Subject: [PATCH 459/464] add pending mode and update success screen --- .../TransactionSubmitted.tsx | 40 ++++++++++++++----- .../features/governace/common/useStrings.tsx | 27 +++++++++++++ .../GovernanceStatusSelection.tsx | 4 +- .../app/UI/layout/GeneralPageLayout.js | 2 +- .../GovernanceTransactionSubmittedPage.tsx | 19 ++++++++- .../app/i18n/locales/en-US.json | 5 +++ 6 files changed, 82 insertions(+), 15 deletions(-) diff --git a/packages/yoroi-extension/app/UI/components/TransactionSubmitted/TransactionSubmitted.tsx b/packages/yoroi-extension/app/UI/components/TransactionSubmitted/TransactionSubmitted.tsx index 828c4d7aaa..a1ba401ee8 100644 --- a/packages/yoroi-extension/app/UI/components/TransactionSubmitted/TransactionSubmitted.tsx +++ b/packages/yoroi-extension/app/UI/components/TransactionSubmitted/TransactionSubmitted.tsx @@ -1,32 +1,50 @@ +import { Button, Stack, Typography } from '@mui/material'; import React from 'react'; -import { Stack, Typography, Button } from '@mui/material'; -import { SuccessIlustration } from './SuccessIlustration'; import { useHistory } from 'react-router-dom'; +import { SuccessIlustration } from './SuccessIlustration'; // @ts-ignore import { ROUTES } from '../../../routes-config'; // @ts-ignore -import globalMessages from '../../../i18n/global-messages'; import { FormattedMessage } from 'react-intl'; +import globalMessages from '../../../i18n/global-messages'; -export const TransactionSubmitted = () => { +export const TransactionSubmitted = ({ + title, + subtitle, + content, + btnText, + onPress, +}: { + title?: string; + subtitle?: string; + content?: string; + btnText?: string; + onPress?: () => void; +}) => { const history = useHistory(); return ( - + - - + + {title ? title : } - - + {subtitle && ( + + {subtitle} + + )} + + + {content ? content : } ); diff --git a/packages/yoroi-extension/app/UI/features/governace/common/useStrings.tsx b/packages/yoroi-extension/app/UI/features/governace/common/useStrings.tsx index d1c4f39582..521c6c72cf 100644 --- a/packages/yoroi-extension/app/UI/features/governace/common/useStrings.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/common/useStrings.tsx @@ -71,6 +71,27 @@ export const messages = Object.freeze( defaultMessage: '!!!You have selected ${status} as your governance status. You can change it at any time by clicking in the card bellow', }, + statusPending: { + id: 'governance.statusPending', + defaultMessage: '!!!You have chosen your governance status, this process may take a while.', + }, + thanksForParticipation: { + id: 'governance.thanksForParticipation', + defaultMessage: '!!!Thank you for participating in Governance.', + }, + theTransactionCanTake: { + id: 'governance.theTransactionCanTake', + defaultMessage: '!!!This transaction can take a while!', + }, + participatingInGovernance: { + id: 'governance.participatingInGovernance', + defaultMessage: + '!!!Participating in the Cardano Governance gives you the opportunity to participate in the voting as well as withdraw your staking rewards', + }, + goToGovernance: { + id: 'governance.goToGovernance', + defaultMessage: '!!!GO to governance', + }, designatedSomeone: { id: 'governance.designatedSomeone', defaultMessage: @@ -125,6 +146,7 @@ export const messages = Object.freeze( export const useStrings = () => { const { intl } = useIntl(); + return React.useRef({ delegateToDRep: intl.formatMessage(messages.delegateToDRep), delegatingToDRep: intl.formatMessage(messages.delegatingToDRep), @@ -154,5 +176,10 @@ export const useStrings = () => { wrongPassword: intl.formatMessage(messages.wrongPassword), identifyDrep: intl.formatMessage(messages.identifyDrep), incorectFormat: intl.formatMessage(messages.incorectFormat), + statusPending: intl.formatMessage(messages.statusPending), + thanksForParticipation: intl.formatMessage(messages.thanksForParticipation), + theTransactionCanTake: intl.formatMessage(messages.theTransactionCanTake), + participatingInGovernance: intl.formatMessage(messages.participatingInGovernance), + goToGovernance: intl.formatMessage(messages.goToGovernance), }).current; }; diff --git a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx index 5a9494223d..3c8ab147c9 100644 --- a/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx +++ b/packages/yoroi-extension/app/UI/features/governace/useCases/SelectGovernanceStatus/GovernanceStatusSelection.tsx @@ -154,7 +154,7 @@ export const GovernanceStatusSelection = () => { {pageTitle} - {pageSubtitle} + {isPendindDrepDelegationTx ? strings.statusPending : pageSubtitle} {governanceStatus.status !== null @@ -173,7 +173,7 @@ export const GovernanceStatusSelection = () => { /> ); }) - : skeletonsCards.map(() => )} + : skeletonsCards.map((_, index) => )} diff --git a/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js b/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js index 3fe91050a4..6b95139445 100644 --- a/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js +++ b/packages/yoroi-extension/app/UI/layout/GeneralPageLayout.js @@ -1,5 +1,5 @@ -import * as React from 'react'; import { observer } from 'mobx-react'; +import * as React from 'react'; import { intlShape } from 'react-intl'; import TopBarLayout from '../../components/layout/TopBarLayout'; import BannerContainer from '../../containers/banners/BannerContainer'; diff --git a/packages/yoroi-extension/app/UI/pages/Governance/GovernanceTransactionSubmittedPage.tsx b/packages/yoroi-extension/app/UI/pages/Governance/GovernanceTransactionSubmittedPage.tsx index 7a5c09d4c0..d0330464bc 100644 --- a/packages/yoroi-extension/app/UI/pages/Governance/GovernanceTransactionSubmittedPage.tsx +++ b/packages/yoroi-extension/app/UI/pages/Governance/GovernanceTransactionSubmittedPage.tsx @@ -1,5 +1,8 @@ import React from 'react'; +import { useHistory } from 'react-router'; +import { ROUTES } from '../../../routes-config'; import { TransactionSubmitted } from '../../components/TransactionSubmitted/TransactionSubmitted'; +import { useStrings } from '../../features/governace/common/useStrings'; import GovernanceLayout from './layout'; type Props = { @@ -11,9 +14,23 @@ type Props = { const GovernanceTransactionSubmittedPage = (props: Props): any => { return ( - + ); }; +const TransactionSubmittedWrapper = () => { + const history = useHistory(); + const strings = useStrings(); + return ( + history.push(ROUTES.Governance.ROOT)} + /> + ); +}; + export default GovernanceTransactionSubmittedPage; diff --git a/packages/yoroi-extension/app/i18n/locales/en-US.json b/packages/yoroi-extension/app/i18n/locales/en-US.json index 48ac38e886..201a9fa9cd 100644 --- a/packages/yoroi-extension/app/i18n/locales/en-US.json +++ b/packages/yoroi-extension/app/i18n/locales/en-US.json @@ -1072,6 +1072,7 @@ "governance.becomeADrep": "Want to became a Drep?", "governance.drepId": "Drep ID:", "governance.statusSelected": "You have selected {status} as your governance status. You can change it at any time by clicking in the card bellow", + "governance.statusPending": "You have chosen your governance status, this process may take a while.", "governance.registerGovernance": "Register in Governance", "governance.chooseDrep": "Choose your Drep", "governance.reviewSelection": "Review the selections carefully to assign yourself a Governance Status", @@ -1081,8 +1082,12 @@ "governance.operations": "Operations", "governance.selectAbstein": "Select abstain", "governance.selectNoConfidenc": "Select no confidence", + "governance.participatingInGovernance": "Participating in the Cardano Governance gives you the opportunity to participate in the voting as well as withdraw your staking rewards", "governance.designatedSomeone": "You are designating someone else to cast your vote on your behalf for all proposals now and in the future.", "governance.identifyDrep": "Identify your preferred DRep and enter their ID below to delegate your vote", + "governance.thanksForParticipation": "Thank you for participating in Governance", + "governance.theTransactionCanTake": "This transaction can take a while!", + "governance.goToGovernance": "GO to governance", "portfolio.main.header.text": "Tokens", "portfolio.main.search.text": "Search by asset name or ID", "portfolio.common.soonAvailable": "Soon available", From 57a6c00c770780946c6d3684af0d1ebaf0225911 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Wed, 28 Aug 2024 16:21:45 +0300 Subject: [PATCH 460/464] test fixes --- .../ada/lib/storage/tests/__snapshots__/index.test.js.snap | 4 ++++ packages/yoroi-extension/jest.config.js | 1 + 2 files changed, 5 insertions(+) diff --git a/packages/yoroi-extension/app/api/ada/lib/storage/tests/__snapshots__/index.test.js.snap b/packages/yoroi-extension/app/api/ada/lib/storage/tests/__snapshots__/index.test.js.snap index 4b58d1d3fa..28d403ee7a 100644 --- a/packages/yoroi-extension/app/api/ada/lib/storage/tests/__snapshots__/index.test.js.snap +++ b/packages/yoroi-extension/app/api/ada/lib/storage/tests/__snapshots__/index.test.js.snap @@ -1267,6 +1267,7 @@ Object { ], "CoinType": 2147485463, "Fork": 0, + "NetworkFeatureName": "mainnet", "NetworkId": 0, "NetworkName": "Cardano Mainnet", }, @@ -1336,6 +1337,7 @@ Object { ], "CoinType": 2147485463, "Fork": 0, + "NetworkFeatureName": "preprod", "NetworkId": 250, "NetworkName": "Cardano Preprod Testnet", }, @@ -1371,6 +1373,7 @@ Object { ], "CoinType": 2147485463, "Fork": 0, + "NetworkFeatureName": "preview", "NetworkId": 350, "NetworkName": "Cardano Preview Testnet", }, @@ -1406,6 +1409,7 @@ Object { ], "CoinType": 2147485463, "Fork": 0, + "NetworkFeatureName": "sanchonet", "NetworkId": 450, "NetworkName": "Cardano Sancho Testnet", }, diff --git a/packages/yoroi-extension/jest.config.js b/packages/yoroi-extension/jest.config.js index c7bfa306c2..2904b8e032 100644 --- a/packages/yoroi-extension/jest.config.js +++ b/packages/yoroi-extension/jest.config.js @@ -8,6 +8,7 @@ module.exports = { '@emurgo/cardano-message-signing-browser': '@emurgo/cardano-message-signing-nodejs', '@emurgo/cross-csl-browser': '@emurgo/cross-csl-nodejs', '\\.png$': 'lodash/noop.js', + "^axios$": "axios/dist/node/axios.cjs", }, transformIgnorePatterns: [ '/node_modules/(?!@emurgo/ledger-connect-handler)' From 7f19ac65d5ba093072f92b4713c9369e3a492d55 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Wed, 28 Aug 2024 16:43:36 +0300 Subject: [PATCH 461/464] remove console log --- .../yoroi-extension/app/containers/SidebarContainer.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/yoroi-extension/app/containers/SidebarContainer.js b/packages/yoroi-extension/app/containers/SidebarContainer.js index 92a1b26a16..435b04085d 100644 --- a/packages/yoroi-extension/app/containers/SidebarContainer.js +++ b/packages/yoroi-extension/app/containers/SidebarContainer.js @@ -11,6 +11,7 @@ import SidebarRevamp from '../components/topbar/SidebarRevamp'; import { withLayout } from '../styles/context/layout'; import type { LayoutComponentMap } from '../styles/context/layout'; import { ROUTES } from '../routes-config'; +import { runInAction } from 'mobx'; type Props = {| ...StoresAndActionsProps, @@ -42,11 +43,12 @@ class SidebarContainer extends Component { if (feature != null) { this.props.stores.wallets.getRemoteFeatureFlag(feature) .then((flag: ?boolean) => { - console.log('> ', feature, flag); if (flag) { - this.setState(s => ({ - featureFlags: { ...s.featureFlags, [feature]: true }, - })) + runInAction(() => { + this.setState(s => ({ + featureFlags: { ...s.featureFlags, [feature]: true }, + })); + }); } return null; }) From 8754963f5b79da55a674d59475b389e9f067b015 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Wed, 28 Aug 2024 19:38:36 +0300 Subject: [PATCH 462/464] fixed absolute slot resolving --- .../app/stores/toplevel/WalletStore.js | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/packages/yoroi-extension/app/stores/toplevel/WalletStore.js b/packages/yoroi-extension/app/stores/toplevel/WalletStore.js index 2318abc007..8d345fd634 100644 --- a/packages/yoroi-extension/app/stores/toplevel/WalletStore.js +++ b/packages/yoroi-extension/app/stores/toplevel/WalletStore.js @@ -37,6 +37,9 @@ import { FlagsApi } from '@emurgo/yoroi-lib/dist/flags'; import type { StorageAPI } from '@emurgo/yoroi-lib/dist/flags'; import { createFlagStorage } from '../../api/localStorage'; import { forceNonNull, timeCached } from '../../coreUtils'; +import type { BestBlockResponse } from '../../api/ada/lib/state-fetch/types'; +import TimeUtils from '../../api/ada/lib/storage/bridge/timeUtils'; +import { getCardanoHaskellBaseConfig } from '../../api/ada/lib/storage/database/prepackaged/networks'; type GroupedWallets = {| publicDerivers: Array>, @@ -152,7 +155,7 @@ export default class WalletStore extends Store { }; flagStorage: StorageAPI; - bestblockGetters: { [string]: () => Promise } = {}; + absoluteSlotGetters: { [string]: () => Promise } = {}; setup(): void { super.setup(); @@ -177,20 +180,28 @@ export default class WalletStore extends Store { const networkName = network.NetworkFeatureName; if (networkName == null) return null; - let bestblockGetter = this.bestblockGetters[networkName]; - if (bestblockGetter == null) { + let absoluteSlotGetter = this.absoluteSlotGetters[networkName]; + if (absoluteSlotGetter == null) { const fetcher = this.stores.substores.ada.stateFetchStore.fetcher; - bestblockGetter = timeCached( - async () => (await fetcher.getBestBlock({ network })).height, + absoluteSlotGetter = timeCached( + async () => { + const bestblockInfo: BestBlockResponse = await fetcher.getBestBlock({ network }); + const { epoch, slot } = bestblockInfo; + if (epoch != null && slot != null) { + return TimeUtils.toAbsoluteSlotNumber(getCardanoHaskellBaseConfig(network), { epoch, slot }); + } + console.warn('Failing to resolve absolute slot, bestblock info without epoch or slot: ', bestblockInfo); + return -1; + }, 60_000, // 1 minute ); - this.bestblockGetters[networkName] = bestblockGetter; + this.absoluteSlotGetters[networkName] = absoluteSlotGetter; } - const bestblock = await bestblockGetter(); + const absoluteSlot = await absoluteSlotGetter(); return await new FlagsApi(forceNonNull(network.Backend.BackendService) + '/api', this.flagStorage) - .readFlag(feature, networkName, bestblock); + .readFlag(feature, networkName, absoluteSlot); } @action From 546d4d9a26907a4910cad56d5ad1ec886d6ad4cf Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Wed, 28 Aug 2024 22:38:45 +0300 Subject: [PATCH 463/464] chromedriver update --- packages/e2e-tests/package-lock.json | 16 ++++++++-------- packages/e2e-tests/package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/e2e-tests/package-lock.json b/packages/e2e-tests/package-lock.json index d4e9c1dafc..dffbb2d8b4 100644 --- a/packages/e2e-tests/package-lock.json +++ b/packages/e2e-tests/package-lock.json @@ -41,7 +41,7 @@ "@emurgo/cardano-serialization-lib-nodejs": "^12.0.0-alpha.26", "bignumber.js": "^9.1.2", "chai": "^4.3.10", - "chromedriver": "126.0.4", + "chromedriver": "128.0.0", "cross-env": "^7.0.3", "json-server": "^0.17.4", "mocha": "^10.2.0", @@ -199,9 +199,9 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/axios": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", - "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz", + "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -450,14 +450,14 @@ } }, "node_modules/chromedriver": { - "version": "126.0.4", - "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-126.0.4.tgz", - "integrity": "sha512-mIdJqdocfN/y9fl5BymIzM9WQLy64x078i5tS1jGFzbFAwXwXrj3zmA86Wf3R/hywPYpWqwXxFGBJHgqZTuGCA==", + "version": "128.0.0", + "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-128.0.0.tgz", + "integrity": "sha512-Ggo21z/dFQxTOTgU0vm0V59Mi79yyR+9AUk/KiVAsRfbDRdVZQYQWfgxnIvD/x8KOKn0oB7haRzDO/KfrKyvOA==", "dev": true, "hasInstallScript": true, "dependencies": { "@testim/chrome-version": "^1.1.4", - "axios": "^1.6.7", + "axios": "^1.7.4", "compare-versions": "^6.1.0", "extract-zip": "^2.0.1", "proxy-agent": "^6.4.0", diff --git a/packages/e2e-tests/package.json b/packages/e2e-tests/package.json index 6fd5a98821..ca344501c8 100644 --- a/packages/e2e-tests/package.json +++ b/packages/e2e-tests/package.json @@ -47,7 +47,7 @@ "@emurgo/cardano-serialization-lib-nodejs": "^12.0.0-alpha.26", "bignumber.js": "^9.1.2", "chai": "^4.3.10", - "chromedriver": "126.0.4", + "chromedriver": "128.0.0", "cross-env": "^7.0.3", "json-server": "^0.17.4", "mocha": "^10.2.0", From 4c2d2a9ab19e6c954f8d1cb8346a520eddd78a11 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Wed, 28 Aug 2024 22:58:26 +0300 Subject: [PATCH 464/464] Version bump: 5.3.0 --- packages/yoroi-extension/package-lock.json | 4 ++-- packages/yoroi-extension/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/yoroi-extension/package-lock.json b/packages/yoroi-extension/package-lock.json index 22dc8f1193..bb8abe2c67 100644 --- a/packages/yoroi-extension/package-lock.json +++ b/packages/yoroi-extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "yoroi", - "version": "5.2.301", + "version": "5.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "yoroi", - "version": "5.2.301", + "version": "5.3.0", "license": "MIT", "dependencies": { "@amplitude/analytics-browser": "^2.1.3", diff --git a/packages/yoroi-extension/package.json b/packages/yoroi-extension/package.json index 94e0b984c8..6fa692ba6f 100644 --- a/packages/yoroi-extension/package.json +++ b/packages/yoroi-extension/package.json @@ -1,6 +1,6 @@ { "name": "yoroi", - "version": "5.2.301", + "version": "5.3.0", "description": "Cardano ADA wallet", "scripts": { "dev-mv2": "rimraf dev/ && NODE_OPTIONS=--openssl-legacy-provider babel-node scripts-mv2/build --type=debug --env 'mainnet'",